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

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

75 2 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 Ứng Dụng Web
Tác giả 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ã
Trường học Học Viện Kỹ Thuật Mật Mã
Chuyên ngành An Toàn Thông Tin
Thể loại Đề Cương Chi Tiết Học Phần Kỹ Thuật Lập Trình
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 75
Dung lượng 1,82 MB

Nội dung

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

MỤC LỤC

MỤC LỤC ii

DANH MỤC HÌNH iv

DANH MỤC BẢNG v

DANH MỤC TỪ VIẾT TẮT vi

MỞ ĐẦU 1

Chương 1 TỔNG QUAN VỀ KIỂM THỬ WEBSITE 4

1.1 Các khái niệm cơ bản 4

1.1.1 Website 4

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

1.1.3 Lỗ hổng website 14

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

1.1.5 Kiểm thử website 16

1.1.6 Fuzzing 17

1.2 Các loại lỗ hổng bảo mật web 17

1.2.1 Phân loại các lỗ hổng bảo mật web 17

1.2.2 Một số lỗ hổng bảo mật ứng dụng web chính 20

1.3 Kỹ thuật Fuzzing 26

1.3.1 Lịch sử 26

1.3.2 Phân loại Fuzzing 27

1.3.3 Ưu nhược điểm của Fuzzing 29

1.4 Lựa chọn Fuzzing cho kiểm tra lỗ hổng website 30

1.5 Kết luận chương 1 32

Chương 2 KỸ THUẬT FUZZING TRONG KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE 33

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

2.1.1 Mô hình Fuzzing 33

2.1.2 Quy trình Fuzzing trong kiểm thử bảo mật website 34

Trang 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

2.5 Kết luận chương 2 50

Chương 3 XÂY DỰNG ỨNG DỤNG KIỂM TRA LỖ HỔNG BẢO MẬT WEBSITE 51

3.1 Đặc tả chương trình 51

3.1.1 Mô tả 51

3.1.2 Yêu cầu 51

3.2 Thiết kế hệ thống 52

3.2.1 Kiến trúc chương trình 52

3.2.2 Thiết kế chức năng hệ thống 53

3.3 Xây dựng chương trình 55

3.3.1 Phương thức xử lý 55

3.3.2 Xây dựng các thành phần chính 57

3.4 Triển khai, thử nghiệm 60

3.4.1 Cài đặt ứng dụng 60

3.4.2 Thử nghiệm, đánh giá 62

3.5 Kết luận chương 3 65

KẾT LUẬN 66

TÀI LIỆU THAM KHẢO 67

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

TỔNG HỢP CÁC FILE TRONG PROJECT 70

Trang 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 25Y Hình 2 1 Mô hình Fuzzing cho ứng dụng web 34

Hình 2 2 Quy trình Fuzzing 34

Hình 2 3 Sơ đồ của một crawler 39

Hình 2 4 Mô hình thu thập URL theo mã HTML 4 Hình 3 1 Kiến trúc phân tầng của ứng dụng 53

Hình 3 2 Luồng xử lý chức năng thu thập URL 54

Hình 3 3 Luồng xử lý chức năng quét lỗ hổng website 55

Hình 3 4 Giao tiếp giữa Fuzzer và Server 56

Hình 3 5 Thành phần thu thập điểm đầu vào 57

Hình 3 6 Thành phần tấn công với lỗ hổng SQL injection 58

Hình 3 7 Thành phần tấn công với lỗ hổng XSS 58

Hình 3 8 Thành phần tấn công với lỗ hổng File inclusion 59

Hình 3 9 Thành phần phân tích với lỗ hổng SQL injection 59

Hình 3 10 Thành phần phân tích với lỗ hổng XSS 60

Hình 3 11 Thành phần phân tích với lỗ hổng File inclusion 60

Hình 3 12 Giao diện ứng dụng 61

Hình 3 13 Website thử nghiệm 63

Hình 3 14 Các lỗ hổng được phát hiện 63

Trang 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ẮT

Từ viết

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

HTML Hypertext Markup Language Ngôn ngữ đánh dấu siêu văn

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

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

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

OWASP The Open Web Application

Security Project

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

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

Trang 7

Theo thống kê của Bkav, tại Việt Nam, trung bình mỗi tháng lại có hơn

300 website của các doanh nghiệp, tổ chức trong nước bị tấn công Kết quảnghiên cứu của Bkav cũng cho thấy, tại Việt Nam có tới 40% website tồn tạilỗ hổng

Cũng theo nhận định của các chuyên gia, hầu hết cơ quan doanh nghiệpcủa Việt Nam chưa bố trí được nhân sự phụ trách an ninh mạng hoặc năng lực

và nhận thức của đội ngũ này chưa tương xứng với tình hình thực tế Đó lànhững nguyên nhân chính và cũng chưa có một sản phẩm hay quy trình chuẩnnào hỗ trợ cho những người quản trị hệ thống phát hiện và ngăn chặn sớmnhững lỗ hổng đang tồn tại trên hệ thống

Từ tình hình trên ta thấy cần thiết có một giải pháp, kỹ thuật xây dựng

hệ thống kiểm thử bảo mật cho mỗi hệ thống website, nhằm phát hiện và cảnhbáo các lỗ hổng trên hệ thống website một cách chính xác Các lỗ hổng do lỗicủa người lập trình hệ thống: SQL Injection, Code Injection, Cross SiteScripting, URL Redirect,… Các lỗi do việc cấu hình hệ thống không an toànnhư phân quyền tài nguyên trên máy chủ không nghiêm ngặt, đặt tài khoảnmặc định,…

Trong phương pháp kiểm thử hộp đen, Fuzzing là một kỹ thuật pháthiện lỗ hổng phần mềm, được thực hiện bằng cách cung cấp tự động hoặc bántự động bộ dữ liệu đầu vào bất thường, không hợp lệ hay ngẫu nhiên vàochương trình nhằm theo dõi và xác định các trường hợp, hành vi bất thườngtrong quá trình xử lý và trong kết quả trả về để phát hiện lỗ hổng bảo mật tiềmẩn

Kỹ thuật fuzzing mang lại hiệu quả rất lớn cho việc kiểm thử cho cácvấn đề về an ninh trong các phần mềm, hệ thống máy tính và các ứng dụngdịch vụ Hiện tại, fuzzing là một kỹ thuật không thể tách rời của cộng đồngkiểm thử với rất nhiều các mã nguồn mở, công cụ thương mại và những côngtrình nghiên cứu liên quan

Xuất phát từ thực tế trên,chúng em đã lựa chọn đề tài “Kiểm thử Fuzzing ứng dụng Web” thuộc phạm vi các vấn đề đã nêu để làm đề tài

Trang 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ệm

cơ bản có liên quan đến đề tài như khái niệm về website, lỗ hổng bảo mật, kiểm thử, kỹ thuật Fuzzing, tạo cơ sở lý thuyết cho việc đi sâu nghiên cứu các vấn đề của bài báo cáo

Ngoài ra, chương này cũng trình bày chi tiết về các loại lỗ hổng bảo mật web, đưa ra nguyên nhân, cơ chế phát hiện và cách phòng chống cho từng loại Nó là cơ sở tạo ra những đặc trưng cho quá trình phân tích phát hiện lỗ hổng của Fuzzing trong chương 2.

Tại đây cũng trình bày tổng quan về kỹ thuật Fuzzing bao gồm phân loại kỹ thuật, các ưu, nhược điểm của nó, từ đó đưa ra các lý do lựa chọn Fuzzing là kỹ thuật được sử dụng cho kiểm thử bảo mật website.

1.1 Các khái niệm cơ bản 1.1.1 Website

Website là một tập hợp các trang web, thường chỉ nằm trong một tênmiền hoặc tên miền phụ trên World Wide Web của Internet Một trang web làtập tin HTML hoặc XHTML có thể truy nhập dùng giao thức HTTP Website

có thể được xây dựng từ các tệp tin HTML (website tĩnh) hoặc vận hành bằngcác CMS chạy trên máy chủ (website động) Website có thể được xây dựngbằng nhiều ngôn ngữ lập trình khác nhau (PHP, NET, Java, Ruby on Rails…)[12]

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

- Source code: Mã nguồn website, chứa tệp lệnh trích xuất HTML

- Hosting: Bộ nhớ lưu trữ website

- Database: Dữ liệu nội dung website

- Domain: Tên miền của website, thực chất một website không cần đếntên miền nó vẫn có thể hoạt động bình thường vì nó có địa chỉ IP Bản chấtcủa tên miền là nó được ánh xạ sang địa chỉ IP thông qua máy chủ DNS, tạo

ra sự đơn giản cho người dùng dễ dàng truy cập vào web thông qua tên miền,thay vì phải nhớ địa chỉ IP của website

Trang 11

Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP đểtương tác với người dùng hay hệ thống khác.

Trình khách là một trình duyệt web như: Internet Explorer, Chrome,FireFox hay có thể là một chương trình có chức năng như một trình duyệtweb

Một ứng dụng web thường có kiến trúc gồm:

HTML

Java Script

Active Server Page

- Lớp ứng dụng: Đây là nơi xử lý của ứng dụng web Nó sẽ xử lý thôngtin yêu cầu từ người dùng, đưa ra quyết định, gửi kết quả đến lớp trình diễn.Lớp này thường được cài đặt bằng các kỹ thuật lập trình dựa trên các ngônngữ như CGI, Java, NET, PHP, và được triển khai trên host hoặc trên cácdịch vụ của máy chủ như Apache của Linux, IIS của Windows Server,…

- Lớp dữ liệu: Lớp này là các hệ quản trị dữ liệu SQL như MySQL,SQL Server, Oracle, chịu tránh nhiệm quản lý các file dữ liệu và quyền sửdụng dữ liệu của toàn bộ website Thường được triển khai trực tiếp trên cùnghoặc tách biệt riêng với web server

Việc phân lớp trong kiến trúc web tạo ra các hoạt động đơn giản nhưng

có liên kết chặt chẽ giữa các lớp Nó giúp cho người quản trị dễ dàng triển

Trang 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ồng

dữ liệu có định dạng theo giao thức HTTP, nó gồm 2 phần:

- Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng tháitrao đổi giữa trình duyệt và WebServer

- Body là phần nội dung dữ liệu mà Server gửi về Client, nó có thể làmột file HTML, một hình ảnh, một đoạn phim hay một văn bản bất kì

Khi giao dịch hoàn tất, máy chủ web thực hiện ghi vào tệp tin nhật ký

mô tả giao dịch vừa thực hiện

Với firewall, luồng thông tin giữa máy chủ và máy khách là luồngthông tin hợp lệ Vì thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Webthì firewall không còn hữu dụng trong việc ngăn chặn hacker này

1.1.1.2 Các thuật ngữ liên quan

a Http header

HTTP header là phần đầu của gói tin giao thức HTTP, thông tin màmáy khách và máy chủ gửi cho nhau Những thông tin máy khách gửi chomáy chủ được gọi là HTTP requests (yêu cầu) còn máy chủ gửi cho máykhách là HTTP responses (trả lời) Thông thường, một HTTP header gồmnhiều dòng, mỗi dòng chứa tên tham số và giá trị Một số tham số có thể đượcdùng trong cả header yêu cầu và header trả lời, còn số khác thì chỉ đuợc dùngriêng trong từng loại [2]

Ví dụ: Một header yêu cầu được thực hiện gửi tới đường dẫn:

http://testphp.vulnweb.com/favicon.ico

GET /favicon.ico HTTP/1.1

Trang 14

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

T

1 Host Tên miền của máy chủ và số cổng TCP trên máy

chủ đang nghe Số cổng có thể bị bỏ qua nếu làcổng tiêu chuẩn cho dịch vụ được yêu cầu (80)

2 Connection Các tùy chọn cho kiểu kết nối ngắt hay kết nối liên

tục sau khi hoàn thành một giao dịch

3 Accept Các loại nội dung có thể chấp nhận

4 Accept-Language Cho biết loại ngôn ngữ đang được dùng trên

website này

5 Accept-Encoding Danh sách các loại mã hóa được chấp nhận

6 Authorization Chứng thực cho xác thực HTTP

7 User-Agent Trường User-Agent chứa các thông tin về tác nhân

tạo yêu cầu

8 Referer Cho biết địa chỉ của trang web tham chiếu tới

9 Cookie Trường này chứa một cặp tên/giá trị của thông tin

để giữ lại cho URL

Trang 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:

Bảng 1.2 Bảng mã trạng thái HTTP [13]

1 1xx Information (Thông tin): Khi nhận được những mã như vậy

tức là request đã được server tiếp nhận và quá trình xử lýrequest đang được tiếp tục

2 2xx Success (Thành công): Khi nhận được những mã như vậy tức

là request đã được server tiếp nhận, hiểu và xử lý thành công

3 3xx Redirection (Chuyển hướng): Mã trạng thái này cho biết

client cần có thêm action để hoàn thành request

4 4xx Client Error (Lỗi Client): Nó nghĩa là request chứa cú pháp

không chính xác hoặc không được thực hiện

5 5xx Server Error (Lỗi Server): Nó nghĩa là Server thất bại với

việc thực hiện một request nhìn như có vẻ khả thi

Trang 16

- Tiếp theo là các trường tham số, mỗi trường mang những đặc trưngcho một thông tin về gói tin HTTP response trả về Một số trường được mô tảnhư bảng 1.3 dưới đây:

Bảng 1.3 Một số trường tham số trong HTTP Response

ST

T

1 Date Thời điểm phản hồi từ phía Server

2 Server Các thông tin về Server, thông tin về phần mềm

được sử dụng bởi Server để kiểm soát yêu cầu

3 Content-Length Độ dài của gói tin HTTP Response

4 Content-Type Loại nội dung gói tin gửi về

5 Set-Cookie Trường này chứa một cặp tên/giá trị của thông tin để

giữ lại cho URL

6 Cache-control Để xác định các tham số cho bộ nhớ đệm hoặc yêu

cầu các loại cụ thể về bộ nhớ đệm

7 Location Thông tin về đường dẫn sẽ được chuyển hướng tới,

thường đi cùng mã trạng thái 302

8 Age Lượng thời gian từ khi phản hồi được tạo ra tại

Server ban đầu của người gửi

9 Pragma Các chỉ dẫn cụ thể để thực hiện

- Khoảng cách một dòng trống để báo hiệu kết thúc header để nối tiếpphần thân của HTTP response

b Session

HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa làHTTP không lưu trữ trạng thái làm việc giữa trình duyệt với máy chủ Sựthiếu sót này gây khó khăn cho một số ứng dụng Web, bởi vì máy chủ khôngbiết được trước đó trình duyệt đã có những trạng thái nào Vì thế, để giảiquyết vấn đề này, ứng dụng Web đưa ra một khái niệm phiên làm việc(Session) Còn SessionID là một chuỗi để chứng thực phiên làm việc Một sốmáy chủ sẽ cung cấp một sessionID cho người dùng khi họ xem trang webtrên máy chủ

Trang 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

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

Domain Flag Path Secure Expiration Name Value

- Domain: Tên miền của trang web đã tạo cookie cung cấp cho ngườidùng (www.redhat.com)

- Flag: Mang giá trị True/False - xác định các máy khác với cùng tênmiền có được truy xuất đến cookie hay không

- Path: Phạm vi các địa chỉ có thể truy xuất cookie

- Sercure: mang giá trị True/False - Xác định quá trình truyền cookie làkết nối có sử dụng mã hóa SSL hay không

- Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ0:00:00 giờ GMT ngày 01/01/1970 Nếu giá trị này không được thiết lập thìtrình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM

và sẽ xoá nó khi trình duyệt bị đóng

- Name: Tên biến (Apache)

- Value: Với cookie được tạo ở trên thì giá trị của Apache là64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tênmiền http://www.redhat.com

Ví dụ chuỗi lệnh trong HTTP header dưới đây sẽ tạo một cookie:

Set-Cookie: Apache="64.3.40.151.16018996349247480"; path="/";

domain="www.redhat.com"; path_spec; expires="2006-07-27 19:39:15Z"; version=0

- Các cookie của Internet Explorer được đặt trong một tập tinCookies.txt, với đường dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.txt

- Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là mộtcookie và thường được đặt tại C:\Documents and Setting\ [username]\Cookies

Trang 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ăng

và tốc độ mà không quan tâm đến an toàn Ứng dụng không có thành phầnkiểm tra hay kiểm tra yếu các dữ liệu đầu vào từ người dùng, từ đó, kẻ tấncông có thể lợi dụng lỗ hổng từ mã nguồn để khai thác và tấn công hệ thống

- Lỗi do người quản trị cấu hình hệ thống yếu, cấu hình hệ thống mặcđịnh, tài khoản mặc định, không thường xuyên cập nhật phiên bản mới chocác dịch vụ triển khai trên hệ thống

- Lỗi nằm trong các giao thức, các nền tảng hay chuẩn xây dựng hệthống đã được công khai Ví dụ như giao thức HTTP hoạt động theo chuẩn

mô hình client/server đơn giản và khi xây dựng giao thức này người ta chưaquan tâm đến vấn đề bảo mật

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

Kiểm thử phần mềm là một tiến trình hay một tập hợp các tiến trìnhđược thiết kế và thực hiện nhằm đảm bảo cho hệ thống thực hiện theo đúngnhững yêu cầu mà chúng đã được thiết kế và không thực hiện những điềukhông mong muốn Kiểm thử phần mềm là một pha quan trọng trong quátrình xây dựng và phát triển hệ thống, chúng giúp cho người phát triển hệthống và các khách hàng thấy được hệ thống mới đã đáp ứng các yêu cầu đặtra

Các phương pháp kiểm thử phần mềm có thể chia làm 3 loại:

- Kiểm thử hộp đen (Black box testing)

- Kiểm thử hộp trắng (White box testing)

- Kiểm thử hộp xám (Gray box testing)

1.1.4.1 Kiểm thử hộp đen

Là phương pháp kiểm thử được thực hiện mà không biết được cấu trúc

và hành vi bên trong của phần mềm, là cách kiểm thử mà hệ thống được xemnhư một chiếc hộp đen, không cách nào nhìn thấy phía bên trong cái hộp [9]

Trang 21

Hình 1 3 Kiểm thử hộp đen

Một số phương pháp kiểm thử hộp đen:

- Kiểm thử fuzzing (Fuzz testing)

- Phân lớp tương đương (Equivalence partitioning)

- Phân tích giá trị biên (Boundary value analysis)

- Kiểm thử thăm dò (Exploratory testing)

Kiểm thử hộp đen không có mối liên quan nào tới mã lệnh, những kiểmthử viên hộp đen tìm ra lỗi mà những lập trình viên đã không tìm ra

Trang 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ường

là các giá trị vượt quá biên, các giá trị đặc biệt có ảnh hưởng tới phần xử lý,hiển thị của chương trình [11]

Các chương trình và framework được dùng để tạo ra kỹ thuật fuzzinghoặc thực hiện fuzzing được gọi là Fuzzer Tùy theo môi trường và ứng dụngcần kiểm tra mà người ta có các phương án khác nhau để xây dựng Fuzzer

Fuzzing là một trong những kỹ thuật của kiểm thử hộp đen, không đòihỏi quyền truy cập vào mã nguồn Do đó, nó có khả năng tìm thấy lỗi mộtcách nhanh chóng và tránh được việc phải xem mã nguồn

Fuzzing cũng giống như các kỹ thuật kiểm thử phần mềm, nhưng nóđược sử dụng để phát hiện ra một loạt các vấn đề của web như: Cross SiteScripting, tràn bộ đệm, chèn câu truy vấn (SQL Injection), [11]

1.2 Các loại lỗ hổng bảo mật web 1.2.1 Phân loại các lỗ hổng bảo mật web

Trang 25

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

2 Cryptographic

Failures

Là những vấn đề xuất phát từ việc triển khai hoặcsử dụng hệ thống mật mã một cách không chínhxác hoặc không an toàn, dẫn đến việc dữ liệu bảomật bị rò rỉ, tấn công, hoặc đánh cắp

3 Injection Sai sót trong nhập liệu Điều này xảy ra khi các

thông tin sai lệch được đưa vào cùng với các biến

dữ liệu đầu vào như 1 phần của lệnh hay câu truyvấn

4 Insecure Design Hệ thống hoặc ứng dụng được thiết kế một cách

không an toàn từ giai đoạn ban đầu Điều này cóthể bao gồm thiếu sót trong việc xác định và triểnkhai các biện pháp bảo mật, thiếu hiểu biết về cácnguy cơ bảo mật, hoặc việc không tuân thủ cácnguyên tắc thiết kế an toàn

Trang 26

nó ám chỉ đến các tình huống mà phần mềm hoặc

dữ liệu trong hệ thống bị sửa đổi, thay đổi, hoặcảnh hưởng bởi các tác nhân không mong muốnhoặc không được ủy quyền

10 Server-Side

Request Forgery

Kẻ tấn công có thể tạo ra và kiểm soát các yêu cầuHTTP được gửi từ phía máy chủ Trong SSRF, kẻtấn công thường sử dụng các biểu đồ yêu cầumạng để tạo ra các yêu cầu từ máy chủ đích màkhông cần phải thông qua máy khách

1.2.2 Một số lỗ hổng bảo mật ứng dụng web chính

Mỗi lỗ hổng bảo mật sẽ có cách khai thác và phát hiện khác nhau Dướiđây là một số lỗ hổng chính và biện pháp để phát hiện, khắc phục và phòngtránh các lỗ hổng đang tồn tại trên hệ thống

1.2.2.1 Lỗ hổng Broken Access Control

a Khái quát

Broken Access Control là lỗ hổng bảo mật xảy ra khi người dùng có thểtruy cập vào chức năng hoặc dữ liệu không được phép trong ứng dụng do việcthực thi kiểm soát truy cập không đúng

b Cơ chế phát hiện

-Kiểm tra thủ công: Kiểm tra kiểm soát truy cập thủ công để đảm bảo

tính đúng đắn

-Kiểm tra tự động: Sử dụng công cụ để quét lỗ hổng trong cấu hình

kiểm soát truy cập

-Phân tích động: Quan sát hành vi ứng dụng trong quá trình chạy để

xác định bất kỳ truy cập không được ủy quyền nào

Trang 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

dữ liệu vào Một số biện pháp như:

- Chỉ chấp nhận kí tự và số cho tên tệp tin được gọi Lọc và chặn toàn

bộ kí tự đặc biệt không được sử dụng

- Giới hạn API cho phép việc gọi các tệp tin từ một chỉ mục xác địnhnhằm tránh directory traversal

- Không sử dụng các dữ liệu được cung cấp từ người dùng, các giá trịnày cần được đặt tĩnh trong code của chương trình

- Hạn chế tới mức tối thiểu phải sử dụng các biến từ “User Input” đểđưa vào hàm include hay eval

1.3 Kỹ thuật Fuzzing

Trang 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ồn

mở được phát triển dựa trên 2 dự án ClusterFuzz và Springfield, cho phépfuzzing liên tục phần mềm mã nguồn mở Giúp cho các mã nguồn mở đảmbảo an toàn, bảo mật

Trang 30

Đến nay, không chỉ các hãng lớn thực hiện nghiên cứu mà còn có nhiềudự án mã nguồn mở đã được phát triển và ứng dụng rộng rãi trong cộng đồngngười sử dụng.

1.3.2 Phân loại Fuzzing

Phân loại fuzzing có thể tùy thuộc vào bộ dữ liệu fuzz, mục tiêufuzzing hay phương pháp fuzzing,…

1.3.2.1 Phân loại theo dữ liệu fuzz

a Kiểm thử mờ dựa trên đột biến

Kiểm thử mờ dựa trên đột biến (Mutation Based Fuzzing) hay còn gọi

là kiểm thử mờ câm (Dumb Fuzzing) là phương pháp kiểm thử mà dữ liệufuzz được biến đổi từ mẫu dữ liệu hợp lệ hiện có để tạo thành dữ liệu kiểmthử cho mục tiêu fuzzing

Một số đặc điểm đối với cách tiếp cận này [11]:

- Người thực hiện không cần có nhiều hiểu biết về cấu trúc của các yếutố đầu vào

- Tính dị thường được thêm vào đầu vào hợp lệ hiện có có thể hoàntoàn ngẫu nhiên hoặc theo một số chuẩn đoán về mặt kinh nghiệm

- Dữ liệu cho thực hiện fuzzing hoàn toàn phụ thuộc vào các yếu tố đầuvào được sửa đổi

- Yêu cầu ít hoặc việc thiết lập thời gian đơn giản hoặc không cần thiết.Một số công cụ cho phép thực hiện fuzzing theo phương pháp này:Taof, GPF, ProxyFuzz, Peach Fuzzer

b Kiểm thử mờ dựa trên thế hệ

Kiểm thử mờ dựa trên thế hệ (Generation Based Fuzzing) hay còn gọi

là kiểm thử mờ thông minh (Smart Fuzzing) là phương pháp kiểm thử mà dữliệu fuzz được xây dựng mới hoàn toàn dựa trên các mô tả đặc điểm kỹ thuật,định dạng của mô hình đầu vào

Đối với cách tiếp cận này [11]:

- Trường hợp thử nghiệm được tạo ra từ một số mô tả về các định dạng:RFC, các định dạng tài liệu

- Tính dị thường được thêm vào mỗi điểm có thể có trong các đầu vào

Trang 31

- Hỗ trợ kiến thức về giao thức nên cho kết quả tốt hơn so với fuzzingngẫu nhiên.

- Có thể mất thời gian đáng kể để thiết lập

Công cụ để thực hiện: SPIKE, Sulley, Mu-4000,

1.3.2.2 Phân loại theo OWASP

The Open Web Application Security Project (OWASP) là một dự ánphi lợi nhuận phát triển các dự án liên quan tới bảo mật ứng dụng Web hàngđầu thế giới, tổ chức này đưa ra 2 cách phân loại khác về Fuzzing hỗ trợ chokiểm thử mờ các ứng dụng Web như sau:

a Fuzzing đệ quy

Fuzzing đệ quy (Recursive Fuzzing) là phương pháp kiểm thử màFuzzer thực hiện duyệt qua bộ dữ liệu fuzz được xây dựng dựa trên tất cả cáckết hợp của bộ chữ cái Alphabet

Giả sử ta gởi một request là một chuỗi có dạng:

http://www.domain.com/2af8rb03

Nếu chọn "2af8rb03" như một một điểm đầu vào thì bộ dữ liệu fuzzing

là một tập các chuỗi của bảng chữ cái Alphabet và số hệ thập lục phân(az,0 9) thuộc loại fuzzing đệ quy Như vậy, bộ dữ liệu fuzzing sẽ có 168 chuỗi vàfuzzer sẽ thực hiện các request có dạng như sau:

Xét trường hợp này:

http://www.example.com/2af8rb03

Trang 32

Để thực hiện kiểm tra sự tồn tại của lỗ hổng Cross Site Scripting(XSS), fuzzer thực hiện kiểm thử bằng cách gửi đến server các fuzz vectornhư sau:

1.3.3 Ưu nhược điểm của Fuzzing

1.3.3.1 Ưu điểm

Như bất kỳ kỹ thuật kiểm thử an toàn nào khác, kiểm thử Fuzzing có

ưu và nhược điểm của nó Một trong những điểm mạnh của kiểm thử Fuzzing

là các loại điểm yếu an toàn trong mã nguồn mà nó xác định được thường rấtnghiêm trọng trong ứng dụng[5]

Những ưu điểm của kiểm thử fuzzing:

- Kết quả sử dụng kiểm thử Fuzzing hiệu quả hơn khi sử dụng cácphương pháp kiểm thử khác Kiểm thử Fuzzing tập trung vào việc sử dụngcác giá trị đặc biệt như là đầu vào cho ứng dụng được kiểm thử, do đó giúpviệc phát hiện các lỗi quan trọng mà có thể không được phát hiện bằngphương pháp tiếp cận dựa trên mô hình

- Kiểm thử Fuzzing chỉ theo dõi các trường hợp mà kết quả trả về có sựbất thường hay hành vi không mong muốn Điều này giúp nó có khả năngchạy hàng nghìn trường hợp thử nghiệm

- Là một loại kiểm thử hộp đen nên có thể thực hiện kiểm thử cho cácứng dụng không biết mã nguồn bên trong, vì vậy nó thường tìm ra được các lỗhổng nghiêm trọng và hầu hết là những lỗ hổng mà tin tặc thường khai thác

- Các quá trình Fuzzing thường có lượng đầu vào thử nghiệm rất lớn,

độ bao phủ rộng nên hiệu quả trong việc tìm kiếm các lỗ hổng

1.3.3.2 Nhược điểm

Bên cạnh những ưu điểm giúp cho fuzzing được trở nên ưa chuộng thì

nó cũng tồn tại những hạn chế:

Trang 33

- Khó có thể kiểm thử toàn diện và tìm thấy được tất cả các lỗi trongmột chương trình lớn, những lỗi đòi hỏi kiểm thử viên phải thực hiện phântích tĩnh.

- Fuzzing nằm trong phương pháp kiểm thử hộp đen nên không cungcấp nhiều kiến thức về hoạt động nội bộ của các phần mềm, vì vậy khó có thểtìm hiểu triệt để mà không hiểu chi tiết

- Với chương trình có các đầu vào phức tạp để tìm ra các lỗi đòi hỏiphải tốn nhiều thời gian, bởi với mỗi biến đang fuzzing phải thử N vector fuzz

và phải tạo ra một fuzzer đủ thông minh để phân tích các kết quả trả về

- Fuzzing hoạt động không hiệu quả trong các chương trình có các kếtquả trả về không có các mã lỗi hay các dấu hiệu bất thường

1.4 Lựa chọn Fuzzing cho kiểm tra lỗ hổng website

Trong kiểm thử bảo mật website và kiểm thử bảo mật phần mềm không

có quá nhiều điểm khác nhau nhưng đòi hỏi kiểm thử viên phải kết hợp vớicác kiến thức công nghệ bảo mật web, công nghệ mạng, lập trình web và kinhnghiệm thực tế về thâm nhập các hệ thống server Vì vậy để xây dựng ứngdụng tự động phát hiện lỗ hổng bảo mật cho website, đòi hỏi phải có mộtphương pháp kiểm thử và phân tích đặc thù cho từng loại lỗ hổng trong bảomật web

Hiện nay, fuzzing là kỹ thuật được sử dụng rất nhiều trong việc kiểmthử cho các vấn đề về an ninh trong các phần mềm, hệ thống máy tính và cácwebsite dịch vụ Ngoài ra, fuzzing là một trong những phương pháp phổ biếnnhất được hacker sử dụng để tìm lỗ hổng của hệ thống

Hệ thống Fuzzing sẽ gửi dữ liệu fuzz lên server chứa website hoặc truycập thẳng vào đường link của website kèm theo dữ liệu gây lỗi, nhận dữ liệutừ website trả về và đưa vào bộ phân tích trước khi đưa ra kết luận về lỗ hổng

Dữ liệu fuzz là một tập hợp chứa dữ liệu nhận dạng, được kết hợp với một sốthành phần của URL hoặc với những dữ liệu mà website xử lý

Lựa chọn kỹ thuật Fuzzing, kiểm thử hộp đen để xây dựng ứng dụngquét lỗ hổng website, ta có thể quét bất kỳ một trang web hoặc một ứng dụngweb, không phụ thuộc vào công nghệ hoặc các ngôn ngữ lập trình mà nó sửdụng Nó chủ yếu kiểm thử một trang web hoặc một ứng dụng web mà khôngcần bất kỳ kiến thức về cách mà trang web làm việc, giống một kẻ tấn côngthực sự Nên khi các quản trị viên, những người trực tiếp quản lý và theo dõi

Trang 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

đó, các phần tiếp thep trình bày chi tiết về kỹ thuật fuzzing trong một số giai đoạn quan trọng của quy trình bao gồm: phương pháp thu thập điểm đầu vào, nguyên lý chèn dữ liệu fuzz và các phương pháp phát hiện lỗ hổng bảo mật Đây là các giai đoạn quyết định tới hiệu quả của cả quá trình fuzzing trong phát hiện lỗ hổng bảo mật, tạo cơ sở cho việc xây dựng ứng dụng tại chương 3.

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

Một ứng dụng web thao tác với người dùng qua trình duyệt và sử dụnggiao thức HTTP cổng 80 hoặc HTTPS cổng 443 Một hệ thống website sẽchứa các điểm đầu vào của hệ thống bao gồm: các form cho người dùng nhập

dữ liệu, các giá trị của biến được truyền trên các URL của website, các trườngthông tin trong HTTP Headers [10]

Quá trình kiểm thử chủ yếu được thực trên các điểm đầu vào của hệthống, cụ thể các trường dữ liệu của request headers được gửi qua phươngthức truyền dữ liệu của HTTP, chủ yếu là phương thức GET, POST Fuzzer

sẽ phải thực hiện việc thu thập toàn bộ các điểm đầu vào của hệ thống trướckhi thực hiện fuzzing

Trang 37

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

Web Server

Fuzzer

Request

Responses

Header HTTP Request Fuzzing

Header

Payload Fuzzing

Analysis Vulnerability

Result

Hình 2 1 Mô hình Fuzzing cho ứng dụng web

Mô hình kiểm thử fuzzing cho website cũng tương tự như mô hìnhfuzzing trong kiểm thử phần mềm, có 2 thành phần chủ yếu là fuzzer và webserver:

- Fuzzer là chương trình thực hiện kiểm thử tự động bằng kỹ thuậtfuzzing

- Web server là hệ thống máy chủ web được fuzzer thực hiện kiểm thử

2.1.2 Quy trình Fuzzing trong kiểm thử bảo mật website

Về cơ bản Fuzzing có các giai đoạn như sau:

Xác định

mục tiêu

Xác định vị trí đầu vào

Sinh dữ liệu Fuzz

Chèn dữ liệu

và thực thi

Theo dõi và ghi chép

Phân tích và

khai thác

Hình 2 2 Quy trình Fuzzing

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]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 Sách, tạp chí
Tiêu đề: Nguyễn Văn Đại (2011), “Ứng dụng web và vấn đề bảo mật”
Tác giả: Nguyễn Văn Đại
Năm: 2011
[2]Đặng Quốc Hữu Nhân (2012), “Tìm hiểu về an ninh mạng và kỹ thuật tấn công ứng dựng web”, Đồ án tốt nghiệp, Đại học Công Nghệ Thông tin, Hà Nội Sách, tạp chí
Tiêu đề: Đặng Quốc Hữu Nhân (2012), “Tìm hiểu về an ninh mạng và kỹ thuậttấn công ứng dựng web”
Tác giả: Đặng Quốc Hữu Nhân
Năm: 2012
[3] 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
Năm: 2014
[4] 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
Năm: 2009
[5]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.Tiếng Anh Sách, tạp chí
Tiêu đề: 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ọcviện Kỹ thuật mật mã, Hà Nội
Tác giả: Phạm Thị Ngọc Trâm
Năm: 2016
[6]Justin Clarke (2009), “SQL Injection Attacks and Defense”, Gotham Digital Science, UK Sách, tạp chí
Tiêu đề: Justin Clarke (2009), “SQL Injection Attacks and Defense”
Tác giả: Justin Clarke
Năm: 2009
[7] OWASP (2013), “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
Năm: 2013
[8] The Internet Society (1999), “Request for Comments (RFC) 2616”, Internet Engineering Task Force - IETF, USA.Website Sách, tạp chí
Tiêu đề: Request for Comments (RFC) 2616”,"Internet Engineering Task Force - IETF, USA
Tác giả: The Internet Society
Năm: 1999

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

TÀI LIỆU LIÊN QUAN

w