Kỹ thuật Kiểm thử Fuzzing để Phát hiện Lỗ hổng Bảo mật trong Ứng dụng Web

MỤC LỤC

Mục đích nghiên cứu

- Phân tích kỹ thuật fuzzing trong kiểm thử website, làm nền tảng cho xây dựng ứng dụng. - Xây dựng hệ thống kiểm thử bảo mật tự động cho website dựa trên kỹ thuật fuzzing.

Phương pháp nghiên cứu

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

Kỹ thuật Fuzzing trong kiểm tra lỗ hổng bảo mật Website

  • Các giai đoạn trong kiểm thử Fuzzing
    • Thu thập các điểm đầu vào
      • Nguyên lý chèn dữ liệu fuzz

        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ác nhau 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 dựa trên mẫu tĩnh và ngẫu nhiên (Static and random template-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úc cơ 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).

        - Bộ kiểm thử Fuzz dựa trên tiến hóa hoặc bộ sinh động (Dynamic generation or evolution 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 or simulation-based Fuzzer): những bộ kiểm thử Fuzz này thực hiện kiểm thử giao diện hoặ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ển khai đầy đủ theo một giao thức nào đó. Trình thu thập web là thành phần đầu tiên trong toà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 truy vấ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ựng phầ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. Dựa trên mô hình web crawler, nguyên tắc thu thập toàn bộ các điểm đầu vào của một website cũng như vậy, hay nói cách khác Crawler là một phần của Fuzzer nhưng dữ liệu cần thu thập không chỉ URL mà cần thu thập các biến và dữ liệu truyền trên mỗi đường dẫn đó. Ban đầu Fuzzer thực hiện duyệt trang web với URL gốc, sau khi trang web đã được tải về, Fuzzer duyệt nội dung của nó để lấy ra các thông tin sẽ được nạp trở lại và giúp định hướng việc đi theo các đường dẫn tiếp theo.

        Thu thập thông tin (web crawler) là quá trình lấy thông tin từ website, trích xuất ra những thông tin người sử dụng cần, đồng thời cũng tìm những liên kết có trong trang web đó và tự động truy cập vào những đường dẫn đó. Nguyên lý thu thập các điểm đầu vào của website cũng tương tự như vậy, nó là quá trình thu thập các URL và form nhập dữ liệu dựa trên việc phân tích các mã HTML trả về sau mỗi yêu cầu. Thu thập các form trong các thẻ <form> của mã HTML, các thẻ <input> có các thuộc tính name trong form là các biến mang giá trị đầu vào cho liên kết trong thuộc tính action.

        - URL: Với thẻ <form> và thuộc tính action, dữ liệu trong form được gửi tới tệp tin xacthuc.php thực hiện quá trình xác thực, tệp tin này nằm ngang với tệp tin login.php trong thư mục gốc. Đối với các đường dẫn thu được là FORM POST (sử dụng phương thức POST để. truyền dữ liệu) chúng ta có thể thực hiện hoàn toàn tương tự, dữ liệu Fuzzing được chèn vào các biến trong Form Data của gói tin request. Kiểm thử Fuzz cũng có thể được sử dụng bởi tin tặc trong việc tìm cách có được thông tin về các hệ thống và đáp ứng hệ thống để sử dụng trong việc xây dựng các cuộc tấn công.

        Kiểm thử Fuzz một mình không thể cung cấp một bức tranh hoàn chỉnh của bảo mật tổng thể, chất lượng, hiệu quả của một chương trình trong một tình huống hoặc ứng dụng cụ thể. Tiếp theo, quá trình sinh dữ liệu fuzz và thực thi dữ liệu này được triển khai nhằm tạo ra các trường hợp kiểm thử đa dạng, giúp phát hiện lỗ hổng tiềm ẩn trong ứng dụng web.

        Hình 2.1  Các giai đoạn trong kiểm thử fuzz 1.2. Xác định đầu vào
        Hình 2.1 Các giai đoạn trong kiểm thử fuzz 1.2. Xác định đầu vào