Zum Inhalt springen

Services, Wiki-Artikel, Blog-Beiträge und Glossar-Einträge durchsuchen

↑↓NavigierenEnterÖffnenESCSchließen
Anwendungssicherheit Glossar

DAST (Dynamic Application Security Testing)

Sicherheitstest-Methode, die laufende Webanwendungen von außen angreift - ohne Zugriff auf den Quellcode. DAST simuliert echte Angreifer und findet Schwachstellen wie SQL-Injection, XSS und fehlkonfigurierte Server, die bei statischer Code-Analyse unsichtbar bleiben.

DAST testet Anwendungen wie ein externer Angreifer - ohne Quellcode, nur durch Interaktion mit der laufenden Anwendung. Was SAST im Code sucht, findet DAST im Live-Betrieb: falsch konfigurierte Header, unsichere Session-Verwaltung, Injection-Schwachstellen und Logikfehler, die erst im Zusammenspiel der Komponenten entstehen.

DAST vs. SAST - Ergänzung, kein Ersatz

SAST (Static Application Security Testing)

  • Analysiert: Quellcode, Bytecode, Binaries
  • Zeitpunkt: früh im Entwicklungsprozess (Shift Left)
  • Zugang: Code-Repository erforderlich
  • Findet: Unsichere Code-Muster, bekannte Bug-Klassen
  • Schwäche: False Positives, Runtime-Verhalten unbekannt
// Beispiel SAST-Fund: SQL-Konkatenation im Code
String query = "SELECT * FROM users WHERE id = " + userId;
// SAST: Warnung "Potentielle SQL Injection"

DAST (Dynamic Application Security Testing)

  • Analysiert: Laufende Anwendung (HTTP-Traffic)
  • Zeitpunkt: Staging/Pre-Prod, kontinuierlich
  • Zugang: Nur HTTP-Endpunkt erforderlich (kein Code!)
  • Findet: Echte Schwachstellen in laufender Konfiguration
  • Schwäche: False Negatives (nicht alle Code-Pfade erreichbar)
Beispiel DAST-Fund: Gleiche SQL Injection
Request:  GET /user?id=1' OR '1'='1
Response: 500 Error + DB-Fehlermeldung → Beweis für SQLi

IAST (Interactive)

  • Kombiniert beide: Instrumentation im laufenden Prozess
  • Sehr gute Ergebnisse, aber komplex zu integrieren

Empfehlung: SAST + DAST + manuelle Pentests für maximale Abdeckung

OWASP Top 10 - DAST-Abdeckung

A01: Broken Access Control

  • Testet: URL-Parameter manipulieren (IDOR): /api/invoice/1234/api/invoice/1235 (fremde Rechnung?)
  • Testet: HTTP-Verb Tampering (GET statt POST für Admin-Aktionen)

A02: Cryptographic Failures

  • Erkennt: HTTP statt HTTPS auf sensiblen Endpunkten
  • Testet: Schwache TLS-Cipher Suites (SWEET32, POODLE)
  • Findet: Passwörter/Tokens in URLs oder Logs

A03: Injection

  • SQL-Injection: ' OR 1=1--, UNION-based, Blind SQLi
  • OS Command Injection: ; ls -la
  • XPath Injection, LDAP Injection
  • Template Injection (SSTI): {{7*7}} → 49

A04: Insecure Design

  • Begrenzt detektierbar (erfordert Geschäftslogik-Verständnis)
  • Rate Limiting fehlt → Brute Force möglich

A05: Security Misconfiguration

  • HTTP Security Headers fehlen (CSP, HSTS, X-Frame-Options)
  • Directory Listing aktiviert
  • Debug-Mode aktiv (Stack Traces, Fehlermeldungen mit Details)
  • Default Credentials (admin/admin, admin/password)
  • Unnötige HTTP-Methoden (TRACE, PUT, DELETE)

A06: Vulnerable Components

  • Server-Header erkennen → Version → CVE-Check
  • Beispiel: Apache/2.4.49 → CVE-2021-41773 (Path Traversal)

A07: Authentication Failures

  • Brute Force Test (mit Rate Limit Check)
  • Session Fixation
  • Passwort in URL

A08: Software and Data Integrity Failures

  • Deserialization-Tests
  • CSRF-Token fehlt oder zu schwach

A09: Security Logging Failures

  • Schwer automatisiert testbar

A10: SSRF (Server-Side Request Forgery)

  • Payload: http://169.254.169.254/metadata (AWS IMDS)
  • Payload: http://localhost:8080/admin

DAST-Tools im Vergleich

Open Source

OWASP ZAP (Zed Attack Proxy):

  • Kostenlos, sehr mächtig
  • Aktiver und passiver Scan-Modus
  • CI/CD-Integration via Docker/CLI
  • GUI + API + CLI
  • Eignet sich gut für: Entwickler-Testing, CI/CD
# Basis-Scan
docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
  -t https://app.example.com -r report.html

Nikto:

  • Einfacher Server-Scanner
  • Findet: Fehlkonfigurationen, veraltete Software, Default-Files
  • Nicht für tiefe Anwendungstests
docker run --rm hysnsec/nikto -h https://app.example.com

Nuclei (ProjectDiscovery):

  • Template-basiert, extrem schnell
  • 7000+ Templates für bekannte CVEs
  • Gut für: CVE-Scanning, Fehlkonfigurationen
nuclei -u https://app.example.com -t cves/,misconfiguration/

Kommerzielle Lösungen

Burp Suite Pro (PortSwigger):

  • Industriestandard für Pentester
  • Aktiver Scanner + manuelles Testing
  • Crawler mit Auth-Support
  • Kosten: ~€399/Jahr

Invicti (ehem. Netsparker):

  • DAST + IAST Kombination
  • Proof-Based Scanning (keine False Positives)
  • Enterprise-orientiert

Tenable.io Web App Scanning:

  • Integration mit Nessus-Workflow
  • Gut für: kombinierte Infra + App Scans

StackHawk:

  • Developer-first DAST
  • GitHub Actions / GitLab CI nativ
  • Gut für: DevSecOps, schnelle Feedback-Loops

DAST in der CI/CD-Pipeline

# .github/workflows/dast.yml
name: DAST Security Scan

on:
  push:
    branches: [main, develop]

jobs:
  dast:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Start application
        run: docker-compose up -d

      - name: Wait for app
        run: sleep 30

      - name: ZAP Baseline Scan
        uses: zaproxy/action-baseline@v0.12.0
        with:
          target: 'http://localhost:8080'
          rules_file_name: '.zap/rules.tsv'
          cmd_options: '-a'

      - name: Upload ZAP Report
        uses: actions/upload-artifact@v4
        with:
          name: zap-report
          path: report_html.html

Scan-Typen für CI/CD

Baseline Scan (schnell, ~2min):

  • Passiver Scan (kein aktiver Angriff)
  • Fehlende Security Headers, Default-Content, offensichtliche Fehler
  • Ideal für: jeder Push/PR

Full Scan (langsam, ~30min):

  • Aktiver Angriff (SQLi, XSS, SSRF, etc.)
  • Nur in Staging-Umgebung!
  • Ideal für: Release-Branches, täglicher Nachtlauf

API Scan:

  • OpenAPI/Swagger-Spec als Input
  • Testet alle API-Endpunkte automatisch
zap-api-scan.py -t openapi.yaml -f openapi

Authentifizierte DAST-Scans

Problem und Lösung

Problem: DAST ohne Auth testet nur öffentliche Seiten. Lösung: DAST mit Login-Session konfigurieren.

ZAP mit Form-Based Auth

POST /login mit username=test&password=test
ZAP merkt sich Session-Cookie / JWT-Token
Alle nachfolgenden Requests: authentifiziert

ZAP Context-Datei für komplexe Auth

contexts:
  - name: "MyApp"
    urls:
      - "https://app.example.com"
    authentication:
      method: "form"
      loginUrl: "https://app.example.com/login"
      loginRequestData: "username={%username%}&password={%password%}"
    users:
      - name: "testuser"
        credentials:
          username: "sectest@example.com"
          password: "TestPass123!"

Wichtige Hinweise

  • Separaten Test-Account erstellen (nie Prod-Admin!)
  • Test-Account mit minimalen Rechten (normaler User)
  • Separate Test-Umgebung (nie gegen Produktion scannen!)
  • Rate Limiting beachten - DAST generiert viel Traffic

DAST im SDLC einbetten

Secure Development Lifecycle

PhaseMaßnahme
EntwicklungSAST (Echtzeit im IDE) + SAST (bei jedem Commit, CI)
StagingDAST Baseline (bei jedem Deploy, ~2min)
StagingDAST Full Scan (täglich, Nacht)
StagingManueller Pentest (quartalsweise)
ProduktionDAST passiv (Monitoring, kein aktiver Angriff)
ProduktionExterne Vulnerability Scans (monatlich)
ProduktionBug Bounty (wenn Reife vorhanden)

Kategorisierung der Findings

SeverityMaßnahme
CriticalSofortiger Hotfix, kein Release
HighFix im nächsten Sprint (max. 7 Tage)
MediumFix im übernächsten Sprint (max. 30 Tage)
LowBacklog, quartalsweise Review
InfoDokumentieren, keine Fix-Pflicht

Cookielose Analyse via Matomo (selbst gehostet, kein Tracking-Cookie). Datenschutzerklärung