Tải bản đầy đủ (.docx) (66 trang)

kĩ thuật lập trình đề tài kiểm thử fuzzing ứng dụng web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.32 MB, 66 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

BAN CƠ YẾU CHÍNH PHỦ

<i>Sinh viên thực hiện:</i>

<b>Lê Anh Đức Mã SV: AT180611Tào Minh Đức Mã SV: AT180610Mai Huy Việt Hoàng Mã SV: AT180619Trần Minh Khánh Mã SV: AT180625Lê Đăng Phương Mã SV: AT180638</b>

<i><b>Người hướng dẫn : TS. Bùi Việt Thắng</b></i>

Khoa An tồn thơng tin - Học viện Kỹ thuật mật mãHà Nội, 2024

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Chương 1: Tổng quan về kiểm thử bảo mật website</b> 10

<b>4.2. Một số lỗ hổng bảo mật ứng dụng web chính</b> 16

<b>5.3. Tầm quan trọng của kỹ thuật fuzzing trong kiểm thử bảo mật web</b> 25

<b>Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật Website</b> 27

<b>1.3. Sinh dữ liệu fuzz hay còn gọi là tạo các ca kiểm thử</b> 28

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>1.6. Đăng lỗi và phân tích</b> 31

<b>4.1. Phát hiện lỗ hổng bảo mật dựa trên đặc trưng</b> 39

<b>5. Các lỗ hổng được phát hiện bởi kiểm thử Fuzzing</b> 42

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>DANH MỤC HÌNH</b>

Hình 2.4. Các giai đoạn trong SDLC mà các lỗ hổng phát hiện được 46

Hình 3.3. Luồng xử lý chức năng quét lỡ hởng website 52

Hình 3.6. Thành phần tấn cơng với lỡ hởng SQL injection 56

Hình 3.8. Thành phần tấn cơng với lỡ hởng File inclusion 57Hình 3.9. Thành phần phân tích với lỡ hởng SQL injection 58

Hình 3.11. Thành phần phân tích với lỡ hởng File inclusion 58

Hình 3.14. Các lỡ hởng SQL Injection được phát hiện 61

Hình 3.16. Các lỗ hổng File Inclusion được phát hiện 62

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>DANH MỤC BẢN</b>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Bảng 1.1. Top 10 lỗ hổng website phổ biến nhất năm 2013 (OWASP) 16Bảng 2.1. Ví dụ trong fuzzing đường dẫn tương đương 38Bảng 2.2. Các thuộc tính và các thẻ đi kèm có chứa các URL của hệ thống 39

Bảng 2.4. Chèn dữ liệu fuzzing vào phương thức POST 42

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>DANH MỤC TỪ VIẾT TẮT</b>

<b>Từ viết tắtNghĩa Tiếng AnhNghĩa Tiếng Việt</b>

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 CSRFURL Uniform Resource Locator Địa chỉ tài nguyên

OWASP The Open Web ApplicationSecurity 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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Kiểm thử fuzzing là một kỹ thuật kiểm thử tự động giúp phát hiện sớm các lỗhổng bảo mật tiềm ẩn trong ứng dụng web. Các lỗ hổng như SQL injection, cross-sitescripting (XSS), và cross-site request forgery (CSRF) có thể dẫn đến hậu quả nghiêmtrọng như rị rỉ dữ liệu, lạm dụng thơng tin cá nhân, chiếm đoạt tài khoản người dùng, vàgây mất an toàn cho ứng dụng. Bằng cách cung cấp dữ liệu đầu vào ngẫu nhiên hoặc bấtthường vào chương trình, fuzzing kiểm tra phản ứng của ứng dụng để phát hiện các lỗihoặc lỗ hổng.

Cách thức kiểm thử fuzzing thường bao gồm việc tạo ra các dữ liệu đầu vào ngẫunhiên theo các mẫu hoặc quy tắc cụ thể, rồi quan sát cách ứng dụng phản hồi. Nếu ứngdụng gặp sự cố hoặc xử lý không đúng cách với dữ liệu đầu vào này, công cụ fuzzing sẽghi lại lỡi hoặc lỡ hởng đó để đội ngũ phát triển có thể khắc phục.

Việc thực hiện kiểm thử fuzzing một cách hệ thống và liên tục giúp đảm bảo rằngứng dụng web hoạt động ổn định, đáng tin cậy và an toàn. Kỹ thuật fuzzing mang lạihiệu quả rất lớn cho việc kiểm thử cho các vấn đề về an ninh trong các phần mềm, hệthống máy tính và các ứng dụng dịch vụ. Nhờ đó, fuzzing khơng chỉ bảo vệ người dùngkhỏi các rủi ro không mong muốn mà cịn góp phần nâng cao uy tín và danh tiếng củadoanh nghiệp. Hơn nữa, một ứng dụng web an toàn và chất lượng cao sẽ thúc đẩy sựphát triển bền vững của xã hội số hóa, tạo điều kiện cho các dịch vụ trực tuyến phát triểnvà cải thiện chất lượng cuộc sống của người dân.

<b>Xuất phát từ thực tế trên,chúng em đã lựa chọn đề tài “Kiểm thử Fuzzing ứngdụng Web” thuộc phạm vi các vấn đề đã nêu để làm đề tài góp phần đáp ứng yêu cầu</b>

nghiên cứu lý luận, phục vụ công tác đảm bảo an toàn, bảo mật website.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>3. Nhiệm vụ nghiên cứu</b>

Nhiệm vụ nghiên cứu gồm các nội dung sau:

Nhiệm vụ 1: Tìm hiểu tởng quan về website, phương thức và mơ hình hoạt độngcủa website.

Nhiệm vụ 2: Nghiên cứu các lỗ hổng bảo mật website, cách thức tấn cơng và biệnpháp phịng chống.

Nhiệm vụ 3: Tìm hiểu tổng quan về các phương pháp kiểm thử phần mềm nóichung và kỹ thuật Fuzzing trong kiểm thử lỡ hởng bảo mật website nói riêng.

Nhiệm vụ 4: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật website dựa trên cơ sởcác nội dung nghiên cứu trước nhằm phát hiện lỗ hổng tồn tại website, đồng thời đưa racác khuyến nghị và cách thức khắc phục cho từng loại lỗ hổng.

<b>4. Đối tượng nghiên cứu</b>

- Phương thức hoạt động của website.

- Các loại lỗ hổng bảo mật website và những biện pháp phòng chống, khắc phụctương ứng.

- Các phương pháp kiểm thử phần mềm, ứng dụng web.

- Giải pháp kiểm tra và phát hiện lỗ hổng bảo mật website bằng kỹ thuật Fuzzing.- Phần mềm kiểm tra lỗ hổng bảo mật website.

<b>5. Phương pháp nghiên cứu</b>

- Phương pháp nghiên cứu lý thuyết:

+ Tham khảo các chương trình, giáo trình đào tạo.

+ Thu thập và phân tích các tài liệu, thông tin liên quan đến các kỹ thuật Fuzzingtrong bảo mật website.

+ Tìm hiểu các kết quả nghiên cứu về các lỗ hổng bảo mật đã được công bố hiệnnay.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

+ Sử dụng kết quả nghiên cứu từ dự án mở về bảo mật ứng dụng web củaOWASP.

- Phương pháp nghiên cứu thực nghiệm:

+ Tìm hiểu phần mềm kiểm thử bảo mật website hiện có tại Việt Nam cũng nhưtrên thế giới.

+ Tiến hành cài đặt và đánh giá thử nghiệm chương trình demo qua từng giaiđoạn.

<b>6. Phạm vi nghiên cứu</b>

- Không gian, thời gian: Trong phạm vi đề tài

- Kiến thức: Tổng quan bảo mật website và nghiên cứu kỹ thuật Fuzzing để xâydựng phần mềm kiểm thử web với phạm vi nằm trong 10 lỗ hổng nghiêm trọng nhấtđược OWASP công bố năm 2013.

<b> 7. Bố cục của đồ án</b>

Với giới hạn những vấn đề nghiên cứu trên, đồ án này được xây dựng với cấu trúcphân thành 3 chương:

Chương 1: Tổng quan về kiểm thử bảo mật website.

Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật website. Chương 3: Xây dựng ứng dụng kiểm tra lỗ hổng bảo mật Website.

<b>Chương 1: Tổng quan về kiểm thử bảo mật website</b>

<i>Chương 1 tập trung vào tổng quan về kiểm thử bảo mật website. Nó bao gồm giớithiệu về ứng dụng web, giải thích khái niệm ứng dụng web và các lỗ hổng phổ biến cóthể ảnh hưởng đến tính bảo mật và hiệu suất của trang web. Chương cũng đề cập đếnkiểm thử phần mềm và kiểm thử web, mô tả các phương pháp và quy trình kiểm tra tínhbảo mật của ứng dụng web. Ngoài ra, chương phân loại các loại lỗ hổng bảo mật webkhác nhau và giải thích các lỗ hổng chính trong ứng dụng web, bao gồm cách chúnghoạt động và bị khai thác. Cuối cùng, chương trình bày về kỹ thuật fuzzing, cung cấp cáinhìn tổng quan về khái niệm, ưu nhược điểm, và tầm quan trọng của kỹ thuật này trongkiểm thử bảo mật web.</i>

<b>1. Giới thiệu về ứng dụng web1.1. Khái niệm ứng dụng web</b>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

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ặctên miền phụ trên World Wide Web của Internet. Một trang web là tập tin HTML hoặcXHTML có thể truy nhập dùng giao thức HTTP. Website có thể được xây dựng từ cáctệp tin HTML (website tĩnh) hoặc vận hành bằng các CMS chạy trên máy chủ (websiteđộng). Website có thể được xây dựng bằng nhiều ngôn ngữ lập trình khác nhau(PHP, .NET, Java, Ruby on Rails…).

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

<b>1.2.Mơ tả hoạt động của website</b>

Trình duyệt tạo một HTTP Request gửi máy chủ web thông qua các phương thứcGET, POST,… của giao thức HTTP, yêu cầu cung cấp hoặc xử lý tài nguyên thông tin.Địa chỉ của tài nguyên yêu cầu được xác định trong định dạng URL.

Sau khi nhận được truy vấn từ trình khách, máy chủ web xác định sự tồn tại củatài nguyên được yêu cầu. Nếu yêu cầu can thiệp các quyền truy cập của tài nguyên thìmáy chủ web từ chối truy vấn và trả về cảnh báo thích hợp. Nếu yêu cầu là hợp lệ, lúcnày máy chủ có thể cho thực thi một chương trình được xây dựng từ ngôn ngữ như Perl,C/C++,… hoặc máy chủ yêu cầu bộ biên dịch thực thi các trang PHP, ASP, JSP,… theoyêu cầu của máy khách. Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý,tính toán, kết nối đến cơ sở dữ liệu, lưu các thông tin do máy khách gửi đến.

Khi máy chủ web định danh được tài nguyên, nó thực hiện hành động chỉ ra trongrequest method và tạo ra response trả về cho máy khách 1 luồng dữ liệu có định dạngtheo giao thức HTTP, nó gồm 2 phần:

- Header mơ tả các thơng tin về gói dữ liệu và các thuộc tính, trạng thái trao đởigiữa trình duyệt và WebServer.

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

Khi giao dịch hồn tất, máy chủ web thực hiện ghi vào tệp tin nhật ký mô tả giaodịch vừa thực hiện.

Với firewall, luồng thông tin giữa máy chủ và máy khách là luồng thơng tin hợplệ. Vì thế, nếu hacker tìm thấy vài lỡ hởng trong ứng dụng Web thì firewall khơng cịnhữu dụng trong việc ngăn chặn hacker này.

<b>1.3.Lỗ hổng website</b>

Lỗ hổng website là những điểm yếu của hệ thống website mà tin tặc có thể lợidụng để khai thác nhằm thu thập thông tin về hệ thống, tấn công lấy cắp thông tin, tấncông vào người dùng hệ thống hay tấn công chiếm quyền điều khiển hệ thống website .

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

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 3nguyên nhân sau:

- Lỗi do người lập trình, phát triển ứng dụng tập trung vào chức năng và tốc độ màkhông quan tâm đến an tồn. Ứng dụng khơng có thành phần kiểm tra hay kiểm tra yếucác dữ liệu đầu vào từ người dùng, từ đó, kẻ tấn cơng có thể lợi dụng lỡ hổng từ mãnguồn để khai thác và tấn công hệ thống.

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

- Lỗi nằm trong các giao thức, các nền tảng hay chuẩn xây dựng hệ thống đã đượccông khai. Ví dụ như giao thức HTTP hoạt động theo chuẩn mơ hình client/server đơngiản và khi xây dựng giao thức này người ta chưa quan tâm đến vấn đề bảo mật.

<b>2. Kiểm thử phần mềm</b>

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

Các phương pháp kiểm thử phần mềm có thể chia làm 3 loại:- Kiểm thử hộp đen (Black box testing)

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

<b>2.1.Kiểm thử hộp đen</b>

Là phương pháp kiểm thử được thực hiện mà không biết được cấu trúc và hành vibên trong của phần mềm, là cách kiểm thử mà hệ thống được xem như một chiếc hộpđen, khơng cách nào nhìn thấy phía bên trong cái hộp [12].

Một số phương pháp kiểm thử hộp đen:- Kiểm thử fuzzing (Fuzz testing)

- Phân lớp tương đương (Equivalence partitioning)- Phân tích giá trị biên (Boundary value analysis)- Kiểm thử mọi cặp (All-pairs testing)

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

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

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

- Kiểm thử giao diện lập trình ứng dụng (API testing)- Bao phủ mã lệnh (Code coverage)

- Các phương pháp gán lỗi (Fault injection)

- Các phương pháp kiểm thử hoán chuyển (Mutation testing methods)- Kiểm thử tĩnh (Static testing)

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<b>3. Kiểm thử web</b>

Kiểm thử website là một thành phần trong kiểm thử phần mềm nhưng tập trungvà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 trongnhững thành phần đang phát triển nhanh nhất của kiểm thử phần mềm.

Hồ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 độnglà bước đầu để có được sự đảm bảo về khả năng các ứng dụng được xây dựng trên trangweb đang hoạt động đúng. Nó giúp giải quyết các vấn đề như tính sẵn sàng, toàn vẹn,bảo mật của hệ thống web, đáp ứng cho số lượng ngày càng tăng cao người sử dụng vàkhả năng sống sót trong lưu lượng truy cập của người dùng. Việc bỏ qua các vấn đềtrong kiểm thử trước khi đi vào hoạt động có thể ảnh hưởng đến khả năng hoạt động củachính website đó.

Sau khi thực hiện kiểm thử web, kiểm thử viên có thể tìm thấy các sự cố trong hệthống trước khi chúng xảy ra trong môi trường người dùng.

<b>4. Các loại lỗ hổng bảo mật web4.1. Phân loại lỗ hổng bảo mật web</b>

<b>Bảng 1.1. Top 10 lỗ hổng website phổ biến nhất năm 2013 (OWASP)Top 10 OWASP 2013</b>

1 Injection Sai sót trong nhập liệu. Điều này xảy ra khi các thông tin sai lệch được đưa vào cùng với các biến dữ liệu đầuvào như 1 phần của lệnh hay câu truy vấn.

2 Broken Xác thực hay quản lý phiên thiếu chính xác. Sơ hở này

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Authentication and Session Management

cho phép kẻ tấn công có thể lợi dụng để đạt được mật khẩu, khóa hay phiên làm việc, từ đó mạo danh phiên làm việc người dùng.

3 Cross-Site Scripting (XSS)

Sai sót trong kiểm duyệt nội dung đầu vào cũng dẫn đến rủi ro này. Các dữ liệu bất hợp lệ được gửi đến trình duyệt mà không cần sự xác nhận thông thường.4 Insecure Direct

Object References

Điều này xảy ra thì nhà phát triển cho thấy có các thamchiếu trực tiếp đến một đối tượng nội bộ hay của ngườidùng khác. Điều này cho phép kẻ tấn cơng có thể truy cập các tài liệu một cách trái phép.

Một hệ thống bảo mật tốt là hệ thống triển khai cho khung ứng dụng, máy chủ ứng dụng, máy chủ cơ sở dữliệu, nền tảng… các phương pháp bảo mật cần thiết, thống nhất và liên kết với nhau.

6 Sensitive Data Exposure

Các dữ liệu nhạy cảm không được lưu trữ và bảo vệ cẩn thận, dẫn đến khi bị kẻ tấn công khai thác.

7 Missing Function Level Access Control

Thiếu các điều khoản trong việc phân quyền quản trị các mức, dẫn đến việc kẻ tấn cơng có thể lợi dụng và truy ra các điểm yếu trên hệ thống, hay lợi dụng leo thang đặc quyền.

8 Cross-Site

Request Forgery (CSRF)

Lợi dụng sơ hở của nạn nhân, kẻ tấn cơng có thể lừa nạn nhân thực hiện các hành động nguy hiểm mà nạn nhân không hề hay biết, ví dụ như chuyển tiền từ tài khoản nạn nhân sáng tài khoản kẻ tấn công, thông qua các lỗ hổng XSS.

Vulnerable Components

Sử dụng các thư viện, plugin, module… có chứa các lỡ hởng đã được cơng khai, dễ dàng dẫn đến việc bị kẻ tấncông lợi dụng để tấn công vào hệ thống một cách nhanh chóng.

10 Unvalidated Redirects and Forwards

Chủn hướng khơng an tồn người dùng đến một đường dẫn bên ngồi. Kẻ tấn cơng lợi dụng để chuyển hướng nạn nhân đến một trang đích được chuẩn bị sẵn của kẻ tấn công.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Dựa trên các đặc trưng của từng loại lỡ hởng có các điểm giống nhau, có thể phânthành một số loại lỗ hổng website chính như sau:

- Injection: Các lỗ hổng do không kiểm soát chặt chẽ dữ liệu đầu vào giúp cho tintặc chèn các mã lệnh bất hợp pháp để thực thi như SQL Injection, XPath Injection,System Command Injection, LDAP Injection...

- Client Side: Loại lỗ hổng nhằm mục đích tấn công vào người dùng, nó đặc biệtnguy hiểm với người quản trị. Ví dụ như Cross Site Scripting (XSS), Cross-site RequestForgery (CSRF)...

- Parameter Manipulation: Loại lỗ hổng khi kẻ tấn công sửa đổi các tham số trongyêu cầu gửi tới máy chủ. Một số lỗ hổng như Cookie Manipulation, HTTP Form FieldManipulation,…

- Misconfiguration: Các lỡ hởng do người lập trình và quản trị cấu hình hệ thốngchưa an tồn như phân quyền khơng chính xác, cấu hình tài khoản, mật khẩu mặc định...

- Information Disclosure: Các lỗ hổng làm lộ lọt các thông tin quan trọng của hệthống, tin tặc có thể lợi dụng điều này để biết thông tin hệ thống và thực hiện các cuộctấn công tiếp theo . Ví dụ như: Path Traversal, Predict Resource Location, DirectoryListing...

<b>4.2. Một số lỗ hổng bảo mật ứng dụng web chính</b>

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

<b>4.2.1. Lỗ hổng injection</b>

Khái quát

Lỗ hổng injection là loại lỗ hổng liên quan tới việc thao tác với câu truy vấnCSDL, cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vàotrong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về để thựchiện thay đổi cấu trúc câu truy vấn SQL và thực thi chúng một cách bất hợp pháp [8].

Sql Injection có thể cho phép những kẻ tấn cơng thực hiện các thao tác, thêm, sửa,xóa… trên cơ sở dữ liệu của ứng dụng. Lỗi này thường xảy ra trên các ứng dụng web códữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL,Oracle, DB2, Sysbase... hay dữ liệu XML.

Nguyên nhân chủ yếu là do người lập trình khơng kiểm soát hoặc có kiểm soátchưa tốt dữ liệu nhập vào, tin tặc dễ dàng có thể vượt qua để chèn các câu lệnh truy vấn

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

như SQL, Xquery,… khi chèn thành cơng tin tặc có thể đọc, thêm, sửa, xóa thông tintrong CSDL của hệ thống.

Ví dụ: Giả sử ứng dụng web sử dụng câu truy vấn sau để kiểm tra đăng nhậpngười dùng:

SELECT * FROM user WHERE username= “Username” AND password=“Password”;

Người tấn công sử dụng ký tự đặc biệt SQL để thâm nhập vào hệ thống như sau:Username: admin” or 1-- -

Password:Ta được câu truy vấn SQL như sau:

SELECT * FROM user WHERE username= “admin” or 1-- - AND password=“”;

Điều kiện sau WHERE sẽ trở nên luôn đúng và kết quả là hệ quản trị CSDL sẽ trảvề tất cả các bản ghi có trong bảng users. Vì vậy, câu lệnh trên cho phép đăng nhập vàohệ thống mà khơng địi hỏi password.

Cơ chế phát hiện

Có thể phát hiện các lỡi SQL bằng 4 phương pháp chính:

- Dựa trên các thông báo lỗi từ hệ thống, từ CSDL của hệ thống. Ví dụ như khithêm dấu nháy đơn ' sau một biến truy vấn, ta nhận được thông báo lỗi từ SQL như dướiđây, điều đó chứng tỏ có thể khai thác lỗ hổng SQL Injection.

You have an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near '' ' '' at line 1

- Dựa trên kỹ thuật boolean based, kiểm tra kết quả trả về khác nhau của các câutruy vấn khác nhau để xác định câu truy vấn sau khi được chèn có được thực thi haykhơng, từ đó xác định lỗi hay không lỗi SQL, ví dụ như khi chèn or 1=1, or 1=2 hay and1=1, and 1=0,...

- Dựa trên kỹ thuật nối câu truy vấn, kỹ thuật này nhằm xác định các thông tin vềcác trường thông tin của cơ sở dữ liệu. Ví dụ như UNION query.

- Dựa trên kỹ thuật time based: là kỹ thuật sử dụng các hàm thao tác với thời giantrong hệ quản trị CSDL và kiểm tra timeout của kết quả trả về có phù hợp với truy vấnsau khi chèn hay không. Ví dụ như sleep(),...

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Cách thức phịng tránh

Lỡ hởng Injection xảy ra do các biến được nhập vào từ người dùng không đượckiểm soát chặt chẽ trước khi xây dựng câu truy vấn tới CSDL. Đó chính là ngun nhânchung nhất của các lỡ hởng dạng Injection.

Lỡ hởng Injection xảy ra khi có kết hợp cả 2 điều kiện: - Có sự truy vấn tới CSDL

- Câu truy vấn chưa được kiểm soát chặt chẽ

Vì vậy để phịng chống được lỡ hởng SQL Injection phải bảo vệ các câu truy vấnSQL bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượngRequest. Dưới đây là một số biện pháp phòng chống:

- Những kí tự nên được mã hoá trên địa chỉ URL trước khi được sử dụng.

- Không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thếnhững thông báo lỗi bằng 1 trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứngdụng.

- Đối với giá trị numeric, thực hiện chuyển nó sang integer trước khi thực thi câutruy vấnSQL, hoặc dùng ISNUMERIC để chắc chắn là một số integer.

- Dùng thuật toán để mã hoá dữ liệu trong database.

- Kiểm tra và lọc các giá trị nhập vào của người dùng, loại bỏ những kí tự đặc biệt.- Cuối cùng, để hạn chế thiệt hại do tấn công SQL Injection, nên kiểm soát chặtchẽ và giới hạn quyền xử lí dữ liệu của tài khoản người dùng mà ứng dụng web đang sửdụng. Các ứng dụng thông thường nên tránh dùng các quyền như dbo hay sa. Quyềncàng hạn chế, thiệt hại càng ít.

<b>4.2.2. Lỗ hổng Cross Site Script</b>

Khái quát

Cross-site Scripting (XSS) là một lỗ hổng ứng dụng web trong đó một người dùngcuối có thể tấn cơng bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ...)những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho nhữngngười sử dụng khác[4].

Hiện nay có 3 loại tấn cơng cross site scripting phổ biến:

- Stored or Persistent vulnerability: Là lỗ hổng XSS mà đoạn mã chèn thêm vàođược lưu trữ trên server, như trong CSDL dưới dạng các comment trong blog, messagetrong forum hoặc các visitor log.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

- Non-Persistent or Reflected Vulnerability: Tương tự như Stored XSS nhưngđoạn mã khai thác sẽ không được lưu trữ trên server, nó thường được thực hiện trênURL hay trong các form truyền dữ liệu.

- Dom-Based XSS là một dạng tấn công XSS làm thay đổi cấu trúc của trang webbằng cách thay đổi cấu trúc HTML. Đối với loại tấn công này, hacker sẽ chèn các đoạnscript nhằm thay đổi giao diện mặc định của trang web thành một giao diện giả.

XSS đang nhanh chóng trở thành một trong những lỡ hổng phổ biến nhất của cácứng dụng web.

Ví dụ: Ta có một đoạn code cho phép hiển thị tên người dùng như sau:<?php

if ( isset( $_GET['name'] ) ) {

echo '<h1>'. $_GET['name'] .'</h1>';}

<b>Hình 1. 4. Hộp thoại lỗ hổng XSS chứa cookie</b>

Cơ chế phát hiện

Tương tự như cơ chế hoạt động của XSS, một biến có tồn tại lỡ hởng XSS nếunhư giá trị của biến đó được được thay đổi bằng các đoạn mã HTML hay script, nếu nóđược hiện ra trên trình duyệt hoặc trong mã nguồn HTML.

Để phát hiện lỗi này chúng ta sẽ thực hiện gửi một chữ ký kèm những đoạn mãđặc biệt tới hệ thống như:

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b><script>[code]</script>“><script>[code]</script>“onmouseover=[code] foo=”<img src="javascript:[code] "><img src="livescript:[code] "> </b>

<b><div style="behaviour:URL([link to code]);"> <div style="binding: URL([link to code]);"> <div style="width: expression([code]);"> </b>

Thực hiện việc phân tích mã HTML, nếu tìm thấy sự xuất hiện của các đoạn mãđó trong mã HTML thì chứng tỏ hệ thống đã mắc lỡi XSS.

Cách thức phịng tránh

XSS là một lỗ hổng rất phổ biến và rất nguy hiểm đối với người dùng hệ thống.Tuy nhiên việc phịng tránh lỡi XSS lại hết sức đơn giản. Đối với các dữ liệu được nhậntừ người dùng, khi thực hiện việc hiển thị cần encode tất cả các giá trị được in ra. Khi đóđoạn mã độc sẽ khơng thể thực thi được. Trong các ngơn ngữ lập trình đều có các hàmhỡ trợ việc mã hóa dữ liệu này . Ví dụ:

- Trong ngôn ngữ PHP có hàm htmlentities(), htmlspecialchars(),... Hàm nàychuyển các thể html trong chuỗi truyền vào sang dạng thực thể của chúng.

<b>4.2.3. Lỗ hổng File Inclusion</b>

Khái quát

Lỗ hổng File Inclusion là loại lỗ hổng xảy ra khi hệ thống thực hiện việc thao tácvới tệp tin. Khi hệ thống khơng có quá trình kiểm duyệt đoạn mã chèn vào chặt chẽ, tintặc có thể lấy các giá trị của các biến Post, Get, Headers từ người dùng gửi lên để thaotác với CSDL. Bằng việc khai thác lỗ hổng này tin tặc có thể thực hiện việc tải cácbackdoor lên hệ thống và đọc các tệp tin của hệ thống .

File Inclusion được chia làm 2 loại chính là:

- Local File Inclusion: Thực hiện khi các tệp tin mà hệ thống thao tác là các tệp tincủa local và không cho phép việc chèn vào hệ thống các đoạn mã

- Remote File Inclusion: Cho phép việc chèn các đoạn mã từ một hệ thống từ xavà thực hiện trên web server.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

Ví dụ: Giả sử website lấy trang mà người dùng yêu cầu theo tên file. Ta có đoạnmã như sau:

<?php $file = $_GET['page']; //Trang web sẽ hiển thị ?>Với đường dẫn truy cập ban đầu như sau:

<b>Hình 1.5. Kết quả sau tấn cơng lỗ hổng LFI</b>

Cơ chế phát hiện

Cơ chế phát hiện lỗi này là chúng ta sẽ thực hiện đưa các giá trị đường dẫn củacác tệp tin quan trọng của hệ thống, thực hiện phân tích mã trạng thái và kết quả trả vềđể đánh giá website sự tồn tại lỗ hổng. Ví dụ:

../.../apache/logs/access.log

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Việc chèn số các “../” là do chương trình phát hiện sẽ tự động thêm vào.Cách thức phịng tránh

File Inclusion là một lỡ hởng cực kỳ nghiêm trọng. Lỗ hổng này xảy ra khi việckiểm tra đầu vào khơng được chú trọng. Vì vậy, người lập trình cần quản lý và kiểmduyệt chặt chẽ các giá trị trên các biến mà người dùng truyền dữ liệu vào. Một số biệnpháp như:

- Chỉ chấp nhận kí tự và số cho tên tệp tin được gọi. Lọc và chặn tồn bộ kí tự đặcbiệt khơng được sử dụng.

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

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

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

Tấn cơng File Inclusion có thể nguy hiểm hơn cả SQL Injection do đó thực sự cầnthiết phải có những biện pháp khắc phục lỡ hởng này. Kiểm tra dữ liệu đầu vào hợp lý làchìa khóa để giải quyết vấn đề.

<b>4.2.4. Lỗ hổng do cấu hình mặc định</b>

Khái quát

Là những lỡi thuộc về người lập trình hay người quản trị cấu hình một số yếu tốmặc định hay đơn giản giúp cho kẻ tấn công có thể dễ dàng đoán ra như cấu hình đườngdẫn mặc định của hệ thống, khơng cấu hình hạn chế truy nhập, hay những không thayđổi tài khoản, mật khẩu truy cập mặc định,...

Ví dụ: Một website có đường dẫn mặc định tới trang quản trị như: /login.php...

Hay trang quản trị để tài khoản và mật khẩu mặc định như hình:

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>Hình 1.6. Minh họa lỗ hổng cấu hình mặc định</b>

Cơ chế phát hiện

Để phát hiện các lỡi cấu hình chúng ta cần thực hiện truy cập đến các trang cấuhình mặc định và kiểm tra mã trạng thái trả về cùng với việc kiểm tra mã HTML của hệthống.

Cách thức phịng tránh

Để khắc phục lỡ hởng này rất đơn giản, một số biện pháp để phòng tránh lỡ hởngnày như sau:

- Cấu hình phân quyền và cấm truy cập tới các đường dẫn chứa các tệp tin cấuhình của hệ thống.

- Đặt tài khoản, mật khẩu đủ dài và mạnh, sửa đổi tên đường dẫn tới trang quản trịlàm tin tặc không thể đoán hay thực hiện tấn công vét cạn.

- Hạn chế truy cập dựa trên địa chỉ và các thông tin của người sử dụng.

<b>5. Kỹ thuật fuzzing5.1. Khái niệm</b>

Trong lĩnh vực an ninh ứng dụng, Fuzzing hay kiểm thử mờ (fuzz testing) là một kỹthuật thuộc kiểm thử hộp đen (black box), phát hiện lỗi của phần mềm bằng cách tựđộng hoặc bán tự động cung cấp dữ liệu đầu vào không hợp lệ, không mong đợi hayngẫu nhiên vào phần mềm. Phần mềm sẽ được giám sát và ghi lại các trường hợp ngoạilệ như lỗi mã không được thực thi, tài nguyên thất thoát,... nhằm xác định các hành vibất thường, phát hiện các lỗ hổng bảo mật tiềm ẩn của phần mềm. Dữ liệu không mong

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

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

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

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

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

<b>5.2. Ưu nhược điểm của kiểm thử fuzzing5.2.1. Ưu điểm</b>

Như bất kỳ kỹ thuật kiểm thử an toàn nào khác, kiểm thử Fuzzing có ưu và nhượcđiểm của nó. Một trong những điểm mạnh của kiểm thử Fuzzing là các loại điểm yếu antoàn trong mã nguồn mà nó xác định được thường rất nghiêm trọng trong ứng dụng. Vídụ, như tràn bộ đệm, lỗi số học số nguyên hay SQL injection, đều là những lỗ hổng chophép một người sử dụng ác ý có thể nắm quyền kiểm soát hoàn toàn của một ứng dụngError: Reference source not found.

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

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

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

- Là một loại kiểm thử hộp đen nên có thể thực hiện kiểm thử cho các ứng dụngkhông biết mã nguồn bên trong, vì vậy nó thường tìm ra được các lỗ hổng nghiêm trọngvà 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.

<b>5.2.2. Nhược điểm</b>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

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ồntại những hạn chế:

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

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

- Với chương trình có các đầu vào phức tạp để tìm ra các lỡi địi hỏi phải tốn nhiềuthời gian, bởi với mỗi biến đang fuzzing phải thử N vector fuzz và phải tạo ra một fuzzerđủ thông minh để phân tích các kết quả trả về.

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

<b>5.3. Tầm quan trọng của kỹ thuật fuzzing trong kiểm thử bảo mật web</b>

Fuzzing là một phương pháp kiểm thử bảo mật quan trọng và hiệu quả trong lĩnh vựckiểm thử ứng dụng web, đóng vai trị quan trọng trong việc đảm bảo an toàn và chấtlượng của ứng dụng. Phương pháp này dựa trên việc cung cấp đầu vào bất thường hoặckhông mong muốn cho ứng dụng web và theo dõi phản hồi của ứng dụng để phát hiệncác lỗ hổng tiềm ẩn. Với khả năng kiểm thử rộng, fuzzing có thể áp dụng cho nhiềuthành phần của ứng dụng web, bao gồm giao diện người dùng, API, và cơ sở dữ liệu.Điều này mang lại sự đánh giá toàn diện về mức độ an toàn của ứng dụng.

Một trong những lợi ích quan trọng của fuzzing là khả năng tự động hóa quá trìnhkiểm thử và tích hợp vào quy trình phát triển liên tục (CI/CD). Nhờ vậy, fuzzing giúpphát hiện lỗ hổng sớm hơn, cải thiện chất lượng phần mềm ngay từ giai đoạn phát triển,và giảm thiểu rủi ro an ninh trong các giai đoạn triển khai và bảo trì.

Phương pháp fuzzing cũng cho phép thử nghiệm nhiều phương pháp tấn công khácnhau, từ các kỹ thuật tấn công đã biết đến các phương pháp mới nởi. Điều này giúp tìmra các lỡ hởng zero-day, tức là những lỡ hởng chưa được cơng bố trước đó, nâng cao tínhan toàn cho ứng dụng và người dùng.

Khi phát hiện và sửa chữa các lỗ hổng bảo mật sớm thơng qua fuzzing, nguy cơ tấncơng thực sự có thể giảm đáng kể, giúp bảo vệ ứng dụng và người dùng khỏi các mối đedọa bảo mật tiềm ẩn. Điều này không chỉ tăng cường an ninh cho ứng dụng mà cịn cảithiện chất lượng tởng thể của nó, bao gồm hiệu śt và tính ởn định. Do đó, fuzzing làmột công cụ quan trọng trong kiểm thử bảo mật web, góp phần tạo ra những ứng dụngan tồn và đáng tin cậy cho người dùng.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>6. Tổng kết chương 1</b>

Chương 1 cung cấp cái nhìn tổng quan về kiểm thử bảo mật website, bao gồm giớithiệu về ứng dụng web, kiểm thử phần mềm, kiểm thử web và các loại lỗ hổng bảo mật.Đầu tiên, chương trình bày về khái niệm ứng dụng web, phân loại và các lỡ hởng tiềm ẩncó thể ảnh hưởng đến bảo mật của ứng dụng.

Kiểm thử phần mềm và kiểm thử web được thảo luận như là những phương pháp cơbản để đảm bảo chất lượng và tính toàn vẹn của các ứng dụng web. Kiểm thử web baogồm các kỹ thuật và công cụ khác nhau nhằm kiểm tra chức năng, hiệu suất và tính bảomật của ứng dụng.

Phần tiếp theo tập trung vào việc phân loại các lỗ hổng bảo mật web, bao gồm một sốlỗ hổng chính như SQL Injection, Cross-Site Scripting (XSS), và các lỗ hổng khác. Kiếnthức về những lỗ hổng này là cần thiết để phát triển các chiến lược kiểm thử và bảo mậthiệu quả.

Cuối cùng, chương trình bày khái niệm kỹ thuật fuzzing, ưu và nhược điểm của kiểmthử fuzzing, và tầm quan trọng của kỹ thuật này trong kiểm thử bảo mật web. Fuzzing làmột phương pháp mạnh mẽ để phát hiện lỗ hổng bảo mật thông qua việc tạo ra cáctrường hợp kiểm thử đa dạng và bất ngờ.

Tổng kết lại, Chương 1 cung cấp một nền tảng lý thuyết quan trọng về kiểm thử bảomật web, bao gồm kiến thức về ứng dụng web, lỗ hổng bảo mật, và phương pháp kiểmthử và fuzzing. Những kiến thức này là cần thiết cho việc xây dựng và triển khai các giảipháp kiểm thử bảo mật web hiệu quả.

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>Chương 2: Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mậtWebsite</b>

<i>Chương 2 tập trung vào kỹ thuật fuzzing trong kiểm tra lỗ hổng bảo mật website.Chương mô tả các giai đoạn của kiểm thử fuzzing, bao gồm xác định mục tiêu, đầu vào,sinh dữ liệu fuzz, thực thi và giám sát dữ liệu fuzz, cũng như đăng lỗi và phân tích. Tiếptheo là thu thập các điểm đầu vào thơng qua web crawler, quy trình thu thập và tríchxuất URL từ mã HTTP. Chương cũng giải thích nguyên lý chèn dữ liệu fuzz thông quaphương thức GET và POST. Ngoài ra, chương cung cấp các phương pháp phát hiện lỗhổng bảo mật dựa trên đặc trưng và các lỗ hổng được phát hiện bởi kiểm thử fuzzing. </i>

<b>1. Các giai đoạn trong kiểm thử Fuzzing</b>

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 :

<b>1.1.Xác định mục tiêu (Identify target)</b>

Tùy theo mục đích, tác động, nguy cơ và người dùng mà ở giai đoạn này các mụctiêu khác nhau có thể được lựa chọn. Hiện nay, các mục tiêu được đánh giá có nguy cơrủi ro cao:

-Các ứng dụng như nhận dữ liệu qua mạng - có khả năng bị tởn hại từ xa, tạo điềukiện thực thi mã từ xa, để tạo ra các chương trình độc hại (virus, worm ,,,).

- Các ứng dụng chạy ở mức ưu đãi cao hơn so với một người sử dụng - những điềuđó có tiềm năng để cho phép kẻ tấn công thực thi mã ở mức độ đặc quyền cao hơn củachính họ, được gọi là leo thang đặc quyền.

- Các ứng dụng xử lý thông tin có giá trị - một kẻ tấn cơng có thể phá vỡ các điềukhiển và vi phạm sự toàn vẹn, tin cậy hoặc sẵn sàng có của dữ liệu có giá trị.

- Các ứng dụng xử lý thơng tin cá nhân – một kẻ tấn cơng có thể phá vỡ các điềukhiển và vi phạm sự toàn vẹn, tin cậy hoặc sẵn sang có của dữ liệu cá nhân có giátrị(Windows Explorer, Window Registry, Media files, Office Documents, Configurationfiles)

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<b>Hình 2.1 Các giai đoạn trong kiểm thử fuzz1.2. Xác định đầu vào</b>

Đầu vào ứng dụng có thể có nhiều hình thức, hoặc từ xa (mạng traffic), hoặccục bộ (các file, các khóa registry, các biến mơi trường, đối số dịng lệnh, tên đốitượng …). Một số fuzzer đã tiến hóa để phục vụ cho nhiều loại đầu vào. Các lớp đầuvào ứng với fuzzers phổ biến như sau:

1. Command line arguments

2. Environment variables (ShareFuzz)3. Web applications (WebFuzz)

4. File formats (FileFuzz)5. Network protocols (SPIKE)6. Memory

7. COM objects (COMRaider)8. Inter Process Communication

<b>1.3. Sinh dữ liệu fuzz hay còn gọi là tạo các ca kiểm thử</b>

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

Mục đích của một bộ kiểm thử Fuzz là để kiểm tra sự tồn tại của lỗ hổng bảomật có thể truy cập thơng qua đầu vào trong các ứng dụng phần mềm. Do đó dữ liệusinh ra trong kiểm thử Fuzz phải đạt được những yêu cầu sau:

- Tạo ra dữ liệu thử nghiệm ở các mức độ khác nhau, đảm bảo thỏa mãn điềukiện đầu vào của ứng dụng.

- Dữ liệu đầu vào được tạo ra có thể có dạng tệp tin nhị phân (Binary files), tệptin văn bản (Text files) được sử dụng lặp đi lặp lại trong quá trình kiểm tra

- Việc tạo ra dữ liệu kiểm thử với nhiều ca kiểm thử lặp đi lặp lại để bắt lỗi khichạy chương trình.

Bộ kiểm thử Fuzz được phân loại dựa trên hai tiêu chí khác nhau:

- Vector đơn ánh (Injection vector) hoặc vector tấn công (Attack vector)

Các bộ kiểm thử Fuzz có thể được chia dựa trên các lĩnh vực ứng dụng màchúng sử dụng, nhưng về cơ bản theo hướng vector tấn công. Đối với bộ kiểm thửFuzz theo loai vector đơn ánh nó sẽ thực hiện kiểm thử hộp đen thông qua viêc nhậpdữ liệu đầu vào. Các bộ kiểm thử Fuzz loại này dùng để kiểm thử phía client và môtsố khác để kiểm thử phía server. Đối với bộ kiểm thử Fuzz kiểm thử phı́a client vớigiao thức HTTP hoặc TLS sẽ nhằm mục tiêu vào các trình duyệt. Đối với các bộ kiểmthử Fuzz kiểm thử phı́a Server sẽ thực hiện kiểm thử trên máy chủ Web Server. Mộtsố bộ kiểm thử Fuzz khác hỗ trợ kiểm thử trên cả hai Server và Client, hoặc thậm chícả hai (dùng để phân tı́ch proxy hoặc phân tích lưu lượng).

- Kỹ thuật ca kiểm thử

Bộ kiểm thử Fuzz cũng có thể được phân loại dựa trên cá c ca kiểm thử phứctạp. Các ca kiểm thử được tạo ra trong kiểm thử Fuzz với mục tiêu tạo ra các lớp khácnhau trong phần mềm, và nhờ đó có thể thâm nhập vào các lớp logic khác nhau trongứng dụng.

Bộ kiểm thử Fuzz mà thay đổi các giá trị khác nhau trong các giao thức sẽ kiểmtra được các dạng lỗ hổng như là các vấn đề về số nguyên. Khi cấu trúc thông điệp bịbiến đổi di ̣thường, các bộ kiểm thử Fuzz sẽ tìm thấy sai sót trong phân tích cú phápthơng điệp (ví dụ như trong đặc tả XML và ASN.1).

Một số phương pháp phân loại dựa trên sự phức tạp của ca kiểm thử trong mộtbộ kiểm thử Fuzz:

- Bộ kiểm thử Fuzz dựa trên mẫu tĩnh và ngẫu nhiên (Static and randomtemplate-based Fuzzer): thường chỉ kiểm tra các giao thức đáp ứng những yêu cầuđơn giản hoặc các định dạng tập tin.

- Bộ kiểm thử Fuzz dựa trên khối (Block-based Fuzzer): sẽ thực hiện cấu trúccơ bản cho một giao thức đáp ứng yêu cầu đơn giản và có thể chứa một số chức năngđộng thơ sơ như tính toán về kiểm tra tổng và chiều dài các giá trị (lengthvalues).

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

- Bộ kiểm thử Fuzz dựa trên tiến hóa hoặc bộ sinh động (Dynamic generation orevolution based Fuzzer): những bộ kiểm thử Fuzz này không nhất thiết phải hiểuđược giao thức hoặc định dạng tập tin đang được làm mờ, nhưng có thể tìm hiểu nódựa trên một vịng phản hồi từ hệ thống mục tiêu.

- Bộ kiểm thử Fuzz dựa trên mơ phỏng hoặc dựa trên mơ hình (Model-based orsimulation-based Fuzzer): những bộ kiểm thử Fuzz này thực hiện kiểm thử giao diệnhoặc thơng qua một mơ hình hay là một mơ phỏng, hoặc nó cũng có thể được triểnkhai đầy đủ theo một giao thức nào đó. Khơng chỉ có cấu trúc thông điệp được làmmờ, mà những thông điệp bất thường trong ch̃i được tạo ra cũng có thể được làmmờ.

Hiệu quả của kiểm thử Fuzz phu ̣thuộc vào:

- Độ bao phủ không gian đầu vào: Không gian đầu vào của giao diện kiểm thửcàng tốt thı̀ hiêu quả đạt càng cao.

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

<b>1.4. Thực thi dữ liệu fuzz</b>

Trong giai đoạn này, các bộ kiểm thử Fuzz thực hiện phần lớn các chức năngcủa các cách tiếp cận nêu trên nhưng bằng các giải pháp đặc biệt để tự động hóa quátrình xử lý kiểm thử.

Đối tượng tiếp cận của kiểm thử Fuzz bao gồm: - Số (số nguyên dương, số âm, số thực...)

- Ký tự (urls, đầu vào dòng lệnh) - Siêu dữ liệu

- Các chuỗi nhị phân, đinh dạng tệp tin (.pdf, png, .wav, .mpg…) - Các giao thức mạng (http, SOAP, SNMP…)

- Các giao diện đầu I/O , các dòng lệnh tùy chọn, nhập/ xuất, các biểu mẫu, nộidung hay yêu cầu do người dùng tạo ra v.v…

Cách tiếp cận chung cho kiểm thử Fuzz là :

- Sinh tập dữ liệu giá trị nguy hiểm (còn được gọi là fuzz vectors) ứng vớ i từngloại đầu vào cụ thể, các lỗ hổng, các định dạng tệp tin, mã nguồn, các giao thức hoặctổ hợp của các dữ liệu này.

- Chèn thêm mã thực thi vào mã máy của chương trình.

- Phân tích hoạt động của chương trình trong quá trình thực thi.

<b>1.5. Giám sát dữ liệu fuzz</b>

Trong giai đoạn này, các bộ kiểm thử Fuzz không chỉ đơn thuần phát hiện cáclỗ hởng qua quá trình kiểm thử mà cịn phải định nghĩa các lỡi được phát hiện. Điềunày có ý nghĩa hết sức quan trọng trong việc phân tích và báo cáo lỡi. Để có được

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

một báo cáo lỡi đầy đủ và rõ ràng, địi hỏi sự hiểu biết rõ về hoạt động xử lý. Quátrình này có thể được tích hợp vào trong sự kiện phân loại lỡi tự động.

<b>1.6. Đăng lỗi và phân tích</b>

Sau khi một hoặc một số lỗi phần mềm đã được xác định, các bộ kiểm thử Fuzzgửi một danh sách các lỡi này tới đội ngũ phát triển để họ có thể sửa chữa chúng.

<b>2. Thu thập các điểm đầu vào</b>

<b>2.1. Thu thập dữ liệu web với web crawler</b>

Trình thu thập web, hay còn gọi là Web crawler, là một chương trình khai thác cấutrúc đồ thị của web bằng cách di chuyển từ trang này sang trang khác. Ban đầu, chúngđược gọi bằng những cái tên như bọ web, rô-bốt, nhện và sâu, nhưng ngày nay tên gọiphổ biến nhất là trình thu thập web.

Quá trình thu thập web bắt đầu bằng việc chọn một số đường dẫn (URL) của cáctrang web gọi là trang hạt giống. Khi ghé thăm một trang hạt giống, trình thu thập đọcnội dung trang web và lọc ra các siêu liên kết có trong trang. Các URL tương ứng vớicác siêu liên kết này được đưa vào danh sách biên giới (frontier) và được tiếp tụcduyệt đệ quy để ghé thăm tất cả các URL chưa được duyệt.

Việc thu thập web dừng lại khi trình thu thập đã thu thập đủ số trang yêu cầu hoặcdanh sách biên giới khơng cịn URL để duyệt. Sau khi có danh sách URL để thu thập,quá trình lấy trang diễn ra và các trang được lưu vào cơ sở dữ liệu giống như củacơng cụ tìm kiếm. Việc cập nhật thông tin liên tục được tiến hành do web là một thựcthể năng động, thay đổi nhanh chóng.

Các trang web thường được viết bằng ngơn ngữ đánh dấu như HTML, XHTML vàchứa đựng thông tin hữu ích cho người dùng. Kỹ thuật bóc tách và trích xuất thôngtin tự động được sử dụng để lấy dữ liệu từ các trang web. Quá trình thu thập webtương tự như việc duyệt đệ quy một đồ thị, với các trang là các đỉnh và các siêu liênkết là các cạnh.

Trình thu thập web là thành phần đầu tiên trong tồn bộ hệ thống search engine,nhằm duy trì cơ sở dữ liệu được đánh chỉ mục và trả về kết quả cho hàng triệu truyvấn từ người dùng. Ngoài ra, trình thu thập web cịn có thể được sử dụng để xây dựngphần mềm tập trung thông tin và trang web tổng hợp thông tin dựa trên cơ chế tựđộng tìm và phát hiện tài nguyên.

<b>2.2.Quy trình thu thập</b>

</div>

×