Từ tình hình trên ta thấy cần thiết có một giải pháp, kỹ thuật xây dựnghệ thống kiểm thử bảo mật cho mỗi hệ thống website, nhằm phát hiện và cảnhbáo các lỗ hổng trên
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
Ngành: An toàn thông tin
Sinh viên thực hiện:
Người hướng dẫn :
Thầy 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, 2023
Trang 2MỤC LỤC
MỤC LỤC ii
DANH MỤC HÌNH iv
DANH MỤC BẢNG v
DANH MỤC TỪ VIẾT TẮT vi
MỞ ĐẦU 1
Chương 1 TỔNG QUAN VỀ KIỂM THỬ WEBSITE 4
1.1 Các khái niệm cơ bản 4
1.1.1 Website 4
1.1.2 Lỗ hổng bảo mật 13
1.1.3 Lỗ hổng website 14
1.1.4 Kiểm thử phần mềm 14
1.1.5 Kiểm thử website 16
1.1.6 Fuzzing 17
1.2 Các loại lỗ hổng bảo mật web 17
1.2.1 Phân loại các lỗ hổng bảo mật web 17
1.2.2 Một số lỗ hổng bảo mật ứng dụng web chính 20
1.3 Kỹ thuật Fuzzing 26
1.3.1 Lịch sử 26
1.3.2 Phân loại Fuzzing 27
1.3.3 Ưu nhược điểm của Fuzzing 29
1.4 Lựa chọn Fuzzing cho kiểm tra lỗ hổng website 30
1.5 Kết luận chương 1 32
Chương 2 KỸ THUẬT FUZZING TRONG KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE 33
2.1 Mô hình Fuzzing cho ứng dụng website 33
2.1.1 Mô hình Fuzzing 33
2.1.2 Quy trình Fuzzing trong kiểm thử bảo mật website 34
Trang 32.2 Thu thập các điểm đầu vào 36
2.2.1 Cơ chế trích xuất URL từ mã HTML 36
2.2.2 Phương pháp thu thập 38
2.3 Nguyên lý chèn dữ liệu fuzz 44
2.3.1 Chèn dữ liệu vào phương thức GET 44
2.3.2 Chèn dữ liệu vào phương thức POST 45
2.4 Phương pháp phát hiện lỗ hổng bảo mật 46
2.4.1 Phát hiện lỗ hổng dựa trên đặc trưng 47
2.5 Kết luận chương 2 50
Chương 3 XÂY DỰNG ỨNG DỤNG KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE 51
3.1 Đặc tả chương trình 51
3.1.1 Mô tả 51
3.1.2 Yêu cầu 51
3.2 Thiết kế hệ thống 52
3.2.1 Kiến trúc chương trình 52
3.2.2 Thiết kế chức năng hệ thống 53
3.3 Xây dựng chương trình 55
3.3.1 Phương thức xử lý 55
3.3.2 Xây dựng các thành phần chính 57
3.4 Triển khai, thử nghiệm 60
3.4.1 Cài đặt ứng dụng 60
3.4.2 Thử nghiệm, đánh giá 62
3.5 Kết luận chương 3 65
KẾT LUẬN 66
TÀI LIỆU THAM KHẢO 67
BẢNG PHÂN CÔNG CÔNG VIỆC 69
TỔNG HỢP CÁC FILE TRONG PROJECT 70
Trang 4DANH MỤC HÌ
Hình 1 1 Kiến trúc một ứng dụng web 5
Hình 1 2 Mô hình hoạt động của một ứng dụng web 6
Hình 1 3 Kiểm thử hộp đen 15
Hình 1 4 Kiểm thử hộp trắng 16
Hình 1 5 Kiểm thử hộp xám 16
Hình 1 6 Hộp thoại lỗ hổng XSS chứa cookie 23
Hình 1 7 Kết quả sau tấn công lỗ hổng LFI 25Y Hình 2 1 Mô hình Fuzzing cho ứng dụng web 34
Hình 2 2 Quy trình Fuzzing 34
Hình 2 3 Sơ đồ của một crawler 39
Hình 2 4 Mô hình thu thập URL theo mã HTML 4 Hình 3 1 Kiến trúc phân tầng của ứng dụng 53
Hình 3 2 Luồng xử lý chức năng thu thập URL 54
Hình 3 3 Luồng xử lý chức năng quét lỗ hổng website 55
Hình 3 4 Giao tiếp giữa Fuzzer và Server 56
Hình 3 5 Thành phần thu thập điểm đầu vào 57
Hình 3 6 Thành phần tấn công với lỗ hổng SQL injection 58
Hình 3 7 Thành phần tấn công với lỗ hổng XSS 58
Hình 3 8 Thành phần tấn công với lỗ hổng File inclusion 59
Hình 3 9 Thành phần phân tích với lỗ hổng SQL injection 59
Hình 3 10 Thành phần phân tích với lỗ hổng XSS 60
Hình 3 11 Thành phần phân tích với lỗ hổng File inclusion 60
Hình 3 12 Giao diện ứng dụng 61
Hình 3 13 Website thử nghiệm 63
Hình 3 14 Các lỗ hổng được phát hiện 63
Trang 5DANH MỤC BẢNG
Bảng 1.1 Các trường tham số trong HTTP Request [8] 8
Bảng 1.2 Bảng mã trạng thái HTTP [13] 9
Bảng 1.3 Một số trường tham số trong HTTP Response 10
Bảng 1.4 Các thành phần của một Cookie 12
Bảng 1.5 Top 10 lỗ hổng website phổ biến nhất năm 2021 (OWASP) [7] 18
Bảng 2.1 Các thuộc tính và các thẻ đi kèm có chứa các URL của hệ thống 37
Bảng 2.2 Ví dụ trong fuzzing đường dẫn tương đương 43
Bảng 2.3 Chèn dữ liệu fuzzing vào URL 44
Bảng 2.4 Chèn dữ liệu fuzzing vào phương thức POST 45
Bảng 2.5 Cơ chế phát hiện các lỗ hổng hệ thống 48
Bảng 2.6 Các mẫu thông báo lỗi từ SQL 49
Trang 6DANH MỤC TỪ VIẾT TẮT
Từ 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 7Theo thống kê của Bkav, tại Việt Nam, trung bình mỗi tháng lại có hơn
300 website của các doanh nghiệp, tổ chức trong nước bị tấn công Kết quảnghiên cứu của Bkav cũng cho thấy, tại Việt Nam có tới 40% website tồn tạilỗ hổng
Cũng theo nhận định của các chuyên gia, hầu hết cơ quan doanh nghiệpcủa Việt Nam chưa bố trí được nhân sự phụ trách an ninh mạng hoặc năng lực
và nhận thức của đội ngũ này chưa tương xứng với tình hình thực tế Đó lànhững nguyên nhân chính và cũng chưa có một sản phẩm hay quy trình chuẩnnào hỗ trợ cho những người quản trị hệ thống phát hiện và ngăn chặn sớmnhững lỗ hổng đang tồn tại trên hệ thống
Từ tình hình trên ta thấy cần thiết có một giải pháp, kỹ thuật xây dựng
hệ thống kiểm thử bảo mật cho mỗi hệ thống website, nhằm phát hiện và cảnhbáo các lỗ hổng trên hệ thống website một cách chính xác Các lỗ hổng do lỗicủa người lập trình hệ thống: SQL Injection, Code Injection, Cross SiteScripting, URL Redirect,… Các lỗi do việc cấu hình hệ thống không an toànnhư phân quyền tài nguyên trên máy chủ không nghiêm ngặt, đặt tài khoảnmặc định,…
Trong phương pháp kiểm thử hộp đen, Fuzzing là một kỹ thuật pháthiện lỗ hổng phần mềm, được thực hiện bằng cách cung cấp tự động hoặc bántự động bộ dữ liệu đầu vào bất thường, không hợp lệ hay ngẫu nhiên vàochương trình nhằm theo dõi và xác định các trường hợp, hành vi bất thườngtrong quá trình xử lý và trong kết quả trả về để phát hiện lỗ hổng bảo mật tiềmẩn
Kỹ thuật fuzzing mang lại hiệu quả rất lớn cho việc kiểm thử cho cácvấn đề về an ninh trong các phần mềm, hệ thống máy tính và các ứng dụngdịch vụ Hiện tại, fuzzing là một kỹ thuật không thể tách rời của cộng đồngkiểm thử với rất nhiều các mã nguồn mở, công cụ thương mại và những côngtrình nghiên cứu liên quan
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
Trang 8gó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 antoàn, bảo mật website.
3 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ìnhhoạt động củ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ấncông và biện phá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ầnmềm nói chung và kỹ thuật Fuzzing trong kiểm thử lỗ hổng bảo mật websitenó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ựatrê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ạiwebsite, đồng thời đưa ra các khuyến nghị và cách thức khắc phục cho từngloại lỗ hổng
4 Đối tượng nghiên cứu
- Kiến trúc và 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ục tươ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
Trang 9+ 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 Fuzzing trong 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 đã đượccông bố hiện nay
+ Sử dụng kết quả nghiên cứu từ dự án mở về bảo mật ứng dụng webcủa OWASP
- 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 Namcũ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 quatừ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ậtFuzzing để xây dự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 bài báo cáo
Với giới hạn những vấn đề nghiên cứu trên, đồ án này được xây dựngvới cấu trúc phân thành 3 chương:
Chương 1: Tổng quan về kiểm thử 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
Trang 10Chương 1 TỔNG QUAN VỀ KIỂM THỬ WEBSITE
Chương này sẽ trình bày tổng quan, mang tính lý thuyết về các vấn đề
có liên quan đến kiểm thử website Trong đó, chú trọng đưa ra các khái niệm
cơ bản có liên quan đến đề tài như khái niệm về website, lỗ hổng bảo mật, kiểm thử, kỹ thuật Fuzzing, tạo cơ sở lý thuyết cho việc đi sâu nghiên cứu các vấn đề của bài báo cáo
Ngoài ra, chương này cũng trình bày chi tiết về các loại lỗ hổng bảo mật web, đưa ra nguyên nhân, cơ chế phát hiện và cách phòng chống cho từng loại Nó là cơ sở tạo ra những đặc trưng cho quá trình phân tích phát hiện lỗ hổng của Fuzzing trong chương 2.
Tại đây cũng trình bày tổng quan về kỹ thuật Fuzzing bao gồm phân loại kỹ thuật, các ưu, nhược điểm của nó, từ đó đưa ra các lý do lựa chọn Fuzzing là kỹ thuật được sử dụng cho kiểm thử bảo mật website.
1.1 Các khái niệm cơ bản 1.1.1 Website
Website là một tập hợp các trang web, thường chỉ nằm trong một tênmiền hoặc tên miền phụ trên World Wide Web của Internet Một trang web làtập tin HTML hoặc XHTML có thể truy nhập dùng giao thức HTTP Website
có thể được xây dựng từ các tệp tin HTML (website tĩnh) hoặc vận hành bằngcác CMS chạy trên máy chủ (website động) Website có thể được xây dựngbằng nhiều ngôn ngữ lập trình khác nhau (PHP, NET, Java, Ruby on Rails…)[12]
Một Website thường được bao gồm bởi 04 phần chính:
- Source code: Mã nguồn website, chứa tệp lệnh trích xuất HTML
- Hosting: Bộ nhớ lưu trữ website
- Database: Dữ liệu nội dung website
- Domain: Tên miền của website, thực chất một website không cần đếntên miền nó vẫn có thể hoạt động bình thường vì nó có địa chỉ IP Bản chấtcủa tên miền là nó được ánh xạ sang địa chỉ IP thông qua máy chủ DNS, tạo
ra sự đơn giản cho người dùng dễ dàng truy cập vào web thông qua tên miền,thay vì phải nhớ địa chỉ IP của website
Trang 11Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP đểtương tác với người dùng hay hệ thống khác.
Trình khách là một trình duyệt web như: Internet Explorer, Chrome,FireFox hay có thể là một chương trình có chức năng như một trình duyệtweb
Một ứng dụng web thường có kiến trúc gồm:
HTML
Java Script
Active Server Page
- Lớp ứng dụng: Đây là nơi xử lý của ứng dụng web Nó sẽ xử lý thôngtin yêu cầu từ người dùng, đưa ra quyết định, gửi kết quả đến lớp trình diễn.Lớp này thường được cài đặt bằng các kỹ thuật lập trình dựa trên các ngônngữ như CGI, Java, NET, PHP, và được triển khai trên host hoặc trên cácdịch vụ của máy chủ như Apache của Linux, IIS của Windows Server,…
- Lớp dữ liệu: Lớp này là các hệ quản trị dữ liệu SQL như MySQL,SQL Server, Oracle, chịu tránh nhiệm quản lý các file dữ liệu và quyền sửdụng dữ liệu của toàn bộ website Thường được triển khai trực tiếp trên cùnghoặc tách biệt riêng với web server
Việc phân lớp trong kiến trúc web tạo ra các hoạt động đơn giản nhưng
có liên kết chặt chẽ giữa các lớp Nó giúp cho người quản trị dễ dàng triển
Trang 12khai, vận hành và chủ động trong phòng, chống các cuộc tấn công Ví dụ nhưlớp ứng dụng có lỗi nhưng hệ thống, cơ sở dữ liệu được cấu hình đảm bảo thìhacker khó có thể khai thác và làm ảnh hưởng tới hệ thống.
Hoạt động của một ứng dụng web là sự tương tác giữa trình khách vớiweb server Dưới đây là mô hình hoạt động của một ứng dụng web:
Hình 1 2 Mô hình hoạt động của một ứng dụng web
Tương ứng các lớp của một ứng dụng web, hoạt động của một websitecũng có 3 phần:
- Trình khách (trình duyệt người dùng): Chrome, FireFox,…
- Trình chủ: Apache, IIS,…
- Hệ quản trị CSDL: Oracle, SQL Server, MySQL,…
Bên cạnh đó, một giải pháp dùng để bảo vệ hệ thống mạng thườngđược sử dụng là bức tường lửa (firewall), nó có vai trò như lớp rào chắn bênngoài một hệ thống mạng, vì chức năng chính của firewall là kiểm soát luồngthông tin giữa các máy tính
1.1.1.1 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ácphương thức GET, 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
Trang 13Sau 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ủa tài nguyên được yêu cầu Nếu yêu cầu can thiệp các quyền truy cậpcủ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úc nà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,… theo yê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ếtnố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 độngchỉ ra trong request method và tạo ra response trả về cho máy khách 1 luồng
dữ liệu có định dạng theo 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áitrao đổi giữ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 file HTML, 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ả giao dị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ồngthông tin hợp lệ Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Webthì firewall không còn hữu dụng trong việc ngăn chặn hacker này
1.1.1.2 Các thuật ngữ liên quan
a Http header
HTTP header là phần đầu của gói tin giao thức HTTP, thông tin màmáy khách và máy chủ gửi cho nhau Những thông tin máy khách gửi chomáy chủ được gọi là HTTP requests (yêu cầu) còn máy chủ gửi cho máykhách là HTTP responses (trả lời) Thông thường, một HTTP header gồmnhiều dòng, mỗi dòng chứa tên tham số và giá trị Một số tham số có thể đượcdùng trong cả header yêu cầu và header trả lời, còn số khác thì chỉ đuợc dùngriêng trong từng loại [2]
Ví dụ: Một header yêu cầu được thực hiện gửi tới đường dẫn:
http://testphp.vulnweb.com/favicon.ico
GET /favicon.ico HTTP/1.1
Trang 14User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
- Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặcPOST), địa chỉ yêu cầu (testphp.vulnweb.com/favicon.ico) và phiên bảnHTTP (HTTP/1.1)
- Tiếp theo là các trường tham số mô tả cho các thông tin trong header.Một số các trường cơ bản được mô tả như trong bảng 1.1 dưới đây:
Bảng 1.1 Các trường tham số trong HTTP Request [8]
ST
T
1 Host Tên miền của máy chủ và số cổng TCP trên máy
chủ đang nghe Số cổng có thể bị bỏ qua nếu làcổng tiêu chuẩn cho dịch vụ được yêu cầu (80)
2 Connection Các tùy chọn cho kiểu kết nối ngắt hay kết nối liên
tục sau khi hoàn thành một giao dịch
3 Accept Các loại nội dung có thể chấp nhận
4 Accept-Language Cho biết loại ngôn ngữ đang được dùng trên
website này
5 Accept-Encoding Danh sách các loại mã hóa được chấp nhận
6 Authorization Chứng thực cho xác thực HTTP
7 User-Agent Trường User-Agent chứa các thông tin về tác nhân
tạo yêu cầu
8 Referer Cho biết địa chỉ của trang web tham chiếu tới
9 Cookie Trường này chứa một cặp tên/giá trị của thông tin
để giữ lại cho URL
Trang 1510 Range Xác định phần nội dung được yêu cầu
Header của HTTP request sẽ kết thúc bằng một dòng trống, nhằm tạokhoảng cách giữa phần tiêu đề và phần thân mang các dữ liệu truy vấn đượcsử dụng trong phương thức khác như POST
Header trả lời từ server:
Bảng 1.2 Bảng mã trạng thái HTTP [13]
1 1xx Information (Thông tin): Khi nhận được những mã như vậy
tức là request đã được server tiếp nhận và quá trình xử lýrequest đang được tiếp tục
2 2xx Success (Thành công): Khi nhận được những mã như vậy tức
là request đã được server tiếp nhận, hiểu và xử lý thành công
3 3xx Redirection (Chuyển hướng): Mã trạng thái này cho biết
client cần có thêm action để hoàn thành request
4 4xx Client Error (Lỗi Client): Nó nghĩa là request chứa cú pháp
không chính xác hoặc không được thực hiện
5 5xx Server Error (Lỗi Server): Nó nghĩa là Server thất bại với
việc thực hiện một request nhìn như có vẻ khả thi
Trang 16- Tiếp theo là các trường tham số, mỗi trường mang những đặc trưngcho một thông tin về gói tin HTTP response trả về Một số trường được mô tảnhư bảng 1.3 dưới đây:
Bảng 1.3 Một số trường tham số trong HTTP Response
ST
T
1 Date Thời điểm phản hồi từ phía Server
2 Server Các thông tin về Server, thông tin về phần mềm
được sử dụng bởi Server để kiểm soát yêu cầu
3 Content-Length Độ dài của gói tin HTTP Response
4 Content-Type Loại nội dung gói tin gửi về
5 Set-Cookie Trường này chứa một cặp tên/giá trị của thông tin để
giữ lại cho URL
6 Cache-control Để xác định các tham số cho bộ nhớ đệm hoặc yêu
cầu các loại cụ thể về bộ nhớ đệm
7 Location Thông tin về đường dẫn sẽ được chuyển hướng tới,
thường đi cùng mã trạng thái 302
8 Age Lượng thời gian từ khi phản hồi được tạo ra tại
Server ban đầu của người gửi
9 Pragma Các chỉ dẫn cụ thể để thực hiện
- Khoảng cách một dòng trống để báo hiệu kết thúc header để nối tiếpphần thân của HTTP response
b Session
HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa làHTTP không lưu trữ trạng thái làm việc giữa trình duyệt với máy chủ Sựthiếu sót này gây khó khăn cho một số ứng dụng Web, bởi vì máy chủ khôngbiết được trước đó trình duyệt đã có những trạng thái nào Vì thế, để giảiquyết vấn đề này, ứng dụng Web đưa ra một khái niệm phiên làm việc(Session) Còn SessionID là một chuỗi để chứng thực phiên làm việc Một sốmáy chủ sẽ cung cấp một sessionID cho người dùng khi họ xem trang webtrên máy chủ
Trang 17Session là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng.Session bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kếtthúc khi người sử dụng thoát khỏi ứng dụng Mỗi session sẽ có một định danh(ID) [14]
Để duy trì phiên làm việc thì sessionID thường được lưu vào:
- Biến trên URL
Cookie mang một số đặc điểm chính như sau:
- Cookie được lưu trữ tại brower dưới những file dữ liệu nhỏ dạng text(trong memory hoặc trên đĩa) và sẽ gửi ngược lên lại server mỗi khi browsertải 1 trang web từ server
- Được ứng dụng tạo ra để lưu trữ, truy tìm, nhận biết các thông tin vềngười dùng đã ghé thăm trang web và những vùng mà họ đi qua trong trang
- Cookie được trình duyệt của người dùng mặc định chấp nhận lưu trênổ cứng của máy tính, tuy nhiên người dùng có thể thiết lập không chấp nhậnlưu trữ cookies
- Cookie được tạo ra bởi website và gửi tới browser, do vậy 2 websitekhác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tớibrowser Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng củamình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookiekhác nhau
Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lạinhững thông tin trong cookie mà người dùng không phải làm lại thao tác đăngnhập hay phải cung cấp lại các thông tin khác [1]
Bảng 1.4 Các thành phần của một Cookie
Trang 18Domain Flag Path Secure Expiration Name Value
- Domain: Tên miền của trang web đã tạo cookie cung cấp cho ngườidùng (www.redhat.com)
- Flag: Mang giá trị True/False - xác định các máy khác với cùng tênmiền có được truy xuất đến cookie hay không
- Path: Phạm vi các địa chỉ có thể truy xuất cookie
- Sercure: mang giá trị True/False - Xác định quá trình truyền cookie làkết nối có sử dụng mã hóa SSL hay không
- Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ0:00:00 giờ GMT ngày 01/01/1970 Nếu giá trị này không được thiết lập thìtrình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM
và sẽ xoá nó khi trình duyệt bị đóng
- Name: Tên biến (Apache)
- Value: Với cookie được tạo ở trên thì giá trị của Apache là64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tênmiền http://www.redhat.com
Ví dụ chuỗi lệnh trong HTTP header dưới đây sẽ tạo một cookie:
Set-Cookie: Apache="64.3.40.151.16018996349247480"; path="/";
domain="www.redhat.com"; path_spec; expires="2006-07-27 19:39:15Z"; version=0
- Các cookie của Internet Explorer được đặt trong một tập tinCookies.txt, với đường dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.txt
- Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là mộtcookie và thường được đặt tại C:\Documents and Setting\ [username]\Cookies
Trang 19Kích thước tối đa của một cookie là 4kb Số cookie tối đa cho một tênmiền là 20 cookie Cookie bị hủy ngay khi đóng trình duyệt gọi là “sessioncookie”.
d Proxy
Proxy là một máy chủ internet hay một phần mềm làm nhiệm vụchuyển tiếp thông tin và kiểm soát tạo sự an toàn cho việc truy cập internetcủa các máy khách [12]
Proxy cung cấp cho người dùng truy xuất internet những nghi thức đặcbiệt hoặc tập những nghi thức thực thi trên dual_homed host hoặc basion host.Những chương trình client của người sử dụng sẽ phải đi qua trung gian proxyserver thay thế cho server thật sự mà người sử dụng cần giao tiếp
Proxy server xác định những yêu cầu từ client và quyết định đáp ứnghay không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối vớiserver thật thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đếnserver, cũng như trả lời của server đến client Vì vậy proxy server giống cầunối trung gian giữa server và client
1.1.2 Lỗ hổng bảo mật
Lỗ hổng bảo mật trên một hệ thống là các điểm yếu có thể tạo ra sựngưng trệ của dịch vụ, thêm quyền đối với người sử dụng hoặc cho phép cáctruy nhập không hợp pháp vào hệ thống Các lỗ hổng cũng có thể nằm ngaycác dịch vụ cung cấp như sendmail, web, ftp … Ngoài ra các lỗ hổng còn tồntại ngay chính tại hệ điều hành như trong Windows XP, Windows NT, UNIX;hoặc trong các ứng dụng mà người sử dụng thường xuyên sử dụng như Wordprocessing, Các hệ databases… [2]
Có thể nói lỗ hổng bảo mật là những điểm yếu trên hệ thống hoặc ẩnchứa trong một dịch vụ mà dựa vào đó kẻ tấn công có thể xâm nhập trái phépđể thực hiện các hành động phá hoại hay chiếm đoạt các tài nguyên hợp pháp
Nguyên nhân gây ra lỗ hổng bảo mật là khác nhau:
- Do lỗi của bản thân hệ thống
- Do phần mềm cung cấp hoặc do người lập trình
- Do người quản trị yếu kém không hiểu sâu sắc các dịch vụ cung cấp
1.1.3 Lỗ hổng website
Trang 20Lỗ hổng website là những điểm yếu của hệ thống website mà tin tặc cóthể lợi dụng để khai thác nhằm thu thập thông tin về hệ thống, tấn công lấycắp thông tin, tấn cô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 [15].
Lỗ hổng website có thể xuất phát từ nhiều nguyên nhân, tuy nhiên chủyếu là do 3 nguyê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ầnkiểm tra hay kiểm tra yếu các dữ liệu đầu vào từ người dùng, từ đó, kẻ tấncô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ài khoản mặc định, không thường xuyên cập nhật phiên bản mới chocác dịch vụ triển khai trê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 đã được công khai Ví dụ như giao thức HTTP hoạt động theo chuẩn
mô hình client/server đơn giản và khi xây dựng giao thức này người ta chưaquan tâm đến vấn đề bảo mật
1.1.4 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 đúngnhững yêu cầu mà chúng đã được thiết kế và không thực hiện những điềukhô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 cho ngườ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êu cầu đặtra
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)
1.1.4.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 vi bên trong của phần mềm, là cách kiểm thử mà hệ thống được xemnhư 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 [9]
Trang 21Hình 1 3 Kiểm thử hộp đen
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ử thăm dò (Exploratory testing)
Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh, những kiểmthử viên hộp đen tìm ra lỗi mà những lập trình viên đã không tìm ra
Trang 221.1.4.2 Kiểm thử hộp trắng
Là phương pháp kiểm thử trái ngược hoàn toàn với kiểm thử hộp đen,
nó cho phép kiểm tra cấu trúc bên trong của một phần mềm với mục đích đảmbảo rằng tất cả các mã lệnh, thuật toán và điều kiện sẽ được thực hiện ít nhất 1lần
Hình 1 4 Kiểm thử hộp trắng
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)
- Kiểm thử tĩnh (Static testing)
Kiểm thử hộp trắng có thể áp dụng tại cấp đơn vị, tích hợp hệ thống vàcác cấp độ của quá trình kiểm thử phần mềm
1.1.4.3 Kiểm thử hộp xám
Là sự kết hợp của kiểm thử hộp đen và hộp trắng Trong kiểm thử hộpxám, cấu trúc bên trong sản phẩm chỉ được biết một phần, người kiểm thử cóthể truy cập vào cấu trúc dữ liệu bên trong và thuật toán của chương trình vớimục đích là để thiết kế đầu vào, nhưng khi kiểm tra thì như ở mức hộp đen
Trang 23Hình 1 5 Kiểm thử hộp xám
Một số phương pháp kiểm thử hộp xám:
- Kiểm thử ma trận (Matrix Testing)
- Kiểm thử hồi quy (Regression Testing)
- Kiểm thử mẫu (Pattern Testing)
Việc thao tác tới dữ liệu đầu vào và định dạng dữ liệu đầu ra là khôngrõ ràng, giống như một chiếc hộp xám, bởi vì đầu vào và đầu ra rõ ràng là ởbên ngoài hộp đen mà chúng ta vẫn gọi về hệ thống được kiểm tra [4]
1.1.5 Kiểm thử website
Kiểm thử website là một thành phần trong kiểm thử phần mềm nhưngtập trung vào các ứng dụng web, nhằm đảm bảo các ứng dụng web hoạt độngmột cách hiệu quả, chính xác và đáp ứng được nhu cầu của khách hàng Hiệnnay, nó đang là một trong những thành phần đang phát triển nhanh nhất củakiểm thử phần mềm
Hoàn thành quá trình kiểm thử của một hệ thống web trước khi đi vàohoạt động là bước đầu để có được sự đảm bảo về khả năng các ứng dụng đượcxây dựng trên trang web đ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ượngngà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
Trang 24cập của người dùng Việc bỏ qua các vấn đề trong kiểm thử trước khi đi vàohoạt động có thể ảnh hưởng đến khả năng hoạt động của chí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
1.1.6 Fuzzing
Trong lĩnh vực an ninh ứng dụng, Fuzzing hay kiểm thử mờ (fuzztesting) là một kỹ thuật thuộc kiểm thử hộp đen (black box), phát hiện lỗi củaphần mềm bằng cách tự động hoặc bán tự động cung cấp dữ liệu đầu vàokhông hợp lệ, không mong đợi hay ngẫ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ựcthi, tài nguyên thất thoát, nhằm xác định các hành vi bất thường, phát hiệncác lỗ hổng bảo mật tiềm ẩn của phần mềm Dữ liệu không mong đợ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 [11]
Các chương trình và framework được dùng để tạo ra kỹ thuật fuzzinghoặc thực hiện fuzzing được gọi là Fuzzer Tùy theo môi trường và ứng dụngcầ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 đòihỏi quyền truy cập vào mã nguồn Do đó, nó có khả năng tìm thấy lỗi mộtcá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 SiteScripting, tràn bộ đệm, chèn câu truy vấn (SQL Injection), [11]
1.2 Các loại lỗ hổng bảo mật web 1.2.1 Phân loại các lỗ hổng bảo mật web
Trang 25Bảng 1.5 Top 10 lỗ hổng website phổ biến nhất năm 2021 (OWASP) [7]
2 Cryptographic
Failures
Là những vấn đề xuất phát từ việc triển khai hoặcsử dụng hệ thống mật mã một cách không chínhxác hoặc không an toàn, dẫn đến việc dữ liệu bảomật bị rò rỉ, tấn công, hoặc đánh cắp
3 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 đầu vào như 1 phần của lệnh hay câu truyvấn
4 Insecure Design Hệ thống hoặc ứng dụng được thiết kế một cách
không an toàn từ giai đoạn ban đầu Điều này cóthể bao gồm thiếu sót trong việc xác định và triểnkhai các biện pháp bảo mật, thiếu hiểu biết về cácnguy cơ bảo mật, hoặc việc không tuân thủ cácnguyên tắc thiết kế an toàn
Trang 26nó ám chỉ đến các tình huống mà phần mềm hoặc
dữ liệu trong hệ thống bị sửa đổi, thay đổi, hoặcảnh hưởng bởi các tác nhân không mong muốnhoặc không được ủy quyền
10 Server-Side
Request Forgery
Kẻ tấn công có thể tạo ra và kiểm soát các yêu cầuHTTP được gửi từ phía máy chủ Trong SSRF, kẻtấn công thường sử dụng các biểu đồ yêu cầumạng để tạo ra các yêu cầu từ máy chủ đích màkhông cần phải thông qua máy khách
1.2.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òngtránh các lỗ hổng đang tồn tại trên hệ thống
1.2.2.1 Lỗ hổng Broken Access Control
a Khái quát
Broken Access Control là lỗ hổng bảo mật xảy ra khi người dùng có thểtruy cập vào chức năng hoặc dữ liệu không được phép trong ứng dụng do việcthực thi kiểm soát truy cập không đúng
b Cơ chế phát hiện
-Kiểm tra thủ công: Kiểm tra kiểm soát truy cập thủ công để đảm bảo
tính đúng đắn
-Kiểm tra tự động: Sử dụng công cụ để quét lỗ hổng trong cấu hình
kiểm soát truy cập
-Phân tích động: Quan sát hành vi ứng dụng trong quá trình chạy để
xác định bất kỳ truy cập không được ủy quyền nào
Trang 27c Cách thức phòng tránh
-Thực hiện kiểm soát truy cập đúng đắn: Đảm bảo rằng các kiểm
soát truy cập được thực hiện ở cả mức ứng dụng và dữ liệu để hạn chế truy cập không được ủy quyền
-Sử dụng RBAC: Áp dụng kiểm soát truy cập dựa trên vai trò (RBAC)
để gán quyền dựa trên các vai trò và trách nhiệm
-Thực hiện kiểm tra thường xuyên: Thực hiện kiểm tra định kỳ các
cấu hình kiểm soát truy cập để xác định và khắc phục bất kỳ cấu hình không
an toàn nào
-Nguyên tắc của ít quyền: Theo dõi nguyên tắc của ít quyền, chỉ cấp
quyền cho người dùng những quyền hạn cần thiết để thực hiện nhiệm vụ của họ
1.2.2.2 Lỗ hổng Cryptographic Failures
a Khái quát
Lỗ hổng Cryptographic Failures xảy ra khi quá trình mã hóa và giải mãđược thực hiện một cách không đúng, dẫn đến những lỗ hổng có thể bị tấncông
b Cơ chế phát hiện
-Kiểm tra Mật mã học: Phân tích các thuật toán và cài đặt mật mã
học để tìm các lỗ hổng hoặc điểm yếu
-Phân tích mã nguồn: Kiểm tra mã nguồn để tìm các thực thi mã hóa
không an toàn hoặc cấu hình không chính xác
-Phân tích động: Quan sát các hoạt động mật mã hóa trong quá trình
chạy để phát hiện các lỗi hoặc điểm yếu
c Cách thức phòng tránh
-Sử dụng Thuật toán Mạnh mẽ: Sử dụng các thuật toán và giao thức
mật mã hóa tiêu chuẩn của ngành để đảm bảo tính bảo mật
Trang 28-Quản lý chìa khóa an toàn: Thực hiện quản lý chìa khóa mạnh mẽ và
an toàn, bao gồm việc tạo, lưu trữ và xoay chìa khóa định kỳ
-Kiểm tra An toàn thường xuyên: Thực hiện kiểm tra an toàn định kỳ
để đảm bảo rằng các cài đặt mật mã hóa được thực hiện đúng cách và khôngbị lỗi
-Truyền tải An toàn: Đảm bảo rằng dữ liệu nhạy cảm được truyền đi
an toàn qua mạng bằng cách sử dụng các giao thức như TLS / SSL
1.2.2.3 Lỗ hổng Injection
a Khái quát
Lỗ hổng Injection là loại lỗ hổng liên quan đến việc thực hiện thao tác với câutruy vấn CSDL, cho phép kẻ tấn công lợi dụng lỗ hổng trong việc kiểm tra dữliệu đầu vào trong ứng dụng web và thông báo lỗi của hệ quản trị cơ sở dữliệu để thực thi câu truy vấn SQL một cách bất hợp pháp
dữ liệu vào Một số biện phá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ự đặc biệ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 địnhnhằm tránh directory 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àm include hay eval
1.3 Kỹ thuật Fuzzing
Trang 29Mã nguồn của công cụ, các dữ liệu kết quả thô đã được công bố côngkhai để các nhà nghiên cứu khác có thể để tiến hành các thử nghiệm tương tựvới các phần mềm khác Hiện nay, các kết quả nghiên cứu của dự án vẫnđược cập nhật tại địa chỉ: http://pages.cs.wisc.edu/~bart/fuzz/
Năm 1991, các công cụ crashme đã được phát hành, được dùng đểkiểm tra độ tin cậy của hệ điều hành Unix bằng cách thực hiện lệnh máy ngẫunhiên Trong năm 1995, một fuzzer có giao diện GUI đã được sử dụng để thửnghiệm các công cụ, giao thức mạng và các API hệ thống thư viện
Năm 2002, Microsoft đã quyết định đầu tư cho nhóm sáng lậpPROTOS Năm 2003, các thành viên của nhóm đã thành lập Codenomicon,một công ty chuyên thiết kế và phát triển các sản phẩm fuzzing thương mại
Năm 2012, Google đã công bố ClusterFuzz, một hạ tầng kỹ thuậtfuzzing dựa trên đám mây cho các thành phần bảo mật quan trọng củacác trình duyệt web Chromium Nghiên cứu bảo mật có thể tải lên cácfuzzers riêng có và thu thập tiền thưởng lỗi nếu ClusterFuzz thấy một vụ tainạn với fuzzer tải lên
Năm 2016, Microsoft đã công bố dự án Springfield, một dịch vụ thửnghiệm Fuzzing dựa trên điện toán đám mây cho việc tìm kiếm an ninh lỗinghiêm trọng trong phần mềm
Năm 2016, Google đã công bố OSS-Fuzz, một chương trình mã nguồn
mở được phát triển dựa trên 2 dự án ClusterFuzz và Springfield, cho phépfuzzing liên tục phần mềm mã nguồn mở Giúp cho các mã nguồn mở đảmbảo an toàn, bảo mật
Trang 30Đến nay, không chỉ các hãng lớn thực hiện nghiên cứu mà còn có nhiềudự án mã nguồn mở đã được phát triển và ứng dụng rộng rãi trong cộng đồngngười sử dụng.
1.3.2 Phân loại Fuzzing
Phân loại fuzzing có thể tùy thuộc vào bộ dữ liệu fuzz, mục tiêufuzzing hay phương pháp fuzzing,…
1.3.2.1 Phân loại theo dữ liệu fuzz
a Kiểm thử mờ dựa trên đột biến
Kiểm thử mờ dựa trên đột biến (Mutation Based Fuzzing) hay còn gọi
là kiểm thử mờ câm (Dumb Fuzzing) là phương pháp kiểm thử mà dữ liệufuzz được biến đổi từ mẫu dữ liệu hợp lệ hiện có để tạo thành dữ liệu kiểmthử cho mục tiêu fuzzing
Một số đặc điểm đối với cách tiếp cận này [11]:
- Người thực hiện không cần có nhiều hiểu biết về cấu trúc của các yếutố đầu vào
- Tính dị thường được thêm vào đầu vào hợp lệ hiện có có thể hoàntoàn ngẫu nhiên hoặc theo một số chuẩn đoán về mặt kinh nghiệm
- Dữ liệu cho thực hiện fuzzing hoàn toàn phụ thuộc vào các yếu tố đầuvào được sửa đổi
- Yêu cầu ít hoặc việc thiết lập thời gian đơn giản hoặc không cần thiết.Một số công cụ cho phép thực hiện fuzzing theo phương pháp này:Taof, GPF, ProxyFuzz, Peach Fuzzer
b Kiểm thử mờ dựa trên thế hệ
Kiểm thử mờ dựa trên thế hệ (Generation Based Fuzzing) hay còn gọi
là kiểm thử mờ thông minh (Smart Fuzzing) là phương pháp kiểm thử mà dữliệu fuzz được xây dựng mới hoàn toàn dựa trên các mô tả đặc điểm kỹ thuật,định dạng của mô hình đầu vào
Đối với cách tiếp cận này [11]:
- Trường hợp thử nghiệm được tạo ra từ một số mô tả về các định dạng:RFC, các định dạng tài liệu
- Tính dị thường được thêm vào mỗi điểm có thể có trong các đầu vào
Trang 31- Hỗ trợ kiến thức về giao thức nên cho kết quả tốt hơn so với fuzzingngẫu nhiên.
- Có thể mất thời gian đáng kể để thiết lập
Công cụ để thực hiện: SPIKE, Sulley, Mu-4000,
1.3.2.2 Phân loại theo OWASP
The Open Web Application Security Project (OWASP) là một dự ánphi lợi nhuận phát triển các dự án liên quan tới bảo mật ứng dụng Web hàngđầu thế giới, tổ chức này đưa ra 2 cách phân loại khác về Fuzzing hỗ trợ chokiểm thử mờ các ứng dụng Web như sau:
a Fuzzing đệ quy
Fuzzing đệ quy (Recursive Fuzzing) là phương pháp kiểm thử màFuzzer thực hiện duyệt qua bộ dữ liệu fuzz được xây dựng dựa trên tất cả cáckết hợp của bộ chữ cái Alphabet
Giả sử ta gởi một request là một chuỗi có dạng:
http://www.domain.com/2af8rb03
Nếu chọn "2af8rb03" như một một điểm đầu vào thì bộ dữ liệu fuzzing
là một tập các chuỗi của bảng chữ cái Alphabet và số hệ thập lục phân(az,0 9) thuộc loại fuzzing đệ quy Như vậy, bộ dữ liệu fuzzing sẽ có 168 chuỗi vàfuzzer sẽ thực hiện các request có dạng như sau:
Xét trường hợp này:
http://www.example.com/2af8rb03
Trang 32Để thực hiện kiểm tra sự tồn tại của lỗ hổng Cross Site Scripting(XSS), fuzzer thực hiện kiểm thử bằng cách gửi đến server các fuzz vectornhư sau:
1.3.3 Ưu nhược điểm của Fuzzing
1.3.3.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 an toàn trong mã nguồn mà nó xác định được thường rấtnghiêm trọng trong ứng dụng[5]
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ácphương pháp kiểm thử khác Kiểm thử Fuzzing tập trung vào việc sử dụngcác giá trị đặc biệt như là đầu vào cho ứng dụng được kiểm thử, do đó giúpviệc phát hiện các lỗi quan trọng mà có thể không được phát hiện bằngphươ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ất thường hay hành vi không mong muốn Điều này giúp nó có khả năngchạy hàng nghìn trườ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ụng khô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
1.3.3.2 Nhược điểm
Bên cạnh những ưu điểm giúp cho fuzzing được trở nên ưa chuộng thì
nó cũng tồn tại những hạn chế:
Trang 33- Khó có thể kiểm thử toàn diện và tìm thấy được tất cả các lỗi trongmột chương trình lớn, những lỗi đòi hỏi kiểm thử viên phải thực hiện phântích tĩnh.
- Fuzzing nằm trong phương pháp kiểm thử hộp đen nên không cungcấp nhiều kiế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ỏiphải tốn nhiều thờ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ếtquả trả về không có các mã lỗi hay các dấu hiệu bất thường
1.4 Lựa chọn Fuzzing cho kiểm tra lỗ hổng website
Trong kiểm thử bảo mật website và kiểm thử bảo mật phần mềm không
có quá nhiều điểm khác nhau nhưng đòi hỏi kiểm thử viên phải kết hợp vớicác kiến thức công nghệ bảo mật web, công nghệ mạng, lập trình web và kinhnghiệm thực tế về thâm nhập các hệ thống server Vì vậy để xây dựng ứngdụng tự động phát hiện lỗ hổng bảo mật cho website, đòi hỏi phải có mộtphương pháp kiểm thử và phân tích đặc thù cho từng loại lỗ hổng trong bảomật web
Hiện nay, fuzzing là kỹ thuật được sử dụng rất nhiều trong việc kiểmthử cho các vấn đề về an ninh trong các phần mềm, hệ thống máy tính và cácwebsite dịch vụ Ngoài ra, fuzzing là một trong những phương pháp phổ biếnnhất được hacker sử dụng để tìm lỗ hổng của hệ thống
Hệ thống Fuzzing sẽ gửi dữ liệu fuzz lên server chứa website hoặc truycập thẳng vào đường link của website kèm theo dữ liệu gây lỗi, nhận dữ liệutừ website trả về và đưa vào bộ phân tích trước khi đưa ra kết luận về lỗ hổng
Dữ liệu fuzz là một tập hợp chứa dữ liệu nhận dạng, được kết hợp với một sốthành phần của URL hoặc với những dữ liệu mà website xử lý
Lựa chọn kỹ thuật Fuzzing, kiểm thử hộp đen để xây dựng ứng dụngquét lỗ hổng website, ta có thể quét bất kỳ một trang web hoặc một ứng dụngweb, không phụ thuộc vào công nghệ hoặc các ngôn ngữ lập trình mà nó sửdụng Nó chủ yếu kiểm thử một trang web hoặc một ứng dụng web mà khôngcần bất kỳ kiến thức về cách mà trang web làm việc, giống một kẻ tấn côngthực sự Nên khi các quản trị viên, những người trực tiếp quản lý và theo dõi
Trang 34tình hình hoạt động các website hoặc những người kiểm thử web sử dụngphương pháp này để kiểm thử sẽ giúp chương trình ngăn chặn trước được tấncông từ hacker.
Trong phạm vi đề tài, chúng em sẽ đi sâu vào phân tích kỹ thuậtfuzzing đặc thù cho việc kiểm tra, phát hiện lỗ hổng bảo mật ứng dụng web
Trang 351.5 Kết luận chương 1
Chương đầu tiên đã trình bày toàn bộ cơ sở lý thuyết có liên quan tớiwebsite và kiểm thử website Các nội dung này đã làm rõ và đưa ra được vấnđể nghiên cứu của toàn bộ đề tài, đó là lỗ hổng bảo mật website và kỹ thuậtFuzzing trong phát hiện các lỗ hổng bảo mật
Những nội dung chính mà chương 1 trình bày:
- Mục 1.1, trình bày các khái niệm cơ bản có liên quan như website, lỗhổng bảo mật, kiểm thử, fuzzing, Đây là các khái niệm cơ tạo nền tảng banđầu cho các nghiên cứu và phát triển của đề tài sau này
- Các loại lỗ hổng website, phần này đã trình bày về việc phân loại cáclỗ hổng website, cách phát hiện và phòng chống với từng loại lỗ hổng Đây lànhững đặc trưng phát hiện lỗ hổng cho việc xây dựng phần mềm Phần này sẽđược nêu chi tiết trong chương 2
- Kỹ thuật Fuzzing, phần này đã trình bày khái quát về lịch sử, phânloại và ưu nhược điểm của kỹ thuật Fuzzing trong kiểm thử bảo mật
Từ những nội dung trình bày ở trên tôi đã trình bày lý do lựa chọn kỹthuật Fuzzing cho các nghiên cứu trong kiểm thử bảo mật website Các nộidung này là cơ sở lý thuyết cho việc nghiên cứu áp dụng kỹ thuật Fuzzing vớicác lỗ hổng web trong chương 2
Trang 36đó, các phần tiếp thep trình bày chi tiết về kỹ thuật fuzzing trong một số giai đoạn quan trọng của quy trình bao gồm: phương pháp thu thập điểm đầu vào, nguyên lý chèn dữ liệu fuzz và các phương pháp phát hiện lỗ hổng bảo mật Đây là các giai đoạn quyết định tới hiệu quả của cả quá trình fuzzing trong phát hiện lỗ hổng bảo mật, tạo cơ sở cho việc xây dựng ứng dụng tại chương 3.
2.1 Mô hình Fuzzing cho ứng dụng website 2.1.1 Mô hình Fuzzing
Một ứng dụng web thao tác với người dùng qua trình duyệt và sử dụnggiao thức HTTP cổng 80 hoặc HTTPS cổng 443 Một hệ thống website sẽchứa các điểm đầu vào của hệ thống bao gồm: các form cho người dùng nhập
dữ liệu, các giá trị của biến được truyền trên các URL của website, các trườngthông tin trong HTTP Headers [10]
Quá trình kiểm thử chủ yếu được thực trên các điểm đầu vào của hệthống, cụ thể các trường dữ liệu của request headers được gửi qua phươngthức truyền dữ liệu của HTTP, chủ yếu là phương thức GET, POST Fuzzer
sẽ phải thực hiện việc thu thập toàn bộ các điểm đầu vào của hệ thống trướckhi thực hiện fuzzing
Trang 37Mô hình được mô tả như hình 2.1:
Web Server
Fuzzer
Request
Responses
Header HTTP Request Fuzzing
Header
Payload Fuzzing
Analysis Vulnerability
Result
Hình 2 1 Mô hình Fuzzing cho ứng dụng web
Mô hình kiểm thử fuzzing cho website cũng tương tự như mô hìnhfuzzing trong kiểm thử phần mềm, có 2 thành phần chủ yếu là fuzzer và webserver:
- Fuzzer là chương trình thực hiện kiểm thử tự động bằng kỹ thuậtfuzzing
- Web server là hệ thống máy chủ web được fuzzer thực hiện kiểm thử
2.1.2 Quy trình Fuzzing trong kiểm thử bảo mật website
Về cơ bản Fuzzing có các giai đoạn như sau:
Xác định
mục tiêu
Xác định vị trí đầu vào
Sinh dữ liệu Fuzz
Chèn dữ liệu
và thực thi
Theo dõi và ghi chép
Phân tích và
khai thác
Hình 2 2 Quy trình Fuzzing