Phần 3: Tích Hợp Bảo Mật Vào Vòng Đời DevOps
Bài 11: Phân Tích Thực Thi Động (DAST)
Sau khi "soi" code, đã đến lúc "tấn công" ứng dụng đang chạy. Chào mừng bạn đến với Black-box testing.
Ôn lại bài cũ: SAST (Bài 9) & SCA (Bài 10)
Chúng ta đã dùng SAST để quét code do ta viết và SCA để quét code của thư viện. Cả hai đều là "white-box testing" (nhìn thấy code). Nhưng chúng không thể tìm thấy các lỗi do cấu hình sai hoặc lỗi logic chỉ xảy ra khi ứng dụng *đang chạy*.
DAST là gì?
Dynamic Application Security Testing (DAST), hay Phân tích Bảo mật Ứng dụng Động, là một phương pháp "black-box testing" (kiểm thử hộp đen).
Nó kiểm tra ứng dụng từ bên ngoài, khi nó đang chạy (runtime), bằng cách mô phỏng các cuộc tấn công thực tế. Công cụ DAST không cần truy cập vào source code, nó chỉ tương tác với ứng dụng qua các giao diện web (HTTP/APIs) giống như một hacker.
DAST Hoạt Động Như Thế Nào?
1. Ứng Dụng Đang Chạy
DAST yêu cầu một môi trường (staging, testing) nơi ứng dụng đã được triển khai và đang chạy.
2. Crawl (Thu Thập)
Công cụ DAST "bò" (crawl) qua ứng dụng để tìm tất cả các trang, form, API, và input.
3. Attack (Tấn Công)
Gửi hàng nghìn payload tấn công đã biết (SQLi, XSS,...) vào các input đã tìm thấy.
4. Báo Cáo
Nếu một cuộc tấn công thành công (ví dụ: nhận về lỗi SQL), công cụ sẽ báo cáo đó là một lỗ hổng.
Ưu Điểm vs. Nhược Điểm Của DAST
Ưu điểm (Pros)
-
Ít False Positive: Nếu DAST báo lỗi, gần như chắc chắn đó là lỗi thật, vì nó đã khai thác thành công.
-
Phát hiện lỗi Runtime: Tìm thấy các lỗi mà SAST bỏ lỡ, như lỗi cấu hình server, lỗi logic nghiệp vụ, và các vấn đề về môi trường.
-
Độc lập ngôn ngữ: Không quan tâm ứng dụng viết bằng ngôn ngữ gì (Java, Python, Go...), miễn là nó nói chuyện qua HTTP.
Nhược điểm (Cons)
-
Chậm: Quá trình crawl và tấn công rất tốn thời gian, thường mất hàng giờ, không phù hợp để chạy mỗi lần commit.
-
Không bao phủ hết 100% code: Vì là black-box, DAST chỉ thấy những gì nó crawl được. Nó sẽ bỏ lỡ các API ẩn, các trang yêu cầu logic phức tạp.
-
Khó chỉ ra vị trí lỗi: DAST nói: "API /search bị lỗi XSS", nhưng không chỉ chính xác file và dòng code nào gây ra lỗi (vì nó không thấy code).
So Sánh Nhanh: SAST vs. DAST
| Tiêu chí | SAST (Bài 9) | DAST (Bài 11) |
|---|---|---|
| Phương pháp | White-box (Hộp trắng) | Black-box (Hộp đen) |
| Đối tượng quét | Mã nguồn (Source code) | Ứng dụng đang chạy (Runtime) |
| Cần ứng dụng chạy? | Không | Có |
| Cần source code? | Có | Không |
| False Positives | Nhiều 😭 | Rất ít 😊 |
| Tốc độ | Nhanh (phút) | Rất chậm (giờ) |
| Phát hiện lỗi | Lỗi code (SQLi, XSS) | Lỗi code + Lỗi cấu hình |
| Thời điểm chạy | Sớm (Khi code, commit) | Muộn (Sau khi deploy) |
Ví dụ: DAST tìm thấy gì?
Giả sử ứng dụng của bạn có chức năng tìm kiếm tại URL: `http://example.com/search?q=my+product`
Một công cụ DAST sẽ thử gửi một payload Cross-Site Scripting (XSS) vào tham số `q`:
# Công cụ DAST thử gửi request này:
GET http://example.com/search?q=<script>alert('DAST_XSS')</script>
Sau đó, DAST sẽ phân tích HTML trả về.
- Nếu ứng dụng trả về `` nguyên vẹn trong HTML, DAST sẽ cắm cờ LỖ HỔNG XSS!
- Nếu ứng dụng đã "làm sạch" (sanitize) và trả về `<script>alert('DAST_XSS')</script>`, thì ứng dụng an toàn.
Đây là điều mà SAST có thể bỏ lỡ nếu logic làm sạch (sanitization) nằm ở một thư viện hoặc một service khác mà SAST không quét tới.
Các Công Cụ DAST Phổ Biến
OWASP ZAP (Zed Attack Proxy)
Công cụ DAST mã nguồn mở mạnh mẽ và phổ biến nhất. Nó hoạt động như một "proxy" đứng giữa bạn và ứng dụng, cho phép bạn xem, can thiệp và tự động tấn công các request.
Điểm mạnh: Mã nguồn mở 100%, cộng đồng lớn, dễ tự động hóa trong CI/CD.
Burp Suite (Bản Professional)
Là "tiêu chuẩn vàng" cho các chuyên gia pentest (kiểm thử xâm nhập). Bản Pro có tính năng quét tự động (DAST) cực kỳ mạnh mẽ, tìm được nhiều lỗ hổng phức tạp.
Điểm mạnh: Cực mạnh cho pentest thủ công, scanner tự động rất tốt (bản Pro).
SAST + SCA + DAST: Bộ Ba Hoàn Hảo
Không có công cụ nào là viên đạn bạc. Bảo mật tốt nhất là bảo mật theo lớp (defense-in-depth):
- 🛡️ SAST: Bảo vệ code của bạn.
- 🛡️ SCA: Bảo vệ thư viện bạn dùng.
- 🛡️ DAST: Bảo vệ ứng dụng khi đang chạy.
Chúng ta đã bảo vệ code, vậy còn thứ "gói" code đó lại thì sao? Đó chính là Docker.
Bài Tiếp Theo: Quét Bảo Mật Container