Chroot içinde adlandırılmış (bind) çalıştırmak neden güvenlik için bu kadar önemlidir? Ya da belki de öyle değil mi?


12

Bind ile oynuyorum ve neden bu yazılımın örneğin CentOS'ta chroot içinde çalıştığını merak etmeye başladım. Beni yanlış anlamayın, bağlamanın ne olduğunu ve hangi krootun (hapishane) olduğunu biliyorum. Ama asıl sorum şu ki, bağlanma beyazlık olmadan çalışarak çok güvenli değil mi?

Hapishane olmadan kurmak gerçekten zararlı mıdır (başka herhangi bir hizmet veya yazılımdan daha fazla). Sistemlerde kroksuz çalışan birçok süreç var ve bence bunlardan herhangi birinin taviz vermesi çok tehlikeli, ama kroot olmadan çalışan diğer yazılımlardan daha tehlikeli olan ne?


1
Soruya eklemek için: Bu, sanal makinelerin modern kullanımından nasıl etkileniyor? Orta büyüklükteki herhangi bir dağıtım için, her bir göreve bir VM tahsis etme olasılığı artar, bu nedenle üzerinde başka veri / uygulama yoktur. Kromlamada hala gerçek bir fayda var mı?
gregmac

3
Bir chroot hapishane değildir. Hapishane BSD'ye özgü bir şeydir. Eğer eşdeğerini istiyorsanız LXC
Zoredache

Yanıtlar:


14

@Bazı Guy'ın belirttiği gibi, bunu tarihsel perspektifte düşünmelisiniz.

Tarihsel perspektif, tek bir donanımın tek bir işletim sistemi altında bir düzine kadar farklı hizmet olmasıydı. Bir hizmetin güvenliği ihlal edilmişse, o donanımdaki her şey tehlikeye atıldı.

Sanallaştırma ile bu çok daha az sorun olur. Bir VM'den kaçmak imkansız olmasa da, önemsiz olmaktan çok uzaktır. Bir VM'den kopmak kesinlikle daha zordur, o zaman kök ayrıcalıklarıyla çalışan bir sürecin bir kroottan kopması içindir. Bu yüzden bağlama sunucularım kendi sanal makinelerinde çalışıyor. Zaten bir VM olması nedeniyle hasar zaten sınırlı olduğundan, bu durumda gerçekten bir kroot için çok fazla nokta yoktur.

Bir chroot, VM gibi bir şey yaratmaya yönelik çok zayıf bir girişimdir. Kök ayrıcalıklarına sahip herhangi bir işlemle köklerden kurtulabilir. Bir chroot amaçlanmamıştır ve bir güvenlik mekanizması olarak çalışmaz. BSD hapishanesi veya LXC içeren bir chroot, işletim sistemi düzeyinde sanallaştırma sağlar ve güvenlik özellikleri sağlar. Ancak bu günlerde, tüm makinenin yeni bir VM'sini çevirmek o kadar kolay olduğu için, bu amaç için işletim sistemi düzeyinde sanallaştırma araçlarını nasıl kullanacağınızı öğrenmeye değmeyebilir.

Bağlamanın önceki sürümleri ayrıcalık bırakmadı. Unix'te 1024'ün altındaki bağlantı noktalarını yalnızca kök hesap açabilir ve udp / 53 ve tcp / 53'de dinlememiz gerektiğini bildiğimiz için Bind. Bind kök olarak başladığı ve ayrıcalık bırakmadığı için herhangi bir uzlaşma tüm sistemin tehlikeye atılabileceği anlamına gelir. Bu günlerde neredeyse tüm yazılımlar yuvalarını açmaya başlayacak ve kök ayrıcalıkları gerektiren başka şeyler yapacak, sonra çalıştırdıkları kullanıcıyı ayrıcalıklı olmayan bir hesaba değiştireceklerdir. Ayrıcalıklar bırakıldıktan sonra, ele geçirilmenin etkisi ana bilgisayar sistemine göre çok daha düşüktür.


10

Diğer cevaplar oldukça iyi ancak katmanlardaki güvenlik kavramından bahsetmiyoruz. Sisteminize eklediğiniz her güvenlik katmanı, bir düşmanın aşması gereken başka bir katmandır. BIND'ı bir chroot'a koymak bir engel daha ekler.

BIND'de istismar edilebilir bir güvenlik açığı olduğunu ve birinin rasgele kod yürütebildiğini varsayalım. Eğer bir kroketteylerse, sistemde başka bir şeye geçmeden önce bundan kopmaları gerekir. Bahsedildiği gibi, kök kırma için kök ayrıcalıkları gereklidir. BIND kök olarak çalışmaz ve chroot'ta çok az araç olması, seçenekleri daha da sınırlandırması ve yalnızca sistem çağrılarını bırakması gerekir. Ayrıcalıkları yükseltmek için sistem çağrısı yoksa, düşman DNS kayıtlarınıza bakıp kalır.

Yukarıda bahsedilen durum, SomeGuy'un belirttiği gibi, BIND bugünlerde oldukça az güvenlik açığına sahiptir ve uzaktan yürütme yerine çoğunlukla DoS tipi senaryolarla sınırlıdır. Bununla birlikte, bir chroot'ta çalıştırmak, birkaç işletim sisteminde varsayılan yapılandırmadır, bu nedenle sürekli artan güvenliği korumak için herhangi bir çaba harcamanız olası değildir.


5

önsöz

insanların internetten yanlış anlamaları tekrarladığını duymaya devam ediyorum.

ilki; kaç tane kazara keşif oldu, ki bu sadece .. neden ve sonuçtan dolayı , amaçlanandan başka bir şey için kullanıldı ?

Chroot hapishanesi neydi ve nedir

Chroot başlangıçta işlem veya kullanıcı için kök dizini değiştirmek üzere tasarlanmıştır (bilinmeyen kaynaklardan yazılım derlemek için idealdir). bu , temel sistem için güvenliğin yanı sıra kolay temizlik de dahil olmak üzere hızlı bir test yatağı cihazı sağladı . o günden bu yana yıllar geçtikçe, konsepti ve ima edilen kullanımları da kesinlikle değişti.

chroot etkin bir şekilde kullanılmıştır ve birkaç program ve kitaplık için doğrudan kod tabanındadır (ör. openSSHd, apache2 + mod_security2 / mod_chroot, dovecot, sendmail, openVPN, pam_chroot ve daha fazlası ). tüm bu ana uygulamaların hatalı güvenlik çözümleri uyguladığını varsayarsak, bu doğru değildir

chroot, dosya sistemi sanallaştırması için bir çözümdür: hiçbir şey, hiçbir şey. kroot hapishanesinde süreçleri yürütme yönergelerine uyduğunuz sürece, bir kroottan kolayca çıkabileceğiniz varsayımı da doğru değildir.

chroot hapishanenizi korumak için bazı adımlar

yani do DEĞİL KÖK olarak prosesleri çalıştırın. bu, bir kök yükselme vektörü açabilir (bu, krootun içinde veya dışında da geçerlidir). kroot dışında başka bir işlemle aynı kullanıcıyı kullanarak, kroot içinde bir işlem yürütmeyin . saldırı yüzeylerini sınırlamak ve gizlilik sağlamak için her işlemi ve kullanıcıyı kendi Chroot'una ayırın. yalnızca gerekli dosyaları, kitaplıkları ve aygıtları bağlayın. son olarak, chroot temel sistem güvenliğinin yerine DEĞİLDİR. sistemi tamamen güvenli hale getirin.

bir başka önemli not: birçok insan OpenVZ'nin Kırık olduğunu veya tam sistem sanallaştırmasına kıyasla eşit olmadığını düşünüyor. bu varsayımı yaparlar çünkü esasen bir Chroot'dur, sterilize edilmiş bir işlem tablosu vardır. donanım ve cihazlarda güvenlik önlemleri uygulanmaktadır. çoğu bir chroot içinde uygulayabilirsiniz.

her yönetici, özel bir sunucuda veya tam sistem sanallaştırması altında gerekli tüm çekirdek parametrelerini korumak için gereken bilgi düzeyine sahip değildir. Bu, OpenVZ'yi dağıtmanın, müşterilerinizin uygulamalarını dağıtmadan önce denemeyi ve kapsamayı ve güvenliğini sağlamak için çok daha az saldırı yüzeyine sahip olacağı anlamına gelir. iyi bir ev sahibi bu parametreleri güvence altına almak için iyi bir iş çıkarır ve sırayla, bu sadece Düğümdeki veya veri merkezindeki herkes için değil, bir bütün olarak internet için daha iyidir ...

belirtildiği gibi, chroot dosya sistemi sanallaştırması sağlar. hiçbir saldırgan çalıştırılamaz, güvenli olmayan uygulamalar, kütüphaneler, sarkan sahipsiz semboller vb. olmadığından emin olmalısınız. Saldırganın bağlanması tehlikeye girerse, sanal dosya sistemini arabellek taşması, dosya tanımlayıcılarıyla oynaması veya başka bir şekilde, hapishaneden kaçan bir şeyin içinde genellikle ayrıcalık yükseltme yoluyla veya yükünü temel sisteme enjekte ederek tehlikeye atar.

bu olursa, genellikle kötü bir güncellemenin, sıfır gün istismarının veya deyimsel insan hatasının sonucudur .

Tam sistem sanallaştırmasının aksine neden kroot hala kullanılıyor?

şu senaryoyu inceleyin: ana bilgisayar düğümü OpenVZ ile çalışan bir Sanal Özel Sunucu çalıştırıyorsunuz. sadece edemez çekirdek seviyesinde çalışır şey çalıştırın. bu ayrıca işlemleri ayırmak ve ek güvenlik sağlamak için işletim sistemi sanallaştırmasını kullanamayacağınız anlamına gelir. Böylece, sen GEREKİR bu amaçla chroot kullanın.

ayrıca, mevcut kaynaklara bakılmaksızın, chroot herhangi bir sistemde sürdürülebilirdir. Basitçe söylemek gerekirse, herhangi bir sanallaştırma türünün en az yüküne sahiptir. Bu, birçok düşük uçlu kutuda hala önemli olduğu anlamına gelir.

başka bir senaryo düşünün: sanallaştırılmış bir ortamda çalışan bir apache var. her kullanıcıyı ayırmak istiyorsunuz. apache'ye bir chroot eklentisi (mod_chroot, mod_security, vb.) aracılığıyla sanallaştırılmış bir dosya sistemi sağlamak, son kullanıcılar arasında en yüksek gizliliği sağlamak için en iyi seçenek olacaktır. bu aynı zamanda intel'in toplanmasını önlemeye yardımcı olur ve başka bir güvenlik katmanı sunar.

Kısacası, güvenliği katmanlar halinde uygulamak önemlidir . Chroot potansiyel olarak onlardan biri. herkes ve her sistem Çekirdeğe erişim lüksüne sahip değildir, bu nedenle STILL chroot bir amaca hizmet eder. tam sistem erdeminin esasen aşırı olduğu çeşitli uygulamalar vardır.

Sorunuza cevap olarak

özellikle CentOS kullanmıyorum, ama Bind'in operasyonlardan önce ayrıcalıklarını bıraktığını biliyorum. Bununla birlikte, bağlanma öyküsünün saldırı vektörleri ve potansiyel güvenlik açıkları nedeniyle köklü olduğunu varsayıyorum.

ayrıca ... HERKES tam sistem / işletim sistemi düzeyinde sanallaştırmaya erişemediğinden, bu uygulamayı otomatik olarak kroke etmek daha mantıklıdır. bu da ve teorik olarak, CentOS kullanıcı tabanına güvenlik sağlamaya yardımcı olur:

işletim sistemi sağlayıcıları, her birinin aynı sistemi çalıştırdığını varsayarak dolaşmazlar. bu şekilde, genel olarak ek bir güvenlik katmanı sağlamaya yardımcı olabilirler ...

bu kadar çok uygulamanın bunu kullanmasının ve işletim sisteminizin varsayılan olarak neden kullanmasının bir nedeni vardır : çünkü bir güvenlik özelliği olarak kullanılır ve çalışır. dikkatli bir hazırlık ile, daha önce de belirtildiği gibi, potansiyel saldırganın üstesinden gelmesi gereken başka bir engeldir - çoğu zaman sadece kroke hapishanesine verilen hasarı kısıtlar.


Orijinal chroot point blank geliştiricisi, güvenlik kullanımı için asla chroot'u amaçlamadığını söyledi. Hatalı güvenlik uygulayan büyük uygulama geliştiricilerine gelince ... ARM, Intel ve AMD yakın zamanda donanımlarında Pentium dönemine kadar uzanan bir güvenlik açığı keşfettiler . SSLv2, SSLv3, TLSv1 ve TLS1.1'in tümü, TLSv1.1'in OpenSSHd, Apache, Dovecot, OpenVPN için endüstri standardı olmasına rağmen kritik güvenlik kusurlarına sahiptir ... bahsettiğiniz hemen hemen herkes. Ve hepsi hala en son TLSv1.2 ve TLSv1.3 standartlarını bile zayıflatan SSL Sıkıştırma'yı kullanıyor.
Cliff Armstrong

Geliştiriciler (en azından başarılı olanlar) nihayetinde kolaylık ve güvenlik arasında denge kuruyorlar ... ve genellikle güvenlik konusunda kolaylıktan yanalar. Bu uygulamalar, kullanıcılarının talep ettiği için "güvenlik" için destek sağlar. Kullanıcıları, anlamlı güvenlik sağladığı genel yanlış algısı nedeniyle bunu talep ediyor. Ancak kitlelere / otorite argümanına başvurmanıza rağmen, bu açıkça doğru değildir.
Cliff Armstrong

3

Bu kısmen, Bind'in eski sürümlerinin ciddi, sık güvenlik açıklarına sahip olduğu tarihsel nedenlerden kaynaklanmaktadır. Bu konuda gerçekten güncel kalmadım, ama kötü günlerden beri çok geliştiğinden bahse girerim.

Diğer neden, daha pratik olanı, genellikle internete dönük bir rolde konuşlandırılması ve bu nedenle daha fazla saldırıya, araştırmaya ve genel yaramazlıklara açık olmasıdır.

Bu nedenle, güvenlik konularında sık sık görülen kurallar olduğu gibi: özür dilemekten daha güvenli, özellikle krokime etme çabası nispeten azdır.


Haklısın, çok gelişti. Temel olarak, bind8 bir kabustu; bind9 değil. Örneğin, NVD'de arama yaparsanız , en azından 2010'dan beri (arama geri döndükçe ) herhangi bir uzaktan kod yürütme hatası görmüyorum: web.nvd.nist.gov/view/vuln/… ... bol miktarda DoS hatası ve ayrıca birkaç bilgi açıklama hatası (örn. dahili bölgeleri açıklama).
derobert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.