SBC 2012 - Penetration Testting với Backtrack 5 (Nguyễn Phương Trường Anh + Nguyễn Hải Long)
1. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
1
2
Penetration with Backtrack 5 R3
Nguyễn Hải Long | kyo1412@gmail.com
Nguyễn Phương Trường Anh | truonganhnl@gmail.com
2. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Nội dung chính
2
Giới thiệu
Diễn giả
2
Backtrack
Các phương thức tấn công phổ biến:
ARP Spoofing (Ettercap)
Software Exploit (Windows and Linux)
Web Application Attack (SQLi, XSS, Local ...)
2
3. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
3
Giới thiệu
Diễn giả
Nguyễn Hải Long
2
Nguyễn Phương Trường Anh
Backtrack
3
5. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Nguyễn Phương Trường Anh
5
• Kinh nghiệm 5 năm làm việc trong lĩnh vực
bảo mật và an toàn thông tin
2
• Chuyên môn chính Pentest, tư vấn và triển
khai ISO/IEC 27001
5
7. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
7
Backtrack
Backtrack là một bản phân phối linux được
tích hợp các công cụ, driver hỗ trợ việc
2
pentest hệ thống.
Live DVD or Live USB Flash
Phát triển hợp nhất từ 3 công cụ nổi tiếng
Whoppix, IWHAX, và Auditor
Phiên bản mới nhất Backtrack 5 R3
7
8. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Các công cụ sẵn có trên Backtrack
8
Information Gathering: Nmap, traceroute, sqlmap
…
2
Vulnerability assessment: Nessus, OpenVAS …
Exploitation Tool: Metasploit, Aircrack-ng …
Privilege Escalation: John the Ripper, Ophcrack, …
Maintenance Access
Reverse Engineering: gdb, ollydbg, ida …
Forensic: sleuthkit, chkrootkit, …
8
11. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
ARP Spoofing (tt)
Sniff 11
Netcut/Anti-Netcut
Man in the middle attack
2
11
12. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Software Exploit
12
Buffer Overflows
Format Strings
2
Race Condition
Integer Overflow
Off by one
12
13. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Trình biên dịch và cấu trúc một hàm
13
2
13
14. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Trình biên dịch và cấu trúc một hàm
14
int func ( int a , int b)
{
int c ;
char d [7] ; 2
short e ;
return 0 ;
}
14
15. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Buffer Overflows
15
Tràn bộ đệm xảy ra khi dữ liệu xử lý dài quá giới
hạn vùng nhớ chứa nó.
2
15
16. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Buffer Overflows (tt)
16
#include <stdio.h>
int main ( )
{
2
int cookie;
char buf[16];
printf("&buf: %p, &cookie: %pn", buf, &cookie);
gets(buf);
if (cookie == 0x41424344)
{
printf ( "You win ! n" ) ;
}
}
16
17. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Buffer Overflows (tt)
17
Thay đổi giá trị biến nội bộ
2
17
18. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Buffer Overflows (tt)
18
Truyền dữ liệu vào chương trình
Thay đổi luồng thực thi
2
Quay về thư viện chuẩn
…
18
19. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Software Exploit
19
Buffer Overflows
Format Strings
2
Race Condition
Integer Overflow
Off by one
19
20. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings
20
Là lỗi khi dữ chuỗi dữ liệu nhập vào được đánh giá là tập
lệnh của chương trình.
Hàm printf()có dạng: 2
– printf(const char *format, ...)
Nếu gọi printf("Hello");
– Hello
Nếu gọi printf("1%");
– 1%
Nếu gọi printf("1%%");
– 1%
20
21. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings (tt)
21
Dấu % có ý nghĩa đặc biệt
% Đánh dấu sự bắt 2 của một yêu cầu định
đầu
dạng
Yêu cầu định dạng tận cùng bởi ký tự định
dạng
22. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings (tt)
22
• % in ra ký tự %
• c in tham số thứ nhất của một ký tự
2
• x in tham số thứ nhất ở dạng thập lục
• X in tham số thứ nhất ở dạng THẬP LỤC
• s in chuỗi được chỉ tới bởi tham số thứ nhất
• n ghi vào ô nhớ có địa chỉ xác định bởi tham số
thứ nhất số lượng ký tự đã in (4 byte)
• hn giống với n nhưng chỉ in 2 byte
23. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings (tt)
23
#include <stdio.h>
int main(int argc, char **argv )
{ 2
char buffer[512];
int cookie = 0 ;
printf("&cookie: %pn", &cookie);
gets( buffer);
printf("cookie = %.8Xn",cookie);
printf(buffer);
printf("n cookie = %.8Xn", cookie);
return 0 ;
}
24. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings (tt)
24
• Nhập vào abcdef
• abcdef
2
• Nhập vào %x
• 0
• Nhập vào %x%x%x%x
• 0 0 0 6
25. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Format Strings (tt)
25
• Để gán 0x64 vào biến cookie
• [địa chỉ cookie]%x%x%x%x%x%x%x%x%x[…]%n
2
• [địa chỉ cookie] in ra 4 byte x54xF8xFFxBF
• 9 %x in ra 21 byte 0006b7ead8e0fffff5100
• Để in ra tổng cộng 100 ký tự ta cần thêm 100-21-
4=75 ký tự
• Vậy […] sẽ là 75 ký tự
python -c 'print "x54xF8xFFxBF%x%x%x%x%x%x%x%x%x" +
"a"*75 + "%n"' | ./fmt
26. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Software Exploit
26
Buffer Overflows
Format Strings
2
Race Condition
Integer Overflow
Off by one
26
27. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Race Condition
27
• Xảy ra nhiều tiến trình (tiểu trình) truy cập và
sửa đổi cùng một dữ liệu vào cùng một lúc,
Kết quả phụ thuộc 2 thứ tự truy cập
vào
27
28. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Race Condition (tt)
28
• Để tận dụng lỗi thì người ta chạy thật nhiều
tiến trình ngoài để “đua” với tiến trình bị lỗi
2
→ Chữ “đua” (race)
• Còn được gọi là TOC/TOU
• Xét ví dụ:
if(access(argv[1], R_OK)==0)
{
f = fopen(arvg[1], "r");
}
29. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Race Condition (tt)
29
• Giữa hàm access() và fopen() có một
khoảng thời gian nhỏ
2
CALL access
CMP EXA, 0
JNZ ...
PUSH ...
PUSH ...
CALL fopen
• Hệ điều hành có thể sẽ chuyển qua tiến trình
khác ở giữa các lệnh đó
31. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Race Condition (tt)
31
• access() và fopen() nhận tên file
• Cùng một tên nhưng có thể là 2 file khác nhau
• Symlink 2
• Do đó ta có thể tận dụng bằng cách:
• Chỉ symlink đến tập tin có thể đọc được
• Chỉ symlink đến tập tin không có quyền đọc nhưng
chương trình bị lỗi có thể đọc được
• Lập lại 2 việc này liên tục
• Song song đó, ta sẽ chạy chương trình bị lỗi và truyền tên
symlink vào
32. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Race Condition (tt)
32
• Điều kiện đua thường gặp ở các ứng dụng xử
lý file, ứng dụng mạng, database, ứng dụng đa
2
tiểu trình, ứng dụng web
• Ứng dụng web đặc biệt dễ mắc phải vì vừa đa
tiến(tiểu) trình, vừa truy cập database, vừa
truy cập file
33. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Software Exploit
33
Buffer Overflows
Format Strings
2
Race Condition
Integer Overflow
Off by one
33
34. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Integer Overflow
34
• Số nguyên trong máy tính được biểu diễn
• Ở dạng bù 2
2
• Có dấu hoặc không dấu
• Giá trị âm lớn nhất cũng có thể là giá trị dương
cao nhất
• Số có dấu hiệu bị lệch giá trị âm (-128→127)
• Hiện tượng quay vòng (127 +1 = -128, 255+1=0)
• Kích thước kiểu dữ liệu ảnh hưởng quan trọng
(255 kiểu short là 1 kiểu char)
34
35. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Integer Overflow (tt)
35
• Tràn số nguyên xảy ra khi giá trị số nằm ngoài phạm
vi biểu diễn của kiểu dữ liệu
2
• Xét ví dụ:
int i;
i = atoi(argv[1]);
if(i<0x1000) fgets(buf, i, stdin);
• atoi() trả về số nguyên có dấu
• Tham số thứ 2 của fget() là kiểu số nguyên
không dấu.
• Nếu arvg[1] là số âm thì sẽ gây tràn
36. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Integer Overflow (tt)
36
• Xét ví dụ:
int i = -2,147,483,648;
int j = -1; 2
printf("%d n", i/j);
• i là số âm nhất
• j là -1
• Khi thực hiện phép chia sẽ ra 2,147,483,648,
nhưng 2,147,483,648 vượt quá phạm vi biểu
diễn (2,147,483,647) →crash
37. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Software Exploit
37
Buffer Overflows
Format Strings
2
Race Condition
Integer Overflow
Off by one
37
38. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
38
Off by one
• Đây là một trường hợp đặc biệt của lỗi tràn bộ
đệm, trong đó chỉ duy nhất chỉ tràn một byte
2
• Xét ví dụ:
void vuln(char *arg)
{
char buff[8];
strcpy(buff,arg);
}
void main (int argc, char **argv)
{
vuln(argv[1]);
}
38
39. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Off by one (tt)
39
• Giả sử argv[1] có độ dài 8 ký tự
• Khi vào vuln() thì biến buff chứa 8 ký tự này
2
• Ký tự kết thúc chuỗi sẽ lem ra ngoài
• Ký tự x00 sẽ bị lem vào EBP cũ
• Trong phần kết thúc của hàm vuln(): POP EBP
=> sẽ khiến EBP mang giá trị XXXXXX00
• Trong phần kết thúc của hàm main(): MOV ESP,
EBP => sẽ khiễn ESP mang giá trị XXXXXX00
40. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Off by one (tt)
40
• Sau đó POP EBP sẽ làm ESP tăng thêm 4
• Cuối cùng RET sẽ lấy giá trị hiện tại trên đỉnh ngăn
xếp để quay về →lỗi xảy ra trong hàm vuln()
2
nhưng tận dụng trong hàm main()
• Hai điểm cần lưu ý:
• Giá trị mới của EBP sẽ nhỏ hơn giá trị EBP đã lưu
• Và do đó có thể chỉ tới phần ngăn xếp trong vuln()
• Giả sử biến buff có địa chỉ tận cùng là 00→cơ hội
EBP chỉ tới biến buff sẽ cao → địa chỉ trở về của
hàm main() sẽ là địa chỉ của biến buff+4
43. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
43
Web Attack
SQL Injection
Cross-site scripting(XSS)
2
Local and Remote file inclusion
Web proxy
43
44. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
SQL Injection
44
Boolean based blind
Time based blind 2
Error based
UNION query
Stacked queries
Out of band
44
48. SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
Các tài liệu tham khảo
48
• Nghệ thuật tận dụng lỗi phần mềm – Nguyễn
Thành Nam
2
• Offensive Security - Penetration Testing with
BackTrack (Lab Guide)
• Google