12
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.

An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

Embed Size (px)

Citation preview

Page 1: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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.

Page 2: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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ề, …

Page 3: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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

Page 4: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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.

Page 5: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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ì

Page 6: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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:

Page 7: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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)

Page 8: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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

Page 9: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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

Page 10: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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

Page 11: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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

Page 12: An toàn và bảo mật hệ thống thông tin - C6: buffer overflow

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