Upload
security-bootcamp
View
2.126
Download
4
Tags:
Embed Size (px)
Citation preview
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
1
2
Nguyễn Hải Long | [email protected]
Penetration with Backtrack 5 R3
Nguyễn Phương Trường Anh | [email protected]
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
2
2
Giới thiệu Diễn giả 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 ...)
Nội dung chính
2
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
3
2
Diễn giả Nguyễn Hải Long Nguyễn Phương Trường Anh
Backtrack
Giới thiệu
3
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
4
2
About me
4
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
5
2
• 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
• Chuyên môn chính Pentest, tư vấn và triển khai ISO/IEC 27001
Nguyễn Phương Trường Anh
5
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
6
2
6
Giới thiệu
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
7
2
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 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
Backtrack
7
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
8
2
Information Gathering: Nmap, traceroute, sqlmap …
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, …
Các công cụ sẵn có trên Backtrack
8
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
9
2
Sniffer
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
10
2
ARP Spoofing
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
11
2
Sniff Netcut/Anti-Netcut Man in the middle attack
ARP Spoofing (tt)
11
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
12
2
Buffer Overflows Format Strings Race Condition Integer Overflow Off by one
Software Exploit
12
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
13
2
Trình biên dịch và cấu trúc một hàm
13
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
14
2
Trình biên dịch và cấu trúc một hàm
int func ( int a , int b){ int c ; char d [7] ; short e ; return 0 ;}
14
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
15
2
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ó.
Buffer Overflows
15
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
16
2
Buffer Overflows (tt)#include <stdio.h>int main ( ){ int cookie; char buf[16]; printf("&buf: %p, &cookie: %p\n", buf, &cookie); gets(buf); if (cookie == 0x41424344) { printf ( "You win ! \ n" ) ; }}
16
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
17
2
Buffer Overflows (tt)Thay đổi giá trị biến nội bộ
17
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
18
2
Truyền dữ liệu vào chương trình Thay đổi luồng thực thi Quay về thư viện chuẩn …
Buffer Overflows (tt)
18
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
19
2
Buffer Overflows Format Strings Race Condition Integer Overflow Off by one
Software Exploit
19
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
20
2
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:– 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%
Format Strings
20
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
21
2
Format Strings (tt) Dấu % có ý nghĩa đặc biệt % Đánh dấu sự bắt đầu của một yêu cầu định
dạng Yêu cầu định dạng tận cùng bởi ký tự định
dạng
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
22
2
Format Strings (tt)• % in ra ký tự %• c in tham số thứ nhất của một ký tự
• 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
23
2
Format Strings (tt)
#include <stdio.h>int main(int argc, char **argv ){ char buffer[512]; int cookie = 0 ; printf("&cookie: %p\n", &cookie); gets( buffer); printf("cookie = %.8X\n",cookie); printf(buffer); printf("\n cookie = %.8X\n", cookie); return 0 ;}
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
24
2
Format Strings (tt)• Nhập vào abcdef
• abcdef
• Nhập vào %x• 0
• Nhập vào %x%x%x%x• 0 0 0 6
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
25
2
Format Strings (tt)• Để gán 0x64 vào biến cookie
• [địa chỉ cookie]%x%x%x%x%x%x%x%x%x[…]%n
• [địa chỉ cookie] in ra 4 byte \x54\xF8\xFF\xBF
• 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 "\x54\xF8\xFF\xBF%x%x%x%x%x%x%x%x%x" + "a"*75 + "%n"' | ./fmt
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
26
2
Buffer Overflows Format Strings Race Condition Integer Overflow Off by one
Software Exploit
26
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
27
2
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 vào thứ tự truy cập
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
28
2
Race Condition (tt)• Để 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 → 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"); }
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
29
2
Race Condition (tt)• Giữa hàm access() và fopen() có một
khoảng thời gian nhỏ
• Hệ điều hành có thể sẽ chuyển qua tiến trình khác ở giữa các lệnh đó
CALL accessCMP EXA, 0JNZ ...PUSH ...PUSH ...CALL fopen
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
30
2
Race Condition (tt)
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
31
2
Race Condition (tt)• 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
• 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
32
2
Race Condition (tt)• Đ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 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
33
2
Buffer Overflows Format Strings Race Condition Integer Overflow Off by one
Software Exploit
33
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
34
2
• Số nguyên trong máy tính được biểu diễn• Ở dạng bù 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)
Integer Overflow
34
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
35
2
Integer Overflow (tt)• 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
• Xét ví dụ:
• 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
int i;i = atoi(argv[1]);if(i<0x1000) fgets(buf, i, stdin);
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
36
2
Integer Overflow (tt)• Xét ví dụ:
• 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
int i = -2,147,483,648; int j = -1;printf("%d \n", i/j);
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
37
2
Buffer Overflows Format Strings Race Condition Integer Overflow Off by one
Software Exploit
37
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
38
2
• Đâ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
• Xét ví dụ:
Off by one
38
void vuln(char *arg){ char buff[8]; strcpy(buff,arg);}void main (int argc, char **argv){ vuln(argv[1]);}
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
39
2
Off by one (tt)• 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
• 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
40
2
Off by one (tt)• 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() 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
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
41
2
Off by one (tt)
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
42
2
Demo Buffer Overflow
42
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
43
2
SQL Injection Cross-site scripting(XSS) Local and Remote file inclusion Web proxy
Web Attack
43
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
44
2
Boolean based blind Time based blind Error based UNION query Stacked queries Out of band
SQL Injection
44
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
45
2
Demo SQL Injection
45
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
46
2
Reflected Persistent DOM-based
Cross-site scripting(XSS)
46
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
47
2
Demo XSS
47
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
48
2
Các tài liệu tham khảo• Nghệ thuật tận dụng lỗi phần mềm – Nguyễn
Thành Nam
• Offensive Security - Penetration Testing with BackTrack (Lab Guide)
SECURITY BOOTCAMP 2012 | Make yourself to be an expert!
49
2
Thanks & Question
49