Sayfayı Yazdır | Pencereyi Kapat

Zayıflık İnceleme Teknolojisi Ne Kadar Zayıf ?

Nereden Yazdırıldığı: Bilginin Adresi
Kategori: Bilgisayar Güvenliği / Computer Security
Forum Adı: Güvenlik / Security Makaleleri
Forum Tanımlaması: Bilgisayarınızı Her Türlü Saldırıya Karşı Korumak İçin Yapmanız Gerekenler
URL: https://www.bilgineferi.com/forum/forum_posts.asp?TID=8984
Tarih: 22-11-2024 Saat 00:33


Konu: Zayıflık İnceleme Teknolojisi Ne Kadar Zayıf ?
Mesajı Yazan: megabros
Konu: Zayıflık İnceleme Teknolojisi Ne Kadar Zayıf ?
Mesaj Tarihi: 29-03-2011 Saat 12:38

Elektronik Saldırı Tespiti başlıklı yazımızda, bilgi güvenliği konusunun artan öneminden söz etmiş, bu konuda gelişen uygulamalardan ikisi olan zayıflık inceleme ve elektronik saldırı tespiti konularına bir giriş yapmıştık. Bu yazımızda ise, zayıflık inceleme (vulnerability-assessment) yazılımlarına daha yakından bakacak, bu teknolojinin bugün ulaştığı noktadaki kendi zayıflıklarını inceleyerek eğlenceli bir analiz yapacağız.

Kavramsal olarak zayıflık inceleme araçları, bilgisayar sistemlerini ve ağ aktif cihazlarını ağ üzerinden (dışarıdan) ya da bu sistemler tarafından sunulan arabirimler aracılığı ile (içeriden) inceleyerek doğrudan ya da dolaylı olarak güvenlik ile ilgili problemlere neden olabilecek noktaları tespit etmeye çalışan yazılımlardır. İçeriden, dışarıdan ya da her iki biçimde inceleme gerçekleştirebilen yazılımlar mevcut olsa da, bu yazımızda popüler olarak kullanılan ve dışarıdan inceleme üzerine kurulu senaryolara sahip yazılımlardan söz edeceğiz.

Genel olarak bu yazılımlara inceleme öncesinde ağ üzerindeki kaynaklarla ya da ağ topolojisi ile ilgili herhangi bir bilgi verilmez. Sıfır ön-bilgi olarak nitelendirilen bu durumda, yazılımın ortalama ya da ortalamanın üstünde beceriye sahip bir saldırganın tespit edebileceği kadar zayıflığı tespit etmesi ve raporlaması beklenir. Yazılımların bir eki olan zayıflık veri tabanları, anti-virüs yazılımları tarafından kullanılan tanım-dosyası benzeri bir yaklaşım çerçevesinde geliştirilmektedir; yeni zayıflıklara ilişkin bilgiler yazılıma sonradan zayıflık veri tabanı güncellemeleri yolu ile eklenebilmekte ya da istendiği taktirde kullanıcılar tarafından yeni zayıflık tanımları yapılabilmektedir.

Zayıflık inceleme yazılımlarını üç farklı gruptan insanın kullandığını söylemek mümkündür. Birinci gruptakiler sistemlerini korumaya çalışan sistem yöneticileridir; zayıf noktalarını tespit ederek güçlendirebilmek için yazılım desteğinden faydalanırlar. İkinci grupta sistem yöneticileri adına sistemlerin güvenliğini sınayan güvenlik danışmanlarını ya da güvenlik ile ilgili analiz hizmeti sunan ekipleri görmekteyiz; bu gruptaki kimseler bilgi güvenliği alanındaki daha yüksek deneyimleri ile sistem yöneticilerine destek sağlamaktadırlar. Üçüncü ve son grup kullanıcılar olarak art niyetli saldırganları öngörmek mümkündür; sistemlere sızacak bir açık bulabilme çabası içerisindeki bir saldırgan zayıflık inceleme yazılımlarından destek alarak işlemini hızlandırarak verimini arttırmaya çalışıyor olabilir.

Bu denli yoğun ve anlamlı kullanımlarına rağmen, mevcut teknoloji ile üretilen zayıflık inceleme yazılımları bir takım zaaflara sahiptir. Yenice bir teknoloji olmasından kaynaklı bu durum nedeni ile, yazılım zaaflarından faydalanılarak zayıflık inceleme yazılımlarının `kandırılması` ve bu yolla hiç beklenmeyen sonuçlara ulaşılabilmesi mümkündür.

Zayıflık inceleme teknolojisinin zaaflarına hakim bir sistem yöneticisi kendisine ciddi bir avantaj yaratır. Avantaj unsurlarının ilki, sistem yöneticisinin kullandığı aracın zayıflıklarını bilmesi ve böylece muhtemel hatalı raporlardaki yanlışlıkları kestirerek elindeki araçtan ne bekleyebileceğini bilmesidir.

İkincil bir avantaj unsuru olarak, sistem yöneticisinin muhtemel saldırganları kandırabilmesini öne sürebiliriz. Zayıflık inceleme teknolojisinin zaaflarını bilen sistem yöneticisi, bu yazılımlar ile koruduğu sistemlere yönelik gerçekleştirilen incelemelerin yanlış raporlar üretmesini sağlayabilir; bana göre işin eğlenceli yanı da budur.

Korumaya çalıştığınız sisteme yönelik olarak bir incelemenin bir saldırgan tarafından başlatıldığını düşünün. Eğer saldırganın kullandığı aracı yanıltabilirseniz kendinize savunmanızı güçlendirmek ya da saldırganın yakalanmasını sağlamak için zaman yaratmış olursunuz; bu arada saldırgan harıl harıl bulduğu (!) zayıflıktan faydalanarak sisteme sızmaya çalışıyor olabilir.

Umarım saydığım gerekçeler zayıflık inceleme araçlarını kandırarak elde edebilecekleriniz konusunda size bir fikir vermiştir. Şimdi zayıflık inceleme teknolojisinin zayıflıklarının bir bölümüne hızlıca bakalım:[1]

a) Bir bağlantı noktasının (port) dinler biçimde olmasından hizmet verildiği sonucuna ulaşılması: Zayıflık inceleme araçlarının büyük bir kısmı, incelemenin ilk adımı olarak hedef sistemin tüm açık bağlantı noktalarının bir listesini oluşturur ve bu listeyi elindeki bilindik hizmetler (well-known services) listesi ile karşılaştırır. Örneğin bilgisayarınız 80 numaralı TCP bağlantı noktasını dinliyor ise, bir web sunucu sistemi çalıştırdığınız sonucuna ulaşır ve bu adımdan sonraki tüm diğer analiz çalışmalarını bu kesin-olmayan sonuç üzerine bina eder.

Bu zayıflıktan faydalanmak için /etc/inetd.conf ve /etc/services dosyalarınız ile oynayarak hizmet sunulmayan ancak dinler durumda olan bağlantı noktası tanımları yapabilirsiniz. Tcp-Wrappers kullananlar, bu bağlantı noktalarına gelen tüm istemleri kayıt altına da alabilir.

b) Yazılım varlığından yola çıkarak zayıflık tespiti: Web sunucunuz üzerinde bir takım CGI uygulamalarınızın bulunduğunu varsayın; bu CGI uygulamalarının bir kısmının İnternet`ten temin ettiğiniz ve başkaları tarafından yazılmış popüler uygulamalar olması muhtemeldir. Zayıflık inceleme aracı, sisteminiz üzerinde bir web sunucusu çalıştığı sonucuna vardığı zaman elindeki `hatalı CGI uygulamaları` listesindeki her uygulama için, `acaba bu uygulama hedef sistemde var mı?` biçiminde ifade edilebilecek bir işleme girişir; bu işlemi gerçekleştirmek için tüm bu CGI uygulamalarını teker teker çalıştırmaya çalışır. Sisteminizde kurulu olmayanlar için doğal olarak hata mesajı üretilecektir; sisteminizde mevcut olduğu tespit edilenler için ise sonuç raporunda `Alarm: xyz CGI uygulaması tespit edildi, bu yazılımda ... türünde bir hata vardır` satırları hazırlanmıştır bile.

Bu noktadaki temel soru, `Bilinen bir uygulama adı ile yapılan aramada bulunan uygulama gerçekten aradığınız uygulama mıdır?` biçimindedir. Ne yazık ki aynı isimde ancak tümüyle farklı amaçlar için geliştirilmiş uygulamaların olması mümkündür ve web uygulamaları için verdiğimiz örnekten de anlaşılacağı biçimde zayıflık inceleme araçları bu farkı ayırt edemiyor olabilir.

Bu zayıflıktan faydalanmak üzere örneğin adı phf olan bir CGI uygulaması geliştirin ve bu uygulamaya gelen her çalıştırma isteğini ( http://sunucuadi.com.tr/cgi-bin/phf - http://sunucuadi.com.tr/cgi-bin/phf ) kayıt edin. Böylece CGI web uygulamalarını inceleme becerisini içinde barındıran her zayıflık inceleme aracının `Alarm: phf CGI uygulaması tespit edildi` biçiminde raporlar üretmesine neden olabilirsiniz.

c) Hizmet karşılama mesajlarından (service banner) yazılım tanımlama: Zayıflık inceleme yazılımlarının büyük kısmı, hedef sistem üzerinde işletilen hizmet yazılımları tarafından verilen beyanatları doğru saymaktadır. Bu beyanatlardan ilki, bu başlıkta inceleyeceğimiz hizmet karşılama mesajlarına ilişkindir. Ortadoğu Teknik Üniversitesi e-posta sunucusu olan mail.metu.edu.tr sisteminin 25 numaralı bağlantı noktasına telnet ile bağlanın (telnet mail.metu.edu.tr 25). Bu bağlantı noktasını dinleyen sunucu yazılımı` 220 myra.cc.metu.edu.tr ESMTP Sendmail 8.11.1/8.11.1; Mon, 15 Jan 2001 22:31:52 +0200 (EET)` gibi bir karşılama mesajını görüntüleyecektir. Mesaj içerisinde Sendmail yazması e-posta sunucu yazılımının Sendmail olduğunu gösterir mi? Ne yazık ki göstermez. Yine mesaj içerisinde yer alan `8.11.1` bilgisi yazılımın sürümünün gerçekten 8.11.1 olduğunu gösterir mi? Ne yazık ki bu sorunun da yanıtı `göstermez` biçiminde olmalıdır. Bir çok zayıflık inceleme aracı bu biçimde sunucu tarafından sağlanan bilgilere itibar etmekte ve yanılgıya düşmektedir. Oysa ki herhangi bir e-posta sunucu yazılımının ayarları ya da kaynak kodları değiştirilerek karşılama mesajı kolaylıkla farklı hale getirilebilir.

Bu zayıflıktan faydalanarak zayıflık inceleme araçlarını kandırmak üzere ağ üzerinden hizmet sunan tüm yazılımların karşılama mesajlarını değiştirebilirsiniz. Örneğin aşağıda örneği verilen telnet karşılama mesajını kendi sisteminizde /etc/issue.net dosyası içerisine yazarak bağlanmaya çalışan zayıflık inceleme araçlarının bir kısmının sisteminizi IBM AIX işletim sistemi çalıştırıyor sanmasını sağlayabilirsiniz:

AIX Version 4
(C) Copyrights by IBM and by others 1982, 1996.
login:

d) Protokol işlevselliğinden faydalanarak yazılım tanımlama: TCP/IP protokol ailesi içerisinde tanımlanan İnternet protokollerinden bazıları istemcilerin hizmet sağlayan sunucular hakkında bilgi edinebilmesi için bir takım arabirimler sağlar. Bu arabirim sayesinde, protokole uyum gösteren bir istemci sunucu ile ilgili bir takım bilgileri kolayca öğrenebilir. Bu durumda da, yine daha önceki başlıklarda görüldüğü gibi `Sunucunun verdiği yanıtlar ne kadar güvenilirdir?` sorusu gündeme gelecektir.

Protokol işlevselliği çerçevesinde tanımlanan bu tür bir örnek e-posta hizmetlerine ilişkin SMTP protokolünde yer almaktadır. Bu protokol çerçevesinde bağlanan bir istemci `HELP` istemi ile yardım talep edebilmekte ve sunucu bir takım bilgileri istemciye yanıt olarak sağlamaktadır. Aşağıdaki örnek çıktıyı elde edebilmek için sırası ile `telnet mail.metu.edu.tr 25` ve bağlandıktan sonra da `HELP` komutları işletilmiştir:

214-2.0.0 This is sendmail version 8.11.1
214-2.0.0 Topics:
214-2.0.0 HELO EHLO MAIL RCPT DATA
214-2.0.0 RSET NOOP QUIT HELP VRFY
214-2.0.0 EXPN VERB ETRN DSN AUTH
214-2.0.0 STARTTLS
214-2.0.0 For more info use `HELP <topic>`.
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0
mailto:sendmail-bugs@sendmail.org - sendmail-bugs@sendmail.org .
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info

Zayıflık inceleme araçlarının bir kısmı, hizmet karşılama mesajları ile verilen bilgilere itibar etmez ve bunun yerine daha güvenilir (!) olması nedeni ile protokol içerisine gömülmüş bu tür bilgilendirme istemlerinden faydalanır. Bu durumda, mail.metu.edu.tr sisteminin SMTP karşılama mesajlarına güvenmeyen zayıflık inceleme aracı, sunucunun söylediğinin doğruluğunu denetlemek üzere HELP komutunu işletecek ve yanıtın ilk satırındaki ` This is sendmail version 8.11.1` satırındaki bilgiyi de alacaktır. Ne yazık ki bu bilginin de doğru olmasının bir garantisi yoktur.

Zayıflık inceleme araçlarını yanıltmak üzere popüler İnternet sunucu yazılımlarının kaynak kodlarında değişiklik yaparak kullandığınız güncel sürümden 2-3 eski sürüme ilişkin bilgileri istemcilere sunacak düzenlemeleri yapabilirsiniz. Ben bu amaçla özellikle Apache`nin, Sendmail`in ve Bind`ın kaynak kodlarında küçük değişiklikler yapmanızı öneririm. Yapacağınız küçücük değişiklikler ile zayıflık inceleme aracının inanılmaz zayıflıklar (!) tespit etmesini sağlayabilirsiniz.

e) TCP/IP yığıt (stack) davranışından işletim sistemi tespiti: Yeni nesil zayıflık inceleme araçlarının büyük bir kısmı aktif ağ haritalandırması (active network mapping) adı verilen bir teknolojiden faydalanarak hedef sistemin işletim sistemini tanımlayabilmektedir. Temel olarak her işletim sistemi belli özellikleri ile birbirinden ayrıştırılabilir olan TCP/IP yığıtlarına sahiptir. TCP ve IP birer standart olmasına rağmen, standart kapsamında tanımlanmayan bazı durumlarda ne yapılacağı (standart tanımında yer almayan bir durum olduğu için) her işletim sistemi geliştiricisi tarafından farklı farklı seçilebilmektedir.

Örneğin standartlar çerçevesinde aynı TCP paketinin hem yeni bir bağlantı başlatma talebini (SYN), hem de bir bağlantı sonlandırma talebini (FIN) içermesi durumu tanımlanmamıştır; çünkü bu `normal` bir işletimde gerçekleşebilecek bir durum değildir. Ne yazık ki, standartlar çerçevesinde böyle bir `bozuk paket``in alınması durumunda nasıl yanıt üretilmesi gerektiği de tanımlanmamış, dolayısı ile ne yapacağının kararı işletim sistemi üreticisine bırakılmıştır. Bazı işletim sistemi üreticileri bu paketleri kibarca `kabul edemem` diyerek hata bildiriminde bulunurken bazı üreticiler bu paketleri sessizce çöpe atmakta ve gönderen sisteme yanıt üretmemektedir. Bu örnekte verilene benzer çokça farklılık nedeni ile 3-4 özel paketi hedef sisteme göndermek ve gelen yanıtların ışığında işletim sisteminin marka ve (bazı durumlarda) sürümünü tanımlamak mümkün olabilmektedir.

Bu teknikten faydalanmaya başlayan zayıflık inceleme araçları, inceleme sürecinin özellikle işletim sistemi tanımlama kesimini daha sağlıklı ve az hata ile sonuçlandıracak biçimde gerçekleştirmek üzere aktif ağ haritalandırmasını kullanmaktadır. Bu türden bir incelemeyi durdurmanın pratik ve kesin bir yöntemi ne yazık ki henüz mevcut değil; ancak Linux ve BSD türevi sistemler için çekirdek yamaları ile tanınabilir olmayı zorlaştırmak ve yazılımları yanıltmak mümkün.

Geçtiğimiz sene Dokuzuncu USENIX Güvenlik Sempozyumu`nda `Defeating TCP/IP Stack Fingerprinting` başlığı ile yayınlanan bir makalede bu türden bir inceleme gerçekleştiren yazılımların yanıltılmasına ilişkin farklı bir çözüm önerilmiştir. Makale yazarları, korunan sistemlerin önüne yerleştirilecek bir geçit sisteminin, korunan taraftan dışarıya gönderilen tüm paketleri normalize etmesini ve bu yolla işletim sisteminin tanımlanamaz olmasını önermektedir. Bu teknolojinin güvenlik duvarlarına entegre edilmeye başlamasının fazla gecikeceğini zannetmiyorum, yakın gelecekte güvenlik duvarınızın ayarları arasında korunan işletim sistemlerinin marka ve sürümlerini gizleyebilme becerisinin ortaya çıkacağını zannediyorum.

Son bir potansiyel zaaf olarak bazılarınıza fantezi olarak görünecek bir konuyu inceleyeceğiz. Zayıflık incelemesi yazılımını çalıştıran uzak sisteme, zayıflığı sınanan sistem tarafından zarar verilebilir mi? Diyelim ki Bind DNS sunucusu işleten bir sisteme sahipsiniz ve birisi elindeki zayıflık inceleme aracı ile sisteminizi sınıyor. DNS sunucunuzun sürümünü öğrenmek üzere sisteminize bir bind-iquery sorgusu yöneltti. Normal şartlar altında DNS istemcileri, sunuculara sürüm bilgisi edinmek için bu sorguyu kullanmaz, bind-iquery sorgusu yalnızca geçmişten gelen bir gelenek olarak mevcuttur. Siz de Bind yazılımının kaynak kodunu değiştirerek normalde `bind-8.2.2` gibi kısacık bir yanıt üretilmesi gerekirken 10,000 baytlık uzun mu uzun bir yanıt üretiyorsunuz diyelim. Bu noktada zayıflık inceleme aracının potansiyel bir zaafı söz konusu olabilir. Acaba zayıflık inceleme yazılımını geliştiren ekip, bu tür bir sorgunun yanıtının 10-15 bayt yerine çok daha uzun olabileceğini düşünerek gerekli önlemleri aldı mı? Bu önlemleri aldılar ise ne güzel, ancak gerekli önlemi almadılar ise vay hallerine; kullandıkları yazılımı çökertmeyi (crash) başardınız demektir.

Bunun da ötesinde, eğer sözünü ettiğimiz uzun yanıtı doğru biçimde hazırlayabilirseniz, bu alan taşmasından (buffer-overflow) faydalanarak zayıflık inceleme yazılımının çalıştığı bilgisayar üzerinde komut bile işletebilirsiniz. Bu ne anlama mı geliyor? Böyle bir hata için uygun düzeneği kurabildiğiniz taktirde zayıflık inceleme yazılımının sizin sisteminize yönelik çalıştırıldığı sistemi ele geçirebileceğiniz anlamına geliyor.

Bu türden tersine zayıflıklar daha önce Network Associates firmasının Sniffer Pro ürününde, EtheReal`da ve TcpDump`ta bulunmuştu; bir zayıflık inceleme yazılımında da bulunduğuna ilişkin herhangi bir bilgim yok ama böyle bir zayıflığın olmaması için de bir sebep göremiyorum.

Bu zayıflıkları ve muhtemel zaafları öğrendikten sonra `bundan sonra zayıflık inceleme aracı kullanmayalım` biçiminde bir sonuca ulaşmamalısınız. Zayıflık inceleme teknolojisi, bilgi güvenliği konusunun artan önemine paralel olarak son derece hızlı gelişmektedir. Birkaç yıl önce ancak bir amatörün tespit edebileceği zayıflıkları bulabilen zayıflık inceleme araçları bugün yüzlerce zayıflığı inceleyip raporlayabilecek duruma ulaşmıştır. Bu gelişim hızı ile bu yazıda sıralanan zayılıkların önümüzdeki iki senenin sonunda mevcut olmayacağını söylemek yanlış olmaz.

Bu yazıda öne sürülen yanıltma yöntemlerinin hemen hepsi kendi sistemleriniz ile pek az zahmetle gerçekleştirebileceğiniz bir karmaşıklığa sahiptir. Buna rağmen başaramayan ya da uğraşmak istemeyerek hazır programcıklar ya da betikler (script) isteyenlerin olması durumunda bana e-posta ile ulaştıkları taktirde yardımcı olmak isterim.

Bilişim güvenliği ile ilgili bilgi edinmek isteyenler <http://www.securityfocus.com/> adresindeki web sitesini bir başlangıç noktası olarak kullanabilirler. Bu yazı ile ya da bilişim güvenliği ile ilintili her türlü konu için yazara aşağıdaki adresinden e-posta yolu ile ulaşabilirsiniz.

Saygılar.


-------------
WHİTE HAT
BEYAZ ŞAPKA (BİLGİ NEFERİ)



Sayfayı Yazdır | Pencereyi Kapat