I. CÁC GIẢI PHÁP XÂY DỰNG HỆ THỐNG
3. Cơ chế thu thập dữ liệu (Collector)
3.2. Cơ chế Crawler các URL của website
Để thu thập được các URL của hệ thống chúng ta thực hiện gửi yêu cầu các URL và phân tích các URL trả về để lấy các URL từ mã HTML.
Hình : Mô hình Crawler Website chưa cải tiến
• Các bước Crawl một hệ thống website
- B1: Khởi tạo hàng đợi với 1 phần tử là URL gốc. Khởi tạo danh sách URL Final để lưu các URL cuối cùng của hệ thống.
- B2: Thực hiện việc lấy URL từ hàng đợi và gửi yêu cầu đến web server. - B3: Phân tích mã HTML trả về và lấy ra các URL trong các thuộc tính
của các thẻ trong mã HTML. Đồng thời kiểm tra nếu URL không có trong URL Final thì đưa URL vào URL Final.
- B4: Kiểm tra các URL có trong các URL thu được từ bước 3, nếu không có trong hàng đợi và trong danh sách URL Final thì đưa vào URL đó vào hàng đợi.
- B6: Kiểm tra nếu hàng rỗng thì chuyển đến B7. Nếu hàng không rỗng thì quay lại B2.
- Bước 7: Lưu lại các URL nhận được từ URL Final.
Cấu trúc một URL
http://www.fuzzing.vn:8080/path1/upload/index.php?var1=a&var2=b#endpage
Giao thức Tên miền Cổng Đường dẫn Truy vấn Phân mảnh
/index.php
Khái niệm URL tương đương: là các URL sẽ có giá trị như nhau trong quá trình
fuzz để phát hiện lỗ hổng. Cụ thể, 2 URL được coi là có giá trị tương tự nhau nếu chúng có các thành phần giao thức, tên miền, cổng, đường dẫn là hoàn toàn giống nhau. Phần truy vấn và phân mảnh là khác nhau tuy nhiên trong phần truy vấn các biến (var1, var2) là giống nhau. Ví dụ xét 2 liên kết sau:
Liên kết 1:
http://www.fuzzing.vn:8080/path1/upload/index.php?var1=a&var2=b#endpage Liên kết 2:
http://www.fuzzing.vn:8080/path1/upload/index.php?var1=aa&var2=eee#endpage Đây là 2 URL khác nhau nhưng chúng là tương đương với nhau.
Do quá trình khi gửi dữ liệu fuzzing chúng ta chỉ cần đưa dữ liệu vào các biến, nên với những URL tương đương thì giá trị của chúng trong việc phát hiện các lỗ hổng sẽ là như nhau. Và việc chúng ta thực hiện quá trình fuzzing với cả 2 URL là không cần thiết. Xét trường hợp URL1 http://www.fuzzing.vn:8080/index.php?var1=1 URL2 http://www.fuzzing.vn:8080/index.php?var1=2 URL3 http://www.fuzzing.vn:8080/index.php?var1=3 Fuzzing1 http://www.fuzzing.vn:8080/index.php? var1=”><script>alert(1)</scsript> URL4 http://www.fuzzing.vn:8080/index.php?action=home&var1=1 URL5 http://www.fuzzing.vn:8080/index.php?action=news&var1=2 URL6 http://www.fuzzing.vn:8080/index.php?action=main&var1=3 Fuzzing2 http://www.fuzzing.vn:8080/index.php?action=../../../etc/passwd %00&var1=3
Bảng : Ví dụ về URL tương đương
Chúng ta hoàn toàn có thể thay thế
(URL1, URL2, URL3)=>URL1 và (URL4, URL5, URL6)=>URL4
Chỉ cần fuzzing URL1 và URL4 thì kết quả thu được cũng sẽ không thay đổi so với việc phải fuzzing toàn bộ cả 6 URL chúng ta đã giảm được 2/3 thời gian và tài nguyên hệ thống. Do đó trong zScanner cần thiết có thêm một bước phân loại để loại bỏ các URL tương đương giúp giảm thời gian và tài nguyên hệ thống.
• Đề xuất mô hình Crawler: Có cơ chế xử lý việc loại bỏ các URL tương đương và thu thập các URL từ nhiều nguồn khác nhau (google search engine, robots.txt file, javascript source, flash source).
Hình : Mô hình Crawler Website đã cải tiến
• Cơ chế lấy URL từ Google:
- Google cho sẽ cho phép ta tìm kiếm theo cú phép “site:<domain của website>” và trả về tất cả các đường dẫn của hệ thống mà google đã đánh chỉ mục. Ta có thể gửi cú pháp tìm kiếm trên google và phân tích mã HTML để lấy về các đường dẫn của website.
Hình : Tìm kiếm các URL thông qua máy tìm kiếm của google
• Lấy đường dẫn trong robots.txt file
- Tệp tin Robot chứa các URL mà hệ thống không muốn các máy tìm kiếm đánh chỉ mục (chống lại Google Hacking DB). Vì vậy ta có thể lấy các đường dẫn tương ứng thông qua việc phân tích mã nguồn của tệp tin robots.txt.
Hình : Lấy các URL từ robots.txt file
• Cơ chế loại URL tương đương
- Trong mô hình này chúng ta bổ sung thêm bước kiểm tra xem trong URL Final xem có tồn tại URL tương đương của nó không, nếu không tồn tại thì mới thực hiện việc thêm URL này vào URL Final.
• Cơ chế lấy URL từ mã Javascript, Flash
- Với Javascript ta thực hiện tìm kiếm các URL dựa trên biểu thức chính quy (Regular Expression) của một URL.
- Với Flash ta thực hiện việc giải nén tệp tin .swf và thực hiệc việc tìm kiếm các URL dựa trên biểu thức chính quy (Regular Expression) của một URL.