SBC 2012 - Software Exploitation (Nguyễn Chấn Việt)

1,696 views
1,612 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,696
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
106
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SBC 2012 - Software Exploitation (Nguyễn Chấn Việt)

  1. 1. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 1 54 Software Exploitation Nguyễn Chấn Việt | vietwow@gmail.com
  2. 2. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 2 Who am ISenior Security Researcher+4 years in Information54 Security. Focusing onMalware Analysis and Exploit DevelopmentTwitter : https://twitter.com/vietwow
  3. 3. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Why study this ? 3This is real security. NOT Security+, CEH,CISSP, … 54Firewall, IDS/IPS, AV … cannot detect/preventHOT jobs : – Application Security/Pentest – Exploit DevelopmentBug Hunting : Vupen wins 1 million dollars withChrome exploit from Google offer
  4. 4. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Vulnerablity Finding 4Phases 1 : – Fuzzing / Reverse Engineer (Black-box) 54 – Source code audit (White-box)Phase 2 : – Exploit Development => We are herePhase 3 : – $ell – To be Anonymous/Luzsec
  5. 5. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 5 Requirementsx86 AssemblyC/C++ 54Understand OS Primer and how function worksUse debugger toolsScripting Language (prefered Python)
  6. 6. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 6 ToolsIDA / IDA ProOllyDBG / Immunity Debugger 54GDBWinDBGMetasploit
  7. 7. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Stack Buffer Overflow in Action 7 Senior Security Researcher 54Bộ nhớ Stack ban đầu Sau khi nhập chuỗi Bộ nhớ Stack sau khi bị “Hello” tràn
  8. 8. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Classical method 8Direct EIP overwrite : Chỉ cần overwrite EIPthành địa chỉ của shellcode => khi function kết 54thúc, CPU sẽ nhảy đến địa chỉ shellcode và thựcthi=> Chỉ áp dụng được ở những năm 1990
  9. 9. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 9 Some problemsBad character => encode shellcodeLimited-size buffer => egg-hunter shellcode 54Shifting stack pointer : giúp exploit của ta trởnên “reliability” hơn vì đôi khi 1 số stackoperation trong chương trình sẽ làm corruptshellcode – add esp, xxxx
  10. 10. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 10 54Exploit Mitigation Techniques
  11. 11. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 11 54
  12. 12. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 12 54
  13. 13. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 13 54
  14. 14. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 14 /GSCơ chế bảo vệ của compilerChèn 1 giá trị random gọi là cookie vào trước 54buffer trong stackKhi chương trình kết thúc sẽ kiểm tra, nếu giá trịnày bị thay đổi thì chương trình sẽ bị kill ngaylập tức
  15. 15. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Memory Layout 15 Parameters Return Address 54 Frame Pointer Locals (1)(1) Without Cookie
  16. 16. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Memory Layout 16 Parameters Parameters Return Address Return Address 54 Frame Pointer Frame Pointer Locals Cookie (1) Locals(1) Without Cookie (2)(2) MSVC++ 2003
  17. 17. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 17 Bypass /GSCơ chế bảo vệ của compilerChèn 1 giá trị random gọi là cookie vào giữa 54Saved EBP và RETKhi chương trình kết thúc sẽ kiểm tra, nếu giá trịnày bị thay đổi thì chương trình sẽ bị kill ngaylập tức
  18. 18. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 18 Bypass /GSSEH - “Structured Exception Handling” là cơchế xử lý Exception của Windows 54 int test(void){ int test(void){ __try{ __try{ // Exception may occur here // Exception may occur here }} __except( EXCEPTION_EXECUTE_HANDLER ){ __except( EXCEPTION_EXECUTE_HANDLER ){ // This handles the exception // This handles the exception }} return 0; return 0; }}
  19. 19. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Memory Layout 19 54 (3)
  20. 20. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Memory Layout 20 54 (3)
  21. 21. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 21 Bypass /GSVì SEH được trigger trước khi chương trình kếtthúc => điều đó đồng nghĩa với việc exploit của 54ta sẽ được hiện trước chương trình kết thúc (vàkiểm tra cookie)Để khai thác, ta phải tạo ra 1 exception. Sau đó“ép” application jump đến shellcode của ta (thayvì default sẽ là jump để real exception handlerfunction)
  22. 22. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 22 Bypass /GS 54
  23. 23. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 23 ASLRCơ chế bảo vệ của OSNguyên tắc là OS sẽ randomize các address trên 54memory như stack, heap, … (trừ text section) =>khiến ta không thể search các address cần thiếtnhư địa chỉ shellcode, địa chỉ hàm, ….
  24. 24. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 24 Bypass ASLRBruteforce : chỉ khả thi với hệ thống 32-bitNon ASLR : Return-to-esp, Return-to-eax 54Heap Spray
  25. 25. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 25 Bypass ASLRReturn-to-esp : – overwrite địa chỉ RET thành địa chỉ của lệnh “JMP 54 ESP” (FF E4) hoặc “CALL ESP” – Đặt shellcode ngay sau RET=> Khi hàm kết thúc, lệnh “JMP ESP” / “CALL ESP” sẽ được thực thi, do đó phần shellcode ngay sau đó sẽ được thực thi
  26. 26. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 26 Bypass ASLRReturn-to-eax : – Phương pháp này được sử dụng trong các trường 54 hợp thanh ghi EAX được dùng để store return value, khi đó thanh ghi EAX sẽ trỏ về buffer, ta chỉ cần chèn shellcode vào buffer, sau đó tìm instruction “jmp eax” và overwrite vào RET
  27. 27. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 27 Bypass ASLRHeapspray : – Thay vì return về Stack, với cơ chế của các 54 browser ngày nay, ta có thể return về Heap – Ta sẽ “spray” shellcode ở nhiều nơi trên Heap – Với kỹ thuật này, ta không cần quan tâm đến việc encode shellcode vì tất cả character đã được “allow” bởi Javascript
  28. 28. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 28 DEP / NXCơ chế bảo vệ của OSNguyên tắc là OS sẽ mark các page memory là 54Non-Execution => Shellcode đặt trên Stack hayHeap đều không thể Execute
  29. 29. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 29 DEP / NXCơ chế bảo vệ của OSNguyên tắc là OS sẽ mark các page memory là 54Non-Execution => Shellcode đặt trên Stack hayHeap đều không thể Execute
  30. 30. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Bypass DEP / NX 30Return-to-glibc – Section .text/.code luôn luôn được thực thi => thay 54 vì trỏ về shellcode, ta có thể trỏ về các hàm trong glibc hay các instruction trong chính chương trình
  31. 31. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Bypass DEP / NX 31Return-to-glibc – Có thể thực hiện chained return-to-glibc bằng cách 54 kết hợp sử dụng POP-POP-RET
  32. 32. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Bypass DEP / NX 32Return-to-glibc – Trên Windows, Cơ chế DEP cũ có thể dễ dạng bị 54 disable bởi các Windows API “NtSetInformationProcess” thông qua kỹ thuật return-to-glibc
  33. 33. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Permanent DEP 33Phiên bản improve của DEPDEP không thể bị change (disable) sau khi thiết 54lập
  34. 34. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Bypass Permanent DEP 34Return Oriented Programing (ROP) – Là kỹ thuật mở rộng của return-to-glibc 54 – Dựa trên kỹ thuật return-to-glibc và “borrowed code chunks” => Return về các instruction trong section text/code – ESP sẽ là key (thay vì EIP)Payload Already Inside:Data re-use for ROPExploits – Long Le Dinh
  35. 35. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Other Vulnerbility ? 35Format String (lỗi định dạng)Integer Overflow (tràn số nguyên) 54 – Bypass checking – Possible memory corruptionRace ConditionUser-after-free
  36. 36. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 36 Format StringXuất phát từ việc sử dụng format string khôngđúng cách 54print(“%d”,number);print(number);Khác nhau như thế nào ?
  37. 37. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 37 Format StringCho phép attack có thể “view” stack memory sửdụng %x 54Cho phép attack có thể write value vào 1arbitrary memory sử dụng %n
  38. 38. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 38 Format StringKhông có RET => Làm sao để chiếm control ? – Overwrite section .dtors 54 – Overwrite GOT table
  39. 39. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 39 Use-after-freeModern race condition for browserObjects in memory 54 – - Replacing objects in memory on the fly – - Replacing them with user-controlled strings
  40. 40. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 40 Use-after-freeExample : 1 class bao gồm 3 member và 3method 54Class vuln(){ – int number1, number2, number3; – void func1() {…}; – void func2() {…}; – void func3() {…};}
  41. 41. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 41 Use-after-freeTrên memory : 54VTABLE ----> FPTR1 ----------> codeNUMBER1 FPTR2 ----------> codeNUMBER2 FPTR3 ----------> codeNUMBER3
  42. 42. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 42 Use-after-freeNếu ta khởi tạo 2 instance của class đó :b VTABLE ----> FPTR1 ----------> code 54 NUMBER1 FPTR2 ----------> code NUMBER2 FPTR3 ----------> code NUMBER3a VTABLE ----> FPTR1 ----------> code NUMBER1 FPTR2 ----------> code NUMBER2 FPTR3 ----------> code NUMBER3
  43. 43. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Vtable overwrite 43Khi ta thực hiện : 54 – strcpy(b.number3, argv[1]); – a.method2();=> Nếu ta input dữ liệu lớn hơn size củanumber3 thì ta có thể overwrite lên các data khác
  44. 44. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 44 Use-after-freeBack to use-after-free : – x = new ABC() – y = clone(x) 54 – destroy(x) – y.method2()
  45. 45. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 45 Use-after-freex = new ABC() : – x VTABLE – MEMBER1 54 – MEMBER2 – MEMBER3 – MEMBER4
  46. 46. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 46 Use-after-freey = clone(x) : – y pointer -----> x VTABLE – MEMBER1 54 – MEMBER2 – MEMBER3 – MEMBER4
  47. 47. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 47 Use-after-freedestroy(x)y.method2() : 54 – y VTABLE – MEMBER1 – MEMBER2 – MEMBER3 – MEMBER4
  48. 48. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 48 Use-after-freeIdea : nếu ngay sau lúc destroy x, ta có thể inputdata vào (đủ nhanh) với đúng memory size của 54object x thì sẽ overwrite vtable object x thànhcông – y pointer -----> 41414141 – AAAA – AAAA – AAAA – AAAA
  49. 49. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 0day 49 1day Vulnernablity vsReverse Engineering Patch for findingVulnerability 54
  50. 50. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Learning More ? 50Ebooks : – The Art of Exploitation – The Shellcoders Handbook: Discovering and 54 Exploiting Security Holes – Grey Hat Hacking - Ethical Hackers Handbook – Nghệ thuật tận dụng lỗi phần mềm - NamNTSites : – https://www.corelan.be – http://resources.infosecinstitute.com/
  51. 51. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Learning More ? 51Training CoursesWargames : 54 – Online : http://www.overthewire.org/wargames/ – Offline : exploit-exercisesCapture The Flag : – CSAW – HITB – Defcon – …
  52. 52. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Exploit Listing Sites 52Exploit-DBInjector 54CVE DetailsPacketstormCERTMitreNational Vulnerability DatabaseCommon Weakness Enumberation
  53. 53. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! Any Questions ? 53 54
  54. 54. SECURITY BOOTCAMP 2012 | Make yourself to be an expert! 54 Thank you very much ! 54

×