Zum Inhalt springen

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

↑↓NavigierenEnterÖffnenESCSchließen

DevSecOps: Sicherheit in CI/CD-Pipelines integrieren

Praxisguide zur DevSecOps-Implementierung: Wie Security-Tests in CI/CD-Pipelines integriert werden, welche Tools für SAST, DAST, SCA und Container-Scanning eingesetzt werden, und wie Security-Findings in den Entwicklungs-Workflow fließen. Mit konkreten GitLab-CI und GitHub-Actions-Beispielen.

Inhaltsverzeichnis (8 Abschnitte)

DevSecOps ist keine Technologie - es ist eine Kulturveränderung. Sicherheit gehört nicht ans Ende des Release-Prozesses (“Security Gate”), sondern in jeden einzelnen Schritt der Entwicklung. Jeder Entwickler ist verantwortlich für Security; das Security-Team befähigt statt zu blockieren.

Das DevSecOps-Prinzip: Shift Left

Traditionell (DevOps ohne Security):
  Code → Build → Test → Staging → Security-Review → Release

                                  Security findet Probleme hier
                                  → teuer, spät, blockierend

DevSecOps (Shift Left):
  Commit → [SAST + Secret-Scan + SCA] → Build → [Container-Scan]
        → Test → [DAST] → Staging → [IAST + Pentest] → Release
  ↑                                                         ↑
  Security hier                                       auch hier!
  → günstig, früh, automatisiert

Kosten-Faktor für Bug-Behebung (IBM NIST-Studie):
  Gefunden im Code:          1x
  Gefunden im Test:          6x
  Gefunden in Produktion:    30x
  Gefunden durch Kundenmeldung: 100x

→ Jeder Security-Bug der in CI/CD gefunden wird ist 30x billiger!

Die DevSecOps-Pipeline - Übersicht

Stufen einer vollständigen DevSecOps-Pipeline:

┌────────────────────────────────────────────────────────────────┐
│ PRE-COMMIT (Lokal auf Entwickler-Rechner)                      │
│ • Secret Detection (gitleaks, git-secrets)                     │
│ • Linting (eslint security rules)                              │
│ • Dependency Check (npm audit, safety)                         │
└────────────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────────────┐
│ CI: SOURCE CODE ANALYSE                                        │
│ • SAST (Semgrep, CodeQL, Bandit, SonarQube)                   │
│ • SCA - Software Composition Analysis (Snyk, OWASP Dependency-Check) │
│ • Secret Scanning (TruffleHog, GitLab Secret Detection)       │
│ • License Compliance (FOSSA, ClearlyDefined)                  │
└────────────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────────────┐
│ CI: BUILD & CONTAINER                                          │
│ • Container Image Scanning (Trivy, Grype, Snyk)               │
│ • SBOM Generation (Syft) - Stückliste aller Dependencies       │
│ • Image Signing (Cosign, Notary) - Supply Chain Security      │
│ • Infrastructure as Code Scanning (Checkov, tfsec, Terrascan) │
└────────────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────────────┐
│ CI/CD: DYNAMISCHE TESTS                                        │
│ • DAST (OWASP ZAP, Nuclei)                                    │
│ • API Security Testing (Postman/Newman Security, ZAP API)     │
│ • IAST - Laufzeit-Instrumentation (Contrast Security)         │
└────────────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────────────┐
│ PRODUKTION: LAUFZEIT-SICHERHEIT                                │
│ • WAF (ModSecurity, AWS WAF, Cloudflare)                      │
│ • RASP - Runtime Application Self-Protection                  │
│ • Container Runtime Security (Falco, Aqua Security)           │
│ • Vulnerability Management (kontinuierliches CVE-Monitoring)  │
└────────────────────────────────────────────────────────────────┘

SAST - Statische Code-Analyse in CI/CD

SAST-Tools und ihre Stärken:

Semgrep (Open Source, empfohlen):
  → Regelbasiert, sehr schnell, false-positive-arm
  → Community-Regeln für 20+ Sprachen
  → Custom Rules möglich (spezifische Business-Logik)

  GitLab CI:
  sast:
    stage: security
    image: returntocorp/semgrep:latest
    script:
      - semgrep --config=auto
                --config=p/owasp-top-ten
                --config=p/javascript
                --json
                --output=semgrep-findings.json
                ./src
    artifacts:
      reports:
        sast: semgrep-findings.json  # GitLab SAST-Report-Integration!

---

Semgrep Custom Rule Beispiel (SQL-Injection):
  rules:
  - id: sql-injection-risk
    patterns:
    - pattern: |
        $DB.query("..." + $USER_INPUT + "...")
    - pattern-not: |
        $DB.query($QUERY, [$PARAMS])   # Prepared Statements OK
    message: |
      Mögliche SQL-Injection: User-Input wird direkt in Query eingebaut.
      Verwende Prepared Statements!
    severity: ERROR
    languages: [javascript, typescript]
    metadata:
      cwe: "CWE-89"
      owasp: "A03:2021"

---

SonarQube (mit Security-Plugin):
  # sonar-scanner in CI/CD:
  sonar:
    stage: security
    image: sonarsource/sonar-scanner-cli:latest
    variables:
      SONAR_HOST_URL: "https://sonar.intern.firma.de"
      SONAR_TOKEN: "$SONAR_TOKEN"    # Als CI/CD Secret!
    script:
      - sonar-scanner
        -Dsonar.projectKey=myapp
        -Dsonar.sources=./src
        -Dsonar.security.sources=src
    only:
      - main
      - merge_requests

---

GitHub Actions mit CodeQL:
  name: CodeQL Security Analysis
  on: [push, pull_request]

  jobs:
    analyze:
      runs-on: ubuntu-latest
      permissions:
        security-events: write
      steps:
      - uses: actions/checkout@v4
      - uses: github/codeql-action/init@v3
        with:
          languages: javascript, python
          queries: security-and-quality
      - uses: github/codeql-action/autobuild@v3
      - uses: github/codeql-action/analyze@v3

SCA - Abhängigkeiten auf Schwachstellen prüfen

Software Composition Analysis (SCA) prüft Third-Party-Dependencies:

Snyk (kommerziell, sehr leistungsfähig):
  snyk test                         # Node.js Dependencies
  snyk test --file=requirements.txt # Python
  snyk test --docker myapp:latest   # Container-Image
  snyk monitor                      # Kontinuierliches Monitoring

  # GitLab CI:
  dependency_scanning:
    stage: security
    image: snyk/snyk:node
    script:
      - snyk test --severity-threshold=high
    allow_failure: false

---

OWASP Dependency-Check (Open Source):
  # Docker:
  docker run --rm \
    -v $(pwd):/src \
    owasp/dependency-check:latest \
    --project "MyApp" \
    --scan /src \
    --format HTML \
    --out /src/dependency-check-report

---

npm audit (built-in):
  npm audit --audit-level=high
  npm audit fix                # Automatische Fixes
  npm audit fix --force        # Breaking Changes akzeptieren

  # In package.json scripts:
  "scripts": {
    "audit": "npm audit --audit-level=moderate"
  }

---

pip-audit (Python):
  pip-audit -r requirements.txt
  pip-audit --fix               # Sichere Versionen installieren

---

Supply Chain Security mit SBOM:
  # Syft - SBOM (Software Bill of Materials) generieren:
  syft myapp:latest -o spdx-json=sbom.spdx.json

  # Grype - SBOM auf CVEs prüfen:
  grype sbom:sbom.spdx.json

  # Cosign - Container-Image signieren:
  cosign sign --key cosign.key myregistry.io/myapp:v1.2.3
  cosign verify --key cosign.pub myregistry.io/myapp:v1.2.3

DAST - Dynamische Tests in Staging

OWASP ZAP in CI/CD (empfohlen für DAST):

  Baseline Scan (passiv, schnell, < 2 Minuten):
  dast_baseline:
    stage: dast
    image: owasp/zap2docker-stable:latest
    script:
      - mkdir -p /zap/wrk/
      - zap-baseline.py
          -t https://staging.myapp.de
          -g gen.conf
          -r zap-baseline-report.html
          -J zap-baseline-report.json
          -x zap-baseline-report.xml
          -I                              # Fail on alerts
    artifacts:
      paths:
        - zap-baseline-report.html

  Full Scan (aktiv, langsamer, findet mehr):
  dast_full:
    stage: dast
    script:
      - zap-full-scan.py
          -t https://staging.myapp.de
          -r zap-full-report.html
          -I
    only:
      - main

---

Authentifizierter ZAP-Scan:
  dast_authenticated:
    stage: dast
    image: owasp/zap2docker-stable:latest
    variables:
      TARGET_URL: "https://staging.myapp.de"
      LOGIN_URL: "https://staging.myapp.de/login"
      USERNAME: "${TEST_USERNAME}"    # CI/CD Secret
      PASSWORD: "${TEST_PASSWORD}"    # CI/CD Secret
    script:
      - zap.sh -daemon -host 0.0.0.0 -port 8080
          -config api.disablekey=true &
      - sleep 5  # ZAP starten lassen
      # Formular-Auth konfigurieren via ZAP-API
      - python3 scripts/configure_zap_auth.py
      - zap-cli active-scan --scanners sqli,xss $TARGET_URL
      - zap-cli report -o zap-report.html -f html

---

Nuclei (schnelles Template-basiertes Scanning):
  nuclei_scan:
    stage: dast
    image: projectdiscovery/nuclei:latest
    script:
      - nuclei -u https://staging.myapp.de
               -t cves/
               -t exposures/
               -t vulnerabilities/
               -severity critical,high
               -json-export nuclei-findings.json
               -exit-code 1     # Fail bei Findings

Infrastructure as Code (IaC) Security

IaC-Dateien einmal falsch konfiguriert → hunderte Deployments unsicher!

Checkov (umfassendstes IaC-Scanner):
  # Terraform:
  checkov -d ./terraform --framework terraform

  # Kubernetes YAML:
  checkov -d ./kubernetes --framework kubernetes

  # Docker:
  checkov -f Dockerfile --framework dockerfile

  # In CI/CD:
  iac_security:
    stage: security
    image: bridgecrew/checkov:latest
    script:
      - checkov -d . --soft-fail-on MEDIUM
                     --hard-fail-on HIGH,CRITICAL
    artifacts:
      reports:
        junit: checkov-results.xml

---

tfsec (Terraform-fokussiert):
  tfsec ./terraform --format checkstyle > tfsec-report.xml

Bekannte IaC-Findings:
  □ S3-Bucket: Public Access nicht blockiert (MEDIUM-CRITICAL)
  □ Security Group: 0.0.0.0/0 auf Port 22 (SSH) erlaubt (HIGH)
  □ RDS: Multi-AZ nicht aktiviert (MEDIUM)
  □ CloudTrail: nicht aktiviert (HIGH)
  □ KMS-Key: Rotation nicht aktiviert (MEDIUM)
  □ IAM-Policy: Wildcard (*) Actions (HIGH)

Security Gates - Wann Pipeline stoppen?

Severity-Matrix für CI/CD-Entscheidungen:

                  SAST   SCA    Container  DAST   IaC
  Critical:       STOP   STOP   STOP       STOP   STOP
  High:           STOP   STOP   STOP       STOP   STOP
  Medium:         WARN   WARN   WARN       WARN   WARN
  Low:            INFO   INFO   INFO       INFO   INFO

STOP = Pipeline schlägt fehl, kein Deploy
WARN = Finding wird geloggt, Deploy weiter möglich
INFO = Nur Berichterstattung

Ausnahmen-Management:
  → False Positives müssen dokumentiert werden
  → .semgrepignore / .trivyignore für bewusste Ausnahmen
  → Audit-Trail: wer hat Ausnahme genehmigt, warum, Ablaufdatum?
  → Review aller Ausnahmen quartalsweise

Beispiel: .trivyignore:
  # CVE-2023-XXXXX ist in unserem Deployment nicht exploitierbar
  # weil: [Begründung]
  # Ausnahme genehmigt von: Max Muster, 2026-01-15
  # Ablauf: 2026-04-15 (dann neu evaluieren!)
  CVE-2023-XXXXX

---

Security Dashboard für Teams:
  → SAST-Findings: Trend über Zeit (nimmt zu oder ab?)
  → Mean Time to Remediate (MTTR): wie schnell werden Bugs gefixt?
  → Security Debt: Summe offener Findings (Risk Backlog)
  → Security Test Coverage: wie viel Code ist durch Security-Tests gedeckt?
  → Compliance: OWASP-Kategorien die abgedeckt sind

DevSecOps-Reifegrad und Einführungsstrategie

Phasen der DevSecOps-Einführung:

Phase 1 (Monat 1-2): Sichtbarkeit schaffen
  □ SAST im nicht-blockierenden Modus (nur Reports)
  □ Secret Scanning aktivieren (alle Repos!)
  □ npm audit / pip-audit als Report
  → Ziel: Baseline-Risiko kennenlernen, Entwickler informieren

Phase 2 (Monat 3-4): Kritisches blockieren
  □ Critical + High SAST-Findings blockieren Pipeline
  □ Known-Malware in Dependencies → STOP
  □ Secrets detected → STOP (immer!)
  □ Container: Critical CVEs → STOP
  → Ziel: Schlimmste Findings verhindern

Phase 3 (Monat 5-6): DAST und IaC
  □ ZAP Baseline in Staging-Pipeline
  □ IaC-Scanning für Terraform/CloudFormation
  □ SBOM-Generierung für alle Images
  → Ziel: Laufzeit-Schwachstellen und Infra-Misconfigurationen

Phase 4 (Monat 7-12): Optimierung und Kultur
  □ Custom Security-Regeln (Firmen-spezifische Patterns)
  □ Security Champions in jedem Team
  □ Security-KPIs im Team-Dashboard
  □ Developer Security Training
  → Ziel: Security als Selbstverständlichkeit

Security Champions Programm:
  → Ein freiwilliger Entwickler pro Team = Security Champion
  → Monatliche Security-Champion-Meetings
  → Direkter Kanal zum Security-Team
  → Security Reviews von MRs durchführen
  → Security-Awareness im Team erhöhen

Fragen zu diesem Thema?

Unsere Experten beraten Sie kostenlos und unverbindlich.

Erstberatung

Über den Autor

Chris Wojzechowski
Chris Wojzechowski

Geschäftsführender Gesellschafter

Geschäftsführender Gesellschafter der AWARE7 GmbH mit langjähriger Expertise in Informationssicherheit, Penetrationstesting und IT-Risikomanagement. Absolvent des Masterstudiengangs Internet-Sicherheit an der Westfälischen Hochschule (if(is), Prof. Norbert Pohlmann). Bestseller-Autor im Wiley-VCH Verlag und Lehrbeauftragter der ASW-Akademie. Einschätzungen zu Cybersecurity und digitaler Souveränität erschienen u.a. in Welt am Sonntag, WDR, Deutschlandfunk und Handelsblatt.

10 Publikationen
  • Einsatz von elektronischer Verschlüsselung - Hemmnisse für die Wirtschaft (2018)
  • Kompass IT-Verschlüsselung - Orientierungshilfen für KMU (2018)
  • IT Security Day 2025 - Live Hacking: KI in der Cybersicherheit (2025)
  • Live Hacking - Credential Stuffing: Finanzrisiken jenseits Ransomware (2025)
  • Keynote: Live Hacking Show - Ein Blick in die Welt der Cyberkriminalität (2025)
  • Analyse von Angriffsflächen bei Shared-Hosting-Anbietern (2024)
  • Gänsehaut garantiert: Die schaurigsten Funde aus dem Leben eines Pentesters (2022)
  • IT Security Zertifizierungen — CISSP, T.I.S.P. & Co (Live-Webinar) (2023)
  • Sicherheitsforum Online-Banking — Live Hacking (2021)
  • Nipster im Netz und das Ende der Kreidezeit (2017)
IT-Grundschutz-Praktiker (TÜV) IT Risk Manager (DGI) § 8a BSIG Prüfverfahrenskompetenz Ausbilderprüfung (IHK)
Dieser Artikel wurde zuletzt am 04.03.2026 bearbeitet. Verantwortlich: Chris Wojzechowski, Geschäftsführender Gesellschafter bei AWARE7 GmbH. Lizenz: CC BY 4.0 — freie Nutzung mit Namensnennung: „AWARE7 GmbH, https://a7.de

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