Bezpečnost9 min čtení

DAST - Dynamic Application Security Testing

Black-box testování běžících aplikací pro detekci runtime zranitelností a security misconfigurations.

Co je Dynamic Application Security Testing?

DAST je automatizovaný proces testování běžící aplikace z vnější perspektivy (black-box testing) pro identifikaci bezpečnostních zranitelností, které jsou viditelné pouze za runtime. Na rozdíl od SAST, které analyzuje zdrojový kód, DAST testuje aplikaci stejným způsobem, jakým by ji útočník zkoušel kompromitovat - posíláním škodlivých requestů, manipulací s parametry a hledáním bezpečnostních mezer v běžícím systému.

DAST vs. SAST - Klíčové rozdíly

Vlastnost DAST (Dynamic) SAST (Static)
Kdy testuje Runtime - aplikace musí běžet Build time - statická analýza kódu
Přístup ke kódu Black-box - nepotřebuje zdrojový kód White-box - vyžaduje přístup ke kódu
Co detekuje Runtime zranitelnosti, konfigurace, deployment issues Coding errors, unsafe patterns, potenciální zranitelnosti
False positives Nízké - testuje skutečné chování Vyšší - může označit bezpečný kód
Rychlost Pomalejší (hodiny pro velké aplikace) Rychlejší (minuty)
Typ zranitelností SQL injection, XSS, CSRF, auth issues, SSRF Buffer overflows, race conditions, unsafe functions
Jazyk Language-agnostic (testuje HTTP API) Specifické pro jazyk (Java, C#, Python...)
Fáze SDLC QA, Staging, Pre-production Development, PR reviews

Best Practice: Kombinujte SAST + DAST

Nejlepší výsledky dosáhnete kombinací obou přístupů. SAST odhalí potenciální problémy v kódu během vývoje, zatímco DAST ověří, zda jsou tyto zranitelnosti exploitovatelné v reálném prostředí. Tato strategie se nazývá "Defense in Depth" a pokrývá jak teoretické, tak praktické bezpečnostní mezery.

Jak DAST funguje

Typický DAST scan workflow

1
Crawling (Spider) Scanner prochází aplikaci jako běžný uživatel, mapuje všechny stránky, formuláře, parametry a endpointy
2
Attack Surface Mapping Identifikuje vstupní body (input fields, URL params, headers, cookies) kde může provést testy
3
Fuzzing & Injection Posílá škodlivé payloady (SQL injection, XSS, command injection) do všech vstupních bodů
4
Response Analysis Analyzuje HTTP odpovědi, chybové hlášky, timing patterns pro detekci zranitelností
5
Vulnerability Confirmation Ověřuje false positives a generuje detailní report s PoC (Proof of Concept)
6
Reporting Vytvoří prioritizovaný seznam zranitelností s CVSS scores, remediation steps a reprodukčními kroky

Co DAST detekuje

1. Injection útoky

  • SQL Injection: Manipulace s databázovými dotazy přes user input
  • Command Injection: Spuštění OS příkazů přes nezabezpečený input
  • LDAP/XML/XPath Injection: Injection do specifických dotazovacích jazyků
  • Template Injection: SSTI (Server-Side Template Injection)

2. Cross-Site Scripting (XSS)

  • Reflected XSS: Škodlivý script v URL/parametru odražený zpět uživateli
  • Stored XSS: Persistentní XSS uložený v databázi
  • DOM-based XSS: Client-side XSS přes JavaScript manipulaci

3. Autentizace a Session Management

  • Broken Authentication: Slabé hesla, session hijacking, credential stuffing
  • Session Fixation: Útočník fixuje session ID oběti
  • Insecure Session Cookies: Chybějící Secure/HttpOnly/SameSite flags
  • JWT vulnerabilities: Weak signing, algorithm confusion

4. Broken Access Control

  • IDOR (Insecure Direct Object References): Přístup k cizím objektům změnou ID
  • Path Traversal: Přístup k souborům mimo webroot (../../../etc/passwd)
  • Privilege Escalation: Běžný uživatel získá admin práva
  • Missing Function Level Access Control: API endpointy bez autorizace

5. Security Misconfiguration

  • Verbose Error Messages: Stack traces odhalující interní informace
  • Default Credentials: Admin/admin, root/root
  • Directory Listing: Viditelné adresářové struktury
  • Missing Security Headers: CSP, HSTS, X-Frame-Options
  • Exposed Admin Panels: /admin, /phpmyadmin, /wp-admin bez ochrany

6. Další runtime zranitelnosti

  • CSRF (Cross-Site Request Forgery): Neoprávněné akce jménem uživatele
  • SSRF (Server-Side Request Forgery): Server provede request na útočníkem zvolený target
  • XXE (XML External Entity): Čtení souborů přes XML parser
  • Insecure Deserialization: RCE přes deserializaci untrusted dat
  • Business Logic Flaws: Race conditions, price manipulation

Oblíbené DAST nástroje

Open Source / Free

ZAP (Zed Attack Proxy)

Open-source DAST nástroj s GUI i CLI režimem, dříve známý jako OWASP ZAP. Od září 2024 vystupuje jako ZAP by Checkmarx a zůstává open source pod licencí Apache 2.0.

  • Aktivní i pasivní skanování
  • Intercepting proxy pro manuální testování
  • Spidering a automatický crawling
  • API scan (REST, GraphQL, SOAP)
  • CI/CD integrace (Docker, Jenkins, GitLab)
  • Oficiální Docker image zaproxy/zap-stable (dřívější owasp/zap2docker-stable se již nepoužívá)
Commercial / Freemium

Burp Suite Professional

Industry-standard penetration testing platforma s pokročilými funkcemi pro manuální i automatické testování.

  • Burp Scanner - automatický vulnerability scanner
  • Intruder - advanced fuzzing engine
  • Repeater - request manipulation
  • Collaborator - out-of-band detection (SSRF, XXE)
  • Extensions (BApp Store)
  • Placená licence Professional na uživatele a rok, aktuální cena na webu PortSwigger
Open Source

Nuclei

Moderní fast vulnerability scanner založený na YAML templates. Ideální pro CI/CD automatizaci.

  • Komunitní knihovna šablon nuclei-templates
  • Rychlé paralelní skanování
  • Custom templates v YAML
  • Integration s Slack, Jira, GitHub
  • Headless browser support
Commercial SaaS

Acunetix (Invicti Web + API)

Komerční web vulnerability scanner, který dnes Invicti nabízí jako Invicti Web + API. Zaměřuje se i na SPA a aplikace s velkým podílem JavaScriptu.

  • Advanced JavaScript/SPA crawling
  • Skenování webových API
  • Issue tracking (Jira, GitHub, GitLab)
Open Source

Nikto

Klasický web server scanner pro detekci známých zranitelností a misconfigurations.

  • Přes 8 000 potenciálně nebezpečných souborů a programů
  • Outdated server versions detection
  • Server misconfigurations
  • Fast, lightweight CLI tool
Cloud / API-focused

StackHawk

Moderní DAST platforma zaměřená na API security a developer-first workflow.

  • OpenAPI/Swagger integration
  • GraphQL endpoint testing
  • CI/CD native (GitHub Actions, GitLab CI)
  • Developer-friendly reporting
  • Shift-left DAST approach

Praktický příklad: OWASP ZAP v CI/CD

Integrace ZAP do GitLab CI/CD pipeline. Místo zastaralých klíčových slov only/except používá rules:

# .gitlab-ci.yml stages: - build - test - security - deploy # DAST scan using OWASP ZAP dast_scan: stage: security image: zaproxy/zap-stable variables: TARGET_URL: "https://staging.example.com" script: # Reporty se zapisují do /zap/wrk - mkdir -p /zap/wrk # Baseline scan (passive + spider), -I: varování (WARN) job neshodí - zap-baseline.py -t $TARGET_URL -r zap-report.html -J zap-report.json -I # Full scan (active attacks) - můžete použít pro staging # - zap-full-scan.py -t $TARGET_URL -r zap-report.html -J zap-report.json # API scan s OpenAPI spec # - zap-api-scan.py -t $TARGET_URL/openapi.json -f openapi -r api-report.html after_script: - cp /zap/wrk/zap-report.* "$CI_PROJECT_DIR/" artifacts: paths: - zap-report.html - zap-report.json expire_in: 1 week allow_failure: false # Zablokovat deployment při FAIL nálezech rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "main"

GitHub Actions příklad

Příklad používá zaproxy/action-baseline v0.15.0. Pokud nahráváte artefakty sami, actions/upload-artifact@v3 je od listopadu 2024 nepodporovaný.

name: DAST Scan on: push: branches: [ main, staging ] pull_request: branches: [ main ] jobs: zap_scan: runs-on: ubuntu-latest name: OWASP ZAP Scan steps: - name: Checkout code uses: actions/checkout@v7 - name: Deploy to staging run: | # Deploy aplikace do staging pro testing docker compose up -d sleep 30 # Počkat na start aplikace - name: ZAP Baseline Scan uses: zaproxy/action-baseline@v0.15.0 with: target: 'http://localhost:3000' rules_file_name: '.zap/rules.tsv' cmd_options: '-a' allow_issue_writing: false artifact_name: zap-scan-report # Akce sama nahraje reporty (HTML, JSON, MD) jako artifact # zap-scan-report; vlastní actions/upload-artifact není potřeba - name: Fail build on high severity run: | # Parse JSON reportu, fail při High nálezech (riskcode 3) HIGH_COUNT=$(jq '.site[0].alerts | map(select((.riskcode | tonumber) >= 3)) | length' report_json.json) if [ "$HIGH_COUNT" -gt 0 ]; then echo "Found $HIGH_COUNT high risk alerts!" exit 1 fi

Docker Compose pro lokální DAST testing

Klíč version je v Compose souborech zastaralý a příkaz se spouští jako docker compose.

# compose.yaml services: app: build: . ports: - "3000:3000" environment: NODE_ENV: test DATABASE_URL: postgres://user:pass@db:5432/testdb db: image: postgres:15 environment: POSTGRES_PASSWORD: pass POSTGRES_DB: testdb zap: image: zaproxy/zap-stable command: zap-baseline.py -t http://app:3000 -r /zap/wrk/report.html volumes: - ./zap-reports:/zap/wrk depends_on: - app # Použití: # docker compose up -d app db # docker compose run zap # Report bude v ./zap-reports/report.html

DAST Best Practices

Doporučené postupy

  • Testujte na staging/QA, ne na production: DAST může způsobit DOS, data corruption nebo triggernout alarmy
  • Používejte test credentials: Dedicated test účty pro authenticated scanning
  • Rate limiting awareness: DAST generuje mnoho requestů, můžete být zablokováni WAF/CDN
  • Baseline vs Full scan: Baseline pro každý PR, Full scan weekly/před releasem
  • Custom scan policies: Vypněte testy, které nejsou relevantní (např. CMS scan pro API-only app)
  • Authentication context: Konfigurujte ZAP/Burp pro login workflow, testujte authenticated areas
  • API specification: Používejte OpenAPI/Swagger specs pro lepší coverage API endpointů
  • False positive management: Reviewujte a markujte FP, vytvářejte whitelisty
  • Trend tracking: Sledujte počet zranitelností v čase, ne jen current state
  • Integration se SIEM: Posílejte DAST findings do centrálního security dashboardu

Časté chyby při DAST

  • Spuštění DAST na production: Může způsobit outage, corrupt data nebo false alarms
  • Nedostatečný crawling scope: Scanner nenajde všechny endpointy (zejména u SPA)
  • Ignorování false positives: Teams ztratí důvěru v nástroj
  • Pouze automatické scany: Manuální pentesting najde business logic flaws, které DAST neodhalí
  • Žádný authentication: Většina funkcí bývá za přihlášením, skenování homepage je nedostatečné
  • Jeden scan = hotovo: DAST by měl běžet continuously, ne jen před releasem
  • Neaktualizované scanery: Nové CVE a attack vectors vyžadují fresh vulnerability checks

DAST pro různé typy aplikací

1. REST API

U zap-api-scan.py parametr -t ukazuje na API definici, -O přepisuje hostname a -d pouze zapíná debug výpisy.

# OWASP ZAP API scan s OpenAPI spec zap-api-scan.py \ -t api-spec.yaml \ -f openapi \ -O https://api.example.com \ -r api-security-report.html \ -J api-report.json \ -x api-xml-report.xml # Postman Collection import do ZAP # 1. Export Postman collection # 2. Import do ZAP jako "context" # 3. Run Active Scan na importované endpointy

2. GraphQL API

GraphQL podporuje ZAP přes GraphQL add-on. Pozor: GraphQL Armor od Escape je serverový middleware pro ochranu API, ne scanner.

# ZAP API scan pro GraphQL endpoint zap-api-scan.py -t https://api.example.com/graphql -f graphql \ -r graphql-report.html # Introspection query pro mapování schema curl -X POST https://api.example.com/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{__schema{types{name fields{name}}}}"}' # ZAP GraphQL add-on # Importuje schéma, generuje z něj dotazy pro aktivní scan # a hlásí mimo jiné: # - zapnutou introspekci # - identifikovanou implementaci GraphQL serveru # - cyklické reference ve schématu

3. Single Page Applications (SPA)

Pro moderní webové aplikace ZAP doporučuje Client Spider. Nuclei spustí šablony vyžadující prohlížeč jen s přepínačem -headless.

# ZAP v daemon režimu pro React/Vue/Angular apps zap.sh -daemon -port 8080 -config api.disablekey=true # Client Spider (doporučený místo staršího AJAX Spideru) # prochází aplikaci v headless prohlížeči a čte DOM curl 'http://localhost:8080/JSON/clientSpider/action/scan/?url=https://app.example.com' # Nebo Nuclei s headless mode nuclei -u https://app.example.com \ -headless \ -o spa-scan-results.txt

DAST vs IAST vs RASP

Nástroj Jak funguje Výhody Nevýhody
DAST
(Dynamic)
Black-box testování běžící aplikace z venku Žádný přístup ke kódu, language-agnostic, nízké false positives Pomalé, nedává přesnou lokaci v kódu, potřebuje běžící aplikaci
SAST
(Static)
Analýza zdrojového kódu bez spuštění Rychlé, early detection, přesná lokace v kódu Vyšší false positives, language-specific, nevidí runtime issues
IAST
(Interactive)
Agent uvnitř aplikace monitorující runtime behavior Přesné, nízké FP, code-level insights + runtime context Vyžaduje instrumentation, performance overhead
RASP
(Runtime Protection)
Active defense v production - blokuje útoky real-time Production security, zero-day protection, virtual patching Performance impact, false positive může blokovat legitimate users

Zdroje

  1. ZAP: Docker images (říjen 2026)
  2. ZAP Blog: ZAP has joined forces with Checkmarx (září 2024)
  3. ZAP: API Scan (říjen 2026)
  4. ZAP: Client Spider (říjen 2026)
  5. ZAP: GraphQL Support add-on (říjen 2026)
  6. GitHub: zaproxy/action-baseline (říjen 2026)
  7. GitHub: actions/upload-artifact (říjen 2026)
  8. GitLab Docs: Deprecated keywords (only / except) (říjen 2026)
  9. Docker Docs: Compose file version and name (říjen 2026)
  10. CIRT.net: Nikto (říjen 2026)
  11. Invicti: Acunetix (Invicti Web + API) (říjen 2026)
  12. ProjectDiscovery: Running Nuclei (říjen 2026)

Chcete to mít vyřešené bez vlastního DevOps týmu?

Náš čtyřčlenný DevOps tým se o vaši platformu stará za pevnou měsíční cenu.

Nebo napište na info@devsecops.cz. Údaje zpracujeme podle zásad ochrany soukromí.