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

Post on 16-Apr-2017

343 Views

Category:

Education

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

9/14/2015

1

Giảng viên: Lê Phúc

Email: lephuc@ptithcm.edu.vn

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

top related