Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Exploitace – od minulosti po současnost - Jan Kopecký

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 32 Anzeige

Weitere Verwandte Inhalte

Weitere von Security Session (20)

Anzeige

Aktuellste (19)

Exploitace – od minulosti po současnost - Jan Kopecký

  1. 1. The OWASP Foundation http://www.owasp.org OWASP meeting Security Session Jan Kopecký Czech chapter leader rnmx123@gmail.com
  2. 2. The OWASP Foundation http://www.owasp.org O mě • OWASP chapter leader • Senior ethical hacker pro ING • Founder captes.cz • Skills • Webová bezpečnost (server/client side) • Reverzní inženýrství • Psaní exploitů • Analýza malware • Penetrační testy
  3. 3. The OWASP Foundation http://www.owasp.org Agenda Co je buffer overflow? Exploity na XP – Stack cookie, SEH, DEP Exploity na Win7 – ASLR QA
  4. 4. The OWASP Foundation http://www.owasp.org Buffer overflow
  5. 5. The OWASP Foundation http://www.owasp.org Buffer overflow
  6. 6. The OWASP Foundation http://www.owasp.org Buffer overflow void TriggerOverflow(char *Buffer) { char Small_Buf[512]; strcpy(Small_Buf,Buffer); } int main (int argc, char **argv) { TriggerOverflow(argv[1]); } 0x00000000 0xFFFFFFFF Vyhrazeno pro Small_Buf EBP – ulozena EIP – ulozena * argv[1]
  7. 7. The OWASP Foundation http://www.owasp.org Buffer overflow void TriggerOverflow(char *Buffer) { char Small_Buf[512]; strcpy(Small_Buf,Buffer); } int main (int argc, char **argv) { TriggerOverflow(argv[1]); } 0x00000000 0xFFFFFFFF Vyhrazeno pro Small_Buf EBP – ulozena EIP – ulozena * argv[1] “A” * 560 AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA ……
  8. 8. The OWASP Foundation http://www.owasp.org Buffer overflow • Cílem je přepsat uloženou hodnotu EIP na stacku. • EAX ukazuje na začátek našeho Small_Buf. • Když přepíšeme EIP na stacku adresou „jmp eax“ skočíme přímo na začátek našeho shellcodu 0x00000000 0xFFFFFFFF Shellcode + padding padding Jmp eax * argv[1] EAX
  9. 9. The OWASP Foundation http://www.owasp.org Buffer overflow
  10. 10. The OWASP Foundation http://www.owasp.org Buffer overflow DEMO
  11. 11. The OWASP Foundation http://www.owasp.org Buffer overflow – Stack Cookie Jako snaha Microsoftu zamezit exploitaci byla představena „stack cookie“. 0x00000000 0xFFFFFFFF Vyhrazeno pro Small_Buf EBP – ulozena EIP – ulozena * argv[1] Stack cookie
  12. 12. The OWASP Foundation http://www.owasp.org DEMO Buffer overflow – Stack Cookie
  13. 13. The OWASP Foundation http://www.owasp.org Buffer overflow – SEH Jestliže cookie nesedí, je zavolán SEH (Exception handler) Pointer to next SEH SE function Pointer to next SEH SE function FFFFFFFF SE function TEB FS[0] Program se ukončí a náš shellcode se neprovede, jenže…
  14. 14. The OWASP Foundation http://www.owasp.org 0x00000000 0xFFFFFFFF Reserved for Small_Buf EBP – Saved EIP – Saved * argv[1] SE Function Pointer to next SEH SEH je také uložen na stacku, můžeme jej tedy přepsat, otázka je čím.. V prologu exception handleru je hodnota „Pointer to next SEH“ uložena na stack – konkrétně ESP+8. Jestliže přepíšeme SE Function adresou obsahující POP/POP/RET; RET se vrátí do „Pointer to next SEH“ Buffer overflow – SEH
  15. 15. The OWASP Foundation http://www.owasp.org 0x00000000 0xFFFFFFFF Reserved for Small_Buf EBP – Saved EIP – Saved * argv[1] SE Function Pointer to next SEH AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA SHORT JMP POP/POP/RET Shellcode 1. Přepíšeme buffer, tak aby: • SE Function -> POP/POP/RET • Pointer to next SEH -> adresa SHORT JMP 2. Cookie při kontrole nesedí, zavolá se náš podstrčený SEH 3. POP/POP/RET přenese kontrolu (EIP) na SHORT JMP -> přistaneme v Shellcodu Buffer overflow – SEH
  16. 16. The OWASP Foundation http://www.owasp.org DEMO Buffer overflow – SEH
  17. 17. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Stack a heap nejsou spustitelné, nemůžeme skočit do shellcode a spustit jej. OptIn : Dep se vztahuje pouze na některé Windows služby OptOut : DEP je aktivován pro všechny procesy, vyjma těch na whitelistu AlwaysOn : DEP je vždy aktivován, bez vyjímek AlwaysOff : DEP je vypnutý Windows XP SP2, XP SP3, Vista SP0 : OptIn Windows Vista SP1 : OptIn + Permanent DEP Windows 7: OptIn + Permanent DEP Windows Server 2003 SP1 and up : OptOut Windows Server 2008 and up : OptOut + Permanent DEP Permanent DEP – když je během kompilace nastaven /NXCOMPAT
  18. 18. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Můžeme sice přepsat buffer tak, jak jsme již viděli, ale nespustíme ani NOP.
  19. 19. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Naštěstí Dino Dai Zovi definoval pojem ROP(Return Oriented Programing):
  20. 20. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Instrukce + RET = Gadget Musíme využít stávající kód v aplikaci (musí být „executable“) a postavit Gadgety tak, abychom zavolali jednu z API (a nastavit její parametry), která umožní DEP vypnout. • VirtualAlloc() • SetProcessDEPPolicy() • NtSetInformationProcess() • VirtualProtect() • WriteProcessMemory()
  21. 21. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Stack Pivot Placeholder 1 Placeholder 2 Set up Placeholder 1 Set up Placeholder 2 Jump to VirtualProtect Padding Shellcode VirtualProtect() Stack
  22. 22. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Zadání: Dostaňte „5“ do EBX a přičtěte k němu 60. Výsledek uložte do EAX. 1. Gadget POP EBX; RET 2. Gadget ADD EBX, 60; RET 3. Gadget MOV EAX, EBX; POP EDX; RET 34BA4378 POP EBX; RET 34BA9A78 ADD EBX, 60; RET 34BA4FC8 MOV EAX, EBX; POP EDX; RET 34BA4378 34BA9A78 34BA4FC8 DEADBEEF 00000005
  23. 23. The OWASP Foundation http://www.owasp.org Buffer overflow – DEP Přesvědčme se, že můžeme opravdu spouštět Gadgety.. DEMO … a spouštět kód.
  24. 24. The OWASP Foundation http://www.owasp.org ASLR Address Space Layout Randomization (/DYNAMICBASE) Nemůžeme se nadále spoléhat na statické adresy, jako v předchozích příkladech: 004013FD JMP EAX 10024F5A POP/POP/RET 7C14DF3C CALL VirtualProtect Po každém resetu dojde k načtení modulů na různé místo v paměti
  25. 25. The OWASP Foundation http://www.owasp.org ASLR bypass • Částečné přepsání • Non-ASLR modul – stále aktuální, problém Force ASLR • „Leaks“ – téma na samostatnou přednášku • Manipulace s délkou nejen BSTR – moderní hlavně při exploitaci UAF u browserů
  26. 26. The OWASP Foundation http://www.owasp.org ASLR bypass Částečné přepsání LOW HIGH 12 34 56 78 Pouze tato část je randomizována. Musíme najít užitečnou instrukci na adrese 5678 XXXX .
  27. 27. The OWASP Foundation http://www.owasp.org ASLR bypass – non ASLR modul • !mona module • !mona jmp –r esp DEMO
  28. 28. The OWASP Foundation http://www.owasp.org ASLR bypass – Length overwrite Změnímeli vhodně délku stringu, můžeme číst více adresního prostoru, než bychom měli (můžeme číst celý adress space náležící browseru). Délka Data Null b.
  29. 29. The OWASP Foundation http://www.owasp.org ASLR bypass – Length overwrite DEMO
  30. 30. The OWASP Foundation http://www.owasp.org ASLR bypass – Length overwrite Náš kód musí udělat následující: Zjistit, jaký objekt jsme poškodili Poškodit délku dalšího objektu Zjistiti base adresu Flash modulu (MZ header scan) Zjistit adresu Kernel32 (IAT) Najít VirtualProtect Dynamicky sestavit ROP Spustit ROP
  31. 31. The OWASP Foundation http://www.owasp.org ASLR bypass – Length overwrite DEMO
  32. 32. The OWASP Foundation http://www.owasp.org 32 Q&A

×