ASLR-DEP-STRİNG CANARY Ne ola ki bunlar ??

ASLR NEDİR ?

Exploit geliştirme ile uğraşanlar veya uğraşmaya başlamaya çalışanlar duymuştur bunları. Exploiti yazdık o kadar uğraştık didindik başta bi çalışır gibi oldu ammaaaa sonra baktık ki memory de bişeyler değişiyor yav, ters giden bişeyler var ne ki acaba ? Buradaki bu değişimin sebebi bahsettiğimiz aslr denen arkadaş oluyor nam-ı diğer Address Space Layout Randomization ismi biraz havalı :)). Bu arkadaşın temel mantığını ve neden işimize burnunu soktuğunu biraz açıklamak istiyorum. ASLR aktif olduğu zaman biz programı her çalıştırdığımızda sanal memory kısmında programın memorydeki yerleri değişir, bu da demek oluyor ki biz önceki memory adresindeki bir komuta gitmeye çalışırsak program açık olduğunda gidecek fakat kapatıp açtığımız zaman yine aynı memory adresine gitmeye çalışacak fakat memory adresi değişeceği için komut çalıştırma kısmı başarısız olacak. Birazda görselle bakalım:

Görselde de görüğümüz gibi bizim jmp esp komutumuzun bulunduğu memory adresine gitmeye çalıştığımızda, artık jmp esp komutumuzun adresi farklı olduğu için komutumuz çalıştırılamayacak dolayısı ile de exploitimiz çalışmayacaktır.

Ufak bir Bypass : Memory adresini brute force ile deneyerek bulabilirsiniz, veya memory adresinin random atayacağı sayıların modüler fonksiyonunu bulabilirseniz sonraki adresi tahmin edip exploiti ona göre ayarlayabilirsiniz.(Son yöntem biraz ütopik ama neden olmasın sonuçta bilgisayarlar rastegele sayı üretmez rastgeleymiş gibi gösterir :).)

İngilizce kaynak isteyenlere: https://www.abatchy.com/2017/06/exploit-dev-101-bypassing-aslr-on.html

Linux (x86) Exploit Development Series

DEP NEDİR ?

Data Execution Protection(DEP) ‘in asıl amacı kullandığımız bilgisayarları zararlı yazılımlardan,exploitlerden korumak. Temel mantıksa şu çalıştırabildiğimiz kısımlar yazılamaz , yazılabilen kısımlar ise çalıştırılamaz. Mantık basit, çalıştırabildiğimiz ve yazabildiğimiz bölgeler bizim için veli nimet gibidir. Kodumuzu üstüne yazıp çalıştırdığımız zaman hayat güzeldir fakat DEP işin içine girdiğinde işler biraz zorlaşıyor. Bir görselle ne demek istediğimi anlayacaksınız.

İlk görselde DEP aktif değil, inputu verdiğimizde taşma zafiyeti varsa EIP bizim istediğimiz memory adresine yönelecek fakat 2. görselde dep aktif yani yazabildiğimiz yeri çalıştıramıyoruz, çalıştırabildiğimiz yere yazamıyoruz. İnputu verdiğimiz zaman ilk kısımda yazma yetkimiz olan yere ‘AAAAA’ inputumuz yazıldı fakat sonraki kısma yazma yetkimiz olmadığı için kod aynen kaldı ve EIP değişmedi.

Bypass için: https://0x00sec.org/t/bypass-data-execution-protection-dep/6988

STRING CANARY NEDİR ?

Sanki inputta bir şeyler var ? Eksik değilde fazla bir şeyler. Kullanıcımız memoryde bir şeyler değiştirmeye çalışıyor gibi geldi şüphelendim doğrusu. Peki nasıl anladık ki ? Canary(kanarya)mız sayesinde memory nin belirli bir bölümünü kontrol ettik ve baktık ki canary orda değil, belki önce belki biraz daha arkaya gitmiş fakat tam istediğimiz input girilseydi canary’de orada olacaktı ve sorun kalmayacaktı. İlla uğraştıracaklar insanı :))

Memoryde programın çalıştığı bellekte rastgele bir yere string canary(canary-me)mizi yerleştirdik. Yerleştirdiğimiz canary’yi biz biliyoruz ama başka biri bilmiyor. Yapacağımız tek şey memoryde canarymiz duruyor mu durmuyor mu onu kontrol etmek. Eğer ki memorydeki yerleşim kaymışsa canary’nin de yeri değişecektir ve memoryde belirttiğimiz yerde canaryden başka değerlerde olacaktır. Anlayacağız ki birileri isteğimiz dışında şeyler yapmaya çalışıyor ve programı kapatacağız ki bu arkadaşlar istediğini elde edemesin.

Bypass ve detaylar için: https://www.ret2rop.com/2018/08/format-string-defeating-stack-canary-nx-aslr-remote.html

Çok teknik yazmayı sevmeyen biri olarak görsellerle basit bi şekilde olayları anlatmaya çalıştım. İleride daha teknik yazılar gelecek tabii ki ama şu an kısa kısa bazı konuların ne olduğunu nasıl işleldiklerini anlatmak bana daha mantıklı geldi. Diğer boş zamanlarımda program örnekleri ve teknik bypass yazıları ile yine buralarda olacağım :)). Okuduğunuz için teşekkür ediyorum. Güvenli günler diliyorum.

Araştırma konuları: aslr,dep,string canary,linux-windows exploitation,assembly basics,gdb,radare,ghidra,buffer overflows