1. Trang chủ
  2. » Giáo Dục - Đào Tạo

đề tài kiểm thử fuzzing ứng dụng web

75 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

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 1

BAN 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 2

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 3

2.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

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 4

DANH 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 25YHì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 4Hì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 5

DANH 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 6

DANH MỤC TỪ VIẾT TẮTTừ 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ănbản

XML Extensible Markup Language Ngôn ngữ đánh dấu mở rộng

CSRF Cross - Site Request Forgery Lỗ hổng CSRFURL 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 7

Theo thống kê của Bkav, tại Việt Nam, trung bình mỗi tháng lại có hơn300 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ựcvà 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ự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 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 8

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 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 10

Chươ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ệmcơ 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ácvấ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ảomật web, đưa ra nguyên nhân, cơ chế phát hiện và cách phòng chống chotừng loại Nó là cơ sở tạo ra những đặc trưng cho quá trình phân tích pháthiệ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ânloại kỹ thuật, các ưu, nhược điểm của nó, từ đó đưa ra các lý do lựa chọnFuzzing 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ản1.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 Websitecó 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ạora 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:

Internet Explorer

Google Chrome

Mozilla Firefox

Java Script

Active Server Page

SQL Server

XML FileJDBC

- 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ưngcó 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 12

khai, 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 13

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ủ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ồngdữ 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 14

Accept-Encoding: gzip, deflate

Accept-Language: en-US,en;q=0.9,vi;q=0.8Connection: keep-alive

Host: testphp.vulnweb.com

Referer: http://testphp.vulnweb.com/categories.php

User-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

1 Host Tên miền của máy chủ và số cổng TCP trên máychủ đ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ênwebsite 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ântạ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 15

10 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:HTTP/1.1 200 OK

- Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng(HTTP/1.1), (200) và trạng thái (OK) Nó được phân loại thành 5 loại mãchính và được mô tả trong bảng 1.2:

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ậytứ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ứclà request đã được server tiếp nhận, hiểu và xử lý thành công3 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ápkhô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ớiviệ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 ResponseST

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êucầ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ạiServer 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 17

Session 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

- Biến ẩn form - Cookie

Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thờigian này được cấu hình quy định tại máy chủ hoặc bởi ứng dụng thực thi.

c Cookie

Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa máychủ và trình duyệt của người dùng [1]

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 18

7480- 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ớ RAMvà 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 19

Kí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 20

Lỗ 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ăngvà 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ẩnmô 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úcvà 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 21

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 22

1.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 23

Hì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 24

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à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ườnglà 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 web1.2.1 Phân loại các lỗ hổng bảo mật web

Trang 25

Bảng 1.5 Top 10 lỗ hổng website phổ biến nhất năm 2021 (OWASP) [7]Top 10 OWASP 2021

1 Broken Access Control

Nó xảy ra khi hệ thống không quản lý chính xácquyền truy cập của người dùng, cho phép họ truycập vào thông tin hoặc các tính năng mà họ khôngnên được phép truy cập.

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ácthông tin sai lệch được đưa vào cùng với các biếndữ 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áchkhô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.

5 Security

Một hệ thống bảo mật tốt là hệ thống triển khaicho 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ảomật cần thiết, thống nhất và liên kết với nhau 6 Vulnerable and

Outdated Components

Sử dụng các thành phần trong hệ thống hoặc ứngdụng mà có lỗ hổng bảo mật hoặc đã lỗi thời Cácthành phần này có thể là các thư viện, framework,plugins, hay bất kỳ thành phần nào được tích hợpvào sản phẩm phần mềm.

7 Identification and

Authentication Failures

Các vấn đề liên quan đến xác định và xác thựcngười dùng trong hệ thống Các lỗ hổng này cóthể cho phép người dùng không được ủy quyềntruy cập vào thông tin hoặc tài nguyên mà họkhông được phép, hoặc có thể dẫn đến việc xâm

Trang 26

8 Software and Data Integrity Failures

Các vấn đề liên quan đến sự mất tính toàn vẹn củaphần mềm và dữ liệu trong một hệ thống Cụ thể,nó ám chỉ đến các tình huống mà phần mềm hoặcdữ 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.

9 Security Logging and Monitoring Failures

Các vấn đề liên quan đến việc ghi nhật ký và giámsát không hoạt động hiệu quả trong một hệ thốnghoặc môi trường.

10 Server-SideRequest 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 27

c 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.

- Chỉ chấp nhận kí tự và số cho tên tệp tin được gọi Lọc và chặn toànbộ 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 29

Mã 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ồnmở đượ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 fuzza 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ọilà 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ọilà 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 fuzzinglà 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(a-z,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:

b Fuzzing thay thế

Fuzzing thay thế (Replacive Fuzzing) là quá trình fuzzing mà một phầncủa yêu cầu được thực hiện thông qua việc thay thế nó bằng một tập giá trịmờ Giá trị này được hiểu như một fuzz vector [11]

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:

Các fuzz vector được xây dựng dựa trên các mô tả về loại lỗ hổng cầnkiểm thử Tổng số lượng request mà fuzzer cần phải thực hiện phụ thuộc vàosố lượng các fuzz vector xác định.

1.3.3 Ưu nhược điểm của Fuzzing1.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ử Fuzzinglà 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 fuzzvà 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ôngcó 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 34

tì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 35

1.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

Chương 2

KỸ THUẬT FUZZING TRONG

KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE

Chương này trình bày chi tiết về kỹ thuật Fuzzing trong phạm vi kiểmtra và phát hiện lỗ hổng bảo mật của website Trong phần đầu của chươngnày trình bày về mô hình và quy trình fuzzing trong kiểm thử bảo mật web Từđó, 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 đầuvà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ảomật Đây là các giai đoạn quyết định tới hiệu quả của cả quá trình fuzzingtrong 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ạichương 3.

2.1 Mô hình Fuzzing cho ứng dụng website2.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ậpdữ 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 Fuzzersẽ 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 37

Mô hình được mô tả như hình 2.1:

Web Server

Header HTTP Request Fuzzing

Payload Fuzzing

Analysis Vulnerability

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 thiTheo dõi và

ghi chépPhân tích và

khai thác

Hình 2 2 Quy trình Fuzzing

Ngày đăng: 03/07/2024, 15:53

Xem thêm:

w