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

Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web

99 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

Thông tin cơ bản

Tiêu đề Kiểm Thử Fuzzing Áp Dụng Trong Kiểm Tra Lỗ Hổng Bảo Mật Web
Tác giả Cà Thị Ái Linh, Phan Đức Ba, Nguyễn Vũ Hà, Nguyễn Minh Nhật
Trường học Học Viện Kỹ Thuật Mật Mã
Chuyên ngành Kỹ Thuật Lập Trình
Thể loại Báo cáo
Năm xuất bản 2025
Thành phố Hà Nội
Định dạng
Số trang 99
Dung lượng 5,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong các phương pháp kiểm thử bảo mật, Fuzzing là một kỹ thuật quan trọng giúp phát hiện lỗ hổng phần mềm bằng cách tự động cung cấp các dữ liệu đầu vào bất thường hoặc không hợp lệ

Trang 1

HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TOÀN THÔNG TIN

-

BÁO CÁO MÔN HỌC KỸ THUẬT LẬP TRÌNH

ĐỀ TÀI KIỂM THỬ FUZZING ÁP DỤNG TRONG KIỂM TRA LỖ HỔNG BẢO MẬT WEB

Nhóm thực hiện: NHÓM 7 Sinh viên thực hiện: CÀ THỊ ÁI LINH – AT190129

PHAN ĐỨC BA – AT190306 NGUYỄN VŨ HÀ – AT190318 NGUYỄN MINH NHẬT – AT190338

Hà Nội - 2025

Trang 2

MỤC LỤC

DANH MỤC KÍ HIỆU VÀ TỪ VIẾT TẮT 3

DANH MỤC HÌNH VẼ 4

MỞ ĐẦU 7

CHƯƠNG 1 TỔNG QUAN LỖ HỔNG BẢO MẬT WEB VÀ KỸ THUẬT KIỂM THỬ FUZZING 10

1.1 Các tổng quan cơ bản 10

1.1.1 Ứng dụng web 10

1.1.2 Lỗ hổng bảo mật 14

1.1.3 Lỗ hổng bảo mật website 14

1.1.4 Kiểm thử phần mềm 15

1.1.5 Kiểm thử website 17

1.2 Kỹ thuật Fuzzing trong việc kiểm thử phần mềm 18

1.2.1 Khái niệm về Fuzzing 18

1.2.2 Lịch sử phát triển của kiểm thử Fuzzing 18

1.2.3 Các loại kiểm thử Fuzzing 18

1.2.4 Ưu - nhược điểm của kiểm thử Fuzzing 19

1.2.5 Các lỗ hổng được phát hiện bởi Fuzzing 20

1.2.6 Công cụ hỗ trợ kiểm thử Fuzzing 21

1.2.7 Ứng dụng thực tế của Fuzzing trong bảo mật thông tin 21

1.2.8 Kiểm thử ứng dụng website bằng Fuzzing 22

1.3 Lựa chọn Fuzzing cho kiểm tra lỗ hổng ứng dụng web 23

1.4 Tổng kết chương 1 23

Trang 3

CHƯƠNG 2: NGHIÊN CỨU KỸ THUẬT FUZZING TRONG KIỂM THỬ ỨNG

DỤNG WEB 24

2.1 Mô hình Fuzzing cho ứng dụng website 24

2.1.1 Mô hình Fuzzing 24

2.1.2 Quy trình Fuzzing trong kiểm thử lỗ hổng bảo mật website 25

2.2 Một số kịch bản thực nghiệm với Fuzzing 28

2.2.1 Kiểm thử lỗ hổng Cross-site Scripting (XSS) 28

2.2.2 Kiểm thử lỗ hổng SQL Injection 29

2.3 Tổng kết chương 2 31

CHƯƠNG 3: THỰC NGHIỆM VỀ QUÁ TRÌNH FUZZING TRONG KIỂM THỬ ỨNG DỤNG WEB 32

3.1 Xây dựng chương trình 32

3.2 Triển khai thực nghiệm 38

3.2.1 Kiểm thử lỗ hổng SQL Injection sử dụng kỹ thuật Fuzzing 38

3.2.2 Kiểm thử lỗ hổng Cross-site Scripting (XSS) sử dụng kỹ thuật Fuzzing 59

3.3 Đánh giá thực nghiệm 92

3.4 Tổng kết chương 3 92

KẾT LUẬN 94

TÀI LIỆU THAM KHẢO 96

BẢNG PHÂN CÔNG CÔNG VIỆC 98

Trang 4

DANH MỤC KÍ HIỆU VÀ TỪ VIẾT TẮT

Từ viết tắt Nghĩa Tiếng Anh Nghĩa Tiếng Việt

HTTP Hypertext Transfer Protocol Giao thức truyền siêu văn bản TCP Transmission Control Protocol Giao thức truyền TCP

HTML Hypertext Markup Language Ngôn ngữ đánh dấu siêu văn bản XML Extensible Markup Language Ngôn ngữ đánh dấu mở rộng SSL Secure Sockets Layer Lớp bảo mật socket

XSS Cross Script Site Lỗ hổng XSS

CSRF Cross - Site Request Forgery Lỗ hổng CSRF

URL Uniform Resource Locator Địa chỉ tài nguyên

RFI Remote File Inclusion Lỗ hổng RFI

LFI Local File Inclusion Lỗ hổng LFI

OWASP The Open Web Application

Security Project

Dự án nghiên cứu bảo mật ứng dụng web

GUI Graphical User Interface Giao diện đồ họa người dùng

Trang 5

DANH MỤC HÌNH VẼ

Hình 1: Mô hình hoạt động của ứng dụng web 12

Hình 2: Kiểm thử hộp đen 16

Hình 3: Kiểm thử hộp trắng 16

Hình 4: Kiểm thử hộp xám 17

Hình 5: Mô hình Fuzzing cho ứng dụng web tổng quát 24

Hình 6: Quy trình Fuzzing 25

Hình 7: Cấu hình DVWA 34

Hình 8: Trạng thái của MySQL 34

Hình 9: Đăng nhập vào MySQL với quyền root 35

Hình 10: Trạng thái của Apache2 36

Hình 11: Truy vấn danh sách người dùng MySQL 37

Hình 12: Chỉnh sửa file cấu hình DVWA 37

Hình 13: Giao diện trang đăng nhập web DVWA 37

Hình 14: DVWA Security 38

Hình 15: Ô nhập User ID của trang web có mức độ bảo mật thấp 39

Hình 16: Các Request được thực hiện 39

Hình 17: Nơi có thể truyền payload của Burp Suite 39

Hình 18: Trạng thái của trang web 40

Hình 19: Hiển thị tên database và phiên bản của database 40

Hình 20: Ô chọn User ID của trang web có mức độ bảo mật trung bình 41

Hình 21: Burp Suite Repeater kiểm tra yêu cầu và phản hồi 41

Trang 6

Hình 22: Burp Suite gửi payload SQL Injection trên trang web có mức bảo mật

trung bình 42

Hình 23: Giao diện trang web được bảo mật ở mức độ thấp 42

Hình 24: Giao diện web được bảo mật ở mức độ trung bình 43

Hình 25: Kết quả kiểm thử SQLi ở mức độ bảo mật thấp (1) 53

Hình 26: Kết quả kiểm thử SQLi ở mức độ bảo mật thấp (2) 54

Hình 27: Kết quả kiểm thử SQLi ở mức độ bảo mật trung bình (1) 55

Hình 28: Kết quả kiểm thử SQLi ở mức độ bảo mật trung bình (2) 55

Hình 29: Kết quả kiểm thử SQLi ở mức độ bảo mật trung bình (3) 56

Hình 30: Kết quả kiểm thử SQLi ở mức độ bảo mật trung bình (4) 56

Hình 31: Các bảng trong CSDL 57

Hình 32: Các thuộc tính trong bảng users 57

Hình 33: Các dữ liệu trong bảng users 58

Hình 34: Giải mã mật khẩu 58

Hình 35: Giao diện trang web có chứa lỗ hổng Reflected XSS 59

Hình 36: Ô nhập dữ liệu trong trang web có chứa lỗ hổng Reflected XSS 60

Hình 37: Kết quả khi chạy đoạn code Fuzzer 70

Hình 38: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật thấp (1) 71

Hình 39: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật thấp (2) 72

Hình 40: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật trung bình (1) 73

Hình 41: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật trung bình (2) 73

Hình 42: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (1) 74

Hình 43: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (2) 74

Trang 7

Hình 44: Sử dụng hàm alert 75

Hình 45: Sử dụng thẻ button 75

Hình 46: Sử dụng onmouseover là một HTML Attribute 75

Hình 47: Truy cập đến địa chỉ của người dùng 76

Hình 48: Giao diện trang web chứa lỗ hổng DOM Based XSS 78

Hình 49: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật thấp (1) 87

Hình 50: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật thấp (2) 87

Hình 51: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật trung bình 88

Hình 52: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật cao 89

Hình 53: Chèn mã chứa sự kiện alert 90

Hình 54: Truy cập đến địa chỉ của người dùng 91

Trang 8

MỞ ĐẦU

1 LÝ DO CHỌN ĐỀ TÀI

Trong thời đại công nghệ thông tin phát triển mạnh mẽ, máy tính và Internet trở nên phổ biến, kéo theo nhu cầu về bảo mật ngày càng cao Sự gia tăng của các thiết bị kết nối mạng và dịch vụ trực tuyến đã tạo điều kiện cho các cuộc tấn công mạng trở nên đa dạng và phức tạp hơn, gây thách thức lớn cho công tác đảm bảo

an toàn thông tin (ATTT)

Cùng với đó, thiết kế và phát triển website ngày càng quan trọng trong nhiều lĩnh vực như thương mại điện tử, giải trí và truyền thông Tuy nhiên, phần lớn các cuộc tấn công mạng hiện nay đều khai thác lỗ hổng bảo mật trên website, khiến việc kiểm thử bảo mật trở thành một yêu cầu thiết yếu Việc kiểm thử kỹ lưỡng giúp phát hiện và khắc phục các lỗi về tính năng, bảo mật, tích hợp hệ thống cũng như khả năng xử lý lưu lượng truy cập trước khi website đi vào hoạt động

Trong các phương pháp kiểm thử bảo mật, Fuzzing là một kỹ thuật quan trọng giúp phát hiện lỗ hổng phần mềm bằng cách tự động cung cấp các dữ liệu đầu vào bất thường hoặc không hợp lệ để kiểm tra khả năng phản hồi của hệ thống Fuzzing đặc biệt hiệu quả trong việc tìm ra các lỗ hổng như SQL Injection, Cross-Site Scripting (XSS), Buffer Overflow… mà không cần chuyên sâu về lập trình

Xuất phát từ thực tế này, nhóm em đã lựa chọn đề tài “Kiểm thử Fuzzing áp dụng trong kiểm tra lỗ hổng bảo mật web” để nghiên cứu và báo cáo Do thời gian

và kiến thức còn hạn chế, chắc chắn sẽ có thiếu sót, nhóm em rất mong nhận được

sự góp ý của giảng viên để hoàn thiện bài báo cáo tốt hơn

Trang 9

2 MỤC TIÊU NGHIÊN CỨU

Mục tiêu đặt ra khi thực hiện đề tài:

- Nghiên cứu tổng quan về các lỗ hổng bảo mật phổ biến trên ứng dụng web

- Tìm hiểu về kỹ thuật Fuzzing và ứng dụng trong kiểm thử bảo mật phần mềm

- Xây dựng mô hình thử nghiệm Fuzzing trên một số ứng dụng web cụ thể

- Đề xuất giải pháp bảo mật dựa trên kết quả kiểm thử

3 NHIỆM VỤ NGHIÊN CỨU

Nhiệm vụ nghiên cứu của đồ án 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 độ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ấn cô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ần mềm nói chung

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: Nghiên cứu kỹ thuật lập trình bất đồng bộ trên ngôn ngữ Python nhằm tăng tốc độ truy vấn lấy toàn bộ nội dung website, đồng thời trích xuất liên kết và xây dựng lại cấu trúc một website

- Nhiệm vụ 5: 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 ra các khuyến nghị và cách thức khắc phục cho từng loại lỗ hổng

Trang 11

CHƯƠNG 1: TỔNG QUAN LỖ HỔNG BẢO MẬT WEB VÀ KỸ THUẬT

KIỂM THỬ FUZZING 1.1 Các tổng quan cơ bản

1.1.1 Ứng dụng web

Website là một tập hợp các trang web, thường chỉ nằm trong một tên miề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ằ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…)

Một Website thường được bao gồm bởi các thành phần:

- Source code: Mã nguồn website, chứa tệp lệnh trích xuất HTML Để dễ hình dung, ở đây xem như mã nguồn là một phần mềm hoàn chỉnh nó được cài đặt lên web server/hosting của bạn, nó như công cụ để tạo lập và quản lý nội dung website

- 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 đến tên miền nó vẫn

có thể hoạt động bình thường vì nó có địa chỉ IP Bản chất củ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

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

- Web client 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ệt web Người dùng có thể gửi, nhận các dữ liệu từ máy chủ thông qua việc trao đổi luồng thông tin với web server và hiển thị nội dung trang web nhận được trên trình duyệt Các ứng dụng web này có thể

Trang 12

là các trang cổng thông tin điện tử, trao đổi thông tin, mua bán, các diễn đàn, các trang gửi nhận thư,

Kiến trúc thông thường của một ứng dụng web bao gồm các lớp:

- Lớp trình diễn: Lớp này có chức năng hiển thị dữ liệu mà nó nhận được từ web server cho người dùng, ngoài ra còn có thể có chức năng tạo bố cục và giao diện cho trang web

- Lớp ứng dụng: Đây là nơi xử lý của ứng dụng web Nó sẽ xử lý thông tin 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ôn ngữ như CGI, Java, NET, PHP,

và được triển khai trên host hoặc trên các dị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ùng hoặ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 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 web client với web server Dưới đây là mô hình hoạt động của một ứng dụng web:

Trang 13

Hình 1: Mô hình hoạt động của ứng dụng web Một giải pháp dùng để bảo vệ hệ thống mạng thường được sử dụng là tường lửa (firewall), nó có vai trò như lớp rào chắn bên ngoài một hệ thống mạng, vì chức năng chính của firewall là kiểm soát luồng thông tin giữa các máy tính Có thể xem firewall như một bộ lọc thông tin, nó xác định và cho phép một máy tính này có được truy xuất đến một máy tính khác hay không, hay một mạng này có được truy xuất đến mạng kia hay không Người ta thường dùng firewall vào mục đích:

o Cho phép hoặc cấm các dịch vụ truy xuất ra ngoài

o Cho phép quy định cấm các hay cho phép dịch vụ từ bên ngoài truy xuất vào trong

o Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập

Firewall hoạt động dựa trên góp IP do đó kiểm soát được việc truy cập máy tính của người sử dụng

Mô tả hoạt động của website

Trang 14

- Trình duyệt tạo một HTTP Request gửi máy chủ web thông qua các phươ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

- 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

o 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

o 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ế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 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:

o 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 đổi giữa trình duyệt và WebServer

o 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ồ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òn hữu dụng trong việc ngăn chặn hacker này Do đó, các kỹ thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào những sơ suất (hay lỗ hổng) trong quá trình tạo ứng dụng của những nhà phát triển Web hơn là tấn công trực tiếp vào hệ thống mạng, hệ điều hành Tuy nhiên, hacker cũng có thể lợi dụng các lỗ hổng Web để mở rộng sự tấn công của mình vào các hệ thống không liên quan khác

Trang 15

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ác truy nhập không hợp pháp vào hệ thống Các lỗ hổng cũng có thể nằm ngay các dịch vụ cung cấp như sendmail, web, ftp … Ngoài ra các lỗ hổng còn tồn tạ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ư Word processing, Các hệ databases…

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 ẩn chứ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 bảo mật 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ợi dụ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ấ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

Nguyên nhân gây ra lỗ hổng bảo mật website:

- Lỗi do người lập trình, ứng dụng không có thành phần kiểm tra hay kiểm tra yếu cá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

Trang 16

- 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 cho các dịch vụ triển khai trên

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 tìm kiếm và phát hiện ra các lỗi của phần mề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 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 đặ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): là một phương pháp kiểm thử phần mềm được

thực hiện mà không biết được cấu tạo bên trong của phần mềm, là cách mà các tester kiểm tra xem hệ thống như một chiếc hộp đen, không có cách nào nhìn thấy bên trong của cái hộp

o Còn được gọi là kiểm thử hướng dữ liệu hay là kiểm thử hướng in/out

o Người kiểm thử nên xây dựng các nhóm giá trị đầu vào mà sẽ thực thi đầy đủ tất cả các yêu cầu chức năng của chương trình

Trang 17

Hình 2: Kiểm thử hộp đen

- Kiểm thử hộp trắng (White box testing): 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 đảm bả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 1 lần Kiểm thử hộp trắng bao gồm phân tích dòng dữ liệu, điều khiển dòng, dòng thông tin, mã thực hành, ngoại lệ và những lỗi trình bày trong hệ thống để kiểm tra những hành động của phần mềm không được định hướng trước

Hình 3: Kiểm thử hộp trắng

- Kiểm thử hộp xám (Gray box testing): Là sự kết hợp của kiểm thử hộp đen và hộp

trắng Trong kiểm thử hộp xám, cấu trúc bên trong sản phẩm chỉ được biết một phần,

Trang 18

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ới mục đích là để thiết kế đầu vào, nhưng khi kiểm tra thì như ở mức hộp đen

Hình 4: Kiểm thử hộp xám

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ưng tập trung vào các ứng dụng web, nhằm đảm bảo các ứng dụng web hoạt động một cách hiệu quả, chính xác và đáp ứng được nhu cầu của khách hàng Hiện nay, nó đang là một trong những thành phần đang phát triển nhanh nhất của kiể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à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 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ượ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ủ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

Trang 19

1.2 Kỹ thuật Fuzzing trong việc kiểm thử phần mềm

1.2.1 Khái niệm về Fuzzing

Fuzzing là một kỹ thuật phát hiện lỗi của phần mềm bằng cách tự động hoặc bán tự động sử dụng phương pháp lặp lại thao tác sinh dữ liệu sau đó chuyển cho hệ thống xử lý

Fuzzing cung cấp dữ liệu đầu vào cho chương trình (là các dữ liệu không hợp lệ,

dữ liệu không mong đợi: 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), sau đó theo dõi và ghi lại các lỗi, các kết quả trả

về của ứng dụng trong quá trình xử lý của chương trình

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 truy cậ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

Các chương trình và framework được dùng để tạo ra kỹ thuật Fuzzing hoặc thực hiện Fuzzing đượ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

1.2.2 Lịch sử phát triển của kiểm thử Fuzzing

Fuzzing bắt đầu được sử dụng vào cuối những năm 1980 bởi Barton Miller tại Đại học Wisconsin-Madison Kể từ đó, nó trở thành một kỹ thuật quan trọng trong kiểm thử bảo mật, giúp phát hiện nhiều lỗ hổ nghiêm trọng trong hệ thống phần mềm và hạ tầng mạng

1.2.3 Các loại kiểm thử Fuzzing

Các kỹ thuật Fuzzing khác nhau có cách tạo hoặc thay đổi dữ liệu đầu vào khác nhau Sau đây là một số kỹ thuật phổ biến nhất

Trang 20

- Black-box Fuzzing liên quan đến việc tạo ngẫu nhiên dữ liệu đầu vào mà không có

bất kỳ kiến thức nào về cấu trúc bên trong của hệ thống đang được thử nghiệm Mặc

dù loại Fuzzing này có thể tạo ra một lượng lớn dữ liệu đầu vào, nhưng nó có thể không hiệu quả trong việc tìm ra các lỗi và lỗ hổng phức tạp

- White-box Fuzzing liên quan đến việc tạo dữ liệu đầu vào dựa trên phân tích mã

nguồn của hệ thống Phương pháp này có thể tạo ra dữ liệu đầu vào có mục tiêu và liên quan hơn Black-box Fuzzing và tìm ra các lỗi và lỗ hổng phức tạp hơn

- Grey-box Fuzzing là sự kết hợp giữa Black-box và White-box Fuzzing, cân bằng giữa

hiệu quả và hiệu suất Loại Fuzzing này tạo ra dữ liệu đầu vào dựa trên kiến thức một phần về hệ thống đang được thử nghiệm

- Kiểm tra Fuzzing dựa trên đột biến kiểm tra khả năng chịu đựng hoặc xử lý lỗi của hệ thống đối với các biến thể nhỏ hoặc phổ biến của dữ liệu đầu vào Dữ liệu

đầu vào được tạo ra bằng cách sửa đổi dữ liệu đầu vào hợp lệ, mẫu, trước đó hoặc dữ liệu đầu vào hiện có khác Đột biến được thực hiện bằng cách thay đổi, xóa, chèn hoặc hoán đổi bit, byte hoặc khối dữ liệu

- Kiểm tra Fuzzing dựa trên thế hệ kiểm tra tính tuân thủ hoặc khả năng tương thích của hệ thống với các định dạng dữ liệu đầu vào khác nhau hoặc mới Dữ liệu

đầu vào được tạo từ đầu bởi trình tạo số ngẫu nhiên, mô hình hoặc mẫu

- Fuzzing hướng dẫn theo phạm vi phủ sóng có thể tiết lộ hiệu quả các điểm yếu bảo mật tiềm ẩn của hệ thống, chẳng hạn như lỗi hỏng bộ nhớ hoặc lỗi logic Kỹ

thuật kiểm tra này tối đa hóa phạm vi phủ sóng của mã bằng cách liên tục tạo và thay đổi dữ liệu đầu vào và ưu tiên các đầu vào dẫn đến các khu vực chưa được khám phá trước đó của mã

1.2.4 Ưu - nhược điểm của kiểm thử Fuzzing

a) Ưu điểm

Trang 21

o Kiểm thử Fuzzing giúp tìm thấy những lỗi nghiêm trọng nhất về bảo mật hoặc khiếm khuyết

o Kết quả sử dụng kiểm thử Fuzzing hiệu quả hơn khi sử dụng các phương pháp kiểm thử khác

o Kiểm thử Fuzzing cải thiện vấn đề về an ninh khi kiểm tra phần mềm

o Lỗi được tìm thấy bằng Fuzzing đôi khi nghiêm trọng và hầu hết là những lỗi mà tin tặc hay sử dụng Trong đó có crashes, rò rỉ bộ nhớ, unhandled exception, vv

o Những lỗi không được tìm thấy khi kiểm thử bị hạn chế về thời gian và nguồn lực thì cũng được kiểm thử Fuzzing tìm ra

o Fuzzing không cung cấp nhiều kiến thức về hoạt động nội bộ của các phần mềm

o Với chương trình có các đầu vào phức tạp đòi hỏi phải tốn thời gian hơn để tạo ra một fuzzer đủ thông minh

1.2.5 Các lỗ hổng được phát hiện bởi Fuzzing

Một số lỗ hổng được phát hiện bởi Fuzzing

o Tràn bộ nhớ (Buffer Overflow)

o Lỗ hổng truy vấn SQL (SQL Injection)

o Tài nguyên không hồi phục (Memory Leak)

o Lỗ hổng cho phép chèn mã độc hại (XSS)

o Lỗ hổng trong xử lý dữ liệu

Trang 22

1.2.6 Công cụ hỗ trợ kiểm thử Fuzzing

Các công cụ được sử dụng trong bảo mật web có thể được sử dụng rộng rãi trong các thử nghiệm Fuzzing như:

- Peach Fuzzer: cung cấp phạm vi bảo mật mạnh mẽ và bảo mật hơn so với scanner

Các công cụ kiểm tra khác chỉ có thể tìm kiếm các chủ đề đã biết trong khi Peach Fuzzer cho phép người dùng tìm cả các chủ đề đã biết và chưa biết

- Proxy Spike: là một công cụ cấp chuyên nghiệp tìm kiếm các lỗ hổng cấp ứng dụng

trong các ứng dụng web SPIKE Proxy bao gồm các vấn đề cơ bản, chẳng hạn như SQL Injection và cross-site-scripting, nhưng nó hoàn toàn là cơ sở hạ tầng Python mở SPIKE Proxy có sẵn cho Linux và Windows

- Webscarab: được viết bằng Java do đó di động với nhiều nền tảng Để phân tích ứng

dụng, khung công tác Webscarab được sử dụng để giao tiếp sử dụng giao thức HTTP

và HTTPS

- Burp: được sử dụng như một công cụ bảo mật cho ứng dụng web java Burp được sử

dụng để xử lý các cuộc tấn công chống lại các ứng dụng bao gồm kiểm tra các lỗ hổng ứng dụng web như tràn bộ đệm, kịch bản lệnh cross-site, chèn SQL,…

- OWASP WSFuzzer: là một chương trình GPL được viết bằng Python Chương trình

GPL hiện đang nhắm mục tiêu các Dịch vụ Web Trong phiên bản hiện tại của OWASPWSFuzzer, các dịch vụ SOAP dựa trên HTTP là mục tiêu chính

- AppScan: quét và kiểm tra tất cả các lỗ hổng ứng dụng web phổ biến như

SQL-Injection, Cross-Site Scripting và Buffer Overflow

1.2.7 Ứng dụng thực tế của Fuzzing trong bảo mật thông tin

Fuzzing có thể được áp dụng cho một số hệ thống phần mềm và thành phần xử lý

dữ liệu đầu vào của người dùng:

Trang 23

- Ứng dụng, thư viện và API Kiểm thử Fuzz có thể xác định lỗi xác thực đầu vào, rò rỉ

bộ nhớ và sử dụng sai API trong các thành phần phần mềm Để kiểm thử, hãy sử dụng công cụ để nhập dữ liệu ngẫu nhiên hoặc không đúng định dạng vào giao diện của ứng dụng, thư viện hoặc API và theo dõi các sự cố và hành vi không mong muốn

- Hệ điều hành Fuzzing có thể giúp tìm ra tình trạng leo thang đặc quyền, tình trạng chạy đua và rò rỉ bộ nhớ Để kiểm tra, hãy gửi dữ liệu đến hạt nhân, lệnh gọi hệ thống

và trình điều khiển của hệ điều hành

- Giao thức mạng Sử dụng Fuzzing để giúp phát hiện tràn bộ đệm, hỏng bộ nhớ và giả mạo gói tin Để kiểm tra, hãy gửi đầu vào đến giao diện, ngăn xếp và ứng dụng của mạng

- Định dạng tệp Kiểm thử Fuzz có thể xác định lỗi tràn heap, tràn stack và lỗ hổng chuỗi định dạng Để kiểm tra, hãy gửi dữ liệu đến trình phân tích cú pháp tệp, trình xem và

bộ xử lý

- Ứng dụng web và trình duyệt Sử dụng Fuzzing để phát hiện các lỗ hổng có thể khiến ứng dụng web, máy chủ hoặc trình duyệt dễ bị tấn công bằng mã lệnh chéo trang (XSS), tiêm SQL, thực thi mã từ xa hoặc tấn công mạng từ chối dịch vụ (DoS) Để kiểm tra, hãy sử dụng một công cụ tự động để nhập dữ liệu ngẫu nhiên vào các trường của ứng dụng web hoặc trình duyệt và theo dõi các sự cố hoặc hành vi bất ngờ

1.2.8 Kiểm thử ứng dụng website bằng Fuzzing

Fuzzing là một kỹ thuật được áp dụng rất nhiều trong kiểm thử các vấn đề về an ninh trong các phần mềm , hệ thống máy tính và các dịch vụ website Ngoài ra Fuzzing còn là một cách phổ biến nhấ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 sever chứa website hoặc truy cập thẳng vào website đó kèm theo dữ liệu gây lỗi , nhận dữ liệu từ 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

Trang 24

1.3 Lựa chọn Fuzzing cho kiểm tra lỗ hổng ứng dụng web

Lựa chọn Fuzzing, kiểm thử hộp đen để xây dựng ứng dụng quét lỗ hổng website,

ta có thể quét bất kì website nào mà không phụ thuộc vào công nghệ hoặc ngôn ngữ lập trình nó đang sử dụng Nó được sử dụng để kiểm thử một trang web mà không cần biết cách trang web đó làm việc, giống như một kẻ tấn công thự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 tình hình hoạt động của trang web giúp ngăn chặn hành vi tấn công từ hacker

1.4 Tổng kết chương 1

Chương đầu tiên nhóm em đã trình bày toàn bộ cơ sở lý thuyết có liên quan tới website 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ật Fuzzing trong phát hiện các lỗ hổng bảo mật

Từ những nội dung trình bày ở trên đã 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ội dung này là cơ sở lý thuyết cho việc nghiên cứu áp dụng kỹ thuật Fuzzing với các lỗ hổng web trong chương 2

Trang 25

CHƯƠNG 2: NGHIÊN CỨU KỸ THUẬT FUZZING TRONG KIỂM THỬ

ỨNG DỤNG WEB 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ụng giao thức HTTP (port 80) hoặc HTTPS (port 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ường thông tin trong HTTP Headers

Quá trình kiểm thử chủ yếu được thực hiện dựa trên các thông tin đầu vào cho hệ thống, cụ thể các trường dữ liệu của request headers được gửi qua phương thức truyền dữ liệu của HTTP hay HTTPS, chủ yếu là 2 phương thức GET và 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ước khi thực hiện quá trình kiểm thử Fuzzing

Hình 5: Mô hình Fuzzing cho ứng dụng web tổng quát

Mô hình kiểm thử Fuzzing có 2 thành phần chủ yếu là fuzzer và web server:

- Fuzzer là công cụ hay chương trình thực hiện việc kiểm thử bằng kỹ thuật Fuzzing

Trang 26

- Web server là hệ thống máy chủ và cũng là mục tiêu của Fuzzer kiểm thử

Với mỗi loại lỗ hổng website sẽ có những dữ liệu fuzz để thực hiện nhận dạng cho các ứng dụng đó, cụ thể chính là giá trị được thêm vào các biến trước khi gửi tới hệ thống Việc phân tích các Response trả về cũng được thực hiện dựa trên các đặc điểm của từng loại hệ thống Web Server có mã nguồn website được xây dựng trên loại ngôn ngữ lập trình nào

2.1.2 Quy trình Fuzzing trong kiểm thử lỗ hổng bảo mật website

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:

Hình 6: Quy trình Fuzzing

a) Xác định mục tiêu

Trang 27

Mục tiêu được đánh giá có nguy cơ rủi ro cao gồm các lỗ hổng do lỗi của người lập trình hệ thống: SQL Injection, Code Injection, Cross Site Scripting, URL Redirect… Hoặc các lỗi do việc cấu hình hệ thống không an toàn như để đường dẫn vào trang quản trị hệ thống là mặc định, tài khoản mặc định…

Fuzzer cần có đầu vào là địa chỉ IP hay domain của website cho việc xác định đối tượng Fuzzing

b) Định nghĩa đầu vào

Một ứng dụng web nhận các yêu cầu, dữ liệu từ người dùng thông qua các URL hoặc trường biểu mẫu Các yêu cầu của người dùng được chuyển thành các gói tin theo giao thức HTTP và đưa tới Web Server Các trường trong phần tiêu đề của gói tin sẽ được chèn dữ liệu Fuzzing

Fuzzer thực hiện cuộc thử nghiệm thông qua phần tiêu đề khác nhau của giao thức HTTP của website đó, do vậy, việc thực hiện thu thập được toàn diện các điểm đầu vào là các URL, trường biểu mẫu giúp cho Fuzzer đi vào được các ngóc ngách của website và thực hiện Fuzzing

c) Tạo dữ liệu Fuzz

Mục tiêu của Fuzzing là cung cấp dữ liệu bất thường thông qua đầu vào cho mục tiêu mà nó thường không mong đợi nhận được

Giai đoạn này được xem là quan trọng nhất trong Fuzzing Ngày nay, nó được nghiên cứu và phát triển đáng kể bởi các nhà khoa học Mục đích của một fuzzer là để kiểm tra sự tồn tại của lỗ hổng bảo mật trên các đầu vào của ứng dụng Do đó, fuzzer phải tạo ra dữ liệu thử nghiệm mà ở các mức độ mà sau đó nó có thể được thông qua vào mục tiêu ứng dụng đầu vào Dữ liệu được tạo ra có thể dạng file nhị phân (Binary files), file văn bản (Text files) được tạo ra lặp đi lặp lại vào thời điểm bắt đầu của mỗi lần test

Toàn bộ phạm vi của dữ liệu thử nghiệm tạo ra cho Fuzzing ứng với một mục đích nhất định, nó bao gồm nhiều trường riêng biệt (gọi là test case) Các cách tiếp cận chung

để kiểm tra là để nó lặp đi lặp lại, cung cấp các trường hợp thử nghiệm vào các mục tiêu

Trang 28

và theo dõi các phản ứng Trong suốt quá trình kiểm thử, một test case được sử dụng để tìm ra các phản ứng bất thường của ứng dụng, sự kết hợp của một trường hợp thử nghiệm

cụ thể và thông tin về bản chất của sự bất thường tạo ra một báo cáo về lỗ hổng Báo cáo

lỗ hổng có thể được coi như là đầu ra của Fuzzing, tạo điều kiện thuận lợi cho các nhà phát triển trong quá trình khắc phục

Các dữ liệu kiểm thử được tạo ra là một tập hợp các quy tắc hoặc các luật, thông thường là được xác định bởi người sử dụng hoặc do chuyên gia đề xuất

Hiệu quả của quá trình kiểm thử phụ thuộc bộ dữ liệu đầu vào:

-  Độ bao phủ không gian đầu vào: Không gian đầu vào của bộ dữ liệu fuzz cho kiểm thử càng rộng thì hiệu quả đạt càng cao

- Chất lượng của dữ liệu đầu vào: Các dữ liệu đầu vào độc hại tiêu biểu và dị hình sẽ làm sẽ là tăng cường khả năng kiểm thử đối với các yếu tố hoặc cấu trúc trong định nghĩa giao diện

d) Thực hiện Fuzzing

Server nắm bắt dữ liệu từ tiêu đề được gửi bởi khách hàng để thực hiện một số nhiệm vụ ở phía máy chủ Các dữ liệu lần lượt được chèn vào các trường phần tiêu đề của HTTP Request

Các trường tiêu đề sau đây có thể được chèn dữ liệu Fuzzing:

dữ liệu Fuzzing đã sẵn sàng, đó là lúc để gửi nó tới đích

Trang 29

Khi bộ fuzzer bắt đầu Fuzzing, fuzzer theo dõi mục tiêu và đợi cho ứng dụng gặp phải tình trạng lỗi hay phản ứng bất thường do những dữ liệu không thích hợp được truyền đến Tình trạng lỗi và dữ liệu gây ra lỗi sẽ được ghi lại

e) Xác định khả năng khai thác

Giai đoạn này, không đơn thuần các fuzzers phát hiện các lỗ hổng qua việc Fuzzing

mà phải định nghĩa các lỗ hổng được phát hiện Điều này có ý nghĩa hết sức quan trọng trong việc phân tích và báo cáo lỗ hổng Để báo cáo lỗ hổng đòi hỏi Fuzzer hiểu rõ về hoạt động xử lý và được tích hợp vào sự kiện phân loại lỗ hổng tự động

Sau khi một hoặc một số lỗi phần mềm đã được xác định, các fuzzers gửi một danh sách các khiếm khuyết này để một đội ngũ phát triển, để họ có thể sửa chữa chúng Tất nhiên, việc này đòi hỏi một cuộc kiểm tra cho dù khiếm khuyết có hay không có khả năng khai thác nhằm tìm hiểu các tác động gì sẽ ảnh hưởng đến người dùng

2.2 Một số kịch bản thực nghiệm với Fuzzing

2.2.1 Kiểm thử lỗ hổng Cross-site Scripting (XSS)

Lỗ hổng Cross-Site Scripting (XSS) vẫn là một trong những lỗ hổng bảo mật nguy hiểm và phổ biến nhất trong các ứng dụng web hiện nay Mặc dù nhiều biện pháp bảo mật

đã được triển khai, XSS vẫn thường xuyên bị phát hiện và khai thác trên các hệ thống web, gây ra nhiều rủi ro nghiêm trọng như đánh cắp dữ liệu người dùng, chiếm quyền điều khiển phiên (session hijacking), thực thi mã độc trên trình duyệt nạn nhân và nhiều hình thức tấn công khác

Có nhiều phương pháp để phát hiện lỗ hổng XSS, trong đó Fuzzing là một kỹ thuật hiệu quả giúp kiểm thử bảo mật ứng dụng web một cách tự động và có hệ thống Fuzzing hoạt động bằng cách gửi hàng loạt dữ liệu đầu vào ngẫu nhiên hoặc có chủ đích vào các trường nhập liệu của ứng dụng web, từ đó quan sát phản hồi để xác định xem ứng dụng

có thực thi mã JavaScript không mong muốn hay không Nếu hệ thống phản hồi mà không

Trang 30

có cơ chế lọc hoặc mã độc được thực thi thành công, điều đó cho thấy ứng dụng có thể tồn tại lỗ hổng XSS

Để áp dụng quy trình Fuzzing cho kiểm thử lỗ hổng XSS cần thực hiện các bước sau:

- Bước 1: Xác định mục tiêu: Xác định địa chỉ IP hay tên miền của ứng dụng cần

kiểm thử lỗ hổng XSS bằng Fuzzing

- Bước 2: Định nghĩa đầu vào: Xác định các điểm đầu vào trong ứng dụng web mục

tiêu mà ở đó là nơi có thể xảy ra lỗ hổng XSS, bao gồm các tham số URL, các trường nhập dữ liệu mà người dùng có thể tương tác

- Bước 3: Tạo dữ liệu Fuzz: Tạo 1 danh sách các dữ liệu kiểm thử (payload) để thử

nghiệm trên ứng dụng web Các payload này có thể tạo ra bằng thủ công hay sử dụng các công cụ hỗ trợ: Burp Suite Intruder, wfuzz,

- Bước 4: Thực hiện Fuzzing: Sử dụng công cụ Fuzzing (Fuzzer) để tự động chèn

các payload trong danh sách đã được tạo từ bước 3 vào các điểm đầu vào đã được định nghĩa và theo dõi phản hồi của website

- Bước 5: Xác định khả năng khai thác: Kiểm tra phản hồi từ website sau mỗi yêu

cầu Nếu payload xuất hiện trong phản hồi (đặc biệt là nếu nó được thực thi), thì trang web có thể dễ bị tấn công XSS Dựa trên kết quả đó, đánh giá mức độ an toàn của ứng dụng web và báo cho đội ngũ phát triển để họ có thể khắc phục các lỗ hổng tiềm ẩn

2.2.2 Kiểm thử lỗ hổng SQL Injection

Kỹ thuật Fuzzing được sử dụng để kiểm thử lỗ hổng SQL Injection vì nó cho phép

tự động tạo và biến đổi dữ liệu đầu vào nhằm phát hiện các lỗ hổng bảo mật trong ứng dụng web Phương pháp này hoạt động bằng cách cung cấp các dữ liệu không hợp lệ hoặc

Trang 31

bất ngờ cho ứng dụng, sau đó theo dõi và ghi lại các lỗi cũng như phản hồi của hệ thống trong quá trình xử lý

Fuzzing có thể tự động sinh ra các chuỗi dữ liệu đầu vào ngẫu nhiên hoặc theo mẫu

để kiểm tra mức độ an toàn và ổn định của ứng dụng web Khi áp dụng để kiểm thử SQL Injection, kỹ thuật này sẽ tạo ra các chuỗi tấn công SQL độc hại và gửi đến ứng dụng Sau

đó, hệ thống sẽ phân tích phản hồi để xác định xem dữ liệu đầu vào có thể tác động đến truy vấn SQL hay không Nếu ứng dụng xử lý không an toàn và phản hồi bất thường, điều

đó có thể cho thấy sự tồn tại của lỗ hổng SQL Injection

Để áp dụng quy trình Fuzzing cho kiểm thử lỗ hổng SQL Injection cần thực hiện các bước sau:

- Bước 1: Xác định mục tiêu: Xác định địa chỉ IP hoặc tên miền của ứng dụng web

cần kiểm thử

- Bước 2: Định nghĩa đầu vào: Xác định các điểm đầu vào mà ứng dụng sử dụng để

tương tác với cơ sở dữ liệu mà có thể bị lỗ hổng SQL Injection, bao gồm các trường nhập dữ liệu, tham số URL, tham số của các yêu cầu HTTP, và các điểm đầu vào khác mà người dùng tương tác với ứng dụng

- Bước 3: Tạo dữ liệu Fuzz: Tạo một danh sách các payload SQL Injection để thử

nghiệm ứng dụng web Các payload này có thể được thu thập từ nguồn đáng tin cậy hoặc tạo mới dựa trên các kỹ thuật lỗ hổng SQL Injection phổ biến

- Bước 4: Thực hiện Fuzzing: Sử dụng một công cụ Fuzzing như SQLMap hoặc mã

tự động để gửi các chuỗi tấn công SQL Injection tới các điểm đầu vào của ứng dụng web đã được định nghĩa và theo dõi các phản ứng từ hệ thống cũng như dữ liệu trả

về

- Bước 5: Xác định khả năng khai thác: Kiểm tra kết quả của các yêu cầu gửi đến

ứng dụng web sau mỗi lần thử nghiệm Xác định xem liệu các chuỗi tấn công SQL

Trang 32

Injection đã tìm thấy có thể khai thác thành công hay không Nếu có bất kỳ dấu hiệu nào của kết quả không mong muốn, chẳng hạn như lỗi SQL hoặc thông tin nhạy cảm được trả về, đó là một dấu hiệu của lỗ hổng SQL Injection Dựa trên kết quả của kiểm thử, đánh giá mức độ nghiêm trọng của lỗ hổng SQL Injection và báo cáo cho đội ngũ phát triển để họ có thể khắc phục Đề xuất các biện pháp sửa lỗi cụ thể

và theo dõi việc triển khai các sửa lỗi này

2.3 Tổng kết chương 2

Trong chương này chúng em đã trình bày mô hình và quy trình Fuzzing trong kiểm thử bảo mật ứng dụng web, giúp làm rõ cách thức áp dụng kỹ thuật này trong thực tế Để minh họa, nhóm đã xây dựng hai kịch bản kiểm thử tập trung vào hai lỗ hổng phổ biến: SQL Injection và Cross-site Scripting Trên cơ sở những nội dung đã trình bày, chương 3

sẽ tiến hành các thử nghiệm thực tế, áp dụng Fuzzing để kiểm tra mức độ an toàn của các ứng dụng web, từ đó đánh giá hiệu quả của phương pháp này trong phát hiện lỗ hổng bảo mật

Trang 33

CHƯƠNG 3: THỰC NGHIỆM VỀ QUÁ TRÌNH FUZZING TRONG KIỂM THỬ

ỨNG DỤNG WEB 3.1 Xây dựng chương trình

3.1.1 Cấu hình máy chủ web

- Nền tảng máy chủ web DVWA: Apache2

- Cơ sở dữ liệu: MySQL

- Ngôn ngữ lập trình: PHP

- Cổng cơ sở dữ liệu đang sử dụng: 3306

- Hệ điều hành : Kali Linux

3.1.2 Dựng phòng thực nghiệm

Trong phần này, nhóm sẽ trình bày cách dựng một phòng thực nghiệm dùng để kiểm thử các lỗ hổng ứng dụng web Phòng thực nghiệm mà nhóm chọn là DVWA DVWA (Damn Vulnerable Web Application) là một ứng dụng web tiêu chuẩn mở được thiết kế để chú tâm vào việc học các kỹ thuật bảo mật web qua việc thực chiến, cho phép người học có cơ hội tìm hiểu sâu vào các lỗ hổng thông qua việc thử nghiệm trong môi trường được kiểm soát Sau đây là cách để triển khai DVWA trên Kali Linux:

Bước 1: Tải xuống DVWA

- Bước đầu tiên cần tải xuống DVWA từ GitHub vào thư mục /var/www/html trên Kali Linux Đây là nơi vị trí lưu trữ các tệp Localhost trong hệ thống Linux Khởi chạy Terminal và thay đổi thư mục hiện tại thành thư mục /var/www/html bằng lệnh bên dưới:

$ cd /var/www/html

Trang 34

- Sau khi đã đổi thành công thư mục thì sẽ bắt đầu tải DVWA từ GitHub về bằng lệnh sau:

$ sudo git clone https://github.com/digininja/DVWA

- Khi tải thành công DVWA về máy thì sẽ đổi tên thư mục DVWA thành dvwa để thuận tiện cho việc cài đặt các lệnh sau này:

$ sudo mv DVWA dvwa

Bước 2: Cấu hình DVWA

- Sau khi tải xuống DVWA trong thư mục /var/www/html, cần đặt quyền đọc, ghi và

thực thi cho thư mục DVWA bằng dòng lệnh dưới đây:

$ sudo chmod -R 777 dvwa/

- Sau khi thực hiện thành công lệnh, cần thiết lập người dùng và mật khẩu cần thiết để truy cập cơ sở dữ liệu Thay đổi thư mục hiện tại đến thư mục config bằng lệnh bên dưới

$ cd dvwa/config

- Khi chạy lệnh ls để xem các tệp trong thư mục, sẽ thấy tệp config.inc.php.dist Đó là file gốc chứa các cấu hình mặc định Người dùng sẽ tạo một bản sao của tệp này có tên config.inc.php và tệp config.inc.php.dist ban đầu sẽ đóng vai trò là bản sao lưu trong trường hợp có sự cố xảy ra

$ sudo cp config.inc.php.dist config.inc.php

- Chạy lệnh bên dưới để mở tệp mới tạo bằng trình soạn thảo nano và thực hiện các thay đổi cần thiết, như trong hình bên dưới Đặt db_user là user và db_password là pass

$ sudo nano config.inc.php

Và đây là kết quả sau khi cấu hình:

Trang 35

Hình 7: Cấu hình DVWA

Bước 3: Cấu hình cơ sở dữ liệu MySQL

- Để khởi động dịch vụ MySQL, sử dụng câu lệnh sau:

$ sudo service mysql start

- Sau đó có thể kiểm tra xem dịch vụ có đang chạy không bằng lệnh:

$ systemctl status mysql

kết quả sẽ hiện ra như trong ảnh dưới đây nếu dịch vụ đang chạy

Hình 8: Trạng thái của MySQL

Trang 36

- Tiếp đến, người dùng phải đăng nhập vào cơ sở dữ liệu MySQL bằng lệnh dưới với quyền root MySQL sẽ mở ra, như trong hình bên dưới:

$ sudo mysql -u root -p

Hình 9: Đăng nhập vào MySQL với quyền root

- Tạo một người dùng mới với tên người dùng và mật khẩu được đặt trong tệp cấu hình ứng dụng DVWA Trong trường hợp này, tên người dùng là user và mật khẩu là pass Máy chủ đang sử dụng là Localhost (127.0.0.1) Sử dụng lệnh dưới đây:

create user 'user'@'127.0.0.1' identified by 'pass';

- Người dùng mới này cần được cấp đặc quyền trên cơ sở dữ liệu dvwa grant all privileges on dvwa.* to 'user'@'127.0.0.1' identified by 'pass';

- Gõ “exit” để thoát cơ sở dữ liệu Đến bước này là đã cấu hình xong ứng dụng DVWA

và cơ sở dữ liệu MySQL

Bước 4: Cấu hình Apache Server

- Bây giờ cần cấu hình server Sử dụng lệnh bên dưới để thay đổi vị trí hiện tại trên Terminal để trỏ đến thư mục /etc/php/8.2/apache2

Trang 37

- Cuộn xuống và tìm hai dòng sau: allow_url_fopen và allow_url_include Đặt cả hai là On Lưu file (Ctrl + O, sau đó Enter) và Thoát (Ctrl + X)

- Khởi động Apache server bằng lệnh bên dưới

$ sudo service apache2 start

- Để kiểm tra xem dịch vụ có khởi động thành công hay không, hãy sử dụng lệnh:

$ systemctl status apache2.service

- Nếu kết quả hiện thị như trong ảnh thì đã khởi động thành công Apache server

Hình 10: Trạng thái của Apache2

Bước 5: Truy cập DVWA trên trình duyệt

- Để truy cập DVWA trên trình duyệt, cần truy vấn danh sách người dùng MySQL cùng với host mà họ có thể đăng nhập từ đó

$ sudo mysql -u root -p -e "SELECT user, host FROM mysql.user;"

Trang 38

Hình 11: Truy vấn danh sách người dùng MySQL

- Dùng lệnh sau để sửa file cấu hình DVWA như hình:

$ sudo nano /var/www/html/dvwa/config/config.inc.php

Hình 12: Chỉnh sửa file cấu hình DVWA

- Mọi thứ cần thiết đã được cấu hình xong và có thể tiến hành khởi chạy DVWA trên trình duyệt bằng đường dẫn http://127.0.0.1/dvwa/ Tài khoản và mật khẩu mặc định

là “admin - password”

Hình 13: Giao diện trang đăng nhập web DVWA

Trang 39

- Sau khi đăng nhập xong, cần vào mục DVWA Security để chuyển mức độ bảo mật trang web về thấp Việc này giúp thực hiện các kịch bản thực nghiệm dễ hơn

Hình 14: DVWA Security

3.2 Triển khai thực nghiệm

3.2.1 Kiểm thử lỗ hổng SQL Injection sử dụng kỹ thuật Fuzzing

Dựa trên kịch bản kiểm thử lỗ hổng SQL Injection bằng Fuzzing ở trên, dưới đây

là quá trình thực hiện các bước kiểm thử

Bước 1: Xác định mục tiêu kiểm thử

- Chọn trang: http://127.0.0.1/dvwa/vulnerabilities/sqli/ là mục tiêu để tiến hành kiểm thử , xác định mục tiêu có thể chứa lỗ hổng SQL Injection

(1) Trường hợp trang web có mức độ bảo mật thấp:

Trang 40

Hình 15: Ô nhập User ID của trang web có mức độ bảo mật thấp

- Sau khi nhập một tham số bình thường như hệ thống yêu cầu, sử dụng Burp Suite để thực hiện các bước tiếp theo

Hình 16: Các Request được thực hiện

- Tái tạo Request bằng Repeater Sau đó chỉnh sửa

Hình 17: Nơi có thể truyền payload của Burp Suite

- Có thể thấy khi trang web được đặt mức độ bảo mật thấp, phương thức gửi Request là phương thức GET Thử thay đổi bằng cách thêm ‘ hoặc “

Ngày đăng: 14/05/2025, 14:10

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Phạm Thị Ngọc Trâm (2016), “Nghiên cứu phương pháp và công cụ kiểm thử tự động tính bảo mật ứng dụng web”, Đồ án tốt nghiệp, Học viện Kỹ thuật mật mã, Hà Nội Sách, tạp chí
Tiêu đề: Nghiên cứu phương pháp và công cụ kiểm thử tự động tính bảo mật ứng dụng web
Tác giả: Phạm Thị Ngọc Trâm
Nhà XB: Học viện Kỹ thuật mật mã
Năm: 2016
[3] Phạm Thị Trang (2009), “Thiết kế test case trong kiểm thử phần mềm”, Đồ án tốt nghiệp, Đại học Thái Nguyên, Thái Nguyên Sách, tạp chí
Tiêu đề: Thiết kế test case trong kiểm thử phần mềm
Tác giả: Phạm Thị Trang
Nhà XB: Đại học Thái Nguyên
Năm: 2009
[4] Nguyễn Ngọc Quân (2014), “Lỗ hổng Cross Site Scripting (XSS) và biện pháp khắc phục”, Bài báo tạp chí, Học viện Công nghệ Bưu chính Viễn thông, Hà Nội Sách, tạp chí
Tiêu đề: Lỗ hổng Cross Site Scripting (XSS) và biện pháp khắc phục
Tác giả: Nguyễn Ngọc Quân
Nhà XB: Học viện Công nghệ Bưu chính Viễn thông
Năm: 2014
[5] Lê Ngọc Thức (2012), “Xây dựng công cụ đánh giá an toàn website”, Luận văn thạc sĩ, Đại học Lạc Hồng, Đồng Nai Sách, tạp chí
Tiêu đề: Xây dựng công cụ đánh giá an toàn website
Tác giả: Lê Ngọc Thức
Nhà XB: Đại học Lạc Hồng
Năm: 2012
[6] Nguyễn Văn Đại (2011), “Ứng dụng web và vấn đề bảo mật”, Đồ án tốt nghiệp, Đại học Công thương, Hà Nội.⚫ Tài liệu tiếng Anh Sách, tạp chí
Tiêu đề: Ứng dụng web và vấn đề bảo mật
Tác giả: Nguyễn Văn Đại
Nhà XB: Đại học Công thương, Hà Nội
Năm: 2011
[1] Justin Seitz (2009), "Gray Hat Python: Python Programming for Hackers and Reverse Engineers&#34 Sách, tạp chí
Tiêu đề: Gray Hat Python: Python Programming for Hackers and Reverse Engineers
Tác giả: Justin Seitz
Năm: 2009
[2] OWASP (2021), “The ten most critical web application security risks”, OWASP, USA Sách, tạp chí
Tiêu đề: The ten most critical web application security risks
Tác giả: OWASP
Nhà XB: OWASP
Năm: 2021
[3] Justin Clarke (2009), “SQL Injection Attacks and Defense”, Gotham Digital Science, UK Sách, tạp chí
Tiêu đề: SQL Injection Attacks and Defense
Tác giả: Justin Clarke
Nhà XB: Gotham Digital Science
Năm: 2009
[4] The Internet Society (1999), “Request for Comments (RFC) 2616”, Internet Engineering Task Force - IETF, USA Sách, tạp chí
Tiêu đề: Request for Comments (RFC) 2616
Tác giả: The Internet Society
Nhà XB: Internet Engineering Task Force - IETF
Năm: 1999
[1] Fuzzing: https://en.wikipedia.org/wiki/Fuzzing [2] Web crawling with Python:https://www.scrapingbee.com/blog/crawling-python/ Link
[3] Các phương pháp kiểm tra bảo mật cho website: https://hub.whitehub.net/cac-phuong-phap-kiem-tra-ung-dung-web/ Link
[4] Tìm hiểu về Fuzz Testing: https://viblo.asia/p/tim-hieu-ve-fuzz-testing-YWOZrDzv5Q0 Link
[5] Sơ lược về Fuzzing: https://kcntt.duytan.edu.vn/Home/ArticleDetail/vn/128/2461/bai-01-so-luoc-ve-fuzzing-testing Link
[6] Mã hóa trạng thái trong HTTP: https://vietjack.com/http/http_status_codes.jsp Link
[7] Ứng dụng kỹ thuật fuzzing trong việc tìm lỗ hổng bảo mật Website: https://viblo.asia/p/ung-dung-ky-thuat-fuzzing-trong-viec-tim-lo-hong-bao-mat-website-RQqKLM64Z7z Link

HÌNH ẢNH LIÊN QUAN

Hình 1: Mô hình hoạt động của ứng dụng web - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 1 Mô hình hoạt động của ứng dụng web (Trang 13)
Hình 2: Kiểm thử hộp đen - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 2 Kiểm thử hộp đen (Trang 17)
Hình 5:  Mô hình Fuzzing cho ứng dụng web tổng quát - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 5 Mô hình Fuzzing cho ứng dụng web tổng quát (Trang 25)
Hình 6: Quy trình Fuzzing - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 6 Quy trình Fuzzing (Trang 26)
Hình 7: Cấu hình DVWA - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 7 Cấu hình DVWA (Trang 35)
Hình 24: Giao diện web được bảo mật ở mức độ trung bình - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 24 Giao diện web được bảo mật ở mức độ trung bình (Trang 44)
Hình 26: Kết quả khi kiểm thử SQLi ở mức độ bảo mật thấp (2) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 26 Kết quả khi kiểm thử SQLi ở mức độ bảo mật thấp (2) (Trang 55)
Hình 35: Giao diện trang web có chứa lỗ hổng Reflected XSS - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 35 Giao diện trang web có chứa lỗ hổng Reflected XSS (Trang 60)
Hình 39: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật thấp (2) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 39 Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật thấp (2) (Trang 73)
Hình 41: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật trung bình (2) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 41 Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật trung bình (2) (Trang 74)
Hình 42: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (1) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 42 Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (1) (Trang 75)
Hình 43: Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (2) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 43 Kiểm tra lỗ hổng Reflected XSS với mức độ bảo mật cao (2) (Trang 75)
Hình 49: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật thấp (1) - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 49 Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật thấp (1) (Trang 88)
Hình 51: Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật trung bình - Báo cáo môn học kỹ thuật lập trình Đề tài kiểm thử fuzzing Áp dụng trong kiểm tra lỗ hổng bảo mật web
Hình 51 Kiểm tra lỗ hổng Dom Based XSS với mức độ bảo mật trung bình (Trang 89)

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w