1. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
1
54
Software Exploitation
Nguyễn Chấn Việt | vietwow@gmail.com
2. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
2
Who am I
Senior Security Researcher
+4 years in Information54 Security. Focusing on
Malware Analysis and Exploit Development
Twitter : https://twitter.com/vietwow
3. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Why study this ?
3
This is real security. NOT Security+, CEH,
CISSP, …
54
Firewall, IDS/IPS, AV … cannot detect/prevent
HOT jobs :
– Application Security/Pentest
– Exploit Development
Bug Hunting : Vupen wins 1 million dollars with
Chrome exploit from Google offer
4. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Vulnerablity Finding
4
Phases 1 :
– Fuzzing / Reverse Engineer (Black-box)
54
– Source code audit (White-box)
Phase 2 :
– Exploit Development => We are here
Phase 3 :
– $ell
– To be Anonymous/Luzsec
5. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
5
Requirements
x86 Assembly
C/C++ 54
Understand OS Primer and how function works
Use debugger tools
Scripting Language (prefered Python)
6. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
6
Tools
IDA / IDA Pro
OllyDBG / Immunity Debugger
54
GDB
WinDBG
Metasploit
7. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Stack Buffer Overflow in Action
7
Senior Security Researcher
54
Bộ nhớ Stack ban đầu Sau khi nhập chuỗi Bộ nhớ Stack sau khi bị
“Hello” tràn
8. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Classical method
8
Direct EIP overwrite : Chỉ cần overwrite EIP
thành địa chỉ của shellcode => khi function kết
54
thúc, CPU sẽ nhảy đến địa chỉ shellcode và thực
thi
=> Chỉ áp dụng được ở những năm 1990
9. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
9
Some problems
Bad character => encode shellcode
Limited-size buffer => egg-hunter shellcode
54
Shifting stack pointer : giúp exploit của ta trở
nên “reliability” hơn vì đôi khi 1 số stack
operation trong chương trình sẽ làm corrupt
shellcode
– add esp, xxxx
10. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
10
54
Exploit Mitigation Techniques
14. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
14
/GS
Cơ chế bảo vệ của compiler
Chèn 1 giá trị random gọi là cookie vào trước
54
buffer trong stack
Khi 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 ngay
lập tức
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. 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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
17
Bypass /GS
Cơ chế bảo vệ của compiler
Chèn 1 giá trị random gọi là cookie vào giữa
54
Saved EBP và RET
Khi 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 ngay
lập tức
18. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
18
Bypass /GS
SEH - “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;
}}
21. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
21
Bypass /GS
Vì SEH được trigger trước khi chương trình kết
thúc => điều đó đồng nghĩa với việc exploit của
54
ta 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 (thay
vì default sẽ là jump để real exception handler
function)
23. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
23
ASLR
Cơ chế bảo vệ của OS
Nguyên tắc là OS sẽ randomize các address trên
54
memory như stack, heap, … (trừ text section) =>
khiến ta không thể search các address cần thiết
như địa chỉ shellcode, địa chỉ hàm, ….
24. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
24
Bypass ASLR
Bruteforce : chỉ khả thi với hệ thống 32-bit
Non ASLR : Return-to-esp, Return-to-eax
54
Heap Spray
25. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
25
Bypass ASLR
Return-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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
26
Bypass ASLR
Return-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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
27
Bypass ASLR
Heapspray :
– 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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
28
DEP / NX
Cơ chế bảo vệ của OS
Nguyên tắc là OS sẽ mark các page memory là
54
Non-Execution => Shellcode đặt trên Stack hay
Heap đều không thể Execute
29. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
29
DEP / NX
Cơ chế bảo vệ của OS
Nguyên tắc là OS sẽ mark các page memory là
54
Non-Execution => Shellcode đặt trên Stack hay
Heap đều không thể Execute
30. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Bypass DEP / NX
30
Return-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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Bypass DEP / NX
31
Return-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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Bypass DEP / NX
32
Return-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. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Permanent DEP
33
Phiên bản improve của DEP
DEP không thể bị change (disable) sau khi thiết
54
lập
34. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Bypass Permanent DEP
34
Return 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 ROP
Exploits – Long Le Dinh
35. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Other Vulnerbility ?
35
Format String (lỗi định dạng)
Integer Overflow (tràn số nguyên)
54
– Bypass checking
– Possible memory corruption
Race Condition
User-after-free
36. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
36
Format String
Xuất phát từ việc sử dụng format string không
đúng cách
54
print(“%d”,number);
print(number);
Khác nhau như thế nào ?
37. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
37
Format String
Cho phép attack có thể “view” stack memory sử
dụng %x
54
Cho phép attack có thể write value vào 1
arbitrary memory sử dụng %n
38. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
38
Format String
Không có RET => Làm sao để chiếm control ?
– Overwrite section .dtors
54
– Overwrite GOT table
39. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
39
Use-after-free
Modern race condition for browser
Objects in memory 54
– - Replacing objects in memory on the fly
– - Replacing them with user-controlled strings
40. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
40
Use-after-free
Example : 1 class bao gồm 3 member và 3
method
54
Class vuln()
{
– int number1, number2, number3;
– void func1() {…};
– void func2() {…};
– void func3() {…};
}
41. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
41
Use-after-free
Trên memory :
54
VTABLE ----> FPTR1 ----------> code
NUMBER1 FPTR2 ----------> code
NUMBER2 FPTR3 ----------> code
NUMBER3
42. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
42
Use-after-free
Nếu ta khởi tạo 2 instance của class đó :
b VTABLE ----> FPTR1 ----------> code 54
NUMBER1 FPTR2 ----------> code
NUMBER2 FPTR3 ----------> code
NUMBER3
a VTABLE ----> FPTR1 ----------> code
NUMBER1 FPTR2 ----------> code
NUMBER2 FPTR3 ----------> code
NUMBER3
43. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Vtable overwrite
43
Khi 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ủa
number3 thì ta có thể overwrite lên các data khác
44. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
44
Use-after-free
Back to use-after-free :
– x = new ABC()
– y = clone(x) 54
– destroy(x)
– y.method2()
45. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
45
Use-after-free
x = new ABC() :
– x VTABLE
– MEMBER1 54
– MEMBER2
– MEMBER3
– MEMBER4
46. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
46
Use-after-free
y = clone(x) :
– y pointer -----> x VTABLE
– MEMBER1 54
– MEMBER2
– MEMBER3
– MEMBER4
47. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
47
Use-after-free
destroy(x)
y.method2() : 54
– y VTABLE
– MEMBER1
– MEMBER2
– MEMBER3
– MEMBER4
48. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
48
Use-after-free
Idea : nếu ngay sau lúc destroy x, ta có thể input
data vào (đủ nhanh) với đúng memory size của
54
object x thì sẽ overwrite vtable object x thành
công
– y pointer -----> 41414141
– AAAA
– AAAA
– AAAA
– AAAA
49. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
0day 49 1day Vulnernablity
vs
Reverse Engineering Patch for finding
Vulnerability
54
50. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Learning More ?
50
Ebooks :
– The Art of Exploitation
– The Shellcoder's 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 - NamNT
Sites :
– https://www.corelan.be
– http://resources.infosecinstitute.com/
51. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Learning More ?
51
Training Courses
Wargames :
54
– Online : http://www.overthewire.org/wargames/
– Offline : exploit-exercises
Capture The Flag :
– CSAW
– HITB
– Defcon
– …
52. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Exploit Listing Sites
52
Exploit-DB
Injector
54
CVE Details
Packetstorm
CERT
Mitre
National Vulnerability Database
Common Weakness Enumberation