49 SAST und DAST: Automatisierte Sicherheitstests

49.1 Grundlagen der Anwendungssicherheit

Die Sicherheit von Anwendungen ist heute ein kritischer Faktor für jedes Unternehmen. Zwei bewährte Ansätze zur automatisierten Erkennung von Sicherheitslücken sind:

Beide Verfahren ergänzen sich und decken unterschiedliche Schwachstellentypen ab.

49.2 SAST - Static Application Security Testing

49.2.1 Funktionsweise

SAST-Tools analysieren den Quellcode, Bytecode oder kompilierte Anwendungen, ohne diese auszuführen. Sie suchen nach bekannten Sicherheitsmustern und Schwachstellen.

Vorteile: - Frühe Erkennung in der Entwicklungsphase - Vollständige Code-Abdeckung möglich - Zeigt exakte Code-Stellen der Schwachstellen - Integration in CI/CD-Pipelines

Nachteile: - Hohe False-Positive-Rate - Kann keine Laufzeit-Schwachstellen erkennen - Schwierigkeiten bei dynamischem Code

49.2.2 Typische SAST-Findings

// SQL-Injection-Schwachstelle
String query = "SELECT * FROM users WHERE id = " + userId;
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

// Hardcoded Credentials
String password = "admin123";
String apiKey = "sk-1234567890abcdef";

// Path Traversal
File file = new File("/uploads/" + filename);

49.2.3 Integration in die Entwicklung

# GitLab CI Beispiel
sast_scan:
  stage: security
  script:
    - sonarqube-scanner
    - checkmarx-scan --project myapp
  artifacts:
    reports:
      sast: sast-report.json

49.3 DAST - Dynamic Application Security Testing

49.3.1 Funktionsweise

DAST-Tools testen laufende Anwendungen von außen, ähnlich wie ein Angreifer vorgehen würde. Sie senden verschiedene Payloads und analysieren die Antworten.

Vorteile: - Testet die reale Anwendung inklusive Konfiguration - Niedrige False-Positive-Rate - Erkennt Laufzeit-Schwachstellen - Sprachunabhängig

Nachteile: - Benötigt lauffähige Anwendung - Unvollständige Code-Abdeckung - Kann interne Logik nicht analysieren - Zeitaufwändiger als SAST

49.3.2 Automatisierte DAST-Integration

#!/bin/bash
# OWASP ZAP Baseline Scan
docker run -v $(pwd):/zap/wrk/:rw \
  owasp/zap2docker-stable zap-baseline.py \
  -t https://myapp.example.com \
  -r zap-report.html

# Nuclei Vulnerability Scanner
nuclei -target https://myapp.example.com \
  -templates nuclei-templates/ \
  -output nuclei-results.txt

49.4 Praktische Tool-Beispiele

49.4.1 SAST-Tools

Open Source: - SonarQube Community: Grundlegende SAST-Funktionalität - Semgrep: Regelbasierte Code-Analyse - SpotBugs: Java-spezifische Analyse - Bandit: Python Security Linter

Commercial: - Checkmarx: Enterprise SAST-Lösung - Veracode: Cloud-basierte Sicherheitsanalyse - Fortify: Umfassende Static Analysis - Steampunk Spotter: Spezialisiert auf Ansible-Playbooks und Infrastructure-as-Code

49.4.2 DAST-Tools

Open Source: - OWASP ZAP: Umfassender Web Application Scanner - Nuclei: Schneller Vulnerability Scanner - Nikto: Web Server Scanner - SQLMap: SQL-Injection-Testing

Commercial: - Burp Suite Professional: Manuelle und automatisierte Tests - Rapid7 AppSpider: Enterprise DAST-Lösung - Qualys WAS: Cloud-basiertes Web Application Scanning

49.5 Kostenbetrachtung für KMU

49.5.1 Typische Preismodelle

Die Kosten für professionelle Security-Testing-Tools bewegen sich im KMU-Bereich üblicherweise bei:

49.5.2 Beispielkalkulation

Kleines Entwicklungsteam (5 Entwickler):
- SAST-Tool: 5 × 50€ = 250€/Monat
- DAST-Tool: 200€/Monat (Team-Lizenz)
- Gesamt: 450€/Monat = 5.400€/Jahr

Mittleres Team (15 Entwickler):
- Enterprise SAST: 800€/Monat
- Enterprise DAST: 400€/Monat
- Gesamt: 1.200€/Monat = 14.400€/Jahr

49.6 Das Paradox erfolgreicher Sicherheitstools

49.6.1 Das unsichtbare Problem

Hier entsteht ein kritisches Dilemma: Wenn Security-Tools ihren Job gut machen, sind ihre Kosten schwer zu rechtfertigen.

Das Problem: - Erfolgreiche Prävention ist unsichtbar - Keine Sicherheitsvorfälle = “Warum zahlen wir dafür?” - Schadensfälle, die nicht auftreten, werden nicht wahrgenommen - Tools erscheinen als reine Kostenstelle

49.6.2 Reale Schadenskosten

Ein einziger erfolgreicher Angriff kann Kosten verursachen, die Jahre der Tool-Lizenzierung übersteigen:

Typische Kosten eines Datenlecks (KMU):
- Incident Response: 15.000-50.000€
- Forensische Untersuchung: 10.000-30.000€
- DSGVO-Bußgelder: Bis zu 20 Mio€ oder 4% Jahresumsatz
- Reputationsschäden: Unbezifferbar
- Ausfallzeiten: 1.000-10.000€ pro Stunde

Ein einziger verhindeter Vorfall amortisiert
die Tool-Kosten für mehrere Jahre.

49.6.3 Messbare Metriken entwickeln

Security KPIs:
  SAST-Metriken:
    - Gefundene Critical/High Vulnerabilities
    - Mean Time to Fix (MTTF)
    - False Positive Rate
    
  DAST-Metriken:
    - Abgedeckte Anwendungen
    - Scan-Frequency
    - Trend der gefundenen Issues
    
  Business-Metriken:
    - Verhinderte Sicherheitsvorfälle (geschätzt)
    - Compliance-Erfüllung
    - Versicherungsprämien-Reduzierung

49.7 Integration in DevSecOps

49.7.1 CI/CD-Pipeline Integration

stages:
  - build
  - sast
  - test
  - dast
  - deploy

sast_analysis:
  stage: sast
  script:
    - sonar-scanner
    - steampunk-spotter scan playbooks/
  rules:
    - if: $CI_MERGE_REQUEST_ID

security_gate:
  stage: test
  script:
    - |
      if [ "$CRITICAL_ISSUES" -gt 0 ]; then
        echo "Critical security issues found. Blocking deployment."
        exit 1
      fi

dast_scan:
  stage: dast
  script:
    - zap-baseline.py -t $STAGING_URL
  environment: staging
  only:
    - main

49.7.2 Automatisierte Remediation

# Beispiel: Automatische Issue-Erstellung
def create_security_ticket(vulnerability):
    ticket = {
        'title': f'Security: {vulnerability.type}',
        'description': f'''
        Vulnerability: {vulnerability.description}
        File: {vulnerability.file}:{vulnerability.line}
        Severity: {vulnerability.severity}
        CWE: {vulnerability.cwe}
        
        Remediation: {vulnerability.fix_guidance}
        ''',
        'priority': map_severity(vulnerability.severity),
        'assignee': get_code_owner(vulnerability.file)
    }
    jira.create_issue(ticket)

49.8 Steampunk Spotter: Ansible-Security

Ein spezialisiertes Beispiel für Infrastructure-as-Code Security ist Steampunk Spotter, das sich auf Ansible-Playbooks fokussiert:

49.8.1 Funktionalität

# Beispiel-Scan-Ergebnisse
findings:
  - rule: "ansible.hardcoded-passwords"
    file: "playbooks/database.yml"
    line: 23
    severity: "HIGH"
    message: "Hardcoded password detected"
    
  - rule: "ansible.privilege-escalation"
    file: "roles/webserver/tasks/main.yml"
    line: 15
    severity: "MEDIUM"
    message: "Unrestricted become usage"

49.8.2 Integration

# In CI/CD Pipeline
steampunk-spotter scan \
  --path playbooks/ \
  --format junit \
  --output security-report.xml

# Mit Quality Gates
steampunk-spotter scan --fail-on high playbooks/

49.9 Return on Investment

49.9.1 Kostenvermeidung berechnen

ROI-Formel für Security Tools:

Jährliche Ersparnis = 
  (Wahrscheinlichkeit eines Angriffs × Durchschnittliche Schadenskosten) 
  - Tool-Kosten

Beispiel:
- Angriffswahrscheinlichkeit: 25% pro Jahr
- Durchschnittlicher Schaden: 200.000€
- Tool-Kosten: 15.000€/Jahr

ROI = (0,25 × 200.000€) - 15.000€ = 35.000€ jährlich

49.9.2 Langfristige Vorteile

49.10 Best Practices

49.10.1 Tool-Auswahl

  1. Sprachunterstützung: Abdeckung der verwendeten Programmiersprachen
  2. Integration: CI/CD und IDE-Integration
  3. False-Positive-Rate: Akzeptable Anzahl von Fehlalarmen
  4. Reporting: Aussagekräftige und actionable Reports

49.10.2 Organisatorische Maßnahmen