DAST: динамічне тестування безпеки додатку
DAST (Dynamic Application Security Testing) тестує робочий додаток — атакує як зовнішній зловмисник. Знаходить вразливості, які SAST не бачить: неправильна конфігурація сервера, runtime-вразливості, проблеми з аутентифікацією.
OWASP ZAP
# Baseline scan: швидка перевірка (5-10 хвилин)
docker run --rm \
-v $(pwd)/reports:/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py \
-t https://staging.mysite.com \
-r zap-baseline-report.html \
-J zap-baseline-report.json \
-l WARN # Тільки WARNING і вище
# Full scan: активне сканування (30-60 хвилин)
docker run --rm \
-v $(pwd)/reports:/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable \
zap-full-scan.py \
-t https://staging.mysite.com \
-r zap-full-report.html \
-J zap-full-report.json
# API scan: тестування за OpenAPI специфікацією
docker run --rm \
-v $(pwd)/reports:/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable \
zap-api-scan.py \
-t https://api.staging.mysite.com/openapi.json \
-f openapi \
-r zap-api-report.html
GitHub Actions: ZAP у CI/CD
# .github/workflows/dast.yml
name: DAST
on:
push:
branches: [main]
schedule:
- cron: '0 2 * * 1' # Щотижнево о 2:00
jobs:
zap-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Start application
run: |
docker compose -f docker-compose.test.yml up -d
sleep 30 # Очікуємо запуску
- name: Run ZAP Baseline Scan
uses: zaproxy/[email protected]
with:
target: http://localhost:3000
rules_file_name: .zap/rules.tsv
cmd_options: '-a' # Активне сканування
- name: Upload ZAP report
uses: actions/upload-artifact@v4
if: always()
with:
name: zap-report
path: report_html.html
- name: Stop application
if: always()
run: docker compose -f docker-compose.test.yml down
# .zap/rules.tsv: налаштування правил (WARN/IGNORE/FAIL)
# rule_id action reason
10017 WARN # X-Frame-Options header — попередження
10038 WARN # Content Security Policy — попередження
40012 FAIL # Cross Site Scripting — критично
40018 FAIL # SQL Injection — критично
90011 IGNORE # Charset mismatch — ігноруємо
Nuclei: сканування за шаблонами CVE
# Встановлення
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# Оновлення шаблонів
nuclei -update-templates
# Сканування на критичні вразливості
nuclei -u https://staging.mysite.com \
-severity critical,high \
-tags cve,owasp \
-o nuclei-results.txt \
-json-export nuclei-results.json
# Сканування за категорією
nuclei -u https://staging.mysite.com \
-tags sqli,xss,ssrf,rce \
-rate-limit 50 \
-timeout 10
Burp Suite: ручне тестування
# Burp Suite API: запуск scan через REST API
import requests
BURP_API = "http://localhost:1337/v0.1"
# Створюємо новий scan
response = requests.post(f"{BURP_API}/scan", json={
"urls": ["https://staging.mysite.com"],
"scope": {
"include": [{"rule": "https://staging.mysite.com/.*"}],
},
"scan_configurations": [
{"name": "Crawl and Audit - Balanced"}
]
})
scan_id = response.json()["task_id"]
print(f"Scan ID: {scan_id}")
DAST для API: правила
DAST особливо важлива для API:
- Тестування авторизації: доступ до чужих ресурсів (IDOR)
- Injection через всі input points
- Business logic flaws (обхід обмежень)
# Платформа для API security testing
# OWASP ZAP + Postman Collection
zap-cli --port 8090 start
zap-cli --port 8090 open-url https://api.staging.mysite.com
zap-cli --port 8090 spider https://api.staging.mysite.com
zap-cli --port 8090 active-scan https://api.staging.mysite.com
zap-cli --port 8090 report -o api-security-report.html -f html
DAST проводиться на staging-середовищі, не на production. Активне сканування створює навантаження і може змінювати дані.
Налаштування DAST pipeline з ZAP у GitHub Actions — 1–2 робочих дні.







