Upload
phan-khanh-toan
View
343
Download
3
Embed Size (px)
Citation preview
9/14/2015
1
Giảng viên: Lê Phúc
Email: [email protected]
Website: http://is.ptithcm.edu.vn/~lephuc
Buffer overflow
INT1303 Information security, PTITHCM, 2015
Buffer overflow
INT1303 Information security, PTITHCM, 2015
2
Buffer Overflow (overrun): A condition at an
interface under which more input can be
placed into a buffer or data holding area than
the capacity allocated, overwriting other
information. Attackers exploit such a
condition to crash a system or to insert
specially crafted code that allows them to gain
control of the system.
9/14/2015
2
Buffer overflow
INT1303 Information security, PTITHCM, 2015
3
Kết quả thực thi phụ thuộc vào dữ liệu tại vị trí
buffer[20], có thể:
Ghi chồng lên dữ liệu của user
Ghi chồng lên dữ liệu hệ thống
Không có gì xảy ra
int main(){
int buffer[10];
buffer[20] = 37;}
Tổ chức bộ nhớ máy tính
INT1303 Information security, PTITHCM, 2015
4
Text: phần bộ nhớ chứa lệnh
Data: phần chứa dữ liệu tĩnh
Heap: phần chứa dữ liệu
động
Stack: phần chứa các biến
thực thi chương trình, địa chỉ
quay về, …
9/14/2015
3
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
5
void func(int a, int b){
char buffer[10];
}
void main(){
func(1, 2);
}
Stack overflow
INT1303 Information security, PTITHCM, 2015
6
Là dạng phổ biến nhất của bufferoverflow
Dựa trên thủ tục gọi hàm của các ngôn ngữ
lập trình
9/14/2015
4
Stack overflow
INT1303 Information security, PTITHCM, 2015
7
Thủ tục gọi hàm (P gọi Q):
P lưu thông số hàm vào stack
Lưu địa chỉ quay về vào stack, thực thi Q
Q lưu frame pointer hiện hành vào stack
Q nạp giá trị mới cho frame pointer
Cấp phát vùng nhớ cho các biến cục bộ
Thực thi phần thân của hàm
Trả lại giá trị cũ cho frame pointer
Thực thi lệnh return
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
8
Tính toán
để phần
dữ liệu
tràn có ý
nghĩa.
9/14/2015
5
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
9
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
10
Dịch và chạy thử chương trình trên:
Enter Serial Number: nhập 1 chuỗi bất kỳ.
Chương trình thoát mà không nói năng gì
9/14/2015
6
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
11
Thực hiện lại chương trình, nhập một chuỗi ký
tự A dài bất kỳ, kết quả:
Đoán được gì từ báo lỗi này, biết mã ASCII của
ký tự A là 0x41
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
12
Dịch ngược phần mềm, được:
9/14/2015
7
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
13
Thực thi lại chương trình, nhập vào chuỗi ký tự với chiều dài tương tự, thay các ký tự cuối cùng là “@^P4” (có mã ASCII là 0x401034) nhận được:
Chú ý: bộ xử lý x86 dùng cách biểu diễn little-endian
Ví dụ buffer overflow
INT1303 Information security, PTITHCM, 2015
14
Chạy lại chương trình một lần nữa với các ký
tự cuối cùng thay bằng “4^P@”, chương trình
cho kết quả: Serial number is correct!
Một số hàm không an toàn trong C chuẩn:
gets(char *str)
sprintf(char *str, char *format, . ..)
strcat(char *dest, char *src)
strcpy(char *dest, char *src)
9/14/2015
8
Buffer overflow
INT1303 Information security, PTITHCM, 2015
15
Hacker không cần mã nguồn chương trình
Dùng công cụ dịch ngược (disassemble) để
tìm địa chỉ cần thực thi.
Trường hợp không tiếp cận được file thực thi
(thực hiện từ xa) thì thử nhiều lần để tìm địa
chỉ đúng
Shellcode
INT1303 Information security, PTITHCM, 2015
16
Shellcode = mã máy
Dùng shellcode kết hợp với buffer overflow để
thực thi thao tác bất kỳ.
Metasploit hỗ trợ phát triển shellcode cho mục
đích pentration testing và IDS signature
development
9/14/2015
9
Shellcode
INT1303 Information security, PTITHCM, 2015
17
Chương trình viết bằng C
Shellcode18
Đoạn hợp ngữ tương
đương
9/14/2015
10
Shellcode
INT1303 Information security, PTITHCM, 2015
19
Mã máy sinh ra
Shellcode
INT1303 Information security, PTITHCM, 2015
20
Một số lệnh hợp ngữ thường dùng
trên kiến trúc Intel x86
9/14/2015
11
Shellcode
INT1303 Information security, PTITHCM, 2015
21
Một số thanh ghi thường dùng
trên kiến trúc Intel x86
Giải pháp cho Buffer overflow
INT1303 Information security, PTITHCM, 2015
22
Compile-Time Defenses:
Chọn ngôn ngữ, dùng kỹ thuật lập trình an toàn
Dùng thư viện an toàn
Bảo vệ stack
Run-Time Defenses:
Bảo vệ executable address space (bit NX)
Address space layout randomization (ASLR)
Canary bit
9/14/2015
12
Các dạng buffer overflow khác
INT1303 Information security, PTITHCM, 2015
23
Replacement Stack Frame
Return to System Call
Heap Overflows
Global Data Area Overflows