Website có thể được xây dựng bằng nhiều ngôn ngữ lập trình khác nhauPHP, .NET, Java, Ruby on Rails….Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tương tá
Trang 1BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KĨ THUẬT MẬT MÃ
ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN
KĨ THUẬT LẬP TRÌNH
Đề Tài: Kiểm thử Fuzzing ứng dụng Web
Ngành: An toàn thông tin
Sinh viên thực hiện:
Lê Anh Đức Mã SV: AT180611
Tào Minh Đức Mã SV: AT180610
Mai Huy Việt Hoàng Mã SV: AT180619
Trần Minh Khánh Mã SV: AT180625
Lê Đăng Phương Mã SV: AT180638
Người hướng dẫn : TS Bùi Việt Thắng
Khoa An toàn thông tin - Học viện Kỹ thuật mật mã
Hà Nội, 2024
Trang 2Chương 1: Tổng quan về kiểm thử bảo mật website 10
4.2 Một số lỗ hổng bảo mật ứng dụng web chính 16
5.3 Tầm quan trọng của kỹ thuật fuzzing trong kiểm thử bảo mật web 25
Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật Website 27
1.3 Sinh dữ liệu fuzz hay còn gọi là tạo các ca kiểm thử 28
Trang 31.6 Đăng lỗi và phân tích 31
4.1 Phát hiện lỗ hổng bảo mật dựa trên đặc trưng 39
5 Các lỗ hổng được phát hiện bởi kiểm thử Fuzzing 42
Trang 5DANH MỤC HÌNH
Hình 2.4 Các giai đoạn trong SDLC mà các lỗ hổng phát hiện được 46
Hình 3.3 Luồng xử lý chức năng quét lỗ hổng website 52
Hình 3.6 Thành phần tấn công với lỗ hổng SQL injection 56
Hình 3.8 Thành phần tấn công với lỗ hổng File inclusion 57Hình 3.9 Thành phần phân tích với lỗ hổng SQL injection 58
Hình 3.11 Thành phần phân tích với lỗ hổng File inclusion 58
Hình 3.14 Các lỗ hổng SQL Injection được phát hiện 61
Hình 3.16 Các lỗ hổng File Inclusion được phát hiện 62
Trang 6DANH MỤC BẢN
Trang 7Bảng 1.1 Top 10 lỗ hổng website phổ biến nhất năm 2013 (OWASP) 16Bảng 2.1 Ví dụ trong fuzzing đường dẫn tương đương 38Bảng 2.2 Các thuộc tính và các thẻ đi kèm có chứa các URL của hệ thống 39
Bảng 2.4 Chèn dữ liệu fuzzing vào phương thức POST 42
Trang 8DANH MỤC TỪ VIẾT TẮT
Từ viết tắtNghĩa Tiếng Anh Nghĩa Tiếng Việt
HTTP Hypertext Transfer Protocol Giao thức truyền siêu văn bảnTCP Transmission Control Protocol Giao thức truyền TCP
HTML Hypertext Markup Language Ngôn ngữ đánh dấu siêu văn bảnXML Extensible Markup Language Ngôn ngữ đánh dấu mở rộng
CSRF Cross - Site Request Forgery Lỗ hổng CSRF
URL Uniform Resource Locator Địa chỉ tài nguyên
OWASP The Open Web Application
Security Project
Dự án nghiên cứu bảo mật ứngdụng web
GUI Graphical User Interface Giao diện đồ họa người dùng
Trang 10Kiểm thử fuzzing là một kỹ thuật kiểm thử tự động giúp phát hiện sớm các lỗhổng bảo mật tiềm ẩn trong ứng dụng web Các lỗ hổng như SQL injection, cross-sitescripting (XSS), và cross-site request forgery (CSRF) có thể dẫn đến hậu quả nghiêmtrọng như rò rỉ dữ liệu, lạm dụng thông tin cá nhân, chiếm đoạt tài khoản người dùng, vàgây mất an toàn cho ứng dụng Bằng cách cung cấp dữ liệu đầu vào ngẫu nhiên hoặc bấtthường vào chương trình, fuzzing kiểm tra phản ứng của ứng dụng để phát hiện các lỗihoặc lỗ hổng.
Cách thức kiểm thử fuzzing thường bao gồm việc tạo ra các dữ liệu đầu vào ngẫunhiên theo các mẫu hoặc quy tắc cụ thể, rồi quan sát cách ứng dụng phản hồi Nếu ứngdụng gặp sự cố hoặc xử lý không đúng cách với dữ liệu đầu vào này, công cụ fuzzing sẽghi lại lỗi hoặc lỗ hổng đó để đội ngũ phát triển có thể khắc phục
Việc thực hiện kiểm thử fuzzing một cách hệ thống và liên tục giúp đảm bảo rằngứng dụng web hoạt động ổn định, đáng tin cậy và an toàn Kỹ thuật fuzzing mang lạihiệu quả rất lớn cho việc kiểm thử cho các vấn đề về an ninh trong các phần mềm, hệthống máy tính và các ứng dụng dịch vụ Nhờ đó, fuzzing không chỉ bảo vệ người dùngkhỏi các rủi ro không mong muốn mà còn góp phần nâng cao uy tín và danh tiếng củadoanh nghiệp Hơn nữa, một ứng dụng web an toàn và chất lượng cao sẽ thúc đẩy sựphát triển bền vững của xã hội số hóa, tạo điều kiện cho các dịch vụ trực tuyến phát triển
và cải thiện chất lượng cuộc sống của người dân
Xuất phát từ thực tế trên,chúng em đã lựa chọn đề tài “Kiểm thử Fuzzing ứng dụng Web” thuộc phạm vi các vấn đề đã nêu để làm đề tài góp phần đáp ứng yêu cầu
nghiên cứu lý luận, phục vụ công tác đảm bảo an toàn, bảo mật website
Trang 113 Nhiệm vụ nghiên cứu
Nhiệm vụ nghiên cứu gồm các nội dung sau:
Nhiệm vụ 1: Tìm hiểu tổng quan về website, phương thức và mô hình hoạt độngcủa website
Nhiệm vụ 2: Nghiên cứu các lỗ hổng bảo mật website, cách thức tấn công và biệnpháp phòng chống
Nhiệm vụ 3: Tìm hiểu tổng quan về các phương pháp kiểm thử phần mềm nóichung và kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật website nói riêng
Nhiệm vụ 4: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật website dựa trên cơ sởcác nội dung nghiên cứu trước nhằm phát hiện lỗ hổng tồn tại website, đồng thời đưa racác khuyến nghị và cách thức khắc phục cho từng loại lỗ hổng
4 Đối tượng nghiên cứu
- Phương thức hoạt động của website
- Các loại lỗ hổng bảo mật website và những biện pháp phòng chống, khắc phụctương ứng
- Các phương pháp kiểm thử phần mềm, ứng dụng web
- Giải pháp kiểm tra và phát hiện lỗ hổng bảo mật website bằng kỹ thuật Fuzzing
- Phần mềm kiểm tra lỗ hổng bảo mật website
5 Phương pháp nghiên cứu
- Phương pháp nghiên cứu lý thuyết:
+ Tham khảo các chương trình, giáo trình đào tạo
+ Thu thập và phân tích các tài liệu, thông tin liên quan đến các kỹ thuật Fuzzingtrong bảo mật website
+ Tìm hiểu các kết quả nghiên cứu về các lỗ hổng bảo mật đã được công bố hiệnnay
Trang 12+ Sử dụng kết quả nghiên cứu từ dự án mở về bảo mật ứng dụng web củaOWASP.
- Phương pháp nghiên cứu thực nghiệm:
+ Tìm hiểu phần mềm kiểm thử bảo mật website hiện có tại Việt Nam cũng nhưtrên thế giới
+ Tiến hành cài đặt và đánh giá thử nghiệm chương trình demo qua từng giaiđoạn
6 Phạm vi nghiên cứu
- Không gian, thời gian: Trong phạm vi đề tài
- Kiến thức: Tổng quan bảo mật website và nghiên cứu kỹ thuật Fuzzing để xâydựng phần mềm kiểm thử web với phạm vi nằm trong 10 lỗ hổng nghiêm trọng nhấtđược OWASP công bố năm 2013
7 Bố cục của đồ án
Với giới hạn những vấn đề nghiên cứu trên, đồ án này được xây dựng với cấu trúcphân thành 3 chương:
Chương 1: Tổng quan về kiểm thử bảo mật website
Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật website
Chương 3: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật Website
Chương 1: Tổng quan về kiểm thử bảo mật website
Chương 1 tập trung vào tổng quan về kiểm thử bảo mật website Nó bao gồm giới thiệu về ứng dụng web, giải thích khái niệm ứng dụng web và các lỗ hổng phổ biến có thể ảnh hưởng đến tính bảo mật và hiệu suất của trang web Chương cũng đề cập đến kiểm thử phần mềm và kiểm thử web, mô tả các phương pháp và quy trình kiểm tra tính bảo mật của ứng dụng web Ngoài ra, chương phân loại các loại lỗ hổng bảo mật web khác nhau và giải thích các lỗ hổng chính trong ứng dụng web, bao gồm cách chúng hoạt động và bị khai thác Cuối cùng, chương trình bày về kỹ thuật fuzzing, cung cấp cái nhìn tổng quan về khái niệm, ưu nhược điểm, và tầm quan trọng của kỹ thuật này trong kiểm thử bảo mật web.
1 Giới thiệu về ứng dụng web
1.1 Khái niệm ứng dụng web
Trang 13Website là một tập hợp các trang web, thường chỉ nằm trong một tên miền hoặctên miền phụ trên World Wide Web của Internet Một trang web là tập tin HTML hoặcXHTML có thể truy nhập dùng giao thức HTTP Website có thể được xây dựng từ cáctệp tin HTML (website tĩnh) hoặc vận hành bằng các CMS chạy trên máy chủ (websiteđộng) Website có thể được xây dựng bằng nhiều ngôn ngữ lập trình khác nhau(PHP, NET, Java, Ruby on Rails…).
Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tương tácvới người dùng hay hệ thống khác
1.2.Mô tả hoạt động của website
Trình duyệt tạo một HTTP Request gửi máy chủ web thông qua các phương thứcGET, POST,… của giao thức HTTP, yêu cầu cung cấp hoặc xử lý tài nguyên thông tin.Địa chỉ của tài nguyên yêu cầu được xác định trong định dạng URL
Sau khi nhận được truy vấn từ trình khách, máy chủ web xác định sự tồn tại củatài nguyên được yêu cầu Nếu yêu cầu can thiệp các quyền truy cập của tài nguyên thìmáy chủ web từ chối truy vấn và trả về cảnh báo thích hợp Nếu yêu cầu là hợp lệ, lúcnày máy chủ có thể cho thực thi một chương trình được xây dựng từ ngôn ngữ như Perl,C/C++,… hoặc máy chủ yêu cầu bộ biên dịch thực thi các trang PHP, ASP, JSP,… theoyêu cầu của máy khách Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý,tính toán, kết nối đến cơ sở dữ liệu, lưu các thông tin do máy khách gửi đến
Khi máy chủ web định danh được tài nguyên, nó thực hiện hành động chỉ ra trongrequest method và tạo ra response trả về cho máy khách 1 luồng dữ liệu có định dạngtheo giao thức HTTP, nó gồm 2 phần:
- Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái trao đổigiữa trình duyệt và WebServer
- Body là phần nội dung dữ liệu mà Server gửi về Client, nó có thể là một fileHTML, một hình ảnh, một đoạn phim hay một văn bản bất kì
Khi giao dịch hoàn tất, máy chủ web thực hiện ghi vào tệp tin nhật ký mô tả giaodịch vừa thực hiện
Với firewall, luồng thông tin giữa máy chủ và máy khách là luồng thông tin hợp
lệ Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Web thì firewall không cònhữu dụng trong việc ngăn chặn hacker này
1.3.Lỗ hổng website
Lỗ hổng website là những điểm yếu của hệ thống website mà tin tặc có thể lợidụng để khai thác nhằm thu thập thông tin về hệ thống, tấn công lấy cắp thông tin, tấncông vào người dùng hệ thống hay tấn công chiếm quyền điều khiển hệ thống website
Trang 14Lỗ hổng website có thể xuất phát từ nhiều nguyên nhân, tuy nhiên chủ yếu là do 3nguyên nhân sau:
- Lỗi do người lập trình, phát triển ứng dụng tập trung vào chức năng và tốc độ màkhông quan tâm đến an toàn Ứng dụng không có thành phần kiểm tra hay kiểm tra yếucác dữ liệu đầu vào từ người dùng, từ đó, kẻ tấn công có thể lợi dụng lỗ hổng từ mãnguồn để khai thác và tấn công hệ thống
- Lỗi do người quản trị cấu hình hệ thống yếu, cấu hình hệ thống mặc định, tàikhoản mặc định, không thường xuyên cập nhật phiên bản mới cho các dịch vụ triển khaitrên hệ thống
- Lỗi nằm trong các giao thức, các nền tảng hay chuẩn xây dựng hệ thống đã đượccông khai Ví dụ như giao thức HTTP hoạt động theo chuẩn mô hình client/server đơngiản và khi xây dựng giao thức này người ta chưa quan tâm đến vấn đề bảo mật
2 Kiểm thử phần mềm
Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trình được thiết kế
và thực hiện nhằm đảm bảo cho hệ thống thực hiện theo đúng những yêu cầu mà chúng
đã được thiết kế và không thực hiện những điều không mong muốn Kiểm thử phần mềm
là một pha quan trọng trong quá trình xây dựng và phát triển hệ thống, chúng giúp chongười phát triển hệ thống và các khách hàng thấy được hệ thống mới đã đáp ứng các yêucầu đặt ra
Các phương pháp kiểm thử phần mềm có thể chia làm 3 loại:
- Kiểm thử hộp đen (Black box testing)
- Kiểm thử hộp trắng (White box testing)
- Kiểm thử hộp xám (Gray box testing)
2.1.Kiểm thử hộp đen
Là phương pháp kiểm thử được thực hiện mà không biết được cấu trúc và hành vibên trong của phần mềm, là cách kiểm thử mà hệ thống được xem như một chiếc hộpđen, không cách nào nhìn thấy phía bên trong cái hộp [12]
Một số phương pháp kiểm thử hộp đen:
- Kiểm thử fuzzing (Fuzz testing)
- Phân lớp tương đương (Equivalence partitioning)
- Phân tích giá trị biên (Boundary value analysis)
- Kiểm thử mọi cặp (All-pairs testing)
Trang 15- Kiểm thử thăm dò (Exploratory testing)
Một số phương pháp kiểm thử hộp trắng:
- Kiểm thử giao diện lập trình ứng dụng (API testing)
- Bao phủ mã lệnh (Code coverage)
- Các phương pháp gán lỗi (Fault injection)
- Các phương pháp kiểm thử hoán chuyển (Mutation testing methods)
- Kiểm thử tĩnh (Static testing)
Trang 16Hoàn thành quá trình kiểm thử của một hệ thống web trước khi đi vào hoạt động
là bước đầu để có được sự đảm bảo về khả năng các ứng dụng được xây dựng trên trangweb đang hoạt động đúng Nó giúp giải quyết các vấn đề như tính sẵn sàng, toàn vẹn,bảo mật của hệ thống web, đáp ứng cho số lượng ngày càng tăng cao người sử dụng vàkhả năng sống sót trong lưu lượng truy cập của người dùng Việc bỏ qua các vấn đềtrong kiểm thử trước khi đi vào hoạt động có thể ảnh hưởng đến khả năng hoạt động củachính website đó
Sau khi thực hiện kiểm thử web, kiểm thử viên có thể tìm thấy các sự cố trong hệthống trước khi chúng xảy ra trong môi trường người dùng
4 Các loại lỗ hổng bảo mật web
4.1 Phân loại lỗ hổng bảo mật web
Bảng 1.1 Top 10 lỗ hổng website phổ biến nhất năm 2013 (OWASP)
Top 10 OWASP 2013
1 Injection Sai sót trong nhập liệu Điều này xảy ra khi các thông
tin sai lệch được đưa vào cùng với các biến dữ liệu đầuvào như 1 phần của lệnh hay câu truy vấn
2 Broken Xác thực hay quản lý phiên thiếu chính xác Sơ hở này
Trang 173 Cross-Site
Scripting (XSS)
Sai sót trong kiểm duyệt nội dung đầu vào cũng dẫn đến rủi ro này Các dữ liệu bất hợp lệ được gửi đến trình duyệt mà không cần sự xác nhận thông thường
4 Insecure Direct
Object References
Điều này xảy ra thì nhà phát triển cho thấy có các thamchiếu trực tiếp đến một đối tượng nội bộ hay của ngườidùng khác Điều này cho phép kẻ tấn công có thể truy cập các tài liệu một cách trái phép
Misconfiguration
Một hệ thống bảo mật tốt là hệ thống triển khai cho khung ứng dụng, máy chủ ứng dụng, máy chủ cơ sở dữliệu, nền tảng… các phương pháp bảo mật cần thiết, thống nhất và liên kết với nhau
Trang 18Dựa trên các đặc trưng của từng loại lỗ hổng có các điểm giống nhau, có thể phânthành một số loại lỗ hổng website chính như sau:
- Injection: Các lỗ hổng do không kiểm soát chặt chẽ dữ liệu đầu vào giúp cho tintặc chèn các mã lệnh bất hợp pháp để thực thi như SQL Injection, XPath Injection,System Command Injection, LDAP Injection
- Client Side: Loại lỗ hổng nhằm mục đích tấn công vào người dùng, nó đặc biệtnguy hiểm với người quản trị Ví dụ như Cross Site Scripting (XSS), Cross-site RequestForgery (CSRF)
- Parameter Manipulation: Loại lỗ hổng khi kẻ tấn công sửa đổi các tham số trongyêu cầu gửi tới máy chủ Một số lỗ hổng như Cookie Manipulation, HTTP Form FieldManipulation,…
- Misconfiguration: Các lỗ hổng do người lập trình và quản trị cấu hình hệ thốngchưa an toàn như phân quyền không chính xác, cấu hình tài khoản, mật khẩu mặc định
- Information Disclosure: Các lỗ hổng làm lộ lọt các thông tin quan trọng của hệthống, tin tặc có thể lợi dụng điều này để biết thông tin hệ thống và thực hiện các cuộctấn công tiếp theo Ví dụ như: Path Traversal, Predict Resource Location, DirectoryListing
4.2 Một số lỗ hổng bảo mật ứng dụng web chính
Mỗi lỗ hổng bảo mật sẽ có cách khai thác và phát hiện khác nhau Dưới đây làmột số lỗ hổng chính và biện pháp để phát hiện, khắc phục và phòng tránh các lỗ hổngđang tồn tại trên hệ thống
4.2.1 Lỗ hổng injection
Khái quát
Lỗ hổng injection là loại lỗ hổng liên quan tới việc thao tác với câu truy vấnCSDL, cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vàotrong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về để thựchiện thay đổi cấu trúc câu truy vấn SQL và thực thi chúng một cách bất hợp pháp [8]
Sql Injection có thể cho phép những kẻ tấn công thực hiện các thao tác, thêm, sửa,xóa… trên cơ sở dữ liệu của ứng dụng Lỗi này thường xảy ra trên các ứng dụng web códữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL,Oracle, DB2, Sysbase hay dữ liệu XML
Nguyên nhân chủ yếu là do người lập trình không kiểm soát hoặc có kiểm soátchưa tốt dữ liệu nhập vào, tin tặc dễ dàng có thể vượt qua để chèn các câu lệnh truy vấn
Trang 19như SQL, Xquery,… khi chèn thành công tin tặc có thể đọc, thêm, sửa, xóa thông tintrong CSDL của hệ thống.
Ví dụ: Giả sử ứng dụng web sử dụng câu truy vấn sau để kiểm tra đăng nhậpngười dùng:
SELECT * FROM user WHERE username= “Username” AND password=
“Password”;
Người tấn công sử dụng ký tự đặc biệt SQL để thâm nhập vào hệ thống như sau:
Username: admin” or 1 Password:
-Ta được câu truy vấn SQL như sau:
SELECT * FROM user WHERE username= “admin” or 1 - AND password=
“”;
Điều kiện sau WHERE sẽ trở nên luôn đúng và kết quả là hệ quản trị CSDL sẽ trả
về tất cả các bản ghi có trong bảng users Vì vậy, câu lệnh trên cho phép đăng nhập vào
hệ thống mà không đòi hỏi password
Cơ chế phát hiện
Có thể phát hiện các lỗi SQL bằng 4 phương pháp chính:
- Dựa trên các thông báo lỗi từ hệ thống, từ CSDL của hệ thống Ví dụ như khithêm dấu nháy đơn ' sau một biến truy vấn, ta nhận được thông báo lỗi từ SQL như dướiđây, điều đó chứng tỏ có thể khai thác lỗ hổng SQL Injection
You have an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near '' ' '' at line 1
- Dựa trên kỹ thuật boolean based, kiểm tra kết quả trả về khác nhau của các câutruy vấn khác nhau để xác định câu truy vấn sau khi được chèn có được thực thi haykhông, từ đó xác định lỗi hay không lỗi SQL, ví dụ như khi chèn or 1=1, or 1=2 hay and1=1, and 1=0,
- Dựa trên kỹ thuật nối câu truy vấn, kỹ thuật này nhằm xác định các thông tin vềcác trường thông tin của cơ sở dữ liệu Ví dụ như UNION query
- Dựa trên kỹ thuật time based: là kỹ thuật sử dụng các hàm thao tác với thời giantrong hệ quản trị CSDL và kiểm tra timeout của kết quả trả về có phù hợp với truy vấnsau khi chèn hay không Ví dụ như sleep(),
Trang 20Cách thức phòng tránh
Lỗ hổng Injection xảy ra do các biến được nhập vào từ người dùng không đượckiểm soát chặt chẽ trước khi xây dựng câu truy vấn tới CSDL Đó chính là nguyên nhânchung nhất của các lỗ hổng dạng Injection
Lỗ hổng Injection xảy ra khi có kết hợp cả 2 điều kiện:
- Có sự truy vấn tới CSDL
- Câu truy vấn chưa được kiểm soát chặt chẽ
Vì vậy để phòng chống được lỗ hổng SQL Injection phải bảo vệ các câu truy vấnSQL bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượngRequest Dưới đây là một số biện pháp phòng chống:
- Những kí tự nên được mã hoá trên địa chỉ URL trước khi được sử dụng
- Không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thếnhững thông báo lỗi bằng 1 trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứngdụng
- Đối với giá trị numeric, thực hiện chuyển nó sang integer trước khi thực thi câutruy vấnSQL, hoặc dùng ISNUMERIC để chắc chắn là một số integer
- Dùng thuật toán để mã hoá dữ liệu trong database
- Kiểm tra và lọc các giá trị nhập vào của người dùng, loại bỏ những kí tự đặc biệt
- Cuối cùng, để hạn chế thiệt hại do tấn công SQL Injection, nên kiểm soát chặtchẽ và giới hạn quyền xử lí dữ liệu của tài khoản người dùng mà ứng dụng web đang sửdụng Các ứng dụng thông thường nên tránh dùng các quyền như dbo hay sa Quyềncàng hạn chế, thiệt hại càng ít
4.2.2 Lỗ hổng Cross Site Script
Khái quát
Cross-site Scripting (XSS) là một lỗ hổng ứng dụng web trong đó một người dùngcuối có thể tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP )những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho nhữngngười sử dụng khác[4]
Hiện nay có 3 loại tấn công cross site scripting phổ biến:
- Stored or Persistent vulnerability: Là lỗ hổng XSS mà đoạn mã chèn thêm vàođược lưu trữ trên server, như trong CSDL dưới dạng các comment trong blog, messagetrong forum hoặc các visitor log
Trang 21- Non-Persistent or Reflected Vulnerability: Tương tự như Stored XSS nhưngđoạn mã khai thác sẽ không được lưu trữ trên server, nó thường được thực hiện trênURL hay trong các form truyền dữ liệu.
- Dom-Based XSS là một dạng tấn công XSS làm thay đổi cấu trúc của trang webbằng cách thay đổi cấu trúc HTML Đối với loại tấn công này, hacker sẽ chèn các đoạnscript nhằm thay đổi giao diện mặc định của trang web thành một giao diện giả
XSS đang nhanh chóng trở thành một trong những lỗ hổng phổ biến nhất của cácứng dụng web
Ví dụ: Ta có một đoạn code cho phép hiển thị tên người dùng như sau:
Hình 1 4 Hộp thoại lỗ hổng XSS chứa cookie
Cơ chế phát hiện
Tương tự như cơ chế hoạt động của XSS, một biến có tồn tại lỗ hổng XSS nếunhư giá trị của biến đó được được thay đổi bằng các đoạn mã HTML hay script, nếu nóđược hiện ra trên trình duyệt hoặc trong mã nguồn HTML
Để phát hiện lỗi này chúng ta sẽ thực hiện gửi một chữ ký kèm những đoạn mãđặc biệt tới hệ thống như:
Trang 22<div style="behaviour:URL([link to code]);">
<div style="binding: URL([link to code]);">
<div style="width: expression([code]);">
Thực hiện việc phân tích mã HTML, nếu tìm thấy sự xuất hiện của các đoạn mã
đó trong mã HTML thì chứng tỏ hệ thống đã mắc lỗi XSS
Cách thức phòng tránh
XSS là một lỗ hổng rất phổ biến và rất nguy hiểm đối với người dùng hệ thống.Tuy nhiên việc phòng tránh lỗi XSS lại hết sức đơn giản Đối với các dữ liệu được nhậntừ người dùng, khi thực hiện việc hiển thị cần encode tất cả các giá trị được in ra Khi đóđoạn mã độc sẽ không thể thực thi được Trong các ngôn ngữ lập trình đều có các hàmhỗ trợ việc mã hóa dữ liệu này Ví dụ:
- Trong ngôn ngữ PHP có hàm htmlentities(), htmlspecialchars(), Hàm nàychuyển các thể html trong chuỗi truyền vào sang dạng thực thể của chúng
4.2.3 Lỗ hổng File Inclusion
Khái quát
Lỗ hổng File Inclusion là loại lỗ hổng xảy ra khi hệ thống thực hiện việc thao tácvới tệp tin Khi hệ thống không có quá trình kiểm duyệt đoạn mã chèn vào chặt chẽ, tintặc có thể lấy các giá trị của các biến Post, Get, Headers từ người dùng gửi lên để thaotác với CSDL Bằng việc khai thác lỗ hổng này tin tặc có thể thực hiện việc tải cácbackdoor lên hệ thống và đọc các tệp tin của hệ thống
File Inclusion được chia làm 2 loại chính là:
- Local File Inclusion: Thực hiện khi các tệp tin mà hệ thống thao tác là các tệp tincủa local và không cho phép việc chèn vào hệ thống các đoạn mã
- Remote File Inclusion: Cho phép việc chèn các đoạn mã từ một hệ thống từ xa
và thực hiện trên web server
Trang 23Ví dụ: Giả sử website lấy trang mà người dùng yêu cầu theo tên file Ta có đoạn
mã như sau:
<?php $file = $_GET['page']; //Trang web sẽ hiển thị ?>
Với đường dẫn truy cập ban đầu như sau:
Hình 1.5 Kết quả sau tấn công lỗ hổng LFI
Cơ chế phát hiện
Cơ chế phát hiện lỗi này là chúng ta sẽ thực hiện đưa các giá trị đường dẫn củacác tệp tin quan trọng của hệ thống, thực hiện phân tích mã trạng thái và kết quả trả vềđể đánh giá website sự tồn tại lỗ hổng Ví dụ:
/ / /etc/passwd / / /etc/shadow / /apache/logs/access.log
Trang 24Việc chèn số các “ /” là do chương trình phát hiện sẽ tự động thêm vào.
Cách thức phòng tránh
File Inclusion là một lỗ hổng cực kỳ nghiêm trọng Lỗ hổng này xảy ra khi việckiểm tra đầu vào không được chú trọng Vì vậy, người lập trình cần quản lý và kiểmduyệt chặt chẽ các giá trị trên các biến mà người dùng truyền dữ liệu vào Một số biệnpháp như:
- Chỉ chấp nhận kí tự và số cho tên tệp tin được gọi Lọc và chặn toàn bộ kí tự đặcbiệt không được sử dụng
- Giới hạn API cho phép việc gọi các tệp tin từ một chỉ mục xác định nhằm tránhdirectory traversal
- Không sử dụng các dữ liệu được cung cấp từ người dùng, các giá trị này cầnđược đặt tĩnh trong code của chương trình
- Hạn chế tới mức tối thiểu phải sử dụng các biến từ “User Input” để đưa vào hàminclude hay eval
Tấn công File Inclusion có thể nguy hiểm hơn cả SQL Injection do đó thực sự cầnthiết phải có những biện pháp khắc phục lỗ hổng này Kiểm tra dữ liệu đầu vào hợp lý làchìa khóa để giải quyết vấn đề
4.2.4 Lỗ hổng do cấu hình mặc định
Khái quát
Là những lỗi thuộc về người lập trình hay người quản trị cấu hình một số yếu tốmặc định hay đơn giản giúp cho kẻ tấn công có thể dễ dàng đoán ra như cấu hình đườngdẫn mặc định của hệ thống, không cấu hình hạn chế truy nhập, hay những không thayđổi tài khoản, mật khẩu truy cập mặc định,
Ví dụ: Một website có đường dẫn mặc định tới trang quản trị như:
http://www.domain.com/administrator/login.phphttp://www.domain.com/manager/login.phphttp://www.domain.com/admincp /login.php
Hay trang quản trị để tài khoản và mật khẩu mặc định như hình:
Trang 25Hình 1.6 Minh họa lỗ hổng cấu hình mặc định
Cơ chế phát hiện
Để phát hiện các lỗi cấu hình chúng ta cần thực hiện truy cập đến các trang cấuhình mặc định và kiểm tra mã trạng thái trả về cùng với việc kiểm tra mã HTML của hệthống
Cách thức phòng tránh
Để khắc phục lỗ hổng này rất đơn giản, một số biện pháp để phòng tránh lỗ hổngnày như sau:
- Cấu hình phân quyền và cấm truy cập tới các đường dẫn chứa các tệp tin cấuhình của hệ thống
- Đặt tài khoản, mật khẩu đủ dài và mạnh, sửa đổi tên đường dẫn tới trang quản trịlàm tin tặc không thể đoán hay thực hiện tấn công vét cạn
- Hạn chế truy cập dựa trên địa chỉ và các thông tin của người sử dụng
5 Kỹ thuật fuzzing
5.1 Khái niệm
Trong lĩnh vực an ninh ứng dụng, Fuzzing hay kiểm thử mờ (fuzz testing) là một kỹthuật thuộc kiểm thử hộp đen (black box), phát hiện lỗi của phần mềm bằng cách tựđộng hoặc bán tự động cung cấp dữ liệu đầu vào không hợp lệ, không mong đợi hayngẫu nhiên vào phần mềm Phần mềm sẽ được giám sát và ghi lại các trường hợp ngoại
lệ như lỗi mã không được thực thi, tài nguyên thất thoát, nhằm xác định các hành vibất thường, phát hiện các lỗ hổng bảo mật tiềm ẩn của phần mềm Dữ liệu không mong
Trang 26đợi thường là các giá trị vượt quá biên, các giá trị đặc biệt có ảnh hưởng tới phần xử lý,hiển thị của chương trình [13]
Các chương trình và framework được dùng để tạo ra kỹ thuật fuzzing hoặc thực hiệnfuzzing được gọi là Fuzzer Tùy theo môi trường và ứng dụng cần kiểm tra mà người ta
có các phương án khác nhau để xây dựng Fuzzer
Fuzzing là một trong những kỹ thuật của kiểm thử hộp đen, không đòi hỏi quyền truycập vào mã nguồn Do đó, nó có khả năng tìm thấy lỗi một cách nhanh chóng và tránhđược việc phải xem mã nguồn
Fuzzing cũng giống như các kỹ thuật kiểm thử phần mềm, nhưng nó được sử dụng đểphát hiện ra một loạt các vấn đề của web như: Cross Site Scripting, tràn bộ đệm, chèncâu truy vấn (SQL Injection),
5.2 Ưu nhược điểm của kiểm thử fuzzing
5.2.1 Ưu điểm
Như bất kỳ kỹ thuật kiểm thử an toàn nào khác, kiểm thử Fuzzing có ưu và nhượcđiểm của nó Một trong những điểm mạnh của kiểm thử Fuzzing là các loại điểm yếu antoàn trong mã nguồn mà nó xác định được thường rất nghiêm trọng trong ứng dụng Vídụ, như tràn bộ đệm, lỗi số học số nguyên hay SQL injection, đều là những lỗ hổng chophép một người sử dụng ác ý có thể nắm quyền kiểm soát hoàn toàn của một ứng dụngError: Reference source not found
Những ưu điểm của kiểm thử fuzzing:
- Kết quả sử dụng kiểm thử Fuzzing hiệu quả hơn khi sử dụng các phương phápkiểm thử khác Kiểm thử Fuzzing tập trung vào việc sử dụng các giá trị đặc biệt như làđầu vào cho ứng dụng được kiểm thử, do đó giúp việc phát hiện các lỗi quan trọng mà
có thể không được phát hiện bằng phương pháp tiếp cận dựa trên mô hình
- Kiểm thử Fuzzing chỉ theo dõi các trường hợp mà kết quả trả về có sự bấtthường hay hành vi không mong muốn Điều này giúp nó có khả năng chạy hàng nghìntrường hợp thử nghiệm
- Là một loại kiểm thử hộp đen nên có thể thực hiện kiểm thử cho các ứng dụngkhông biết mã nguồn bên trong, vì vậy nó thường tìm ra được các lỗ hổng nghiêm trọng
và hầu hết là những lỗ hổng mà tin tặc thường khai thác
- Các quá trình Fuzzing thường có lượng đầu vào thử nghiệm rất lớn, độ bao phủrộng nên hiệu quả trong việc tìm kiếm các lỗ hổng
5.2.2 Nhược điểm
Trang 27Bên cạnh những ưu điểm giúp cho fuzzing được trở nên ưa chuộng thì nó cũng tồntại những hạn chế:
- Khó có thể kiểm thử toàn diện và tìm thấy được tất cả các lỗi trong một chươngtrình lớn, những lỗi đòi hỏi kiểm thử viên phải thực hiện phân tích tĩnh
- Fuzzing nằm trong phương pháp kiểm thử hộp đen nên không cung cấp nhiềukiến thức về hoạt động nội bộ của các phần mềm, vì vậy khó có thể tìm hiểu triệt để màkhông hiểu chi tiết
- Với chương trình có các đầu vào phức tạp để tìm ra các lỗi đòi hỏi phải tốn nhiềuthời gian, bởi với mỗi biến đang fuzzing phải thử N vector fuzz và phải tạo ra một fuzzerđủ thông minh để phân tích các kết quả trả về
- Fuzzing hoạt động không hiệu quả trong các chương trình có các kết quả trả vềkhông có các mã lỗi hay các dấu hiệu bất thường
5.3 Tầm quan trọng của kỹ thuật fuzzing trong kiểm thử bảo mật web
Fuzzing là một phương pháp kiểm thử bảo mật quan trọng và hiệu quả trong lĩnh vựckiểm thử ứng dụng web, đóng vai trò quan trọng trong việc đảm bảo an toàn và chấtlượng của ứng dụng Phương pháp này dựa trên việc cung cấp đầu vào bất thường hoặckhông mong muốn cho ứng dụng web và theo dõi phản hồi của ứng dụng để phát hiệncác lỗ hổng tiềm ẩn Với khả năng kiểm thử rộng, fuzzing có thể áp dụng cho nhiềuthành phần của ứng dụng web, bao gồm giao diện người dùng, API, và cơ sở dữ liệu.Điều này mang lại sự đánh giá toàn diện về mức độ an toàn của ứng dụng
Một trong những lợi ích quan trọng của fuzzing là khả năng tự động hóa quá trìnhkiểm thử và tích hợp vào quy trình phát triển liên tục (CI/CD) Nhờ vậy, fuzzing giúpphát hiện lỗ hổng sớm hơn, cải thiện chất lượng phần mềm ngay từ giai đoạn phát triển,
và giảm thiểu rủi ro an ninh trong các giai đoạn triển khai và bảo trì
Phương pháp fuzzing cũng cho phép thử nghiệm nhiều phương pháp tấn công khácnhau, từ các kỹ thuật tấn công đã biết đến các phương pháp mới nổi Điều này giúp tìm
ra các lỗ hổng zero-day, tức là những lỗ hổng chưa được công bố trước đó, nâng cao tính
an toàn cho ứng dụng và người dùng
Khi phát hiện và sửa chữa các lỗ hổng bảo mật sớm thông qua fuzzing, nguy cơ tấncông thực sự có thể giảm đáng kể, giúp bảo vệ ứng dụng và người dùng khỏi các mối đedọa bảo mật tiềm ẩn Điều này không chỉ tăng cường an ninh cho ứng dụng mà còn cảithiện chất lượng tổng thể của nó, bao gồm hiệu suất và tính ổn định Do đó, fuzzing làmột công cụ quan trọng trong kiểm thử bảo mật web, góp phần tạo ra những ứng dụng
an toàn và đáng tin cậy cho người dùng
Trang 286 Tổng kết chương 1
Chương 1 cung cấp cái nhìn tổng quan về kiểm thử bảo mật website, bao gồm giớithiệu về ứng dụng web, kiểm thử phần mềm, kiểm thử web và các loại lỗ hổng bảo mật.Đầu tiên, chương trình bày về khái niệm ứng dụng web, phân loại và các lỗ hổng tiềm ẩn
có thể ảnh hưởng đến bảo mật của ứng dụng
Kiểm thử phần mềm và kiểm thử web được thảo luận như là những phương pháp cơbản để đảm bảo chất lượng và tính toàn vẹn của các ứng dụng web Kiểm thử web baogồm các kỹ thuật và công cụ khác nhau nhằm kiểm tra chức năng, hiệu suất và tính bảomật của ứng dụng
Phần tiếp theo tập trung vào việc phân loại các lỗ hổng bảo mật web, bao gồm một sốlỗ hổng chính như SQL Injection, Cross-Site Scripting (XSS), và các lỗ hổng khác Kiếnthức về những lỗ hổng này là cần thiết để phát triển các chiến lược kiểm thử và bảo mậthiệu quả
Cuối cùng, chương trình bày khái niệm kỹ thuật fuzzing, ưu và nhược điểm của kiểmthử fuzzing, và tầm quan trọng của kỹ thuật này trong kiểm thử bảo mật web Fuzzing làmột phương pháp mạnh mẽ để phát hiện lỗ hổng bảo mật thông qua việc tạo ra cáctrường hợp kiểm thử đa dạng và bất ngờ
Tổng kết lại, Chương 1 cung cấp một nền tảng lý thuyết quan trọng về kiểm thử bảomật web, bao gồm kiến thức về ứng dụng web, lỗ hổng bảo mật, và phương pháp kiểmthử và fuzzing Những kiến thức này là cần thiết cho việc xây dựng và triển khai các giảipháp kiểm thử bảo mật web hiệu quả
Trang 29Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật
Website
Chương 2 tập trung vào kỹ thuật fuzzing trong kiểm tra lỗ hổng bảo mật website Chương mô tả các giai đoạn của kiểm thử fuzzing, bao gồm xác định mục tiêu, đầu vào, sinh dữ liệu fuzz, thực thi và giám sát dữ liệu fuzz, cũng như đăng lỗi và phân tích Tiếp theo là thu thập các điểm đầu vào thông qua web crawler, quy trình thu thập và trích xuất URL từ mã HTTP Chương cũng giải thích nguyên lý chèn dữ liệu fuzz thông qua phương thức GET và POST Ngoài ra, chương cung cấp các phương pháp phát hiện lỗ hổng bảo mật dựa trên đặc trưng và các lỗ hổng được phát hiện bởi kiểm thử fuzzing
1 Các giai đoạn trong kiểm thử Fuzzing
Tùy thuộc vào các nhân tố khác nhau, việc lựa chọn cách tiếp cận Fuzzing có thểkhác nhau Tuy nhiên, về cơ bản Fuzzing có các giai đoạn như sau :
1.1.Xác định mục tiêu (Identify target)
Tùy theo mục đích, tác động, nguy cơ và người dùng mà ở giai đoạn này các mụctiêu khác nhau có thể được lựa chọn Hiện nay, các mục tiêu được đánh giá có nguy cơrủi ro cao:
-Các ứng dụng như nhận dữ liệu qua mạng - có khả năng bị tổn hại từ xa, tạo điềukiện thực thi mã từ xa, để tạo ra các chương trình độc hại (virus, worm ,,,)
- Các ứng dụng chạy ở mức ưu đãi cao hơn so với một người sử dụng - những điều
đó có tiềm năng để cho phép kẻ tấn công thực thi mã ở mức độ đặc quyền cao hơn củachính họ, được gọi là leo thang đặc quyền
- Các ứng dụng xử lý thông tin có giá trị - một kẻ tấn công có thể phá vỡ các điềukhiển và vi phạm sự toàn vẹn, tin cậy hoặc sẵn sàng có của dữ liệu có giá trị
- Các ứng dụng xử lý thông tin cá nhân – một kẻ tấn công có thể phá vỡ các điềukhiển và vi phạm sự toàn vẹn, tin cậy hoặc sẵn sang có của dữ liệu cá nhân có giátrị(Windows Explorer, Window Registry, Media files, Office Documents, Configurationfiles)
Trang 30Hình 2.1 Các giai đoạn trong kiểm thử fuzz 1.2 Xác định đầu vào
Đầu vào ứng dụng có thể có nhiều hình thức, hoặc từ xa (mạng traffic), hoặccục bộ (các file, các khóa registry, các biến môi trường, đối số dòng lệnh, tên đốitượng …) Một số fuzzer đã tiến hóa để phục vụ cho nhiều loại đầu vào Các lớp đầuvào ứng với fuzzers phổ biến như sau:
1 Command line arguments
2 Environment variables (ShareFuzz)
3 Web applications (WebFuzz)
4 File formats (FileFuzz)
5 Network protocols (SPIKE)
6 Memory
7 COM objects (COMRaider)
8 Inter Process Communication
1.3 Sinh dữ liệu fuzz hay còn gọi là tạo các ca kiểm thử
Trang 31Mục đích của một bộ kiểm thử Fuzz là để kiểm tra sự tồn tại của lỗ hổng bảomật có thể truy cập thông qua đầu vào trong các ứng dụng phần mềm Do đó dữ liệusinh ra trong kiểm thử Fuzz phải đạt được những yêu cầu sau:
- Tạo ra dữ liệu thử nghiệm ở các mức độ khác nhau, đảm bảo thỏa mãn điềukiện đầu vào của ứng dụng
- Dữ liệu đầu vào được tạo ra có thể có dạng tệp tin nhị phân (Binary files), tệptin văn bản (Text files) được sử dụng lặp đi lặp lại trong quá trình kiểm tra
- Việc tạo ra dữ liệu kiểm thử với nhiều ca kiểm thử lặp đi lặp lại để bắt lỗi khichạy chương trình
Bộ kiểm thử Fuzz được phân loại dựa trên hai tiêu chí khác nhau:
- Vector đơn ánh (Injection vector) hoặc vector tấn công (Attack vector)
Các bộ kiểm thử Fuzz có thể được chia dựa trên các lĩnh vực ứng dụng màchúng sử dụng, nhưng về cơ bản theo hướng vector tấn công Đối với bộ kiểm thửFuzz theo loai vector đơn ánh nó sẽ thực hiện kiểm thử hộp đen thông qua viêc nhậpdữ liệu đầu vào Các bộ kiểm thử Fuzz loại này dùng để kiểm thử phía client và môt
số khác để kiểm thử phía server Đối với bộ kiểm thử Fuzz kiểm thử phı́a client vớigiao thức HTTP hoặc TLS sẽ nhằm mục tiêu vào các trình duyệt Đối với các bộ kiểmthử Fuzz kiểm thử phı́a Server sẽ thực hiện kiểm thử trên máy chủ Web Server Một
số bộ kiểm thử Fuzz khác hỗ trợ kiểm thử trên cả hai Server và Client, hoặc thậm chícả hai (dùng để phân tı́ch proxy hoặc phân tích lưu lượng)
- Kỹ thuật ca kiểm thử
Bộ kiểm thử Fuzz cũng có thể được phân loại dựa trên cá c ca kiểm thử phứctạp Các ca kiểm thử được tạo ra trong kiểm thử Fuzz với mục tiêu tạo ra các lớp khácnhau trong phần mềm, và nhờ đó có thể thâm nhập vào các lớp logic khác nhau trongứng dụng
Bộ kiểm thử Fuzz mà thay đổi các giá trị khác nhau trong các giao thức sẽ kiểmtra được các dạng lỗ hổng như là các vấn đề về số nguyên Khi cấu trúc thông điệp bịbiến đổi di ̣thường, các bộ kiểm thử Fuzz sẽ tìm thấy sai sót trong phân tích cú phápthông điệp (ví dụ như trong đặc tả XML và ASN.1)
Một số phương pháp phân loại dựa trên sự phức tạp của ca kiểm thử trong một
bộ kiểm thử Fuzz:
- Bộ kiểm thử Fuzz dựa trên mẫu tĩnh và ngẫu nhiên (Static and randomtemplate-based Fuzzer): thường chỉ kiểm tra các giao thức đáp ứng những yêu cầuđơn giản hoặc các định dạng tập tin
- Bộ kiểm thử Fuzz dựa trên khối (Block-based Fuzzer): sẽ thực hiện cấu trúc
cơ bản cho một giao thức đáp ứng yêu cầu đơn giản và có thể chứa một số chức năngđộng thô sơ như tính toán về kiểm tra tổng và chiều dài các giá trị (lengthvalues)
Trang 32- Bộ kiểm thử Fuzz dựa trên tiến hóa hoặc bộ sinh động (Dynamic generation orevolution based Fuzzer): những bộ kiểm thử Fuzz này không nhất thiết phải hiểuđược giao thức hoặc định dạng tập tin đang được làm mờ, nhưng có thể tìm hiểu nódựa trên một vòng phản hồi từ hệ thống mục tiêu
- Bộ kiểm thử Fuzz dựa trên mô phỏng hoặc dựa trên mô hình (Model-based orsimulation-based Fuzzer): những bộ kiểm thử Fuzz này thực hiện kiểm thử giao diệnhoặc thông qua một mô hình hay là một mô phỏng, hoặc nó cũng có thể được triểnkhai đầy đủ theo một giao thức nào đó Không chỉ có cấu trúc thông điệp được làmmờ, mà những thông điệp bất thường trong chuỗi được tạo ra cũng có thể được làmmờ
Hiệu quả của kiểm thử Fuzz phu ̣thuộc vào:
- Độ bao phủ không gian đầu vào: Không gian đầu vào của giao diện kiểm thửcàng tốt thı̀ hiêu quả đạt càng cao
- Chất lượng của dữ liệu kiểm thử: Các đầu vào đôc hai tiêu biểu và di ̣hình sẽlàm tăng khả năng kiểm tra đối với các yếu tố hoăc cấu trúc trong định nghĩa giaodiện
1.4 Thực thi dữ liệu fuzz
Trong giai đoạn này, các bộ kiểm thử Fuzz thực hiện phần lớn các chức năngcủa các cách tiếp cận nêu trên nhưng bằng các giải pháp đặc biệt để tự động hóa quátrình xử lý kiểm thử
Đối tượng tiếp cận của kiểm thử Fuzz bao gồm:
- Số (số nguyên dương, số âm, số thực )
- Ký tự (urls, đầu vào dòng lệnh)
- Siêu dữ liệu
- Các chuỗi nhị phân, đinh dạng tệp tin (.pdf, png, wav, mpg…)
- Các giao thức mạng (http, SOAP, SNMP…)
- Các giao diện đầu I/O , các dòng lệnh tùy chọn, nhập/ xuất, các biểu mẫu, nộidung hay yêu cầu do người dùng tạo ra v.v…
Cách tiếp cận chung cho kiểm thử Fuzz là :
- Sinh tập dữ liệu giá trị nguy hiểm (còn được gọi là fuzz vectors) ứng vớ i từngloại đầu vào cụ thể, các lỗ hổng, các định dạng tệp tin, mã nguồn, các giao thức hoặctổ hợp của các dữ liệu này
- Chèn thêm mã thực thi vào mã máy của chương trình
- Phân tích hoạt động của chương trình trong quá trình thực thi
1.5 Giám sát dữ liệu fuzz
Trong giai đoạn này, các bộ kiểm thử Fuzz không chỉ đơn thuần phát hiện cáclỗ hổng qua quá trình kiểm thử mà còn phải định nghĩa các lỗi được phát hiện Điềunày có ý nghĩa hết sức quan trọng trong việc phân tích và báo cáo lỗi Để có được
Trang 33một báo cáo lỗi đầy đủ và rõ ràng, đòi hỏi sự hiểu biết rõ về hoạt động xử lý Quátrình này có thể được tích hợp vào trong sự kiện phân loại lỗi tự động.
1.6 Đăng lỗi và phân tích
Sau khi một hoặc một số lỗi phần mềm đã được xác định, các bộ kiểm thử Fuzzgửi một danh sách các lỗi này tới đội ngũ phát triển để họ có thể sửa chữa chúng
2 Thu thập các điểm đầu vào
2.1 Thu thập dữ liệu web với web crawler
Trình thu thập web, hay còn gọi là Web crawler, là một chương trình khai thác cấutrúc đồ thị của web bằng cách di chuyển từ trang này sang trang khác Ban đầu, chúngđược gọi bằng những cái tên như bọ web, rô-bốt, nhện và sâu, nhưng ngày nay tên gọiphổ biến nhất là trình thu thập web
Quá trình thu thập web bắt đầu bằng việc chọn một số đường dẫn (URL) của cáctrang web gọi là trang hạt giống Khi ghé thăm một trang hạt giống, trình thu thập đọcnội dung trang web và lọc ra các siêu liên kết có trong trang Các URL tương ứng vớicác siêu liên kết này được đưa vào danh sách biên giới (frontier) và được tiếp tụcduyệt đệ quy để ghé thăm tất cả các URL chưa được duyệt
Việc thu thập web dừng lại khi trình thu thập đã thu thập đủ số trang yêu cầu hoặcdanh sách biên giới không còn URL để duyệt Sau khi có danh sách URL để thu thập,quá trình lấy trang diễn ra và các trang được lưu vào cơ sở dữ liệu giống như củacông cụ tìm kiếm Việc cập nhật thông tin liên tục được tiến hành do web là một thựcthể năng động, thay đổi nhanh chóng
Các trang web thường được viết bằng ngôn ngữ đánh dấu như HTML, XHTML vàchứa đựng thông tin hữu ích cho người dùng Kỹ thuật bóc tách và trích xuất thôngtin tự động được sử dụng để lấy dữ liệu từ các trang web Quá trình thu thập webtương tự như việc duyệt đệ quy một đồ thị, với các trang là các đỉnh và các siêu liênkết là các cạnh
Trình thu thập web là thành phần đầu tiên trong toàn bộ hệ thống search engine,nhằm duy trì cơ sở dữ liệu được đánh chỉ mục và trả về kết quả cho hàng triệu truyvấn từ người dùng Ngoài ra, trình thu thập web còn có thể được sử dụng để xây dựngphần mềm tập trung thông tin và trang web tổng hợp thông tin dựa trên cơ chế tựđộng tìm và phát hiện tài nguyên
2.2.Quy trình thu thập