« Home « Kết quả tìm kiếm

Kỹ thuật kiểm thử an ninh bảo mật dựa trên công nghệ FUZZING phân tán


Tóm tắt Xem thử

- Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 1 LỜI CAM ĐOAN Tôi xin cam đoan những gì mà tôi viết ra trong luận văn này là do sự tìm hiểu và nghiên cứu của bản thân.
- Hà Nội, ngày 02 tháng 9 năm 2013 Tác giả Lê Đức Anh Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 2 LỜI CẢM ƠN Trước tiên, tôi xin phép bày tỏ lòng biết ơn chân thành tới PGS.TS Huỳnh Quyết Thắng đã tận tình giúp đỡ tôi hoàn thành luận văn này.
- Hà Nội, ngày 02 tháng 9 năm 2013 Lê Đức Anh Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 3 MỤC LỤC LỜI CAM ĐOAN 1 LỜI CẢM ƠN 2 MỤC LỤC 3 DANH MỤC CÁC HÌNH VẼ 6 MỞ ĐẦU 8 A.
- Tình hình an ninh ứng dụng hiện nay 9 B.
- Giải pháp đảm bảo chất lượng phần mềm 12 C.
- Nhiệm vụ của đề tài 12 CHƯƠNG I: CƠ SỞ LÝ THUYẾT CHUNG 14 1.1.
- Tổng quan về lỗ hổng phần mềm 15 1.1.1.
- Lỗ hổng tràn bộ đệm 18 1.1.2.
- Lỗ hổng tràn số nguyên 19 1.1.3.
- Lỗ hổng format string 20 1.2.
- Kiểm thử bảo mật 22 1.2.1.
- Mô hình fuzzing cổ điển 29 2.4.
- Sinh dữ liệu 39 Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 4 2.8.2.
- Kết chương 43 CHƯƠNG III: XÂY DỰNG HỆ THỐNG FUZZING TRÌNH DUYỆT 44 3.1.
- Trình duyệt 45 3.1.1.
- Trình duyệt hoạt động như thế nào? 46 3.1.3.
- Các thành phần của trình duyệt 48 3.1.4.
- Trình duyệt: Đích ngắm số một của tội phạm mạng 50 3.2.
- Bài toán Fuzzing trình duyệt 52 3.2.1.
- Mô hình Fuzzing có thể đơn giản hơn, mang tính phân tán sẵn 52 3.2.2.
- Xuất hiện các lỗi liên quan tới xử lý bộ nhớ nguy hiểm khác 55 3.2.3.
- Dữ liệu Fuzzing khá đa dạng 57 3.2.4.
- Ý tưởng cải tiến cơ chế sinh dữ liệu Fuzzing 60 3.3.
- Đề xuất phương pháp xây dựng hệ thống Fuzzing trình duyệt 61 3.3.1.
- Thiết kế ngôn ngữ mô tả dữ liệu fuzzing 61 3.3.2.
- Thiết kế chức năng hệ thống 75 3.3.3.
- Thiết kế kiến trúc hệ thống 76 3.4.
- Một số hình ảnh về hệ thống 85 3.5.
- Khả năng phát hiện lỗ hổng 91 4.3.1.
- Với các lỗ hổng đã biết 91 4.3.2.
- Với các lỗ hổng chưa biết 93 4.4.
- Kết luận 97 Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 5 B.
- Hướng phát triển của đề tài 98 THAM KHẢO 99 Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 6 DANH MỤC CÁC HÌNH VẼ Hình 1: Thống kê sâu Conficker (Nguồn: Bkis Hình 2: Thống kê về vùng ảnh hưởng của Stuxnet (Nguồn: Threatpost.com Hình 3: Thống kê về số lỗ hổng trong 25 năm (nguồn: SourceFire Hình 4: Thống kê về phần mềm có nhiều lỗ hổng nguy hiểm trong 25 năm (nguồn: SourceFire Hình 5: Thống kê về loại của lỗ hổng nguy hiểm trong 25 năm (nguồn: SourceFire Hình 6: Các hàm Format Hình 7: Các tham số format Hình 8: Quét các dịch vụ đang chạy với Nmap Hình 9: Quét lỗ hổng Website với Acunetix Hình 10: Kiểm thử đâm xuyên với Metasploit Hình 11: Phần mềm Internet Explorer khi gặp lỗi xử lý Hình 12: GS Miller Hình 13: Mô hình Fuzzing cổ điển Hình 14: Mô hình Fuzzing thu gọn Hình 15: Lưu đồ hoạt động của quá trình Fuzzing Hình 16: Fuzzing với cơ chế phản hồi từ debugger Hình 17: Các mức của lỗ hổng phần mềm Hình 18: Một mô hình fuzzing phân tán Hình 19: Thống kê về thị phần các trình duyệt vào tháng 10/2012 (Nguồn: Wikimedia Hình 20: Một trang HTML đơn giản Hình 21: Trang HTML được hiển thị trên trình duyệt Internet Explorer Hình 22: Các thành phần cơ bản trong trình duyệt Hình 23: Luồng thực thi của một Rendering Engine đơn giản Hình 24: Số lỗ hổng trình duyệt trong giai đoạn Hình 25: Tự động tải lại trang Web qua mã Javascript Hình 26: Mô hình fuzzing không cần debugger Hình 27: Mô hình fuzzing không có debugger & server riêng Hình 28: Màn hình của Cross_Fuzz khi hoạt động Hình 29: File HTML demo lỗi CVE Hình 30: Sinh dữ liệu Fuzzing với Python Hình 31: Các bước hoạt động trong LangFuzz Hình 32: Các bước trong xây dựng hệ thống Hình 33: Dẫn hướng biên dịch trong zBNF Hình 34: Ví dụ sử dụng zBNF Hình 35: Luật sinh dữ liệu chưa được chuẩn hóa Hình 36: Các luật của dạng chuẩn Chomsky Hình 37: Các bước của quá trình biên dịch Hình 38: FSM của quá trình Tokenizing dữ liệu zBNF Hình 39: Lưu đồ lưu kết quả biên dịch Hình 40: Lưu đồ giải thuật không đệ quy sinh dữ liệu fuzzing Hình 41: Biểu đồ phân rã chức năng Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 7 Hình 42: Mô hình Fuzzing phân tán hay Fuzzing Cluster Hình 43: Mã các Exception và ý nghĩa Hình 44: Biên dịch dữ liệu zBNF Hình 45: Dữ liệu mẫu được sinh ra từ đặc tả zBNF Hình 46: Trang Web hiển thị quá trình Fuzzing Hình 47: Quá trình fuzzing ở phía agent Hình 48: Hiển thị các lỗi đã fuzz được trong Crash Bench Hình 49: Văn phạm dùng zBNF cho fuzz các tag Hình 50: Các trình duyệt và lỗi được lựa chọn để fuzz Hình 51: Cây DOM Hình 52: Văn phạm cho thí nghiệm đo hiệu suất Hình 53: Số liệu thu được từ thí nghiệm đo hiệu suất Hình 54: Sự biến đổi hiệu suất theo số máy tham gia Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 8 MỞ ĐẦU A.
- Tình hình an ninh ứng dụng hiện nay B.
- Giải pháp đảm bảo chất lượng phần mềm C.
- Nhiệm vụ của đề tài Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 9 A.
- Tình hình an ninh ứng dụng hiện nay Với sự phát triển như vũ bão của công nghệ thông tin và truyền thông hiện nay, chiếc máy tính đã trở nên thân thiết với chúng ta.
- Bạn tưởng tượng ra sao nếu một ngày tài khoản ngân hàng của mình bị rút một số tiền lớn một cách "đầy bí ẩn"? Bạn có biết kẻ nào đã gây ra các cuộc tấn công DDoS vào website của chính phủ Mĩ và Hàn Quốc mà báo chí đã tốn rất nhiều giấy mực trong năm 2009 chưa? Các phần mềm phổ biến như Windows Media Player, Winamp, các trình duyệt web Internet Explorer, Firefox.
- Hầu như ngày nào, trên các trang tin an ninh mạng cũng công bố lỗi của các phần mềm.
- Hãng phần mềm Microsoft hàng tháng đều phải công bố các bản vá cho sản phẩm của mình.
- Ngay trong Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 10 tháng 4/2010 vừa rồi, Microsoft tung ra 10 bản cập nhật an ninh, quá nửa trong số đó là các lỗi cực kì nguy hiểm.
- Lỗ hổng bảo mật bị khai thác ở đây phát sinh từ trong Windows RPC và Microsoft bít lại bằng bản vá khẩn cấp mang mã số MS08-67.
- Sâu Conficker rất phức tạp, nguy hiểm và đủ khả năng tạo mạng máy tính ma để tấn công hạ gục bất kỳ hệ thống máy tính nào chưa được vá lỗ hổng.
- Theo thống kê của trung tâm an ninh mạng Bkis, đã có rất nhiều biến thể của Conficker xuất hiện.
- Hình 1: Thống kê sâu Conficker (Nguồn: Bkis) Trong năm 2010, cả thế giới xôn xao về sâu Stuxnet, vũ khí mạng đầu tiên được biết đến.
- Stuxnet đã được xem là một trong những virus máy tính tinh vi nhất từng được tạo ra, đã lây nhiễm vào hàng trăm ngàn hệ thống máy tính nhờ khai thác 20 lỗ hổng xếp loại “zero-day”, vốn có mặt trong mọi phiên bản hệ điều hành Windows khi đó.
- Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 11 Stuxnet phá hoại các hệ thống SCADA dùng trong các nhà máy công nghiệp, mà trong trường hợp gần đây nhất là chiếm quyền kiểm soát hệ thống phát điện cho tổ hợp máy làm giàu uranium – nguyên liệu dùng trong công nghiệp nguyên tử tại Iran.
- Hình 2: Thống kê về vùng ảnh hưởng của Stuxnet (Nguồn: Threatpost.com) Tiếp đó, trong năm 2012, xuất hiện hàng loạt các vũ khí mạng khác như Gauss, Flame, Mini Flame.
- Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 12 Vấn đề an ninh mạng nói chung và an ninh ứng dụng nói chung đang đặt ra rất nhiều vấn đề nóng bỏng, đòi hỏi phải có sự quan tâm đúng mức từ phía người dùng, tổ chức, doanh nghiệp và cả từ phía nhà nước.
- Giải pháp đảm bảo chất lượng phần mềm Làm thế nào để hạn chế tối đa những lỗ hổng an ninh trong phần mềm ứng dụng? Từ góc nhìn của các công ti phát triển phần mềm đó là: phải đảm bảo tốt nhất chất lượng phần mềm trước khi tung ra thị trường.
- Hoạt động kiểm thử phần mềm là qui trình bắt buộc trong các dự án phát triển phần mềm.
- Với mục đích phát hiện lỗi, kiểm thử phần mềm thường phải trải qua các bước: tạo dữ liệu thử, thực thi phần mềm trên dữ liệu thử và quan sát kết quả nhận được.
- Bước tạo dữ liệu đóng vai trò quan trọng nhất, ảnh hưởng lớn nhất tới khả năng phát hiện lỗi.
- Tuy nhiên, việc kiểm thử phần mềm hiện nay đa phần được thực hiện một cách thủ công, không có hiệu quả cao trong việc phát hiện những lỗ hổng an ninh tiềm tàng.
- Với khả năng tự động hóa cao độ cùng với cơ chế phát hiện lỗ hổng hiệu quả, công nghệ này được rất nhiều hãng quan tâm sử dụng.
- Nhiệm vụ của đề tài Tên đề tài (tiếng Việt): Kiểm thử an toàn cho trình duyệt dựa trên kỹ thuật Fuzzing phân tán.
- Cơ sở khoa học và thực tiễn của đề tài: Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 13 Lỗ hổng phần mềm (software vulnerability) dùng để chỉ lỗi của phần mềm trong quá trình xử lý dữ liệu đầu vào.
- Do xử lý không tốt, một số lỗi có thể dẫn tới khả năng bị hacker khai thác, tấn công, thậm chí chiếm dụng toàn bộ hệ thống.
- Lỗ hổng phần mềm có thể phân ra rất nhiều loại, tuy nhiên, đối với phần mềm thông thường, các lỗ hổng liên quan tới bộ nhớ (như tràn bộ đệm, dangling pointer.
- Dữ liệu gây ra các lỗi liên quan tới bộ nhớ có thể có khuôn dạng, rất dễ nhận thấy như dữ liệu có độ dài lớn, số nguyên lớn…Tuy nhiên, trong một số trường hợp khó hơn, dữ liệu đó thực tế là không thể xác định được ngay từ ban đầu và cần phải nhiều phép thử để xác định.
- Để đảm bảo chất lượng phần mềm, ta cần một giải pháp để tự động sinh dữ liệu, kiểm soát hành vi của phần mềm trong khi xử lý dữ liệu đó.
- Kỹ thuật Fuzzing là kỹ thuật kiểm thử hộp đen có tính tự động hóa cao, có thể dùng để phát hiện các lỗ hổng an ninh có trong phần mềm.
- Nhiều lỗ hổng trong các phần mềm thông dụng như Google Chrome, Microsoft Word… đã được phát hiện dựa trên công nghệ này.
- Mục đích của đề tài (các kết quả cần đạt được): Xây dựng hệ thống kiểm thử trình duyệt dựa trên Fuzzing với các đặc trưng như sau.
- Xây dựng ngôn ngữ đặc tả dữ liệu fuzzing, giúp mô các loại dữ liệu chỉ có thể được mô tả bằng văn phạm phi ngữ cảnh (Context Free Grammar) như Javascript, CSS … Đây là đối tượng xử lý chính của các trình duyệt Web hiện nay.
- Phân tán xử lý Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 14 CHƯƠNG I: CƠ SỞ LÝ THUYẾT CHUNG 1.1.
- Tổng quan về lỗ hổng phần mềm 1.2.
- Kiểm thử bảo mật 1.3.
- Kết chương Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 15 1.1.
- Tổng quan về lỗ hổng phần mềm Thuật ngữ "lỗ hổng" (vulnerability[1]) được dùng ở đây để chỉ những lỗi lập trình có thể bị khai thác (exploitable), cho phép hacker lợi dụng để thực thi mã độc trên máy người sử dụng, đánh cắp thông tin quan trọng.
- Hình 3: Thống kê về số lỗ hổng trong 25 năm (nguồn: SourceFire) Qua 25 năm, số lỗ hổng phần mềm có chiều hướng gia tăng nhanh chóng trong giai đoạn với một chút tạm lắng trong năm 2003.
- Số lỗ hổng đạt đỉnh vào năm 2006, và liên tục giảm cho tới năm 2011.
- Tuy nhiên, cho đến cuối năm 2012, số lỗ hổng lại tiếp tục tăng trở lại.
- Phần mềm với nhiều lỗ hổng nhất là Linux Kernel với 937 lỗ hổng.
- Trình duyệt Chrome ‘vượt mặt’ Internet Explorer về số lượng lỗ hổng gặp phải.
- Học viên thực hiện: Lê Đức Anh Lớp 11BMTTT Khóa học 2011B 16 Hình 4: Thống kê về phần mềm có nhiều lỗ hổng nguy hiểm trong 25 năm (nguồn: SourceFire) Theo một thống kê khác về thành phần của các lỗi nguy hiểm (Common Vulnerability Scoring System (CVSS) lớn hơn 7), các lỗ hổng liên quan tới tràn bộ đệm chiếm phần lớn (23.
- Hình 5: Thống kê về loại của lỗ hổng nguy hiểm trong 25 năm (nguồn: SourceFire)

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt