Mở đầu
Dastardly, được phát triển bởi PortSwigger, cũng chính là nhà phát triển của công cụ kiểm thử Burp Suite, là một công cụ dò quét lỗ hổng bảo mật tự động (scanner) hoàn toàn miễn phí dành cho ứng dụng web. Với cùng một scan engine lấy từ Burp Scanner (engine được sử dụng bởi các công cụ trả phí, Burp Suite Professional và Burp Suite Enterprise), Dastardly được thiết kế để tích hợp dễ dàng vào CI/CD pipeline của các dự án phát triển phần mền, giúp tự động hóa quá trình phát hiện các lỗ hổng bảo mật trong các ứng dụng web trong giai đoạn phát triển và triển khai. Được giới thiệu vào năm 2022 với phiên bản đầu tiên là 2022.11, đến nay, Dastardly đã release đến phiên bản 2024.2 thời điểm 28/3/2024 với rất nhiều nâng cấp và cập nhật. Chúng ta cùng xem thử xem khả năng và ưu nhược điểm của công cụ này trong bài viết dưới đây nhé.
Tính năng
Tổng quan
Đầu tiên phải nhắc lại Dastardly là công cụ Dynamic Application Security Testing (DAST), tức là công cụ sẽ truy cập vào đường dẫn ứng dụng của chúng ta (có thể là môi trường Staging) sau đó thực hiện crawling các đường dẫn, các path khác nhau của ứng dụng, tự động sinh payload và request, truy vấn lên ứng dụng để kiểm tra lỗ hổng bảo mật. Do vậy tình trạng false-positive (phát hiện các lỗi mà bản chất thì không phải là lỗi) sẽ được giảm thiểu.
Giống như bất kỳ phần mềm kiểm tra bảo mật nào, Burp Suite / Dastardly chứa các chức năng có thể gây ảnh hưởng đến ứng dụng do sử dụng các payload/request đặc biệt, có thể gây ra các sự cố cho hệ thống được kiểm tra. Do vậy, chúng ta vẫn cần cẩn trọng khi sử dụng Dastardly, đọc kỹ tất cả tài liệu hướng dẫn trước khi dùng, sao lưu hệ thống trước khi thực hiện, chỉ nên sử dụng trên môi trường Dev hoặc Staging để tránh rủi ro không đáng có.
Một điểm cần lưu ý nữa là Dastardly không thực hiện authenticated scan (không thấy trong document nhắc đến các cấu hình đăng nhập), tức là scan với vai trò là một người dùng đã login vào hệ thống. Chúng ta sẽ chỉ nhận được kết quả từ cái nhìn của một hacker từ phía ngoài.
Dastardly có sử dụng Chromium trong docker để thực hiện request và scan, ngoài ra còn hỗ trợ cả scan API dựa trên OpenAPI spec:
Các lỗ hổng
Dưới đây là danh sách 7 lỗ hổng bảo mật được thực hiện kiểm tra bởi Dastardly:
Đáng giá nhất ở đây có thể kể đến là lỗ hổng Cross-site scripting (XSS) (reflected), một trong những lổ hổng cơ bản nhất. Ngoài ra, việc có thể đưa ra những cảnh báo về các phiên bản thư viện Javascript có lỗ hổng bảo mật (Vulnerable JavaScript dependency) cũng là một tính năng hay ho.
Tích hợp
Dastardly có thể tích hợp dễ dàng vào các CI/CD pipeline, hỗ trợ hầu hết các pipeline phổ biến, bạn có thể xem thêm hướng dẫn chi tiết dưới đây:
Ngoài ra, do được đóng gói vào docker container nên Dastardly có thể chạy trên bất kỳ nền tảng nào. Chúng ta sẽ sử dụng thử docker của Dastardly để quét nhanh một ứng dụng mẫu như dưới đây.
Thử nghiệm
Thử nghiệm 1
Chúng ta sẽ thử với trang demo nổi tiếng của công cụ Acunetix: http://testphp.vulnweb.com/
Câu lệnh để chạy docker scan trang web này sẽ như sau:
docker run --user $(id -u) --rm -v $(pwd):/dastardly -e BURP_START_URL=http://testphp.vulnweb.com/ -e BURP_REPORT_FILE_PATH=/dastardly/testphp.vulnweb.com-dastardly-report.xml public.ecr.aws/portswigger/dastardly:latest
Ở đây có hai biến môi trường bắt buộc chúng ta cần truyền vào docker container:
BURP_START_URL
: Đây là đường dẫn URL ban đầu mà Dastardly sẽ truy cập vào và từ đó thực hiện các bước crawling.BURP_REPORT_FILE_PATH
: Đây là đường dẫn đến file trong docker container sẽ lưu lại kết quả sau khi thực hiện scan. Ở đây mình đã mount thư mục hiện tại vào đường dẫn/dastardly
ở trong container, và chỉnh định đường dẫn của file báo cáo là/dastardly/testphp.vulnweb.com-dastardly-report.xml
nên sau khi chạy xong chúng ta sẽ thấy xuất hiện file báo cáotestphp.vulnweb.com-dastardly-report.xml
ở thư mục hiện tại luôn.
Sau khoảng 4 phút, scan đã kết thúc và chúng ta có kết quả:
File báo cáo có định dạng là JUnit XML nên chúng ta cần công cụ riêng để xem. Đơn giản nhất chúng ta có thể dùng trang sau để xem:
Ở phía dưới cũng có chi tiết mô tả về lỗ hổng và cách tái hiện.
Xem ra cũng khá khả quan 🤔
Thử nghiệm 2
Thử lại với một trang demo khác của chính PortSwigger: https://ginandjuice.shop/
Ta chạy với cấu hình tương tự như trên:
Sau khoảng 10~15 phút scan, kết quả (tất nhiên) là rất OK:
đi kèm với PoC:
PoC xịn luôn 👋
Có phát hiện ra thư viện Angular phiên bản cũ:
Thử nghiệm 3
Chúng ta sẽ test thử khả năng scan API với repo: https://github.com/erev0s/VAmPI
Setup như sau:
docker network create demo-network
docker run -it -p 5000:5000 --rm --name vampi --network demo-network erev0s/vampi:latest
docker run --user $(id -u) --network demo-network --rm -v $(pwd):/dastardly -e BURP_START_URL=http://vampi:5000/ -e BURP_REPORT_FILE_PATH=/dastardly/vampi-dastardly-report.xml public.ecr.aws/portswigger/dastardly:latest
Đọc log thì scanner có phát hiện ra API spec
Tuy nhiên thì không thấy có request nào đến các API path?
Đọc lại docs:
If the target application makes an API call to an endpoint that is on the same domain as the seed URL, then this API call is scanned by Dastardly. If the target application makes an API call to an endpoint that is not on the same domain as the seed URL, then this API call is not scanned, as it is considered to be out of scope.
Tức là Dastardly chỉ scan nếu app tự request đến API này??? Phần này mình vẫn đang khá confuse, chắc sẽ cần thử nghiệm thêm đôi chút. Ngoài ra chúng ta có thể nghĩ đến việc đào sâu vào docker image của Burp để thay đổi cấu hình (nâng thời gian scan chẳng hạn? 😈😂). Mình sẽ cập nhật bài viết sau khi thử nghiệm được thêm các phần này.
Tạm Kết
Thực sự thì nhìn vào danh sách các lỗ hổng và kết quả mà Dastardly có thể kiểm tra được thì chúng ta không nên đặt kỳ vọng quá nhiều hoặc dựa hoàn toàn vào Dastardly để thực hiện toàn bộ việc kiểm tra bảo mật mà bắt buộc cần kết hợp các công cụ tự động khác và cả kiểm thử bảo mật bằng tay nữa. Tuy nhiên, khả năng tích hợp dễ dàng cùng thời gian scanning nhanh chóng và hoàn toàn không tốn chi phí là một ưu điểm lớn. Khuyến khích các dự án phát triển phần mềm nên tích hợp sẵn vào trong template từ lúc bắt đầu dự án để tận dụng triệt để nguồn lực này.