|
Teknik Destek ve Yardım kategorisinde açılmış olan Buffer Overflow Nedir? BoF Anlatımı. konusu , ...
| LinkBack | Seçenekler | Arama | Stil |
19.08.2014, 22:09 | #1 (permalink) |
Frav frivlbehz. | Buffer Overflow Nedir? BoF Anlatımı. Buffer Overflow Nedir? BoF Anlatımı. Merhabalar, bu anlatımım Buffer Overflow üzerine olacaktır. Keyifle okumanız dileğimle Buffer Overflow Nedir? Buffer overflow'u tanımlayabilmek için önce buffer nedir, onu tanımlamamız gerekiyor. Buffer, hafızada ard arda dizili türdeş veri tipi (int, char gibi) depolayan hafıza bloğudur. C'de bunlar array olarak geçer. Buffer Overflow’larin ilk ortaya çıkma tarihi 1970’lere dayanıyor. En basit şekilde anlatmak gerekirse bir program veya işlemin, tampon belleğin (buffer) tutabileceğinden daha fazla yer işgal etmesi ile oluşur. BoF açığı sonucu akılda kalan en önemli iki olay şunlardır; 1 - Sasser Solucanı Bu solucan Windows işletim sisteminde sürekli çalışan LSASS.EXE adlı dosyada bulunan bir Buffer Overflow hatası sayesinde milyonlarca makinaya bulaşabildi. LSASS.exe nin asıl görevi (Local Security Authentication Server) Windows un kulanıcı işlemlerinin güvenliğini sağlamak ve kullanıcı izinlerini düzenlemekti.Fakat Windows 2000 ve XP yüklü makinelerde bu dosyanın kullandığı bir DLL dosyasında Buffer Overflow tesbit edildi.( (LSASRV.DLL).Bu sayede virüs 445 inci porta bağlanıp, programa istediği işlemleri yaptırıyordu.Daha sonra da LSASS.EXE kapatılıyordu ve 1 dakika içinde de server a reset atılıyordu. 2 - Los Angeles Hava Limanı Hava uçuş kontrol programında 5 değeri girişmesi gerekirken 9 değerinin girilmesi sonucu yüzlerce uçuş ertelendi. Mantığı kavramak için Grafikler ; C dilince yazılmış örnek zaafiyet testi programı; Şimdi yazdığım koda bakalım ve programımızı tekrar çalıştıralım Görüldüğü üzere bellek taşma yaptı ve programımız hazin bir şekilde sonlandı Yığın (Stack) tabanlı Buffer Overflow Bunu bir örnek üzerinde inceleyelim: Kod: void foo(char *s){ char name[5]; strcpy(name,s); printf(“İsim %s\\\\\\\\n”, name); } int main(void) { char buf[10]; read(0,buf,10); foo(buf); } Yukarıdaki kodda, değişken ismine 5 karakterlik alan ayrılmasına rağmen, asıl program kodu içerisinde 10 karakterlik veri girişi talep ediliyor. “buf”değişkeni maksimum 5 karakterlik bilgiyi kaydedebilir. Geriye kalan 5 karakterlik bilgi nereye gider? Eğer “buf” değişkeni global bir değişken ise, artan 5 karakterlik bilgi bellekte herhangi bir data segmentini kaydedilecektir.Bu karakterlerin önemsiz yerlere yazılma olasılığı vardır. Ama bu sadece bir olasılıktır. Çoğu durumda, “buf” değişkeni yerl bir değişken olmakta ve dolayısı ile yığınlarda (stacks) tutulmaktadır. Böyle bir durumda program, verisegmenti yerine yığınlardaki verilerin üzerine yazmaya çalışacaktır. Peki bu açık nasıl tesbit edilir? Yöntem - 1 : Programın kaynak kodları incelenir ve BoF tesbit edilir. Yöntem - 2 : Programa yüksek baytlarda veri gönderilir ve test edilir. Korunma Yöntemleri Nelerdir.? -C ve C++ dışındaki programlama dillerini kullanın -Çok uzun girdileri önlemek için kullanıcı girdilerinin geçerliliklerini denetleyin ve önceden anlaşılmış şartlara (mesela A-Z, a-z, 0-9, v.b.) uyduklarına emin olmak için değerleri kontrol edin. -Eğer C ve C++ dillerinde yazılmış işletim sistemi ve yardımcı programlar kullanılıyorsa, en düşük erişim hakkı prensibini (the principle of least privilege) kullandıklarından emin olun, yıgıt ve yıgın (heap) tasmalarına karsı koruyucu derleyiciler kullanın ve sistemi yamaları ile güncel tutun. Derleme, düzenleme, anlatım @[Link'i Görebilmeniz İçin Kayıt Olunuz.! Kayıt OL]'e aittir. En basit şekilde anlatmaya çalıştım. ESP, EIP, badchar tesbiti gibi konuları sonra videolu anlatırım. Sonra görüşmek üzere Hoşça Kalın. Ahmet A.
__________________ life over comp. sci. |
Yukarı'daki Konuyu Aşağıdaki Sosyal Ağlarda Paylaşabilirsiniz. |
| |
Forum hakkında | Kullanılan sistem hakkında |
| SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc. |