Pentest çalışmalarının en heyecanlı aşamalarından biri exploitation – yani istismar- aşamasıdır. Bu adımda hedef sisteme sızma ya da hedef sistemden işe yarar bilgiler elde etme amaçlanır. Bu aşamada kullanılan exploitin kalitesine ve hedef sistemin durumuna bağlı olarak farklı durumlar gerçekleşebilir. Bu durumlardan iki tanesinin kötü durum senaryosu olarak karşımıza çıkma olasılığı olduğu için üzerinde durmakta fayda görüyoruz.
Tecrübelerimiz, çalışan ortamlarında gerçekleştirilen sızma testlerinde exploitlerin çalıştırılmadan mutlaka lab ortamında denenmesi ve hedef sistemde denenmeden izin alınması ve bu iznin sözlü değil yazılı olmasına dikkat edilmesi gerektiğini göstermektedir.
- Başarılı olup istediğimizi elde etmemizi sağlayabilir,
- Hedef sisteme zarar verip çalışmasını engelleyebilir ya da hedef sistemi dışarıya korunmasız olarak açabilir,
- Kendi sisteminize zarar verebilir.
Sahte Exploit Konusu
Pentest süreçlerinde genellikle exploit deneme aşamalarında exploit önce Metasploit gibi araçlarla ve exploit-db, securityfocus gibi sitelerden araştırılır. Buralarda bulunmazsa alternatif olarak Google üzerinen araştırma yapılır. Eğer exploit denemesini yapacak kişi exploitin yazıldığı programlama diline hakim değilse ve kodu hiç incelemeden doğrudan çalıştırıyorsa bu ciddi sıkıntılara yol açabilir.
Örnek olarak geçtiğimiz günlerde yayınlanan MS12-020 RDP açıklığını ele alacak olursak. Açıklık ilk yayınlandığında çalışan exploitin olmaması nedeniyle herkes ufak tefek denemeler yaparak internet üzerinden paylaşımlarda bulunuyordu. Bu paylaşımlardan bazıları da doğrudan sahte exploit olarak adlandırabileceğimiz kategoriye giriyordu. Özellikle güvenlikcilerin takip ettiği e-posta listelerine gönderilen mailler Google’un arşivinde değerli bilgi kaynağı olarak görüldüğü için tecrübesiz pentesterlar tarafından doğrudan alınıp kullanuılma tehlikesini barındırmaktadır.
Aşağıdaki örnek FullDisclosure e-posta listesine gönderilen exploit kodunun “basit” analizini içermektedir.
Duruyu maili:
Exploit’in shellcode kısmı:
Hex kodlanmış payload çözümlenirse aşağıdaki -sağda- gibi bir komut seti ortaya çıkacaktır. Basitçe payload işletim sistemini belirleyip ona göre sistemi silen komutlar icra ediyor. Yani bu exploit çalıştırıldığı sistemi siliyor.
Diğer bir sıkıntı da çalıştırılan exploitin hedef sisteme zarar vermesi şeklinde karşımıza çıkmaktadır. Buna örnek olarak da FreeBSD local root exploitini ele alalım (Hedef sisteme zarar verebilecek exploitlerin local olmasına gerek yok, remote tipte exploitler de zarar verebilir)
Aşağıdaki gibi exploit çalıştırıldığında hedef sistemde root haklarıyla komut çalıştırmak yerine doğrudan sistemin crash olmasına neden olabilir.
Bu nedenle BGA pentest ekibi olarak pentest yapacağımız çoğu sistemi kendi lab ortamımızda kurarak önce sıkıntılı testleri lab ortamında gerçekleştirip sonrasında müşteri ortamına uyarlamaya özen gösteriyoruz.