Mục lục
Sau khi tìm hiểu IAST và DAST là gì, đã đến lúc chúng ta thực hành và thực hiện một bài tập sử dụng các quy trình này để tìm lỗ hổng trong ứng dụng thực tế.
LƯU Ý: Hiện không có giải pháp IAST mã nguồn mở, vì vậy chúng ta sẽ phải sử dụng một giải pháp thương mại. Đừng lo, có gói miễn phí nên bạn có thể làm lab mà không cần trả phí.
Lab này dựa trên repo này.
Repo này chứa một ứng dụng Java có lỗ hổng để kiểm thử và khai thác, Docker và Docker Compose để thiết lập dễ dàng, cùng Contrast Community Edition làm giải pháp IAST.
Yêu cầu chuẩn bị
- Docker
- Docker Compose
- Tài khoản Contrast CE. Đăng ký miễn phí tại đây.
LƯU Ý: Tác giả bài viết này và chương trình 90 Days of DevOps không liên quan hay hợp tác với Contrast Security. Chúng tôi sử dụng giải pháp thương mại này vì không có giải pháp mã nguồn mở, và vì nó có gói miễn phí không yêu cầu trả phí hay cung cấp thẻ tín dụng.
- Vì không có giải pháp IAST mã nguồn mở, chúng ta sẽ dùng giải pháp thương mại với một số license miễn phí. Bạn cần 2 thành phần: Giải pháp IAST từ đây - https://github.com/rstatsinger/contrast-java-webgoat-docker. Bạn cần cài docker và docker-compose trên môi trường mac hoặc linux (lab này test trên Mint). Làm theo README để tạo tài khoản Contrast.
Bắt đầu
Đầu tiên, clone repository.
Lấy thông tin đăng nhập từ Contrast Security. Nhấn vào tên bạn ở góc trên bên phải -> Organization Settings
-> Agent
. Lấy các giá trị Agent Username
, Agent Service Key
và API Key
.
Thay các giá trị này vào file .env.template
trong repo vừa clone.
LƯU Ý: Đây là thông tin bí mật. Không commit lên Git. Tốt nhất nên thêm .env.template
vào .gitignore
để tránh commit nhầm.
Chạy ứng dụng có lỗ hổng
Để chạy ứng dụng, chạy lệnh:
./run.sh
hoặc
docker compose up
Khi sẵn sàng, giao diện ứng dụng sẽ truy cập được tại http://localhost:8080/WebGoat.
Thực hành khai thác
Giờ chúng ta có ứng dụng có lỗ hổng, hãy thử khai thác nó.
Cài ZAP Proxy từ đây
Một cách đơn giản là dùng DAST scanner. Một scanner như vậy là ZAP Proxy. Đây là công cụ quét web app miễn phí và mã nguồn mở.
Cài
zap-cli
từ đâyTiếp theo, cài
zap-cli
.zap-cli
là CLI mã nguồn mở cho ZAP Proxy.Chạy ZAP proxy
Chạy ZAP Proxy từ nơi đã cài đặt. Trên Linux Mint mặc định ở
/opt/zaproxy
. Trên MacOS ởApplications
.Thiết lập biến môi trường
ZAP_API_KEY
vàZAP_PORT
Lấy các giá trị này từ ZAP Proxy. Vào
Options...
->API
để lấy API Key.Vào
Options...
->Network
->Local Servers/Proxies
để cấu hình và lấy port.Chạy các lệnh với
zap-cli
Ví dụ:
zap-cli quick-scan -s all --ajax-spider -r http://127.0.0.1:8080/WebGoat/login.mvc
Hoặc bạn có thể làm theo hướng dẫn trong repo để khai thác ứng dụng.
Quan sát kết quả trên Contrast
Dù làm cách nào, nếu vào tab Vulnerabilities của ứng dụng trên Contrast bạn sẽ thấy Contrast phát hiện ra các lỗ hổng và cảnh báo bạn cần xử lý.
Bonus: Quét lỗ hổng image
Chúng ta đã thấy IAST giúp phát hiện tấn công bằng cách quan sát hành vi ứng dụng. Giờ hãy xem liệu chúng ta có thể phòng tránh các tấn công này từ đầu không.
Ứng dụng có lỗ hổng này được đóng gói dưới dạng container. Hãy quét container này bằng công cụ grype
mà chúng ta đã học ở Ngày 14 và 15 để xem kết quả.
$ grype contrast-java-webgoat-docker-webgoat
✔ Vulnerability DB [no update available]
✔ Loaded image
✔ Parsed image
✔ Cataloged packages [316 packages]
✔ Scanned image [374 vulnerabilities]
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
apt 1.8.2.3 deb CVE-2011-3374 Negligible
axis 1.4 java-archive GHSA-55w9-c3g2-4rrh Medium
axis 1.4 java-archive GHSA-96jq-75wh-2658 Medium
bash 5.0-4 deb CVE-2019-18276 Negligible
bash 5.0-4 (won't fix) deb CVE-2022-3715 High
bsdutils 1:2.33.1-0.1 deb CVE-2022-0563 Negligible
bsdutils 1:2.33.1-0.1 (won't fix) deb CVE-2021-37600 Low
commons-beanutils 1.8.3 java-archive CVE-2014-0114 High
commons-beanutils 1.8.3 java-archive CVE-2019-10086 High
commons-beanutils 1.8.3 1.9.2 java-archive GHSA-p66x-2cv9-qq3v High
commons-beanutils 1.8.3 1.9.4 java-archive GHSA-6phf-73q6-gh87 High
commons-collections 3.2.1 java-archive CVE-2015-6420 High
commons-collections 3.2.1 3.2.2 java-archive GHSA-6hgm-866r-3cjv High
commons-collections 3.2.1 3.2.2 java-archive GHSA-fjq5-5j5f-mvxh Critical
commons-fileupload 1.3.1 java-archive CVE-2016-1000031 Critical
commons-fileupload 1.3.1 java-archive CVE-2016-3092 High
commons-fileupload 1.3.1 1.3.2 java-archive GHSA-fvm3-cfvj-gxqq High
commons-fileupload 1.3.1 1.3.3 java-archive GHSA-7x9j-7223-rg5m Critical
commons-io 2.4 java-archive CVE-2021-29425 Medium
commons-io 2.4 2.7 java-archive GHSA-gwrp-pvrq-jmwv Medium
coreutils 8.30-3 deb CVE-2017-18018 Negligible
coreutils 8.30-3 (won't fix) deb CVE-2016-2781 Low
curl 7.64.0-4+deb10u3 deb CVE-2021-22922 Negligible
curl 7.64.0-4+deb10u3 deb CVE-2021-22923 Negligible
<truncated>
Như bạn thấy, image này có rất nhiều lỗ hổng.
Nếu xem chi tiết từng lỗ hổng, bạn sẽ thấy có các lỗ hổng như RCE (Remote Code Execution), SQL Injection, XML External Entity Vulnerability, v.v.
Tổng kết tuần
IAST và DAST là các phương pháp quan trọng giúp phát hiện lỗ hổng trong ứng dụng bằng cách giám sát hành vi của nó. Điều này thực hiện khi ứng dụng đã được triển khai.
Container Image Scanning giúp phát hiện lỗ hổng dựa trên các thư viện có trong container.
Image Scanning và IAST/DAST không loại trừ lẫn nhau. Chúng đều có vai trò trong Secure SDLC và giúp phát hiện các vấn đề khác nhau trước khi bị tấn công.
Hẹn gặp lại ở ngày 21.
Các bài viết là bản tiếng Việt của tài liệu 90DaysOfDevOps của Micheal Cade và có qua sửa đổi, bổ sung. Tất cả đều có license [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License][cc-by-nc-sa].