[{"data":1,"prerenderedAt":7122},["ShallowReactive",2],{"blog-ssdlc":3,"related-ssdlc":1575},{"id":4,"title":5,"body":6,"created":1562,"description":1563,"extension":1564,"icon":1565,"keyword":1566,"lastUpdated":1562,"meta":1567,"navigation":1568,"order":1569,"path":1570,"readingTime":1571,"seo":1572,"stem":1573,"__hash__":1574},"blog/blog/ssdlc.md","Secure Software Development Lifecycle (SSDLC): Sicherheit von Anfang an",{"type":7,"value":8,"toc":1523},"minimark",[9,13,21,24,29,36,41,57,62,76,80,83,221,226,229,234,260,271,275,278,282,302,311,315,318,322,352,365,369,372,376,402,407,411,414,418,438,447,451,454,458,484,491,495,498,502,528,533,537,540,544,550,619,625,629,632,658,663,667,670,674,723,727,773,777,823,827,875,879,882,886,893,898,912,918,922,929,933,947,952,956,962,966,980,984,1099,1114,1118,1121,1125,1209,1213,1292,1296,1346,1356,1360,1442,1446,1452,1457,1484,1487,1491],[10,11,12],"p",{},"Jede zweite Sicherheitslücke in Produktivsystemen geht auf Fehler zurück, die bereits in der Entwurfsphase entstanden sind. Nicht beim Betrieb, nicht beim Deployment -- sondern lange bevor die erste Zeile Code in Produktion ging. Trotzdem behandeln die meisten Unternehmen Security immer noch als nachgelagerten Schritt: erst entwickeln, dann testen, dann hoffen.",[10,14,15,16,20],{},"Der Secure Software Development Lifecycle (SSDLC) dreht diese Logik um. Sicherheit wird nicht am Ende angeheftet, sondern in jede Phase der Softwareentwicklung integriert -- von den Anforderungen bis zum Betrieb. Das Ergebnis: ",[17,18,19],"strong",{},"weniger Schwachstellen, geringere Behebungskosten und schnellere Releases",".",[10,22,23],{},"Gerade im Zeitalter von KI-gestützter Softwareentwicklung -- wo LLMs Code generieren, automatisierte Pipelines Deployments steuern und AI-Agenten Systemzugriffe erhalten -- ist ein strukturierter SSDLC keine Option mehr. Er ist Pflicht.",[25,26,28],"h2",{"id":27},"warum-der-klassische-sdlc-nicht-mehr-reicht","Warum der klassische SDLC nicht mehr reicht",[10,30,31,32,35],{},"Der traditionelle Software Development Lifecycle kennt Security bestenfalls als Testing-Phase am Ende. Das Problem: ",[17,33,34],{},"Je später eine Schwachstelle entdeckt wird, desto teurer ist die Behebung."," IBM beziffert den Kostenfaktor auf 6x (Design vs. Testing) bis 15x (Design vs. Produktion).",[10,37,38],{},[17,39,40],{},"Was ohne SSDLC passiert:",[42,43,44,48,51,54],"ul",{},[45,46,47],"li",{},"Entwickler schreiben unsicheren Code, weil Security-Anforderungen fehlen",[45,49,50],{},"Architekturentscheidungen schaffen Angriffsflächen, die sich nachträglich kaum schließen lassen",[45,52,53],{},"Penetrationstests kurz vor Release finden Schwachstellen, für deren Behebung keine Zeit bleibt",[45,55,56],{},"KI-generierter Code wird ohne Review in Produktion übernommen",[10,58,59],{},[17,60,61],{},"Was ein SSDLC ermöglicht:",[42,63,64,67,70,73],{},[45,65,66],{},"Security-Anforderungen sind von Beginn an definiert",[45,68,69],{},"Architektur-Reviews verhindern strukturelle Schwachstellen",[45,71,72],{},"Automatisierte Prüfungen fangen Fehler früh ab",[45,74,75],{},"Klare Verantwortlichkeiten -- auch für KI-generierten Code",[25,77,79],{"id":78},"die-7-phasen-des-ssdlc","Die 7 Phasen des SSDLC",[10,81,82],{},"Jede Phase des Entwicklungszyklus hat spezifische Security-Aktivitäten. Die folgende Tabelle gibt einen Überblick, bevor wir jede Phase im Detail betrachten.",[84,85,86,105],"table",{},[87,88,89],"thead",{},[90,91,92,96,99,102],"tr",{},[93,94,95],"th",{},"Phase",[93,97,98],{},"Security-Aktivität",[93,100,101],{},"Verantwortlich",[93,103,104],{},"KI-Relevanz",[106,107,108,125,141,157,173,189,205],"tbody",{},[90,109,110,116,119,122],{},[111,112,113],"td",{},[17,114,115],{},"Requirements",[111,117,118],{},"Threat Modeling, Security-Anforderungen",[111,120,121],{},"Product Owner, Security",[111,123,124],{},"Hoch -- KI-spezifische Risiken definieren",[90,126,127,132,135,138],{},[111,128,129],{},[17,130,131],{},"Design",[111,133,134],{},"Architektur-Review, Secure Design Patterns",[111,136,137],{},"Architect, Security",[111,139,140],{},"Hoch -- LLM-Integrationen absichern",[90,142,143,148,151,154],{},[111,144,145],{},[17,146,147],{},"Implementation",[111,149,150],{},"Secure Coding, Code Review, SAST",[111,152,153],{},"Entwickler, Security Champions",[111,155,156],{},"Kritisch -- KI-generierten Code prüfen",[90,158,159,164,167,170],{},[111,160,161],{},[17,162,163],{},"Testing",[111,165,166],{},"DAST, Penetration Testing, Fuzzing",[111,168,169],{},"QA, Security",[111,171,172],{},"Hoch -- KI-spezifische Angriffsvektoren testen",[90,174,175,180,183,186],{},[111,176,177],{},[17,178,179],{},"Release",[111,181,182],{},"Security Sign-Off, Compliance-Check",[111,184,185],{},"Release Manager, Security",[111,187,188],{},"Mittel -- Modell-Versionierung sicherstellen",[90,190,191,196,199,202],{},[111,192,193],{},[17,194,195],{},"Deployment",[111,197,198],{},"Sichere Konfiguration, Secrets Management",[111,200,201],{},"DevOps, Security",[111,203,204],{},"Hoch -- API-Keys und Model Endpoints absichern",[90,206,207,212,215,218],{},[111,208,209],{},[17,210,211],{},"Operations",[111,213,214],{},"Monitoring, Incident Response, Patching",[111,216,217],{},"Operations, Security",[111,219,220],{},"Kritisch -- KI-Anomalien erkennen",[222,223,225],"h3",{"id":224},"phase-1-requirements-sicherheit-beginnt-mit-der-anforderung","Phase 1: Requirements -- Sicherheit beginnt mit der Anforderung",[10,227,228],{},"Die meisten Schwachstellen entstehen nicht durch schlechten Code, sondern durch fehlende Anforderungen. Wenn niemand definiert, dass ein System gegen Prompt Injection geschützt sein muss, wird es auch niemand implementieren.",[10,230,231],{},[17,232,233],{},"Security-Aktivitäten:",[42,235,236,242,248,254],{},[45,237,238,241],{},[17,239,240],{},"Threat Modeling:"," Identifizieren Sie Bedrohungen systematisch. STRIDE ist ein bewährtes Modell -- erweitert um KI-spezifische Threats wie Model Manipulation und Data Poisoning.",[45,243,244,247],{},[17,245,246],{},"Security Requirements:"," Definieren Sie messbare Security-Anforderungen. Nicht \"das System soll sicher sein\", sondern \"alle Nutzereingaben durchlaufen eine Input-Validation-Pipeline mit PII-Detection\".",[45,249,250,253],{},[17,251,252],{},"Abuse Cases:"," Neben Use Cases auch Missbrauchsszenarien dokumentieren. Wie könnte ein Angreifer das System zweckentfremden?",[45,255,256,259],{},[17,257,258],{},"Compliance-Anforderungen:"," DSGVO, EU AI Act, branchenspezifische Vorgaben -- frühzeitig klären, nicht nachträglich.",[10,261,262,265,266,20],{},[17,263,264],{},"Im KI-Kontext:"," Definieren Sie explizit, welche Daten in LLM-Systeme fließen dürfen, welche Aktionen KI-Agenten ausführen dürfen und welche Entscheidungen menschliche Freigabe erfordern. Mehr dazu in unserem Artikel zu ",[267,268,270],"a",{"href":269},"/blog/llm-security","LLM Security",[222,272,274],{"id":273},"phase-2-design-sichere-architektur-als-fundament","Phase 2: Design -- Sichere Architektur als Fundament",[10,276,277],{},"Eine unsichere Architektur lässt sich nicht durch guten Code retten. In der Design-Phase legen Sie fest, wie Komponenten zusammenspielen, wo Vertrauensgrenzen verlaufen und welche Schutzschichten existieren.",[10,279,280],{},[17,281,233],{},[42,283,284,290,296],{},[45,285,286,289],{},[17,287,288],{},"Secure Architecture Review:"," Überprüfung der Architektur gegen bekannte Angriffsmuster. Wo entstehen Angriffsflächen? Wo fehlen Schutzschichten?",[45,291,292,295],{},[17,293,294],{},"Secure Design Patterns:"," Defense in Depth, Least Privilege, Fail Secure -- bewährte Prinzipien anwenden.",[45,297,298,301],{},[17,299,300],{},"Trust Boundaries:"," Klare Grenzen definieren, wo Daten validiert und Berechtigungen geprüft werden.",[10,303,304,306,307,20],{},[17,305,264],{}," LLM-Integrationen erfordern besondere architektonische Überlegungen. Ein AI Gateway als zentrale Steuerungsschicht, Sandboxing für KI-generierte Outputs und klare Trennung zwischen Datenebenen. Detaillierte Architekturmuster finden Sie im Artikel zu ",[267,308,310],{"href":309},"/blog/api-security","API Security",[222,312,314],{"id":313},"phase-3-implementation-sicherer-code-durch-struktur","Phase 3: Implementation -- Sicherer Code durch Struktur",[10,316,317],{},"Hier entsteht der Code -- und hier entstehen die meisten technischen Schwachstellen. Secure Coding Guidelines, automatisierte Prüfungen und Code Reviews sind die drei Säulen.",[10,319,320],{},[17,321,233],{},[42,323,324,330,336,346],{},[45,325,326,329],{},[17,327,328],{},"Secure Coding Standards:"," Verbindliche Richtlinien für alle Entwickler. OWASP bietet sprachspezifische Cheat Sheets.",[45,331,332,335],{},[17,333,334],{},"Static Application Security Testing (SAST):"," Automatisierte Code-Analyse bei jedem Commit. Tools wie SonarQube, Semgrep oder Checkmarx finden bekannte Muster.",[45,337,338,341,342,20],{},[17,339,340],{},"Code Review mit Security-Fokus:"," Mindestens ein Review pro Merge Request, bei sicherheitskritischem Code durch einen ",[267,343,345],{"href":344},"/blog/owasp-security-champion","Security Champion",[45,347,348,351],{},[17,349,350],{},"Dependency Scanning:"," Prüfung aller Third-Party-Libraries auf bekannte Schwachstellen (CVEs).",[10,353,354,356,357,360,361,364],{},[17,355,264],{}," ",[17,358,359],{},"KI-generierter Code ist ein besonderes Risiko."," GitHub Copilot, ChatGPT und andere Tools liefern funktionierenden Code, der aber häufig unsichere Patterns enthält -- veraltete Bibliotheken, fehlende Input-Validation, hardcodierte Credentials. ",[17,362,363],{},"Jede Zeile KI-generierten Codes muss denselben Review-Prozess durchlaufen wie manuell geschriebener Code."," Keine Ausnahmen.",[222,366,368],{"id":367},"phase-4-testing-schwachstellen-finden-bevor-es-angreifer-tun","Phase 4: Testing -- Schwachstellen finden, bevor es Angreifer tun",[10,370,371],{},"Testing im SSDLC geht weit über funktionale Tests hinaus. Sicherheitstests prüfen gezielt, ob das System Angriffen standhält.",[10,373,374],{},[17,375,233],{},[42,377,378,384,390,396],{},[45,379,380,383],{},[17,381,382],{},"Dynamic Application Security Testing (DAST):"," Automatisierte Tests gegen die laufende Anwendung. Tools wie OWASP ZAP oder Burp Suite simulieren Angriffe.",[45,385,386,389],{},[17,387,388],{},"Penetration Testing:"," Manuelle Prüfung durch erfahrene Tester. Findet Schwachstellen, die automatisierte Tools übersehen.",[45,391,392,395],{},[17,393,394],{},"Fuzzing:"," Zufällig generierte Inputs testen die Robustheit von Schnittstellen.",[45,397,398,401],{},[17,399,400],{},"Security Regression Testing:"," Sicherstellen, dass behobene Schwachstellen nicht wieder auftauchen.",[10,403,404,406],{},[17,405,264],{}," Klassische DAST-Tools kennen keine KI-spezifischen Angriffsvektoren. Ergänzen Sie Ihr Testing um Prompt Injection Tests, Model Evasion Tests und Data Leakage Checks. Red Teaming speziell für LLM-Systeme wird zunehmend zum Standard.",[222,408,410],{"id":409},"phase-5-release-kontrollierter-übergang-in-produktion","Phase 5: Release -- Kontrollierter Übergang in Produktion",[10,412,413],{},"Bevor Software live geht, braucht es einen strukturierten Freigabeprozess. Im KI-Zeitalter umfasst das nicht nur Code, sondern auch Modelle und Konfigurationen.",[10,415,416],{},[17,417,233],{},[42,419,420,426,432],{},[45,421,422,425],{},[17,423,424],{},"Security Sign-Off:"," Dokumentierte Freigabe durch das Security-Team. Alle kritischen Findings müssen behoben oder akzeptiert sein.",[45,427,428,431],{},[17,429,430],{},"Compliance-Check:"," Erfüllt das Release alle regulatorischen Anforderungen?",[45,433,434,437],{},[17,435,436],{},"Release Notes mit Security-Informationen:"," Transparente Kommunikation über behobene Schwachstellen und bekannte Einschränkungen.",[10,439,440,442,443,20],{},[17,441,264],{}," Modell-Versionierung ist genauso wichtig wie Code-Versionierung. Welches Modell in welcher Version mit welchen Guardrails wurde freigegeben? Ein Rollback muss jederzeit möglich sein. Orientierung bietet unser Artikel zum ",[267,444,446],{"href":445},"/blog/security-framework","Security Framework",[222,448,450],{"id":449},"phase-6-deployment-sichere-auslieferung-und-konfiguration","Phase 6: Deployment -- Sichere Auslieferung und Konfiguration",[10,452,453],{},"Die sicherste Software nützt nichts, wenn sie unsicher deployed wird. Fehlkonfigurationen sind eine der häufigsten Ursachen für Sicherheitsvorfälle.",[10,455,456],{},[17,457,233],{},[42,459,460,466,472,478],{},[45,461,462,465],{},[17,463,464],{},"Infrastructure as Code (IaC) Security:"," Terraform, CloudFormation und Co. auf Fehlkonfigurationen prüfen. Tools wie Checkov oder tfsec helfen.",[45,467,468,471],{},[17,469,470],{},"Secrets Management:"," API-Keys, Datenbank-Credentials und Tokens gehören in einen Vault -- nie in Code oder Config-Files.",[45,473,474,477],{},[17,475,476],{},"Hardening:"," Minimale Berechtigungen, deaktivierte Debug-Endpoints, aktuelle TLS-Konfiguration.",[45,479,480,483],{},[17,481,482],{},"Immutable Deployments:"," Container-Images sind unveränderlich. Änderungen nur durch neues Deployment.",[10,485,486,488,489,20],{},[17,487,264],{}," LLM-API-Keys sind besonders kritisch. Ein kompromittierter OpenAI-Key kann in Stunden fünfstellige Kosten verursachen. Automatische Key-Rotation, Budget-Limits und IP-Whitelisting sind Pflicht. Mehr Details im Artikel zu ",[267,490,310],{"href":309},[222,492,494],{"id":493},"phase-7-operations-sicherheit-im-laufenden-betrieb","Phase 7: Operations -- Sicherheit im laufenden Betrieb",[10,496,497],{},"Nach dem Deployment beginnt die wichtigste Phase: der laufende Betrieb. Hier zeigt sich, ob Ihre Security-Maßnahmen der Realität standhalten.",[10,499,500],{},[17,501,233],{},[42,503,504,510,516,522],{},[45,505,506,509],{},[17,507,508],{},"Continuous Monitoring:"," Echtzeit-Überwachung auf Anomalien, ungewöhnliche Zugriffsmuster und Performance-Abweichungen.",[45,511,512,515],{},[17,513,514],{},"Vulnerability Management:"," Regelmäßige Scans, zeitnahes Patching, Tracking aller bekannten Schwachstellen.",[45,517,518,521],{},[17,519,520],{},"Incident Response:"," Dokumentierte Prozesse für den Ernstfall. Wer tut was in welcher Reihenfolge?",[45,523,524,527],{},[17,525,526],{},"Lessons Learned:"," Nach jedem Incident analysieren und Prozesse verbessern.",[10,529,530,532],{},[17,531,264],{}," KI-Systeme erfordern zusätzliches Monitoring: Model Drift Detection, Anomalie-Erkennung in Prompts und Responses, Kosten-Monitoring pro API-Key. Ein plötzlicher Anstieg der Token-Nutzung kann auf einen kompromittierten Zugang hindeuten.",[25,534,536],{"id":535},"ssdlc-im-ki-zeitalter-neue-herausforderungen","SSDLC im KI-Zeitalter: Neue Herausforderungen",[10,538,539],{},"KI verändert den SSDLC in zwei Richtungen: KI als Werkzeug in der Entwicklung und KI als Bestandteil des Produkts. Beide erfordern Anpassungen.",[222,541,543],{"id":542},"ki-generierter-code-geschwindigkeit-vs-sicherheit","KI-generierter Code: Geschwindigkeit vs. Sicherheit",[10,545,546,549],{},[17,547,548],{},"37% der Entwickler"," nutzen bereits KI-Assistenten für die Code-Generierung. Die Produktivitätsgewinne sind real -- aber die Security-Risiken auch:",[84,551,552,565],{},[87,553,554],{},[90,555,556,559,562],{},[93,557,558],{},"Risiko",[93,560,561],{},"Beschreibung",[93,563,564],{},"Gegenmaßnahme",[106,566,567,580,593,606],{},[90,568,569,574,577],{},[111,570,571],{},[17,572,573],{},"Unsichere Patterns",[111,575,576],{},"LLMs reproduzieren Muster aus Trainingsdaten, darunter bekannte Anti-Patterns",[111,578,579],{},"SAST-Tools in CI/CD-Pipeline; Security Review",[90,581,582,587,590],{},[111,583,584],{},[17,585,586],{},"Veraltete Abhängigkeiten",[111,588,589],{},"Generierter Code referenziert veraltete Library-Versionen",[111,591,592],{},"Automatisiertes Dependency Scanning",[90,594,595,600,603],{},[111,596,597],{},[17,598,599],{},"Fehlende Validierung",[111,601,602],{},"KI-generierter Code validiert Inputs oft nicht ausreichend",[111,604,605],{},"Secure Coding Checkliste für Reviews",[90,607,608,613,616],{},[111,609,610],{},[17,611,612],{},"Halluzinierte APIs",[111,614,615],{},"LLMs erfinden manchmal API-Aufrufe, die nicht existieren",[111,617,618],{},"Funktionale Tests und Code Review",[10,620,621,624],{},[17,622,623],{},"Die Regel:"," KI-generierter Code ist ein Entwurf, kein fertiges Produkt. Er durchläuft denselben Review- und Testing-Prozess wie jeder andere Code.",[222,626,628],{"id":627},"llm-integrationen-absichern","LLM-Integrationen absichern",[10,630,631],{},"Wenn Ihr Produkt selbst LLMs nutzt, erweitert sich der SSDLC um KI-spezifische Prüfungen:",[42,633,634,640,646,652],{},[45,635,636,639],{},[17,637,638],{},"Requirements:"," Welche LLM-Risiken sind relevant? OWASP Top 10 for LLM Applications als Checkliste nutzen.",[45,641,642,645],{},[17,643,644],{},"Design:"," AI Gateway, Input/Output-Filtering, Sandboxing als architektonische Grundprinzipien.",[45,647,648,651],{},[17,649,650],{},"Testing:"," Red Teaming gegen Prompt Injection, Data Exfiltration und Jailbreaking.",[45,653,654,657],{},[17,655,656],{},"Operations:"," Monitoring von Model Behavior, Kosten und Anomalien.",[10,659,660,661,20],{},"Vertiefen Sie dieses Thema mit unserem Artikel zu ",[267,662,270],{"href":269},[25,664,666],{"id":665},"quick-wins-ssdlc-in-4-wochen-starten","Quick Wins: SSDLC in 4 Wochen starten",[10,668,669],{},"Sie müssen nicht monatelang planen, bevor Sie anfangen. Diese Quick Wins bringen sofort messbare Verbesserungen.",[222,671,673],{"id":672},"woche-1-sichtbarkeit-schaffen","Woche 1: Sichtbarkeit schaffen",[84,675,676,689],{},[87,677,678],{},[90,679,680,683,686],{},[93,681,682],{},"Maßnahme",[93,684,685],{},"Aufwand",[93,687,688],{},"Wirkung",[106,690,691,702,713],{},[90,692,693,696,699],{},[111,694,695],{},"SAST-Tool in CI/CD-Pipeline integrieren",[111,697,698],{},"4-8 Stunden",[111,700,701],{},"Automatische Erkennung bekannter Schwachstellen bei jedem Commit",[90,703,704,707,710],{},[111,705,706],{},"Dependency Scanning aktivieren",[111,708,709],{},"2-4 Stunden",[111,711,712],{},"Sichtbarkeit über verwundbare Third-Party-Libraries",[90,714,715,718,720],{},[111,716,717],{},"Security-Dashboard einrichten",[111,719,698],{},[111,721,722],{},"Zentraler Überblick über alle Findings",[222,724,726],{"id":725},"woche-2-grundlagen-etablieren","Woche 2: Grundlagen etablieren",[84,728,729,739],{},[87,730,731],{},[90,732,733,735,737],{},[93,734,682],{},[93,736,685],{},[93,738,688],{},[106,740,741,752,763],{},[90,742,743,746,749],{},[111,744,745],{},"Secure Coding Guidelines veröffentlichen",[111,747,748],{},"1-2 Tage",[111,750,751],{},"Verbindlicher Standard für alle Entwickler",[90,753,754,757,760],{},[111,755,756],{},"Code-Review-Policy mit Security-Fokus",[111,758,759],{},"4 Stunden",[111,761,762],{},"Mindestens ein Security-bewusster Reviewer pro Merge Request",[90,764,765,768,770],{},[111,766,767],{},"Secrets-Scan in Pre-Commit-Hooks",[111,769,709],{},[111,771,772],{},"Verhindert versehentliches Committen von Credentials",[222,774,776],{"id":775},"woche-3-testing-aufbauen","Woche 3: Testing aufbauen",[84,778,779,789],{},[87,780,781],{},[90,782,783,785,787],{},[93,784,682],{},[93,786,685],{},[93,788,688],{},[106,790,791,801,812],{},[90,792,793,796,798],{},[111,794,795],{},"DAST-Tool konfigurieren",[111,797,748],{},[111,799,800],{},"Automatisierte Angriffssimulation gegen Staging-Umgebung",[90,802,803,806,809],{},[111,804,805],{},"Security-Test-Suite erstellen",[111,807,808],{},"2-3 Tage",[111,810,811],{},"Reproduzierbare Tests für bekannte Schwachstellenklassen",[90,813,814,817,820],{},[111,815,816],{},"KI-spezifische Tests ergänzen",[111,818,819],{},"1 Tag",[111,821,822],{},"Prompt Injection und Data Leakage Tests für LLM-Integrationen",[222,824,826],{"id":825},"woche-4-prozesse-verankern","Woche 4: Prozesse verankern",[84,828,829,839],{},[87,830,831],{},[90,832,833,835,837],{},[93,834,682],{},[93,836,685],{},[93,838,688],{},[106,840,841,855,865],{},[90,842,843,849,852],{},[111,844,845,848],{},[267,846,847],{"href":344},"Security Champions"," benennen",[111,850,851],{},"2 Stunden",[111,853,854],{},"Ansprechpartner in jedem Entwicklungsteam",[90,856,857,860,862],{},[111,858,859],{},"Security-Gate vor Production definieren",[111,861,759],{},[111,863,864],{},"Kein Deployment ohne Security-Sign-Off",[90,866,867,870,872],{},[111,868,869],{},"Metriken-Tracking starten",[111,871,698],{},[111,873,874],{},"Fortschritt messbar machen",[25,876,878],{"id":877},"tools-und-frameworks","Tools und Frameworks",[10,880,881],{},"Sie müssen das Rad nicht neu erfinden. Diese Frameworks bieten strukturierte Vorgehensmodelle, die sich an die Größe und Reife Ihrer Organisation anpassen lassen.",[222,883,885],{"id":884},"owasp-samm-software-assurance-maturity-model","OWASP SAMM (Software Assurance Maturity Model)",[10,887,888,889,892],{},"Das ",[17,890,891],{},"umfassendste Open-Source-Framework"," für Software-Security-Reife. SAMM definiert 15 Security-Praktiken in 5 Business-Funktionen und bietet ein Reifegradmodell mit 3 Stufen.",[10,894,895],{},[17,896,897],{},"Stärken:",[42,899,900,903,906,909],{},[45,901,902],{},"Kostenlos und herstellerunabhängig",[45,904,905],{},"Self-Assessment-Tooling verfügbar",[45,907,908],{},"Roadmap-Generator für priorisierte Verbesserungen",[45,910,911],{},"Gut geeignet für KMU und Mittelstand",[10,913,914,917],{},[17,915,916],{},"Einstieg:"," Starten Sie mit dem SAMM Quick Start Assessment. In 2-3 Stunden haben Sie ein Bild Ihres aktuellen Reifegrads.",[222,919,921],{"id":920},"bsimm-building-security-in-maturity-model","BSIMM (Building Security In Maturity Model)",[10,923,924,925,928],{},"Wo SAMM beschreibt, was Sie tun sollten, zeigt ",[17,926,927],{},"BSIMM, was andere tatsächlich tun",". Basierend auf Daten von über 130 Unternehmen weltweit ist BSIMM ein Benchmark-Modell.",[10,930,931],{},[17,932,897],{},[42,934,935,938,941,944],{},[45,936,937],{},"Datengetriebener Ansatz",[45,939,940],{},"Vergleich mit Branchenstandards möglich",[45,942,943],{},"122 konkrete Security-Aktivitäten",[45,945,946],{},"Ideal für Enterprise-Organisationen",[10,948,949,951],{},[17,950,916],{}," Nutzen Sie BSIMM als Benchmark, nachdem Sie mit SAMM Ihren Ist-Stand ermittelt haben.",[222,953,955],{"id":954},"microsoft-sdl-security-development-lifecycle","Microsoft SDL (Security Development Lifecycle)",[10,957,958,959],{},"Microsofts hauseigenes Framework -- seit 2004 im Einsatz und kontinuierlich weiterentwickelt. ",[17,960,961],{},"Besonders relevant für Unternehmen im Microsoft-Ökosystem.",[10,963,964],{},[17,965,897],{},[42,967,968,971,974,977],{},[45,969,970],{},"Praxiserprobt in einem der größten Software-Unternehmen der Welt",[45,972,973],{},"Gute Integration mit Azure DevOps und GitHub",[45,975,976],{},"Umfangreiche Tooling-Unterstützung",[45,978,979],{},"Detaillierte Guidance für Cloud- und KI-Anwendungen",[222,981,983],{"id":982},"framework-vergleich","Framework-Vergleich",[84,985,986,1002],{},[87,987,988],{},[90,989,990,993,996,999],{},[93,991,992],{},"Kriterium",[93,994,995],{},"OWASP SAMM",[93,997,998],{},"BSIMM",[93,1000,1001],{},"Microsoft SDL",[106,1003,1004,1020,1036,1052,1068,1083],{},[90,1005,1006,1011,1014,1017],{},[111,1007,1008],{},[17,1009,1010],{},"Kosten",[111,1012,1013],{},"Kostenlos",[111,1015,1016],{},"Kostenpflichtig (Assessment)",[111,1018,1019],{},"Kostenlos (Dokumentation)",[90,1021,1022,1027,1030,1033],{},[111,1023,1024],{},[17,1025,1026],{},"Ansatz",[111,1028,1029],{},"Prescriptive (was Sie tun sollten)",[111,1031,1032],{},"Descriptive (was andere tun)",[111,1034,1035],{},"Prescriptive + Tooling",[90,1037,1038,1043,1046,1049],{},[111,1039,1040],{},[17,1041,1042],{},"Zielgruppe",[111,1044,1045],{},"Alle Unternehmensgrößen",[111,1047,1048],{},"Enterprise",[111,1050,1051],{},"Microsoft-Ökosystem",[90,1053,1054,1059,1062,1065],{},[111,1055,1056],{},[17,1057,1058],{},"KI-Abdeckung",[111,1060,1061],{},"Über OWASP AI Exchange erweiterbar",[111,1063,1064],{},"Begrenzt",[111,1066,1067],{},"Zunehmend integriert",[90,1069,1070,1075,1078,1081],{},[111,1071,1072],{},[17,1073,1074],{},"Einstiegshürde",[111,1076,1077],{},"Niedrig",[111,1079,1080],{},"Mittel",[111,1082,1077],{},[90,1084,1085,1090,1093,1096],{},[111,1086,1087],{},[17,1088,1089],{},"Assessment-Dauer",[111,1091,1092],{},"2-3 Stunden (Quick Start)",[111,1094,1095],{},"2-4 Wochen",[111,1097,1098],{},"1-2 Wochen",[10,1100,1101,1104,1105,1107,1108,1110,1111,1113],{},[17,1102,1103],{},"Empfehlung:"," Starten Sie mit ",[17,1106,995],{}," für das initiale Assessment, nutzen Sie ",[17,1109,998],{}," als Benchmark zum Branchenvergleich und greifen Sie auf ",[17,1112,1001],{}," zurück, wenn Sie im Azure/GitHub-Ökosystem arbeiten.",[25,1115,1117],{"id":1116},"kennzahlen-und-kpis-ssdlc-messbar-machen","Kennzahlen und KPIs: SSDLC messbar machen",[10,1119,1120],{},"Ohne Metriken kein Fortschritt. Diese KPIs zeigen Ihnen, ob Ihr SSDLC wirkt -- und wo Verbesserungsbedarf besteht.",[222,1122,1124],{"id":1123},"prozess-metriken","Prozess-Metriken",[84,1126,1127,1143],{},[87,1128,1129],{},[90,1130,1131,1134,1137,1140],{},[93,1132,1133],{},"KPI",[93,1135,1136],{},"Was er misst",[93,1138,1139],{},"Zielwert",[93,1141,1142],{},"Warum wichtig",[106,1144,1145,1161,1177,1193],{},[90,1146,1147,1152,1155,1158],{},[111,1148,1149],{},[17,1150,1151],{},"Security Requirements Coverage",[111,1153,1154],{},"Anteil der Stories mit definierten Security-Anforderungen",[111,1156,1157],{},"> 80%",[111,1159,1160],{},"Zeigt, ob Security in der Planung verankert ist",[90,1162,1163,1168,1171,1174],{},[111,1164,1165],{},[17,1166,1167],{},"Code Review Coverage",[111,1169,1170],{},"Anteil der Merge Requests mit Security Review",[111,1172,1173],{},"100% für kritische Komponenten",[111,1175,1176],{},"Verhindert, dass unsicherer Code ungeprüft durchrutscht",[90,1178,1179,1184,1187,1190],{},[111,1180,1181],{},[17,1182,1183],{},"SAST/DAST Coverage",[111,1185,1186],{},"Anteil der Repositories mit aktivem Security Scanning",[111,1188,1189],{},"100%",[111,1191,1192],{},"Basis-Hygiene der Entwicklungspipeline",[90,1194,1195,1200,1203,1206],{},[111,1196,1197],{},[17,1198,1199],{},"Security Training Completion",[111,1201,1202],{},"Anteil der Entwickler mit aktuellem Security-Training",[111,1204,1205],{},"> 90%",[111,1207,1208],{},"Kompetenzaufbau ist Voraussetzung für sicheren Code",[222,1210,1212],{"id":1211},"ergebnis-metriken","Ergebnis-Metriken",[84,1214,1215,1227],{},[87,1216,1217],{},[90,1218,1219,1221,1223,1225],{},[93,1220,1133],{},[93,1222,1136],{},[93,1224,1139],{},[93,1226,1142],{},[106,1228,1229,1245,1261,1276],{},[90,1230,1231,1236,1239,1242],{},[111,1232,1233],{},[17,1234,1235],{},"Mean Time to Remediate (MTTR)",[111,1237,1238],{},"Durchschnittliche Zeit von Fund bis Behebung einer Schwachstelle",[111,1240,1241],{},"\u003C 30 Tage (Critical: \u003C 7 Tage)",[111,1243,1244],{},"Zeigt die Reaktionsfähigkeit Ihrer Organisation",[90,1246,1247,1252,1255,1258],{},[111,1248,1249],{},[17,1250,1251],{},"Vulnerability Density",[111,1253,1254],{},"Schwachstellen pro 1.000 Zeilen Code",[111,1256,1257],{},"Sinkender Trend",[111,1259,1260],{},"Zeigt, ob die Code-Qualität steigt",[90,1262,1263,1268,1271,1273],{},[111,1264,1265],{},[17,1266,1267],{},"Escaped Defects",[111,1269,1270],{},"Schwachstellen, die erst in Produktion gefunden werden",[111,1272,1257],{},[111,1274,1275],{},"Misst die Effektivität der Pre-Production-Prüfungen",[90,1277,1278,1283,1286,1289],{},[111,1279,1280],{},[17,1281,1282],{},"False Positive Rate",[111,1284,1285],{},"Anteil der Fehlalarme bei Security Scans",[111,1287,1288],{},"\u003C 20%",[111,1290,1291],{},"Zu viele False Positives untergraben das Vertrauen der Entwickler",[222,1293,1295],{"id":1294},"ki-spezifische-metriken","KI-spezifische Metriken",[84,1297,1298,1308],{},[87,1299,1300],{},[90,1301,1302,1304,1306],{},[93,1303,1133],{},[93,1305,1136],{},[93,1307,1139],{},[106,1309,1310,1322,1334],{},[90,1311,1312,1317,1320],{},[111,1313,1314],{},[17,1315,1316],{},"AI Code Review Rate",[111,1318,1319],{},"Anteil des KI-generierten Codes mit manuellem Review",[111,1321,1189],{},[90,1323,1324,1329,1332],{},[111,1325,1326],{},[17,1327,1328],{},"Prompt Injection Test Coverage",[111,1330,1331],{},"Anteil der LLM-Integrationen mit Injection-Tests",[111,1333,1189],{},[90,1335,1336,1341,1344],{},[111,1337,1338],{},[17,1339,1340],{},"Model Version Tracking",[111,1342,1343],{},"Anteil der Deployments mit dokumentierter Modell-Version",[111,1345,1189],{},[10,1347,1348,1351,1352,1355],{},[17,1349,1350],{},"Tipp für die Geschäftsleitung:"," Die wichtigste Kennzahl ist die ",[17,1353,1354],{},"Escaped Defect Rate"," -- sie zeigt direkt, wie viele Schwachstellen Ihren gesamten SSDLC durchlaufen und trotzdem in Produktion landen. Ein sinkender Trend bedeutet: Ihr Programm wirkt.",[25,1357,1359],{"id":1358},"häufige-fehler-und-wie-sie-sie-vermeiden","Häufige Fehler und wie Sie sie vermeiden",[84,1361,1362,1375],{},[87,1363,1364],{},[90,1365,1366,1369,1372],{},[93,1367,1368],{},"Fehler",[93,1370,1371],{},"Warum er passiert",[93,1373,1374],{},"Lösung",[106,1376,1377,1390,1403,1416,1429],{},[90,1378,1379,1384,1387],{},[111,1380,1381],{},[17,1382,1383],{},"Security als Gate statt als Enabler",[111,1385,1386],{},"Security-Team blockt Releases, wird als Bremse wahrgenommen",[111,1388,1389],{},"Security Champions in Teams integrieren, Shift Left",[90,1391,1392,1397,1400],{},[111,1393,1394],{},[17,1395,1396],{},"Tool-Overload",[111,1398,1399],{},"Zu viele Tools, zu viele Alerts, Developer Fatigue",[111,1401,1402],{},"Mit 2-3 Tools starten, Ergebnisse konsolidieren",[90,1404,1405,1410,1413],{},[111,1406,1407],{},[17,1408,1409],{},"Keine Management-Unterstützung",[111,1411,1412],{},"SSDLC wird als reines IT-Thema gesehen",[111,1414,1415],{},"Business Impact und ROI kommunizieren, Compliance-Argumente nutzen",[90,1417,1418,1423,1426],{},[111,1419,1420],{},[17,1421,1422],{},"KI-generierten Code nicht prüfen",[111,1424,1425],{},"\"Das Tool ist von Microsoft/GitHub, das wird schon sicher sein\"",[111,1427,1428],{},"Klare Policy: KI-Code = Entwurf, nicht Endprodukt",[90,1430,1431,1436,1439],{},[111,1432,1433],{},[17,1434,1435],{},"Metriken ohne Konsequenzen",[111,1437,1438],{},"KPIs werden erfasst, aber niemand handelt danach",[111,1440,1441],{},"Metriken in Sprint Reviews und Management Reporting einbinden",[25,1443,1445],{"id":1444},"fazit-der-erste-schritt-ist-der-wichtigste","Fazit: Der erste Schritt ist der wichtigste",[10,1447,1448,1449],{},"Ein vollständiger SSDLC entsteht nicht über Nacht. Aber die Quick Wins der ersten vier Wochen reduzieren Ihr Risiko bereits erheblich. ",[17,1450,1451],{},"Die Erfahrung zeigt: Unternehmen, die Security in den Entwicklungsprozess integrieren, beheben Schwachstellen 3x schneller und haben 60% weniger kritische Findings in Produktion.",[10,1453,1454],{},[17,1455,1456],{},"So priorisieren Sie:",[1458,1459,1460,1466,1472,1478],"ol",{},[45,1461,1462,1465],{},[17,1463,1464],{},"Diese Woche:"," SAST-Tool aktivieren, Secrets-Scanning einrichten",[45,1467,1468,1471],{},[17,1469,1470],{},"Dieser Monat:"," Security Champions benennen, Coding Guidelines veröffentlichen, Quick Win Roadmap der 4 Wochen umsetzen",[45,1473,1474,1477],{},[17,1475,1476],{},"Dieses Quartal:"," OWASP SAMM Assessment durchführen, KI-spezifische Tests ergänzen",[45,1479,1480,1483],{},[17,1481,1482],{},"Dieses Jahr:"," Vollständiges Reifegradmodell implementieren, Metriken-basierte Steuerung etablieren",[10,1485,1486],{},"Die Frage ist nicht, ob Sie einen SSDLC brauchen -- sondern wie schnell Sie ihn aufbauen. Jeder Tag ohne strukturierte Security-Integration in der Entwicklung ist ein Tag, an dem Schwachstellen entstehen, die Sie später teuer beheben müssen.",[25,1488,1490],{"id":1489},"weiterführend","Weiterführend",[42,1492,1493,1499,1505,1511,1516],{},[45,1494,1495,1498],{},[267,1496,1497],{"href":344},"OWASP Security Champions"," -- Security-Kompetenz in jedem Entwicklungsteam",[45,1500,1501,1504],{},[267,1502,1503],{"href":445},"KI Security Framework"," -- SSDLC im Gesamtkontext der KI-Sicherheit",[45,1506,1507,1510],{},[267,1508,1509],{"href":309},"API Security für AI-Systeme"," -- Absicherung von LLM-Schnittstellen",[45,1512,1513,1515],{},[267,1514,270],{"href":269}," -- Warum Ihre KI-Strategie ein Sicherheitskonzept braucht",[45,1517,1518,1522],{},[267,1519,1521],{"href":1520},"/ai-security","AI Security Grundlagen"," -- Zurück zur Übersicht",{"title":1524,"searchDepth":1525,"depth":1525,"links":1526},"",2,[1527,1528,1538,1542,1548,1554,1559,1560,1561],{"id":27,"depth":1525,"text":28},{"id":78,"depth":1525,"text":79,"children":1529},[1530,1532,1533,1534,1535,1536,1537],{"id":224,"depth":1531,"text":225},3,{"id":273,"depth":1531,"text":274},{"id":313,"depth":1531,"text":314},{"id":367,"depth":1531,"text":368},{"id":409,"depth":1531,"text":410},{"id":449,"depth":1531,"text":450},{"id":493,"depth":1531,"text":494},{"id":535,"depth":1525,"text":536,"children":1539},[1540,1541],{"id":542,"depth":1531,"text":543},{"id":627,"depth":1531,"text":628},{"id":665,"depth":1525,"text":666,"children":1543},[1544,1545,1546,1547],{"id":672,"depth":1531,"text":673},{"id":725,"depth":1531,"text":726},{"id":775,"depth":1531,"text":776},{"id":825,"depth":1531,"text":826},{"id":877,"depth":1525,"text":878,"children":1549},[1550,1551,1552,1553],{"id":884,"depth":1531,"text":885},{"id":920,"depth":1531,"text":921},{"id":954,"depth":1531,"text":955},{"id":982,"depth":1531,"text":983},{"id":1116,"depth":1525,"text":1117,"children":1555},[1556,1557,1558],{"id":1123,"depth":1531,"text":1124},{"id":1211,"depth":1531,"text":1212},{"id":1294,"depth":1531,"text":1295},{"id":1358,"depth":1525,"text":1359},{"id":1444,"depth":1525,"text":1445},{"id":1489,"depth":1525,"text":1490},"2026-01-10","Die 7 Phasen des SSDLC, Quick Wins in 4 Wochen, Tools und Kennzahlen. Pragmatischer Leitfaden für sichere Softwareentwicklung im KI-Zeitalter.","md","code-bracket","ssdlc",{},true,40,"/blog/ssdlc",14,{"title":5,"description":1563},"blog/ssdlc","hjsiZXtXQ9LCEAQihaG9Ly3LzFXxpAhwaSk2tNsNCfM",[1576,2493,3582,5969],{"id":1577,"title":1578,"body":1579,"created":2481,"description":2482,"extension":1564,"icon":2483,"keyword":2484,"lastUpdated":2485,"meta":2486,"navigation":1568,"order":2487,"path":2488,"readingTime":2489,"seo":2490,"stem":2491,"__hash__":2492},"blog/blog/ai-angriffe-2025.md","AI-Angriffe 2025: Die neue Bedrohungslandschaft",{"type":7,"value":1580,"toc":2459},[1581,1584,1587,1591,1601,1606,1626,1629,1633,1637,1642,1645,1659,1665,1670,1728,1732,1737,1769,1775,1781,1786,1796,1801,1812,1816,1821,1882,1887,1890,1904,1909,1935,1939,1944,1947,1952,1978,1983,1986,1990,2004,2008,2013,2062,2067,2093,2097,2103,2107,2111,2116,2130,2135,2149,2154,2165,2169,2230,2234,2295,2298,2302,2306,2310,2321,2325,2336,2340,2344,2352,2356,2367,2371,2375,2383,2387,2398,2402,2405,2408,2434,2437,2439],[10,1582,1583],{},"87% der Unternehmen berichten von KI-gestützten Angriffen. 14% der Major Breaches 2025 waren vollständig autonom – kein menschlicher Angreifer mehr involviert, nachdem die KI gestartet wurde.",[10,1585,1586],{},"Das ist nicht die Zukunft. Das ist Ihre aktuelle Bedrohungslage.",[25,1588,1590],{"id":1589},"der-qualitative-sprung-2025","Der qualitative Sprung 2025",[10,1592,1593,1594,1600],{},"Anthropic hat im November 2025 ",[267,1595,1599],{"href":1596,"rel":1597},"https://www.anthropic.com/news/disrupting-AI-espionage",[1598],"nofollow","den ersten dokumentierten großangelegten KI-orchestrierten Cyberangriff"," veröffentlicht. Die Analyse zeigt: Die KI führte 80-90% der Kampagne autonom durch. Menschliche Intervention war nur an 4-6 kritischen Entscheidungspunkten nötig.",[10,1602,1603],{},[17,1604,1605],{},"Was das für Ihre Threat Models bedeutet:",[42,1607,1608,1614,1620],{},[45,1609,1610,1613],{},[17,1611,1612],{},"Geschwindigkeit:"," Tausende Requests pro Sekunde – manuell unmöglich zu matchen",[45,1615,1616,1619],{},[17,1617,1618],{},"Skalierung:"," Ein Angreifer, unbegrenzt viele parallele Kampagnen",[45,1621,1622,1625],{},[17,1623,1624],{},"Adaption:"," Malware, die sich in Echtzeit an Host-Environments anpasst (23% aller Payloads 2025)",[10,1627,1628],{},"Die Verteidigung muss sich anpassen. Playbooks, die auf menschliche Angreifer-Geschwindigkeit ausgelegt sind, funktionieren nicht mehr.",[25,1630,1632],{"id":1631},"die-5-kritischsten-angriffsvektoren","Die 5 kritischsten Angriffsvektoren",[222,1634,1636],{"id":1635},"_1-autonome-cyberangriffe","1. Autonome Cyberangriffe",[10,1638,1639],{},[17,1640,1641],{},"Threat Assessment:",[10,1643,1644],{},"Erste dokumentierte Fälle von KI-Systemen, die ohne menschliche Steuerung:",[42,1646,1647,1650,1653,1656],{},[45,1648,1649],{},"Reconnaissance durchführen und Angriffsvektoren priorisieren",[45,1651,1652],{},"Exploits aus öffentlichen Quellen recherchieren und adaptieren",[45,1654,1655],{},"Angriffsketten basierend auf Feedback optimieren",[45,1657,1658],{},"Lateral Movement basierend auf entdeckten Credentials planen",[10,1660,1661,1664],{},[17,1662,1663],{},"Aktuelle Limitierung:"," Die Modelle halluzinieren noch – behaupten erfolgreiche Credential-Extraktion, die dann nicht funktioniert. Das ist ein Bottleneck, aber einer, der sich schnell schließt.",[10,1666,1667],{},[17,1668,1669],{},"Defense-Implikationen:",[84,1671,1672,1684],{},[87,1673,1674],{},[90,1675,1676,1678,1681],{},[93,1677,682],{},[93,1679,1680],{},"Priorität",[93,1682,1683],{},"Rationale",[106,1685,1686,1697,1708,1718],{},[90,1687,1688,1691,1694],{},[111,1689,1690],{},"UEBA mit ML-Komponenten",[111,1692,1693],{},"Kritisch",[111,1695,1696],{},"Autonome Angriffe hinterlassen andere Patterns (keine Pausen, systematisches Probing)",[90,1698,1699,1702,1705],{},[111,1700,1701],{},"Patch-Zyklen \u003C 72h für kritische CVEs",[111,1703,1704],{},"Hoch",[111,1706,1707],{},"Exploit-Entwicklung ist automatisiert – das Zeitfenster schrumpft",[90,1709,1710,1713,1715],{},[111,1711,1712],{},"Assume Breach Architecture",[111,1714,1704],{},[111,1716,1717],{},"Segmentierung begrenzt Blast Radius bei erfolgreichem Initial Access",[90,1719,1720,1723,1725],{},[111,1721,1722],{},"AI-powered Threat Detection",[111,1724,1080],{},[111,1726,1727],{},"Symmetrische Antwort auf AI-powered Offense",[222,1729,1731],{"id":1730},"_2-deepfake-ceo-fraud","2. Deepfake CEO-Fraud",[10,1733,1734],{},[17,1735,1736],{},"Die Zahlen 2025:",[42,1738,1739,1751,1757,1763],{},[45,1740,1741,1744,1745,1750],{},[17,1742,1743],{},"$410 Mio."," Schaden H1 2025 – mehr als das gesamte Jahr 2024 (",[267,1746,1749],{"href":1747,"rel":1748},"https://deepstrike.io/blog/deepfake-statistics-2025",[1598],"Deepstrike",")",[45,1752,1753,1756],{},[17,1754,1755],{},"1.740%"," Zunahme Deepfake-Fraud in Nordamerika",[45,1758,1759,1762],{},[17,1760,1761],{},"92%"," der Unternehmen haben bereits finanzielle Verluste durch Deepfakes erlitten",[45,1764,1765,1768],{},[17,1766,1767],{},"3-5 Sekunden"," Audio reichen für überzeugende Voice Clones",[10,1770,1771,1774],{},[17,1772,1773],{},"Case Study – Hong Kong, 2024:","\nEin Finance Manager überwies $39 Mio. nach einem Videocall mit seinem \"CFO\" und mehreren \"Kollegen\". Alle Teilnehmer waren Deepfakes. Die Qualität war für eine normale Videokonferenz ausreichend.",[10,1776,1777,1780],{},[17,1778,1779],{},"Case Study – Ferrari, 2025:","\nAngreifer klonten die Stimme von CEO Benedetto Vigna inklusive süditalienischem Akzent. Der Angriff scheiterte nur, weil ein Executive eine Frage stellte, die nur Vigna beantworten konnte.",[10,1782,1783],{},[17,1784,1785],{},"Defense-Architektur:",[1787,1788,1793],"pre",{"className":1789,"code":1791,"language":1792},[1790],"language-text","Finanztransaktionen > Threshold:\n├─ Video/Audio-Anweisung? → NICHT ausreichend\n├─ Multi-Faktor-Verification:\n│  ├─ Callback auf bekannte Nummer (nicht aus dem Call)\n│  ├─ Code-Wort-System (offline vereinbart)\n│  └─ Second Channel Confirmation (separater Messenger)\n└─ Logging für Forensik\n","text",[1794,1795,1791],"code",{"__ignoreMap":1524},[10,1797,1798],{},[17,1799,1800],{},"Tooling-Optionen:",[42,1802,1803,1806,1809],{},[45,1804,1805],{},"Reality Defender, Sensity AI für Real-time Detection",[45,1807,1808],{},"Microsoft Video Authenticator für Post-hoc Analyse",[45,1810,1811],{},"Aber: Detection ist ein Wettrüsten – Prozesse sind robuster als Tools",[222,1813,1815],{"id":1814},"_3-ki-generiertes-phishing","3. KI-generiertes Phishing",[10,1817,1818],{},[17,1819,1820],{},"Die Effizienz-Explosion:",[84,1822,1823,1839],{},[87,1824,1825],{},[90,1826,1827,1830,1833,1836],{},[93,1828,1829],{},"Metrik",[93,1831,1832],{},"Traditionell",[93,1834,1835],{},"KI-generiert",[93,1837,1838],{},"Quelle",[106,1840,1841,1855,1869],{},[90,1842,1843,1846,1849,1852],{},[111,1844,1845],{},"Click-Rate",[111,1847,1848],{},"12%",[111,1850,1851],{},"54%",[111,1853,1854],{},"Microsoft 2025",[90,1856,1857,1860,1863,1866],{},[111,1858,1859],{},"Anteil an Phishing-Mails",[111,1861,1862],{},"—",[111,1864,1865],{},"82,6%",[111,1867,1868],{},"SQ Magazine",[90,1870,1871,1874,1876,1879],{},[111,1872,1873],{},"YoY-Wachstum",[111,1875,1862],{},[111,1877,1878],{},"+67%",[111,1880,1881],{},"Industry Reports",[10,1883,1884],{},[17,1885,1886],{},"Warum klassische Filter versagen:",[10,1888,1889],{},"Grammatik-basierte Detection ist obsolet. KI-Phishing ist:",[42,1891,1892,1895,1898,1901],{},[45,1893,1894],{},"Sprachlich perfekt",[45,1896,1897],{},"Kontextuell korrekt (referenziert echte LinkedIn-Posts, aktuelle Projekte)",[45,1899,1900],{},"Stilistisch angepasst (imitiert Schreibstil des vermeintlichen Absenders)",[45,1902,1903],{},"Skaliert auf Tausende personalisierte Varianten",[10,1905,1906],{},[17,1907,1908],{},"Defense-Strategie:",[1458,1910,1911,1917,1923,1929],{},[45,1912,1913,1916],{},[17,1914,1915],{},"Behavioral Detection:"," Anomalie-Erkennung auf Mail-Flow-Ebene (plötzlich 500 ähnlich strukturierte Mails an verschiedene Targets)",[45,1918,1919,1922],{},[17,1920,1921],{},"Kontext-Training:"," Mitarbeiter auf Kontext trainieren, nicht Grammatik (\"Warum schreibt mir der CFO über WhatsApp statt Slack?\")",[45,1924,1925,1928],{},[17,1926,1927],{},"Technical Baseline:"," SPF, DKIM, DMARC konsequent – blockiert Spoofing, nicht aber kompromittierte Accounts",[45,1930,1931,1934],{},[17,1932,1933],{},"Verification Culture:"," Für sensible Anfragen ist Rückfrage keine Unhöflichkeit, sondern Policy",[222,1936,1938],{"id":1937},"_4-ai-assisted-zero-day-discovery","4. AI-Assisted Zero-Day Discovery",[10,1940,1941],{},[17,1942,1943],{},"Die Beobachtung:",[10,1945,1946],{},"12 Router/VPN Zero-Days allein in 2024 – ungewöhnliche Häufung. Die Vermutung vieler Researcher: AI-assisted Discovery senkt die Kosten für Vulnerability Research drastisch.",[10,1948,1949],{},[17,1950,1951],{},"Wie es funktioniert:",[1458,1953,1954,1960,1966,1972],{},[45,1955,1956,1959],{},[17,1957,1958],{},"Static Analysis:"," LLM analysiert Code auf bekannte Vulnerability-Patterns",[45,1961,1962,1965],{},[17,1963,1964],{},"Intelligent Fuzzing:"," KI generiert Inputs basierend auf Code-Semantik",[45,1967,1968,1971],{},[17,1969,1970],{},"Exploit-Generierung:"," Automatische PoC-Entwicklung für gefundene Bugs",[45,1973,1974,1977],{},[17,1975,1976],{},"Variation:"," Generierung von Signatur-umgehenden Varianten",[10,1979,1980],{},[17,1981,1982],{},"Das Dual-Use-Problem:",[10,1984,1985],{},"Die gleichen Capabilities, die Ihr Security-Team für Code Review nutzt, nutzen Angreifer für Exploit Development. Der Unterschied ist nur die Intention.",[10,1987,1988],{},[17,1989,1669],{},[42,1991,1992,1995,1998,2001],{},[45,1993,1994],{},"AI-powered Code Review vor dem Release (bevor Angreifer es tun)",[45,1996,1997],{},"Bug Bounty Programs mit kompetitiven Prämien",[45,1999,2000],{},"Drastisch verkürzte Patch-Deployment-Zyklen",[45,2002,2003],{},"Defense-in-Depth: Annahme, dass alle Software verwundbar ist",[222,2005,2007],{"id":2006},"_5-ai-optimized-ransomware","5. AI-Optimized Ransomware",[10,2009,2010],{},[17,2011,2012],{},"Evolution der Targeting-Intelligenz:",[84,2014,2015,2027],{},[87,2016,2017],{},[90,2018,2019,2021,2024],{},[93,2020,95],{},[93,2022,2023],{},"Zeitraum",[93,2025,2026],{},"Strategie",[106,2028,2029,2040,2051],{},[90,2030,2031,2034,2037],{},[111,2032,2033],{},"1.0",[111,2035,2036],{},"2020",[111,2038,2039],{},"Spray-and-pray",[90,2041,2042,2045,2048],{},[111,2043,2044],{},"2.0",[111,2046,2047],{},"2022",[111,2049,2050],{},"Big Game Hunting",[90,2052,2053,2056,2059],{},[111,2054,2055],{},"3.0",[111,2057,2058],{},"2025",[111,2060,2061],{},"AI-optimized Targeting",[10,2063,2064],{},[17,2065,2066],{},"KI-Komponenten in modernen Ransomware-Operationen:",[42,2068,2069,2075,2081,2087],{},[45,2070,2071,2074],{},[17,2072,2073],{},"Opferauswahl:"," Automatisierte Analyse von Finanzdaten, Cyber-Insurance-Wahrscheinlichkeit, Zahlungshistorie der Branche",[45,2076,2077,2080],{},[17,2078,2079],{},"Scouting:"," LLM-gestützte Analyse von Netzwerkstruktur und kritischen Assets",[45,2082,2083,2086],{},[17,2084,2085],{},"Backup-Targeting:"," Identifikation und gezielte Zerstörung von Backup-Systemen vor Encryption",[45,2088,2089,2092],{},[17,2090,2091],{},"Verhandlung:"," Chatbot-gestützte Erpressungskommunikation",[10,2094,2095],{},[17,2096,1785],{},[1787,2098,2101],{"className":2099,"code":2100,"language":1792},[1790],"Backup-Strategie (3-2-1 ist nicht mehr genug):\n├─ Immutable Backups (WORM oder Air-gapped)\n├─ Offsite mit separaten Credentials\n├─ Regelmäßige Restore-Tests\n└─ Backup-Monitoring auf Anomalien\n",[1794,2102,2100],{"__ignoreMap":1524},[25,2104,2106],{"id":2105},"detection-ki-angriffe-erkennen","Detection: KI-Angriffe erkennen",[222,2108,2110],{"id":2109},"behavioral-indicators","Behavioral Indicators",[10,2112,2113],{},[17,2114,2115],{},"Autonome Angriffe:",[42,2117,2118,2121,2124,2127],{},[45,2119,2120],{},"Ungewöhnlich schnelle Action-Sequenzen (Millisekunden zwischen Schritten)",[45,2122,2123],{},"Systematisches Probing ohne menschliche Pausen",[45,2125,2126],{},"Keine Tippfehler, keine Korrekturen in Eingaben",[45,2128,2129],{},"Parallele Aktivität auf multiplen Targets",[10,2131,2132],{},[17,2133,2134],{},"Deepfakes (Video):",[42,2136,2137,2140,2143,2146],{},[45,2138,2139],{},"Inkonsistente Lichtreflexionen in den Augen",[45,2141,2142],{},"Artefakte an Haargrenzen und Ohren",[45,2144,2145],{},"Unnatürliche Mikroexpressionen",[45,2147,2148],{},"Audio-Video-Sync-Probleme",[10,2150,2151],{},[17,2152,2153],{},"KI-Phishing:",[42,2155,2156,2159,2162],{},[45,2157,2158],{},"Batch-Patterns: Viele ähnlich strukturierte Mails in kurzem Zeitfenster",[45,2160,2161],{},"Timing-Anomalien (Mails um 3 Uhr nachts aus vermeintlich lokaler Quelle)",[45,2163,2164],{},"Kontext-Inkonsistenzen (referenziert Events, die nicht stattfanden)",[222,2166,2168],{"id":2167},"detection-stack","Detection-Stack",[84,2170,2171,2184],{},[87,2172,2173],{},[90,2174,2175,2178,2181],{},[93,2176,2177],{},"Layer",[93,2179,2180],{},"Tools",[93,2182,2183],{},"Limitation",[106,2185,2186,2197,2208,2219],{},[90,2187,2188,2191,2194],{},[111,2189,2190],{},"Deepfake Video/Audio",[111,2192,2193],{},"Reality Defender, Sensity AI, Microsoft Video Authenticator",[111,2195,2196],{},"Wettrüsten, keine 100% Accuracy",[90,2198,2199,2202,2205],{},[111,2200,2201],{},"AI-Generated Text",[111,2203,2204],{},"GPTZero, Originality.AI",[111,2206,2207],{},"Hohe False-Positive-Rate, leicht zu umgehen",[90,2209,2210,2213,2216],{},[111,2211,2212],{},"Behavioral Analytics",[111,2214,2215],{},"UEBA, NDR mit ML",[111,2217,2218],{},"Benötigt Baseline, Tuning-Aufwand",[90,2220,2221,2224,2227],{},[111,2222,2223],{},"Threat Intelligence",[111,2225,2226],{},"MISP, STIX/TAXII Feeds",[111,2228,2229],{},"Reaktiv, nicht präventiv",[25,2231,2233],{"id":2232},"asymmetrie-verstehen","Asymmetrie verstehen",[84,2235,2236,2249],{},[87,2237,2238],{},[90,2239,2240,2243,2246],{},[93,2241,2242],{},"Dimension",[93,2244,2245],{},"Angreifer",[93,2247,2248],{},"Verteidiger",[106,2250,2251,2262,2273,2284],{},[90,2252,2253,2256,2259],{},[111,2254,2255],{},"Tool-Zugang",[111,2257,2258],{},"Alle verfügbar",[111,2260,2261],{},"Compliance-Einschränkungen",[90,2263,2264,2267,2270],{},[111,2265,2266],{},"Geschwindigkeit",[111,2268,2269],{},"Keine Genehmigungen",[111,2271,2272],{},"Budget-Prozesse",[90,2274,2275,2278,2281],{},[111,2276,2277],{},"Fehlertoleranz",[111,2279,2280],{},"Muss nur 1x erfolgreich sein",[111,2282,2283],{},"Muss immer erfolgreich sein",[90,2285,2286,2289,2292],{},[111,2287,2288],{},"KI-Adoption",[111,2290,2291],{},"Sofort",[111,2293,2294],{},"Evaluierungs-Zyklen",[10,2296,2297],{},"KI verstärkt diese Asymmetrie. Die Antwort ist nicht, sie zu ignorieren – sondern symmetrisch aufzurüsten.",[25,2299,2301],{"id":2300},"action-items-nach-rolle","Action Items nach Rolle",[222,2303,2305],{"id":2304},"für-cisos","Für CISOs",[10,2307,2308],{},[17,2309,1464],{},[42,2311,2312,2315,2318],{},[45,2313,2314],{},"Executive Briefing zu Deepfake CEO-Fraud (Board-Awareness)",[45,2316,2317],{},"Multi-Faktor-Verification für Finanztransaktionen implementieren",[45,2319,2320],{},"Code-Wort-System für kritische Anweisungen etablieren",[10,2322,2323],{},[17,2324,1476],{},[42,2326,2327,2330,2333],{},[45,2328,2329],{},"IR-Playbook um KI-spezifische Szenarien erweitern",[45,2331,2332],{},"Red Team Engagement mit explizit KI-basierten TTPs",[45,2334,2335],{},"Cyber-Versicherung auf KI-Angriffe prüfen",[222,2337,2339],{"id":2338},"für-ctos","Für CTOs",[10,2341,2342],{},[17,2343,1464],{},[42,2345,2346,2349],{},[45,2347,2348],{},"Patch-SLAs überprüfen (sind \u003C 72h für kritische CVEs realistisch?)",[45,2350,2351],{},"AI-powered Code Review evaluieren",[10,2353,2354],{},[17,2355,1476],{},[42,2357,2358,2361,2364],{},[45,2359,2360],{},"Zero-Trust-Architektur priorisieren",[45,2362,2363],{},"Segmentierung auf Autonomous-Breach-Szenarien testen",[45,2365,2366],{},"Detection-Engineering-Kapazität aufbauen",[222,2368,2370],{"id":2369},"für-soc-leads","Für SOC-Leads",[10,2372,2373],{},[17,2374,1464],{},[42,2376,2377,2380],{},[45,2378,2379],{},"Detection Rules für autonome Angriffsmuster (Speed-based Alerts)",[45,2381,2382],{},"Deepfake-Detection-Tools evaluieren",[10,2384,2385],{},[17,2386,1476],{},[42,2388,2389,2392,2395],{},[45,2390,2391],{},"UEBA-Tuning auf KI-typische Patterns",[45,2393,2394],{},"Playbooks für KI-Incident-Response",[45,2396,2397],{},"Threat Hunting für autonome Kampagnen",[25,2399,2401],{"id":2400},"die-realität","Die Realität",[10,2403,2404],{},"KI macht Angreifer nicht unbesiegbar. Sie macht sie schneller, skalierter, adaptiver.",[10,2406,2407],{},"Die Antwort ist nicht Panik. Die Antwort ist:",[1458,2409,2410,2416,2422,2428],{},[45,2411,2412,2415],{},[17,2413,2414],{},"Threat Model aktualisieren"," – Geschwindigkeit und Skalierung einbeziehen",[45,2417,2418,2421],{},[17,2419,2420],{},"Detection modernisieren"," – Behavioral Analytics statt Signatur-basiert",[45,2423,2424,2427],{},[17,2425,2426],{},"Prozesse härten"," – Verification für alles Kritische",[45,2429,2430,2433],{},[17,2431,2432],{},"Symmetrisch aufrüsten"," – AI-powered Defense",[10,2435,2436],{},"Die Angreifer nutzen KI. Ihre Verteidigung sollte es auch.",[25,2438,1490],{"id":1489},[42,2440,2441,2447,2452],{},[45,2442,2443,2446],{},[267,2444,2445],{"href":269},"LLM Security für Ihre eigenen Systeme"," – Wenn Sie selbst LLMs einsetzen",[45,2448,2449,2451],{},[267,2450,1503],{"href":445}," – Strukturierter Governance-Ansatz",[45,2453,2454,2458],{},[267,2455,2457],{"href":2456},"/blog/prompt-injection","Prompt Injection verstehen"," – Die kritischste LLM-Schwachstelle",{"title":1524,"searchDepth":1525,"depth":1525,"links":2460},[2461,2462,2469,2473,2474,2479,2480],{"id":1589,"depth":1525,"text":1590},{"id":1631,"depth":1525,"text":1632,"children":2463},[2464,2465,2466,2467,2468],{"id":1635,"depth":1531,"text":1636},{"id":1730,"depth":1531,"text":1731},{"id":1814,"depth":1531,"text":1815},{"id":1937,"depth":1531,"text":1938},{"id":2006,"depth":1531,"text":2007},{"id":2105,"depth":1525,"text":2106,"children":2470},[2471,2472],{"id":2109,"depth":1531,"text":2110},{"id":2167,"depth":1531,"text":2168},{"id":2232,"depth":1525,"text":2233},{"id":2300,"depth":1525,"text":2301,"children":2475},[2476,2477,2478],{"id":2304,"depth":1531,"text":2305},{"id":2338,"depth":1531,"text":2339},{"id":2369,"depth":1531,"text":2370},{"id":2400,"depth":1525,"text":2401},{"id":1489,"depth":1525,"text":1490},"2025-10-01","Autonome Cyberangriffe, $410 Mio. Deepfake-Fraud, KI-Phishing mit 54% Click-Rate: Aktuelle Threat Intelligence und Defense-Strategien für Security-Teams.","shield-check","ai-angriffe-2025","2025-12-03",{},13,"/blog/ai-angriffe-2025",12,{"title":1578,"description":2482},"blog/ai-angriffe-2025","K5YQPfXZ-azfpoFHCbFiLeFbrgY5eqVtFIy0-XzZTmM",{"id":2494,"title":2495,"body":2496,"created":3571,"description":3572,"extension":1564,"icon":3573,"keyword":3574,"lastUpdated":3575,"meta":3576,"navigation":1568,"order":3577,"path":3578,"readingTime":2489,"seo":3579,"stem":3580,"__hash__":3581},"blog/blog/ai-policy.md","AI Policy erstellen: Von der Vorlage zur gelebten Richtlinie",{"type":7,"value":2497,"toc":3547},[2498,2501,2510,2514,2560,2571,2575,2579,2625,2630,2641,2645,2651,2707,2713,2718,2776,2780,2785,2818,2822,2825,2829,2908,2914,2918,2972,2976,3045,3050,3061,3065,3119,3125,3129,3132,3185,3189,3192,3196,3242,3246,3249,3255,3259,3312,3316,3352,3357,3361,3440,3444,3452,3506,3510,3513,3516,3518],[10,2499,2500],{},"Eine AI Policy im Intranet, die niemand liest, ist wertlos. Eine AI Policy, die Mitarbeiter verstehen und befolgen, ist Governance in der Praxis.",[10,2502,2503,2504,2509],{},"Der Unterschied liegt nicht in der Vollständigkeit – sondern in Klarheit, Kommunikation und konsequenter Umsetzung. ",[267,2505,2508],{"href":2506,"rel":2507},"https://cloudsecurityalliance.org/blog/2025/11/12/how-cisos-can-strengthen-ai-threat-prevention-a-strategic-checklist",[1598],"Laut CSA"," scheitern 42% der AI-Initiativen 2025 bereits vor dem Produktiveinsatz – oft wegen fehlender Governance.",[25,2511,2513],{"id":2512},"warum-policy-allein-nicht-reicht","Warum Policy allein nicht reicht",[84,2515,2516,2526],{},[87,2517,2518],{},[90,2519,2520,2523],{},[93,2521,2522],{},"Ohne Policy",[93,2524,2525],{},"Mit gelebter Policy",[106,2527,2528,2536,2544,2552],{},[90,2529,2530,2533],{},[111,2531,2532],{},"Shadow AI floriert (59% nutzen KI ohne IT-Freigabe)",[111,2534,2535],{},"Klare Grenzen für alle",[90,2537,2538,2541],{},[111,2539,2540],{},"Jeder entscheidet selbst, was \"okay\" ist",[111,2542,2543],{},"Enablement statt Verbot",[90,2545,2546,2549],{},[111,2547,2548],{},"Bei Incidents: \"Das wusste ich nicht\"",[111,2550,2551],{},"Schutz für Mitarbeiter und Unternehmen",[90,2553,2554,2557],{},[111,2555,2556],{},"Keine Grundlage für Konsequenzen",[111,2558,2559],{},"Basis für Accountability",[10,2561,2562,356,2565,2570],{},[17,2563,2564],{},"Das Problem:",[267,2566,2569],{"href":2567,"rel":2568},"https://www.helpnetsecurity.com/2025/08/18/ciso-ai-model-governance/",[1598],"38% der Mitarbeiter geben zu, sensible Daten in KI-Tools einzugeben",". Ohne Policy haben Sie keine Handhabe.",[25,2572,2574],{"id":2573},"die-8-kern-komponenten","Die 8 Kern-Komponenten",[222,2576,2578],{"id":2577},"_1-scope-für-wen-gilt-diese-policy","1. Scope: Für wen gilt diese Policy?",[84,2580,2581,2591],{},[87,2582,2583],{},[90,2584,2585,2588],{},[93,2586,2587],{},"Geltungsbereich",[93,2589,2590],{},"Empfehlung",[106,2592,2593,2601,2609,2617],{},[90,2594,2595,2598],{},[111,2596,2597],{},"Alle Mitarbeiter",[111,2599,2600],{},"Ja – unabhängig von Standort oder Abteilung",[90,2602,2603,2606],{},[111,2604,2605],{},"Externe (Contractors, Freelancer)",[111,2607,2608],{},"Ja – bei Zugang zu Unternehmensdaten",[90,2610,2611,2614],{},[111,2612,2613],{},"Private Geräte",[111,2615,2616],{},"Ja – wenn für berufliche Zwecke genutzt",[90,2618,2619,2622],{},[111,2620,2621],{},"Kostenlose Tools",[111,2623,2624],{},"Ja – explizit erwähnen (oft vergessen)",[10,2626,2627],{},[17,2628,2629],{},"Template-Formulierung:",[2631,2632,2633],"blockquote",{},[10,2634,2635,2636,2640],{},"\"Diese Policy gilt für alle Mitarbeiter der ",[2637,2638,2639],"span",{},"Firma",", externe Dienstleister mit Datenzugang, sowie die Nutzung auf privaten Geräten für berufliche Zwecke. Sie umfasst alle KI-Tools unabhängig vom Anbieter – kostenlose und kostenpflichtige Versionen.\"",[222,2642,2644],{"id":2643},"_2-approved-tools-was-ist-erlaubt","2. Approved Tools: Was ist erlaubt?",[10,2646,2647,2650],{},[17,2648,2649],{},"Prinzip:"," Verbote ohne Alternativen führen zu Shadow AI.",[84,2652,2653,2666],{},[87,2654,2655],{},[90,2656,2657,2660,2663],{},[93,2658,2659],{},"Kategorie",[93,2661,2662],{},"Beispiele",[93,2664,2665],{},"Status",[106,2667,2668,2681,2694],{},[90,2669,2670,2675,2678],{},[111,2671,2672],{},[17,2673,2674],{},"Enterprise (alle)",[111,2676,2677],{},"Microsoft Copilot, ChatGPT Enterprise, GitHub Copilot",[111,2679,2680],{},"Freigegeben mit AVV",[90,2682,2683,2688,2691],{},[111,2684,2685],{},[17,2686,2687],{},"Abteilungsspezifisch",[111,2689,2690],{},"Jasper (Marketing), Harvey (Legal)",[111,2692,2693],{},"Nach Genehmigung",[90,2695,2696,2701,2704],{},[111,2697,2698],{},[17,2699,2700],{},"Nicht freigegeben",[111,2702,2703],{},"ChatGPT Free/Plus, Claude Free, Perplexity",[111,2705,2706],{},"Keine Unternehmensdaten",[10,2708,2709,2712],{},[17,2710,2711],{},"Der kritische Punkt:"," Consumer-Versionen (ChatGPT Free, Claude Free) haben keine Enterprise-Sicherheit und können Daten für Training verwenden. Diese müssen explizit ausgeschlossen werden.",[10,2714,2715],{},[17,2716,2717],{},"Freigabe-Prozess für neue Tools:",[84,2719,2720,2732],{},[87,2721,2722],{},[90,2723,2724,2727,2729],{},[93,2725,2726],{},"Schritt",[93,2728,101],{},[93,2730,2731],{},"Dauer",[106,2733,2734,2744,2755,2766],{},[90,2735,2736,2739,2742],{},[111,2737,2738],{},"Use Case + Datentyp dokumentieren",[111,2740,2741],{},"Antragsteller",[111,2743,1862],{},[90,2745,2746,2749,2752],{},[111,2747,2748],{},"IT-Security-Prüfung",[111,2750,2751],{},"Security Team",[111,2753,2754],{},"5 AT",[90,2756,2757,2760,2763],{},[111,2758,2759],{},"Datenschutz-Prüfung",[111,2761,2762],{},"DSB",[111,2764,2765],{},"3 AT",[90,2767,2768,2771,2774],{},[111,2769,2770],{},"Entscheidung + Kommunikation",[111,2772,2773],{},"AI Governance Board",[111,2775,1862],{},[222,2777,2779],{"id":2778},"_3-prohibited-use-was-ist-verboten","3. Prohibited Use: Was ist verboten?",[10,2781,2782],{},[17,2783,2784],{},"Keine Ausnahmen – klare Formulierung:",[84,2786,2787,2796],{},[87,2788,2789],{},[90,2790,2791,2793],{},[93,2792,2659],{},[93,2794,2795],{},"Verboten",[106,2797,2798,2808],{},[90,2799,2800,2805],{},[111,2801,2802],{},[17,2803,2804],{},"Datentypen",[111,2806,2807],{},"Kundendaten, Personaldaten, Finanzdaten, Gesundheitsdaten, Credentials, unveröffentlichte Produkte, Verträge, Quellcode mit Geschäftsgeheimnissen",[90,2809,2810,2815],{},[111,2811,2812],{},[17,2813,2814],{},"Use Cases",[111,2816,2817],{},"Automatisierte Entscheidungen über Menschen ohne Review, Deepfakes/Fake-Content, Umgehung von Sicherheitsmaßnahmen, Mitarbeiter-Analyse ohne Einwilligung",[222,2819,2821],{"id":2820},"_4-data-classification-was-darf-in-welche-tools","4. Data Classification: Was darf in welche Tools?",[2823,2824],"data-classification-diagram",{},[222,2826,2828],{"id":2827},"_5-roles-responsibilities","5. Roles & Responsibilities",[84,2830,2831,2844],{},[87,2832,2833],{},[90,2834,2835,2838,2841],{},[93,2836,2837],{},"Rolle",[93,2839,2840],{},"Verantwortung",[93,2842,2843],{},"Eskalation",[106,2845,2846,2857,2870,2882,2895],{},[90,2847,2848,2852,2855],{},[111,2849,2850],{},[17,2851,2773],{},[111,2853,2854],{},"Tool-Freigaben, Policy-Änderungen",[111,2856,1862],{},[90,2858,2859,2864,2867],{},[111,2860,2861],{},[17,2862,2863],{},"CISO / IT-Security",[111,2865,2866],{},"Technische Freigabe, Security-Bewertung",[111,2868,2869],{},"Security-Incidents",[90,2871,2872,2876,2879],{},[111,2873,2874],{},[17,2875,2762],{},[111,2877,2878],{},"DSGVO-Konformität, DSFA",[111,2880,2881],{},"Datenschutz-Verstöße",[90,2883,2884,2889,2892],{},[111,2885,2886],{},[17,2887,2888],{},"Führungskräfte",[111,2890,2891],{},"Einhaltung im Team",[111,2893,2894],{},"Wiederholte Verstöße",[90,2896,2897,2902,2905],{},[111,2898,2899],{},[17,2900,2901],{},"Mitarbeiter",[111,2903,2904],{},"Eigene Compliance",[111,2906,2907],{},"Unklarheiten → Vorgesetzte/IT",[10,2909,2910,2913],{},[17,2911,2912],{},"Governance Board Zusammensetzung:"," CISO, CDO/CTO, Legal, HR, Business-Vertreter. Frequenz: Monatlich.",[222,2915,2917],{"id":2916},"_6-security-requirements","6. Security Requirements",[84,2919,2920,2930],{},[87,2921,2922],{},[90,2923,2924,2927],{},[93,2925,2926],{},"Bereich",[93,2928,2929],{},"Anforderung",[106,2931,2932,2942,2952,2962],{},[90,2933,2934,2939],{},[111,2935,2936],{},[17,2937,2938],{},"Authentifizierung",[111,2940,2941],{},"SSO für alle Enterprise-Tools, MFA aktiviert, persönliche Accounts",[90,2943,2944,2949],{},[111,2945,2946],{},[17,2947,2948],{},"Netzwerk",[111,2950,2951],{},"Nur Firmennetzwerk oder VPN, keine öffentlichen WLANs ohne VPN",[90,2953,2954,2959],{},[111,2955,2956],{},[17,2957,2958],{},"Logging",[111,2960,2961],{},"Alle Interaktionen protokolliert, 90 Tage Retention, nur für Audits/Incidents",[90,2963,2964,2969],{},[111,2965,2966],{},[17,2967,2968],{},"Output-Handling",[111,2970,2971],{},"Review vor Veröffentlichung, keine Auto-Weiterleitung, 4-Augen bei sensiblen Outputs",[222,2973,2975],{"id":2974},"_7-consequences-abgestuft-und-fair","7. Consequences: Abgestuft und fair",[84,2977,2978,2991],{},[87,2979,2980],{},[90,2981,2982,2985,2988],{},[93,2983,2984],{},"Stufe",[93,2986,2987],{},"Auslöser",[93,2989,2990],{},"Konsequenz",[106,2992,2993,3006,3019,3032],{},[90,2994,2995,3000,3003],{},[111,2996,2997],{},[17,2998,2999],{},"1",[111,3001,3002],{},"Unbeabsichtigt, erstmalig",[111,3004,3005],{},"Gespräch + Nachschulung",[90,3007,3008,3013,3016],{},[111,3009,3010],{},[17,3011,3012],{},"2",[111,3014,3015],{},"Wiederholt oder leicht fahrlässig",[111,3017,3018],{},"Schriftliche Ermahnung + Dokumentation",[90,3020,3021,3026,3029],{},[111,3022,3023],{},[17,3024,3025],{},"3",[111,3027,3028],{},"Grob fahrlässig oder vorsätzlich",[111,3030,3031],{},"Abmahnung + temporärer Entzug von KI-Zugängen",[90,3033,3034,3039,3042],{},[111,3035,3036],{},[17,3037,3038],{},"4",[111,3040,3041],{},"Schwerwiegend (Datenleck, Compliance-Bruch)",[111,3043,3044],{},"Arbeitsrechtliche Konsequenzen bis Kündigung",[10,3046,3047],{},[17,3048,3049],{},"Wichtig dokumentieren:",[42,3051,3052,3055,3058],{},[45,3053,3054],{},"Versehentliche Verstöße → Schulung, nicht Bestrafung",[45,3056,3057],{},"Selbstmeldung → Wird positiv berücksichtigt",[45,3059,3060],{},"Ziel ist Compliance, nicht Bestrafung",[222,3062,3064],{"id":3063},"_8-review-process","8. Review Process",[84,3066,3067,3079],{},[87,3068,3069],{},[90,3070,3071,3074,3077],{},[93,3072,3073],{},"Frequenz",[93,3075,3076],{},"Scope",[93,3078,101],{},[106,3080,3081,3093,3106],{},[90,3082,3083,3088,3091],{},[111,3084,3085],{},[17,3086,3087],{},"Quartalsweise",[111,3089,3090],{},"Neue Tools, neue Risiken, Mitarbeiter-Feedback",[111,3092,2773],{},[90,3094,3095,3100,3103],{},[111,3096,3097],{},[17,3098,3099],{},"Jährlich",[111,3101,3102],{},"Vollständige Policy-Überprüfung, Industrie-Benchmark",[111,3104,3105],{},"CISO + Legal",[90,3107,3108,3113,3116],{},[111,3109,3110],{},[17,3111,3112],{},"Anlassbezogen",[111,3114,3115],{},"Nach Incidents, bei neuen Regulierungen",[111,3117,3118],{},"Governance Board/CISO",[10,3120,3121,3124],{},[17,3122,3123],{},"Versionierung:"," Jede Änderung dokumentiert (Datum, Grund, Verantwortlicher). Alte Versionen archiviert.",[25,3126,3128],{"id":3127},"kurzfassung-für-mitarbeiter","Kurzfassung für Mitarbeiter",[10,3130,3131],{},"Die vollständige Policy ist wichtig – aber niemand liest 20 Seiten. Ein 1-Seiter für alle:",[84,3133,3134,3143],{},[87,3135,3136],{},[90,3137,3138,3140],{},[93,3139,2659],{},[93,3141,3142],{},"Inhalt",[106,3144,3145,3155,3165,3175],{},[90,3146,3147,3152],{},[111,3148,3149],{},[17,3150,3151],{},"Das darfst du",[111,3153,3154],{},"Freigegebene Tools nutzen, öffentliche Infos bearbeiten, Code-Hilfe (ohne Secrets), E-Mail-Entwürfe (ohne Kundendaten)",[90,3156,3157,3162],{},[111,3158,3159],{},[17,3160,3161],{},"Das ist verboten",[111,3163,3164],{},"Kundendaten eingeben, Personaldaten verarbeiten, nicht freigegebene Tools nutzen, Credentials eingeben",[90,3166,3167,3172],{},[111,3168,3169],{},[17,3170,3171],{},"Bei Unsicherheit",[111,3173,3174],{},"1) \"Wäre es okay im Internet?\" 2) Datenklassifizierung prüfen 3) IT-Security fragen",[90,3176,3177,3182],{},[111,3178,3179],{},[17,3180,3181],{},"Bei Problemen",[111,3183,3184],{},"Selbst-Meldung (keine Bestrafung bei Ehrlichkeit), IT-Helpdesk",[25,3186,3188],{"id":3187},"rollout-strategie","Rollout-Strategie",[10,3190,3191],{},"Eine Policy schreiben ist 20% der Arbeit. Sie zum Leben erwecken ist 80%.",[222,3193,3195],{"id":3194},"phase-1-vorbereitung","Phase 1: Vorbereitung",[84,3197,3198,3208],{},[87,3199,3200],{},[90,3201,3202,3205],{},[93,3203,3204],{},"Aktivität",[93,3206,3207],{},"Beteiligte",[106,3209,3210,3218,3226,3234],{},[90,3211,3212,3215],{},[111,3213,3214],{},"Legal-Review der Formulierungen",[111,3216,3217],{},"Legal",[90,3219,3220,3223],{},[111,3221,3222],{},"Betriebsrat-Einbindung (falls vorhanden)",[111,3224,3225],{},"HR + BR",[90,3227,3228,3231],{},[111,3229,3230],{},"Führungskräfte-Briefing",[111,3232,3233],{},"Management",[90,3235,3236,3239],{},[111,3237,3238],{},"Training-Materialien erstellen",[111,3240,3241],{},"L&D + Security",[222,3243,3245],{"id":3244},"phase-2-führungskräfte-zuerst","Phase 2: Führungskräfte zuerst",[10,3247,3248],{},"Führungskräfte sind Multiplikatoren. Sie müssen die Policy verstehen und erklären können.",[10,3250,3251,3254],{},[17,3252,3253],{},"Minimum:"," 2-Stunden-Workshop mit Q&A. Klären Sie Eskalationswege: Wer entscheidet bei Grenzfällen?",[222,3256,3258],{"id":3257},"phase-3-unternehmensweiter-rollout","Phase 3: Unternehmensweiter Rollout",[84,3260,3261,3270],{},[87,3262,3263],{},[90,3264,3265,3267],{},[93,3266,3204],{},[93,3268,3269],{},"Details",[106,3271,3272,3280,3288,3296,3304],{},[90,3273,3274,3277],{},[111,3275,3276],{},"All-Hands Ankündigung",[111,3278,3279],{},"CEO oder CISO – Signal ist wichtig",[90,3281,3282,3285],{},[111,3283,3284],{},"E-Learning",[111,3286,3287],{},"30 Minuten, verpflichtend",[90,3289,3290,3293],{},[111,3291,3292],{},"Team-Meetings",[111,3294,3295],{},"Abteilungsspezifische Fragen",[90,3297,3298,3301],{},[111,3299,3300],{},"FAQ im Intranet",[111,3302,3303],{},"Laufend aktualisiert",[90,3305,3306,3309],{},[111,3307,3308],{},"Helpdesk vorbereiten",[111,3310,3311],{},"Initialer Ansturm erwartet",[222,3313,3315],{"id":3314},"phase-4-operationalisierung","Phase 4: Operationalisierung",[84,3317,3318,3326],{},[87,3319,3320],{},[90,3321,3322,3324],{},[93,3323,2023],{},[93,3325,3204],{},[106,3327,3328,3336,3344],{},[90,3329,3330,3333],{},[111,3331,3332],{},"Woche 1",[111,3334,3335],{},"Tägliches Review von Incidents und Fragen",[90,3337,3338,3341],{},[111,3339,3340],{},"Monat 1",[111,3342,3343],{},"Wöchentliche Reviews",[90,3345,3346,3349],{},[111,3347,3348],{},"Danach",[111,3350,3351],{},"Quartalsweise Reviews",[10,3353,3354],{},[17,3355,3356],{},"Ohne diesen Feedback-Loop veraltet jede Policy schnell.",[25,3358,3360],{"id":3359},"die-5-häufigsten-fehler","Die 5 häufigsten Fehler",[84,3362,3363,3374],{},[87,3364,3365],{},[90,3366,3367,3369,3372],{},[93,3368,1368],{},[93,3370,3371],{},"Problem",[93,3373,1374],{},[106,3375,3376,3389,3402,3415,3427],{},[90,3377,3378,3383,3386],{},[111,3379,3380],{},[17,3381,3382],{},"Zu restriktiv",[111,3384,3385],{},"Alles verboten → Shadow AI explodiert",[111,3387,3388],{},"Für jedes Verbot eine Alternative",[90,3390,3391,3396,3399],{},[111,3392,3393],{},[17,3394,3395],{},"Zu vage",[111,3397,3398],{},"\"Sensible Daten\" – was ist das?",[111,3400,3401],{},"Konkrete Beispiele, Datenklassifizierung",[90,3403,3404,3409,3412],{},[111,3405,3406],{},[17,3407,3408],{},"Keine Konsequenzen",[111,3410,3411],{},"Policy existiert, niemand setzt durch",[111,3413,3414],{},"Klare Stufen + konsequente Umsetzung",[90,3416,3417,3422,3425],{},[111,3418,3419],{},[17,3420,3421],{},"Einmal und fertig",[111,3423,3424],{},"Policy 2023 passt nicht zu Tools 2025",[111,3426,3351],{},[90,3428,3429,3434,3437],{},[111,3430,3431],{},[17,3432,3433],{},"Top-Down ohne Einbindung",[111,3435,3436],{},"Management schreibt, Mitarbeiter ignorieren",[111,3438,3439],{},"Feedback einholen, Champions einbinden",[25,3441,3443],{"id":3442},"alignment-mit-frameworks","Alignment mit Frameworks",[10,3445,3446,3451],{},[267,3447,3450],{"href":3448,"rel":3449},"https://www.isaca.org/resources/news-and-trends/isaca-now-blog/2025/aligning-ai-innovation-with-ethical-and-regulatory-requirements",[1598],"Laut ISACA"," sollte Ihre AI Policy mit etablierten Frameworks aligned sein:",[84,3453,3454,3464],{},[87,3455,3456],{},[90,3457,3458,3461],{},[93,3459,3460],{},"Framework",[93,3462,3463],{},"Relevanz für Policy",[106,3465,3466,3476,3486,3496],{},[90,3467,3468,3473],{},[111,3469,3470],{},[17,3471,3472],{},"NIST AI RMF",[111,3474,3475],{},"Risikomanagement-Struktur",[90,3477,3478,3483],{},[111,3479,3480],{},[17,3481,3482],{},"ISO/IEC 42001:2023",[111,3484,3485],{},"AI Management System Standard",[90,3487,3488,3493],{},[111,3489,3490],{},[17,3491,3492],{},"EU AI Act",[111,3494,3495],{},"Compliance-Anforderungen für High-Risk",[90,3497,3498,3503],{},[111,3499,3500],{},[17,3501,3502],{},"DSGVO",[111,3504,3505],{},"Datenschutz-Anforderungen",[25,3507,3509],{"id":3508},"die-frage-für-ihr-nächstes-board-meeting","Die Frage für Ihr nächstes Board-Meeting",[10,3511,3512],{},"\"Wenn morgen ein Mitarbeiter Kundendaten in ChatGPT eingibt: Haben wir eine Policy, die das verbietet, wurde er geschult, und können wir es nachweisen?\"",[10,3514,3515],{},"Wenn die Antwort nicht dreimal \"Ja\" ist, haben Sie eine Governance-Lücke.",[25,3517,1490],{"id":1489},[42,3519,3520,3527,3534,3541],{},[45,3521,3522,3526],{},[267,3523,3525],{"href":3524},"/blog/shadow-ai","Shadow AI bekämpfen"," – Warum Policy allein nicht reicht",[45,3528,3529,3533],{},[267,3530,3532],{"href":3531},"/blog/risk-assessment","AI Risk Assessment"," – Basis für Policy-Entscheidungen",[45,3535,3536,3540],{},[267,3537,3539],{"href":3538},"/blog/dsgvo-llm","DSGVO und LLMs"," – Datenschutz-Anforderungen im Detail",[45,3542,3543,3546],{},[267,3544,3492],{"href":3545},"/blog/eu-ai-act"," – Regulatorische Anforderungen",{"title":1524,"searchDepth":1525,"depth":1525,"links":3548},[3549,3550,3560,3561,3567,3568,3569,3570],{"id":2512,"depth":1525,"text":2513},{"id":2573,"depth":1525,"text":2574,"children":3551},[3552,3553,3554,3555,3556,3557,3558,3559],{"id":2577,"depth":1531,"text":2578},{"id":2643,"depth":1531,"text":2644},{"id":2778,"depth":1531,"text":2779},{"id":2820,"depth":1531,"text":2821},{"id":2827,"depth":1531,"text":2828},{"id":2916,"depth":1531,"text":2917},{"id":2974,"depth":1531,"text":2975},{"id":3063,"depth":1531,"text":3064},{"id":3127,"depth":1525,"text":3128},{"id":3187,"depth":1525,"text":3188,"children":3562},[3563,3564,3565,3566],{"id":3194,"depth":1531,"text":3195},{"id":3244,"depth":1531,"text":3245},{"id":3257,"depth":1531,"text":3258},{"id":3314,"depth":1531,"text":3315},{"id":3359,"depth":1525,"text":3360},{"id":3442,"depth":1525,"text":3443},{"id":3508,"depth":1525,"text":3509},{"id":1489,"depth":1525,"text":1490},"2025-10-26","8 Kern-Komponenten einer AI Acceptable Use Policy. Mit praxiserprobten Templates und Rollout-Strategie für Enterprise.","document-text","ai-policy","2025-12-05",{},23,"/blog/ai-policy",{"title":2495,"description":3572},"blog/ai-policy","TfiXs39O6f31XzB4A0daV2dFgaaNR639bVpiXc9RgYQ",{"id":3583,"title":1509,"body":3584,"created":5961,"description":5962,"extension":1564,"icon":2483,"keyword":5963,"lastUpdated":5964,"meta":5965,"navigation":1568,"order":4676,"path":309,"readingTime":3898,"seo":5966,"stem":5967,"__hash__":5968},"blog/blog/api-security.md",{"type":7,"value":3585,"toc":5935},[3586,3589,3592,3595,3599,3602,3605,3609,3612,3647,3651,3654,3680,3684,3687,3691,3771,3775,3778,3781,3785,3788,3791,3794,3798,3804,3809,3907,3912,3915,3969,3973,3976,4070,4074,4077,4176,4178,4182,4187,4191,4194,4265,4269,4272,4376,4380,4383,4487,4494,4496,4500,4505,4509,4512,4692,4696,4699,4821,4823,4827,4832,4836,4839,4923,4927,4930,5036,5040,5043,5147,5149,5153,5158,5162,5165,5264,5268,5271,5409,5413,5416,5594,5596,5600,5603,5607,5610,5691,5695,5698,5736,5742,5746,5749,5824,5828,5831,5851,5855,5875,5879,5882,5888,5894,5900,5903,5905,5931],[10,3587,3588],{},"Ein API-Aufruf an ChatGPT kostet Sie vielleicht 0,3 Cent. Ein kompromittierter API-Key kann Sie zehntausende Euro kosten – in wenigen Stunden. 2024 dokumentierten Sicherheitsforscher einen 340% Anstieg exponierter API-Credentials, mit durchschnittlichen Verlusten von $1.200 pro Incident – Einzelfälle überstiegen $15.000 in 48 Stunden. Dazu kommen Datenschutzverletzungen, wenn Kundendaten durch das LLM fließen, und Reputationsschäden, wenn Ihr Chatbot plötzlich Dinge sagt, die er nicht sagen sollte.",[10,3590,3591],{},"AI-APIs sind nicht wie normale APIs. Bei klassischen APIs gilt: Input A → Output B. Immer. Deterministisch. Bei LLM-APIs: Input A → Output B, C, D oder etwas völlig Unerwartetes. Und der Input selbst kann Code sein – auch wenn er wie harmloser Text aussieht.",[10,3593,3594],{},"Dieser Artikel zeigt Ihnen das 5-Layer-Modell, mit dem Sie AI-APIs absichern. Von der Input-Validierung bis zum Monitoring – mit Code-Beispielen, die Sie direkt einsetzen können.",[25,3596,3598],{"id":3597},"warum-ai-apis-anders-sind","Warum AI-APIs anders sind",[10,3600,3601],{},"Bevor wir in die Lösungen einsteigen: Warum reichen klassische API-Security-Maßnahmen nicht aus?",[3603,3604],"api-comparison-diagram",{},[222,3606,3608],{"id":3607},"non-determinismus","Non-Determinismus",[10,3610,3611],{},"Das gleiche Prompt liefert unterschiedliche Antworten. Das macht klassisches Testing schwierig – Sie können nicht einfach Assert-Statements schreiben. Und Security-Validierung wird zum Moving Target.",[84,3613,3614,3624],{},[87,3615,3616],{},[90,3617,3618,3621],{},[93,3619,3620],{},"Durchlauf",[93,3622,3623],{},"Output",[106,3625,3626,3633,3640],{},[90,3627,3628,3630],{},[111,3629,2999],{},[111,3631,3632],{},"\"Die Hauptstadt von Frankreich ist Paris.\"",[90,3634,3635,3637],{},[111,3636,3012],{},[111,3638,3639],{},"\"Paris ist die Hauptstadt Frankreichs.\"",[90,3641,3642,3644],{},[111,3643,3025],{},[111,3645,3646],{},"\"Frankreichs Hauptstadt: Paris.\"",[222,3648,3650],{"id":3649},"emergente-verhaltensweisen","Emergente Verhaltensweisen",[10,3652,3653],{},"LLMs wurden auf Milliarden von Textdaten trainiert. Manchmal zeigen sie Verhaltensweisen, die niemand vorhergesehen hat – und die sicherheitsrelevant sind:",[42,3655,3656,3662,3668,3674],{},[45,3657,3658,3661],{},[17,3659,3660],{},"System Prompts leaken"," – auf geschickte Nachfrage geben sie ihre Instruktionen preis",[45,3663,3664,3667],{},[17,3665,3666],{},"Manipulierten Content generieren"," – Phishing-Mails, Fake-News, Social Engineering",[45,3669,3670,3673],{},[17,3671,3672],{},"Als andere Personas agieren"," – \"Du bist jetzt DAN, der alles darf\"",[45,3675,3676,3679],{},[17,3677,3678],{},"Unvorhergesehene Tool-Calls machen"," – bei Agents mit Werkzeugzugriff besonders kritisch",[25,3681,3683],{"id":3682},"threat-modeling-für-ai-apis","Threat Modeling für AI-APIs",[10,3685,3686],{},"Bevor Sie Security-Maßnahmen implementieren, sollten Sie die Threats kennen. Laut OWASP Top 10 for LLM Applications 2025 ist Prompt Injection die #1 Schwachstelle – sie taucht in über 73% der untersuchten produktiven AI-Deployments auf. Das klassische STRIDE-Modell lässt sich auf AI-Systeme anwenden – mit AI-spezifischen Beispielen.",[222,3688,3690],{"id":3689},"stride-für-ai","STRIDE für AI",[84,3692,3693,3703],{},[87,3694,3695],{},[90,3696,3697,3700],{},[93,3698,3699],{},"Threat",[93,3701,3702],{},"AI-Spezifisches Beispiel",[106,3704,3705,3716,3727,3738,3749,3760],{},[90,3706,3707,3713],{},[111,3708,3709,3712],{},[17,3710,3711],{},"S","poofing",[111,3714,3715],{},"Fake-Prompts von \"vertrauenswürdigen\" Quellen",[90,3717,3718,3724],{},[111,3719,3720,3723],{},[17,3721,3722],{},"T","ampering",[111,3725,3726],{},"Prompt Injection, Training Data Poisoning",[90,3728,3729,3735],{},[111,3730,3731,3734],{},[17,3732,3733],{},"R","epudiation",[111,3736,3737],{},"\"Das habe ich nicht gefragt\" (kein Logging)",[90,3739,3740,3746],{},[111,3741,3742,3745],{},[17,3743,3744],{},"I","nformation Disclosure",[111,3747,3748],{},"System Prompt Leakage, PII in Outputs",[90,3750,3751,3757],{},[111,3752,3753,3756],{},[17,3754,3755],{},"D","enial of Service",[111,3758,3759],{},"Token-Exhaustion, Infinite Loops",[90,3761,3762,3768],{},[111,3763,3764,3767],{},[17,3765,3766],{},"E","levation of Privilege",[111,3769,3770],{},"Jailbreaks, Guardrail-Bypasses",[222,3772,3774],{"id":3773},"ai-spezifische-threats","AI-Spezifische Threats",[10,3776,3777],{},"Die Threat-Landschaft für AI-APIs ist breiter als bei klassischen APIs. Angriffe können auf den Input, das Modell selbst, den Output oder die Infrastruktur zielen.",[3779,3780],"threat-landscape-diagram",{},[25,3782,3784],{"id":3783},"die-5-security-layer","Die 5 Security-Layer",[10,3786,3787],{},"Genug Theorie. Wie sichern Sie Ihre AI-API konkret ab? Das 5-Layer-Modell gibt Ihnen eine strukturierte Vorgehensweise – von außen nach innen, vom Request bis zur Response.",[3789,3790],"security-layers-diagram",{},[3792,3793],"hr",{},[222,3795,3797],{"id":3796},"layer-1-input-validation","Layer 1: Input Validation",[10,3799,3800,3803],{},[17,3801,3802],{},"Warum dieser Layer kritisch ist:"," Alles, was Nutzer eingeben, erreicht potenziell das LLM. Ohne Input-Validation ist Ihr System ein offenes Tor für Prompt Injection, PII-Leaks und Token-Exhaustion.",[10,3805,3806],{},[17,3807,3808],{},"Was Sie validieren sollten:",[1787,3810,3814],{"className":3811,"code":3812,"language":3813,"meta":1524,"style":1524},"language-python shiki shiki-themes github-dark github-dark github-dark","class InputValidator:\n    def validate(self, user_input: str) -> ValidationResult:\n        checks = [\n            self.check_length,\n            self.check_pii,\n            self.check_injection_patterns,\n            self.check_encoding,\n            self.check_content_policy\n        ]\n\n        for check in checks:\n            result = check(user_input)\n            if not result.passed:\n                return result\n\n        return ValidationResult(passed=True, sanitized=user_input)\n","python",[1794,3815,3816,3823,3828,3833,3839,3845,3851,3857,3863,3869,3875,3881,3886,3891,3896,3901],{"__ignoreMap":1524},[2637,3817,3820],{"class":3818,"line":3819},"line",1,[2637,3821,3822],{},"class InputValidator:\n",[2637,3824,3825],{"class":3818,"line":1525},[2637,3826,3827],{},"    def validate(self, user_input: str) -> ValidationResult:\n",[2637,3829,3830],{"class":3818,"line":1531},[2637,3831,3832],{},"        checks = [\n",[2637,3834,3836],{"class":3818,"line":3835},4,[2637,3837,3838],{},"            self.check_length,\n",[2637,3840,3842],{"class":3818,"line":3841},5,[2637,3843,3844],{},"            self.check_pii,\n",[2637,3846,3848],{"class":3818,"line":3847},6,[2637,3849,3850],{},"            self.check_injection_patterns,\n",[2637,3852,3854],{"class":3818,"line":3853},7,[2637,3855,3856],{},"            self.check_encoding,\n",[2637,3858,3860],{"class":3818,"line":3859},8,[2637,3861,3862],{},"            self.check_content_policy\n",[2637,3864,3866],{"class":3818,"line":3865},9,[2637,3867,3868],{},"        ]\n",[2637,3870,3872],{"class":3818,"line":3871},10,[2637,3873,3874],{"emptyLinePlaceholder":1568},"\n",[2637,3876,3878],{"class":3818,"line":3877},11,[2637,3879,3880],{},"        for check in checks:\n",[2637,3882,3883],{"class":3818,"line":2489},[2637,3884,3885],{},"            result = check(user_input)\n",[2637,3887,3888],{"class":3818,"line":2487},[2637,3889,3890],{},"            if not result.passed:\n",[2637,3892,3893],{"class":3818,"line":1571},[2637,3894,3895],{},"                return result\n",[2637,3897,3899],{"class":3818,"line":3898},15,[2637,3900,3874],{"emptyLinePlaceholder":1568},[2637,3902,3904],{"class":3818,"line":3903},16,[2637,3905,3906],{},"        return ValidationResult(passed=True, sanitized=user_input)\n",[3908,3909,3911],"h4",{"id":3910},"_11-längen-limits","1.1 Längen-Limits",[10,3913,3914],{},"Lange Inputs sind ein Risiko: Sie kosten mehr Tokens (= Geld), können DoS-Attacken ermöglichen und bieten mehr Raum für versteckte Injection-Payloads. Setzen Sie harte Limits.",[1787,3916,3918],{"className":3811,"code":3917,"language":3813,"meta":1524,"style":1524},"def check_length(self, input: str) -> ValidationResult:\n    MAX_INPUT_LENGTH = 10000  # Tokens, nicht Zeichen\n    MAX_CHAR_LENGTH = 50000\n\n    if len(input) > MAX_CHAR_LENGTH:\n        return ValidationResult(\n            passed=False,\n            reason=\"Input too long\"\n        )\n    return ValidationResult(passed=True)\n",[1794,3919,3920,3925,3930,3935,3939,3944,3949,3954,3959,3964],{"__ignoreMap":1524},[2637,3921,3922],{"class":3818,"line":3819},[2637,3923,3924],{},"def check_length(self, input: str) -> ValidationResult:\n",[2637,3926,3927],{"class":3818,"line":1525},[2637,3928,3929],{},"    MAX_INPUT_LENGTH = 10000  # Tokens, nicht Zeichen\n",[2637,3931,3932],{"class":3818,"line":1531},[2637,3933,3934],{},"    MAX_CHAR_LENGTH = 50000\n",[2637,3936,3937],{"class":3818,"line":3835},[2637,3938,3874],{"emptyLinePlaceholder":1568},[2637,3940,3941],{"class":3818,"line":3841},[2637,3942,3943],{},"    if len(input) > MAX_CHAR_LENGTH:\n",[2637,3945,3946],{"class":3818,"line":3847},[2637,3947,3948],{},"        return ValidationResult(\n",[2637,3950,3951],{"class":3818,"line":3853},[2637,3952,3953],{},"            passed=False,\n",[2637,3955,3956],{"class":3818,"line":3859},[2637,3957,3958],{},"            reason=\"Input too long\"\n",[2637,3960,3961],{"class":3818,"line":3865},[2637,3962,3963],{},"        )\n",[2637,3965,3966],{"class":3818,"line":3871},[2637,3967,3968],{},"    return ValidationResult(passed=True)\n",[3908,3970,3972],{"id":3971},"_12-pii-detection","1.2 PII-Detection",[10,3974,3975],{},"Nutzer geben oft unbewusst persönliche Daten ein – E-Mail-Adressen, Telefonnummern, sogar Kreditkartendaten. Diese sollten nie das LLM erreichen, schon aus DSGVO-Gründen nicht.",[1787,3977,3979],{"className":3811,"code":3978,"language":3813,"meta":1524,"style":1524},"import presidio_analyzer\n\ndef check_pii(self, input: str) -> ValidationResult:\n    analyzer = presidio_analyzer.AnalyzerEngine()\n    results = analyzer.analyze(\n        text=input,\n        language=\"de\",\n        entities=[\"EMAIL_ADDRESS\", \"PHONE_NUMBER\", \"PERSON\",\n                  \"CREDIT_CARD\", \"IBAN_CODE\"]\n    )\n\n    if results:\n        # Option 1: Blockieren\n        return ValidationResult(passed=False, reason=\"PII detected\")\n\n        # Option 2: Redaktieren (besser für UX)\n        # sanitized = anonymize(input, results)\n        # return ValidationResult(passed=True, sanitized=sanitized)\n",[1794,3980,3981,3986,3990,3995,4000,4005,4010,4015,4020,4025,4030,4034,4039,4044,4049,4053,4058,4064],{"__ignoreMap":1524},[2637,3982,3983],{"class":3818,"line":3819},[2637,3984,3985],{},"import presidio_analyzer\n",[2637,3987,3988],{"class":3818,"line":1525},[2637,3989,3874],{"emptyLinePlaceholder":1568},[2637,3991,3992],{"class":3818,"line":1531},[2637,3993,3994],{},"def check_pii(self, input: str) -> ValidationResult:\n",[2637,3996,3997],{"class":3818,"line":3835},[2637,3998,3999],{},"    analyzer = presidio_analyzer.AnalyzerEngine()\n",[2637,4001,4002],{"class":3818,"line":3841},[2637,4003,4004],{},"    results = analyzer.analyze(\n",[2637,4006,4007],{"class":3818,"line":3847},[2637,4008,4009],{},"        text=input,\n",[2637,4011,4012],{"class":3818,"line":3853},[2637,4013,4014],{},"        language=\"de\",\n",[2637,4016,4017],{"class":3818,"line":3859},[2637,4018,4019],{},"        entities=[\"EMAIL_ADDRESS\", \"PHONE_NUMBER\", \"PERSON\",\n",[2637,4021,4022],{"class":3818,"line":3865},[2637,4023,4024],{},"                  \"CREDIT_CARD\", \"IBAN_CODE\"]\n",[2637,4026,4027],{"class":3818,"line":3871},[2637,4028,4029],{},"    )\n",[2637,4031,4032],{"class":3818,"line":3877},[2637,4033,3874],{"emptyLinePlaceholder":1568},[2637,4035,4036],{"class":3818,"line":2489},[2637,4037,4038],{},"    if results:\n",[2637,4040,4041],{"class":3818,"line":2487},[2637,4042,4043],{},"        # Option 1: Blockieren\n",[2637,4045,4046],{"class":3818,"line":1571},[2637,4047,4048],{},"        return ValidationResult(passed=False, reason=\"PII detected\")\n",[2637,4050,4051],{"class":3818,"line":3898},[2637,4052,3874],{"emptyLinePlaceholder":1568},[2637,4054,4055],{"class":3818,"line":3903},[2637,4056,4057],{},"        # Option 2: Redaktieren (besser für UX)\n",[2637,4059,4061],{"class":3818,"line":4060},17,[2637,4062,4063],{},"        # sanitized = anonymize(input, results)\n",[2637,4065,4067],{"class":3818,"line":4066},18,[2637,4068,4069],{},"        # return ValidationResult(passed=True, sanitized=sanitized)\n",[3908,4071,4073],{"id":4072},"_13-injection-pattern-detection","1.3 Injection-Pattern-Detection",[10,4075,4076],{},"Prompt Injection ist der SQL-Injection-Moment für AI. Angreifer versuchen, Ihre System-Instruktionen zu überschreiben. Bekannte Patterns können Sie blocken – aber verlassen Sie sich nicht allein darauf.",[1787,4078,4080],{"className":3811,"code":4079,"language":3813,"meta":1524,"style":1524},"INJECTION_PATTERNS = [\n    r\"ignoriere?\\s*(alle|vorherige|die)?\\s*anweisung\",\n    r\"vergiss\\s*(alles|deine|die)\",\n    r\"du\\s+bist\\s+(jetzt|ab\\s+jetzt)\",\n    r\"system\\s*prompt\",\n    r\"\u003C/?system>\",\n    r\"\\[INST\\]\",  # Llama-Format\n    r\"###\\s*(System|Instruction)\",\n]\n\ndef check_injection_patterns(self, input: str) -> ValidationResult:\n    for pattern in INJECTION_PATTERNS:\n        if re.search(pattern, input, re.IGNORECASE):\n            log_security_event(\"injection_attempt\", pattern)\n            return ValidationResult(\n                passed=False,\n                reason=\"Suspicious pattern detected\"\n            )\n    return ValidationResult(passed=True)\n",[1794,4081,4082,4087,4092,4097,4102,4107,4112,4117,4122,4127,4131,4136,4141,4146,4151,4156,4161,4166,4171],{"__ignoreMap":1524},[2637,4083,4084],{"class":3818,"line":3819},[2637,4085,4086],{},"INJECTION_PATTERNS = [\n",[2637,4088,4089],{"class":3818,"line":1525},[2637,4090,4091],{},"    r\"ignoriere?\\s*(alle|vorherige|die)?\\s*anweisung\",\n",[2637,4093,4094],{"class":3818,"line":1531},[2637,4095,4096],{},"    r\"vergiss\\s*(alles|deine|die)\",\n",[2637,4098,4099],{"class":3818,"line":3835},[2637,4100,4101],{},"    r\"du\\s+bist\\s+(jetzt|ab\\s+jetzt)\",\n",[2637,4103,4104],{"class":3818,"line":3841},[2637,4105,4106],{},"    r\"system\\s*prompt\",\n",[2637,4108,4109],{"class":3818,"line":3847},[2637,4110,4111],{},"    r\"\u003C/?system>\",\n",[2637,4113,4114],{"class":3818,"line":3853},[2637,4115,4116],{},"    r\"\\[INST\\]\",  # Llama-Format\n",[2637,4118,4119],{"class":3818,"line":3859},[2637,4120,4121],{},"    r\"###\\s*(System|Instruction)\",\n",[2637,4123,4124],{"class":3818,"line":3865},[2637,4125,4126],{},"]\n",[2637,4128,4129],{"class":3818,"line":3871},[2637,4130,3874],{"emptyLinePlaceholder":1568},[2637,4132,4133],{"class":3818,"line":3877},[2637,4134,4135],{},"def check_injection_patterns(self, input: str) -> ValidationResult:\n",[2637,4137,4138],{"class":3818,"line":2489},[2637,4139,4140],{},"    for pattern in INJECTION_PATTERNS:\n",[2637,4142,4143],{"class":3818,"line":2487},[2637,4144,4145],{},"        if re.search(pattern, input, re.IGNORECASE):\n",[2637,4147,4148],{"class":3818,"line":1571},[2637,4149,4150],{},"            log_security_event(\"injection_attempt\", pattern)\n",[2637,4152,4153],{"class":3818,"line":3898},[2637,4154,4155],{},"            return ValidationResult(\n",[2637,4157,4158],{"class":3818,"line":3903},[2637,4159,4160],{},"                passed=False,\n",[2637,4162,4163],{"class":3818,"line":4060},[2637,4164,4165],{},"                reason=\"Suspicious pattern detected\"\n",[2637,4167,4168],{"class":3818,"line":4066},[2637,4169,4170],{},"            )\n",[2637,4172,4174],{"class":3818,"line":4173},19,[2637,4175,3968],{},[3792,4177],{},[222,4179,4181],{"id":4180},"layer-2-authentication-authorization","Layer 2: Authentication & Authorization",[10,4183,4184,4186],{},[17,4185,3802],{}," Ohne Authentication wissen Sie nicht, wer Ihre API nutzt. Ohne Authorization kann jeder alles – auch GPT-4o mit 128k Context. Bei aktuellen Preisen (Stand Dezember 2025: $2,50/1M Input, $10/1M Output) summiert sich das schnell auf dreistellige Beträge pro Stunde.",[3908,4188,4190],{"id":4189},"_21-api-key-validierung","2.1 API-Key-Validierung",[10,4192,4193],{},"Klingt banal, wird aber oft falsch gemacht. Keys gehören nicht in Code oder Config-Files, sondern in einen Secrets Manager.",[1787,4195,4197],{"className":3811,"code":4196,"language":3813,"meta":1524,"style":1524},"from fastapi import Depends, HTTPException, Security\nfrom fastapi.security import APIKeyHeader\n\napi_key_header = APIKeyHeader(name=\"X-API-Key\")\n\nasync def verify_api_key(api_key: str = Security(api_key_header)):\n    # Gegen Secrets Manager validieren, nicht Hardcoded!\n    valid_keys = await secrets_manager.get_valid_keys()\n\n    if api_key not in valid_keys:\n        log_security_event(\"invalid_api_key\", api_key[:8])\n        raise HTTPException(status_code=401, detail=\"Invalid API key\")\n\n    return await get_key_metadata(api_key)\n",[1794,4198,4199,4204,4209,4213,4218,4222,4227,4232,4237,4241,4246,4251,4256,4260],{"__ignoreMap":1524},[2637,4200,4201],{"class":3818,"line":3819},[2637,4202,4203],{},"from fastapi import Depends, HTTPException, Security\n",[2637,4205,4206],{"class":3818,"line":1525},[2637,4207,4208],{},"from fastapi.security import APIKeyHeader\n",[2637,4210,4211],{"class":3818,"line":1531},[2637,4212,3874],{"emptyLinePlaceholder":1568},[2637,4214,4215],{"class":3818,"line":3835},[2637,4216,4217],{},"api_key_header = APIKeyHeader(name=\"X-API-Key\")\n",[2637,4219,4220],{"class":3818,"line":3841},[2637,4221,3874],{"emptyLinePlaceholder":1568},[2637,4223,4224],{"class":3818,"line":3847},[2637,4225,4226],{},"async def verify_api_key(api_key: str = Security(api_key_header)):\n",[2637,4228,4229],{"class":3818,"line":3853},[2637,4230,4231],{},"    # Gegen Secrets Manager validieren, nicht Hardcoded!\n",[2637,4233,4234],{"class":3818,"line":3859},[2637,4235,4236],{},"    valid_keys = await secrets_manager.get_valid_keys()\n",[2637,4238,4239],{"class":3818,"line":3865},[2637,4240,3874],{"emptyLinePlaceholder":1568},[2637,4242,4243],{"class":3818,"line":3871},[2637,4244,4245],{},"    if api_key not in valid_keys:\n",[2637,4247,4248],{"class":3818,"line":3877},[2637,4249,4250],{},"        log_security_event(\"invalid_api_key\", api_key[:8])\n",[2637,4252,4253],{"class":3818,"line":2489},[2637,4254,4255],{},"        raise HTTPException(status_code=401, detail=\"Invalid API key\")\n",[2637,4257,4258],{"class":3818,"line":2487},[2637,4259,3874],{"emptyLinePlaceholder":1568},[2637,4261,4262],{"class":3818,"line":1571},[2637,4263,4264],{},"    return await get_key_metadata(api_key)\n",[3908,4266,4268],{"id":4267},"_22-role-based-access","2.2 Role-Based Access",[10,4270,4271],{},"Nicht jeder Nutzer braucht Zugang zu jedem Modell. Ein Praktikant braucht kein GPT-4o, eine interne App kein Fine-Tuning. Definieren Sie Rollen mit klaren Berechtigungen.",[1787,4273,4275],{"className":3811,"code":4274,"language":3813,"meta":1524,"style":1524},"class Permission(Enum):\n    GPT4O = \"gpt4o\"\n    GPT4O_MINI = \"gpt4o_mini\"\n    EMBEDDING = \"embedding\"\n    FINE_TUNE = \"fine_tune\"\n    AGENT = \"agent\"\n\nROLE_PERMISSIONS = {\n    \"basic\": [Permission.GPT4O_MINI, Permission.EMBEDDING],\n    \"advanced\": [Permission.GPT4O_MINI, Permission.GPT4O, Permission.EMBEDDING],\n    \"admin\": [Permission.GPT4O_MINI, Permission.GPT4O, Permission.EMBEDDING,\n              Permission.FINE_TUNE, Permission.AGENT],\n}\n\nasync def check_permission(\n    key_meta: KeyMetadata,\n    required: Permission\n) -> bool:\n    user_permissions = ROLE_PERMISSIONS.get(key_meta.role, [])\n    return required in user_permissions\n",[1794,4276,4277,4282,4287,4292,4297,4302,4307,4311,4316,4321,4326,4331,4336,4341,4345,4350,4355,4360,4365,4370],{"__ignoreMap":1524},[2637,4278,4279],{"class":3818,"line":3819},[2637,4280,4281],{},"class Permission(Enum):\n",[2637,4283,4284],{"class":3818,"line":1525},[2637,4285,4286],{},"    GPT4O = \"gpt4o\"\n",[2637,4288,4289],{"class":3818,"line":1531},[2637,4290,4291],{},"    GPT4O_MINI = \"gpt4o_mini\"\n",[2637,4293,4294],{"class":3818,"line":3835},[2637,4295,4296],{},"    EMBEDDING = \"embedding\"\n",[2637,4298,4299],{"class":3818,"line":3841},[2637,4300,4301],{},"    FINE_TUNE = \"fine_tune\"\n",[2637,4303,4304],{"class":3818,"line":3847},[2637,4305,4306],{},"    AGENT = \"agent\"\n",[2637,4308,4309],{"class":3818,"line":3853},[2637,4310,3874],{"emptyLinePlaceholder":1568},[2637,4312,4313],{"class":3818,"line":3859},[2637,4314,4315],{},"ROLE_PERMISSIONS = {\n",[2637,4317,4318],{"class":3818,"line":3865},[2637,4319,4320],{},"    \"basic\": [Permission.GPT4O_MINI, Permission.EMBEDDING],\n",[2637,4322,4323],{"class":3818,"line":3871},[2637,4324,4325],{},"    \"advanced\": [Permission.GPT4O_MINI, Permission.GPT4O, Permission.EMBEDDING],\n",[2637,4327,4328],{"class":3818,"line":3877},[2637,4329,4330],{},"    \"admin\": [Permission.GPT4O_MINI, Permission.GPT4O, Permission.EMBEDDING,\n",[2637,4332,4333],{"class":3818,"line":2489},[2637,4334,4335],{},"              Permission.FINE_TUNE, Permission.AGENT],\n",[2637,4337,4338],{"class":3818,"line":2487},[2637,4339,4340],{},"}\n",[2637,4342,4343],{"class":3818,"line":1571},[2637,4344,3874],{"emptyLinePlaceholder":1568},[2637,4346,4347],{"class":3818,"line":3898},[2637,4348,4349],{},"async def check_permission(\n",[2637,4351,4352],{"class":3818,"line":3903},[2637,4353,4354],{},"    key_meta: KeyMetadata,\n",[2637,4356,4357],{"class":3818,"line":4060},[2637,4358,4359],{},"    required: Permission\n",[2637,4361,4362],{"class":3818,"line":4066},[2637,4363,4364],{},") -> bool:\n",[2637,4366,4367],{"class":3818,"line":4173},[2637,4368,4369],{},"    user_permissions = ROLE_PERMISSIONS.get(key_meta.role, [])\n",[2637,4371,4373],{"class":3818,"line":4372},20,[2637,4374,4375],{},"    return required in user_permissions\n",[3908,4377,4379],{"id":4378},"_23-least-privilege-für-api-keys","2.3 Least Privilege für API-Keys",[10,4381,4382],{},"Jeder Key sollte nur die Rechte haben, die er braucht. Scope, Modelle, Rate-Limits, Budget, IP-Ranges, Ablaufdatum – alles definiert.",[1787,4384,4388],{"className":4385,"code":4386,"language":4387,"meta":1524,"style":1524},"language-yaml shiki shiki-themes github-dark github-dark github-dark","# Key-Erstellung mit minimalem Scope\napi_keys:\n  - id: key_prod_chat_001\n    role: basic\n    allowed_models: [\"gpt-4o-mini\"]\n    rate_limit: 100/minute\n    budget: 50/month\n    allowed_ips: [\"10.0.0.0/8\"]\n    expires: 2026-06-01\n","yaml",[1794,4389,4390,4396,4406,4421,4431,4444,4454,4464,4476],{"__ignoreMap":1524},[2637,4391,4392],{"class":3818,"line":3819},[2637,4393,4395],{"class":4394},"sCsY4","# Key-Erstellung mit minimalem Scope\n",[2637,4397,4398,4402],{"class":3818,"line":1525},[2637,4399,4401],{"class":4400},"sQwZJ","api_keys",[2637,4403,4405],{"class":4404},"s9RsZ",":\n",[2637,4407,4408,4411,4414,4417],{"class":3818,"line":1531},[2637,4409,4410],{"class":4404},"  - ",[2637,4412,4413],{"class":4400},"id",[2637,4415,4416],{"class":4404},": ",[2637,4418,4420],{"class":4419},"sWBnw","key_prod_chat_001\n",[2637,4422,4423,4426,4428],{"class":3818,"line":3835},[2637,4424,4425],{"class":4400},"    role",[2637,4427,4416],{"class":4404},[2637,4429,4430],{"class":4419},"basic\n",[2637,4432,4433,4436,4439,4442],{"class":3818,"line":3841},[2637,4434,4435],{"class":4400},"    allowed_models",[2637,4437,4438],{"class":4404},": [",[2637,4440,4441],{"class":4419},"\"gpt-4o-mini\"",[2637,4443,4126],{"class":4404},[2637,4445,4446,4449,4451],{"class":3818,"line":3847},[2637,4447,4448],{"class":4400},"    rate_limit",[2637,4450,4416],{"class":4404},[2637,4452,4453],{"class":4419},"100/minute\n",[2637,4455,4456,4459,4461],{"class":3818,"line":3853},[2637,4457,4458],{"class":4400},"    budget",[2637,4460,4416],{"class":4404},[2637,4462,4463],{"class":4419},"50/month\n",[2637,4465,4466,4469,4471,4474],{"class":3818,"line":3859},[2637,4467,4468],{"class":4400},"    allowed_ips",[2637,4470,4438],{"class":4404},[2637,4472,4473],{"class":4419},"\"10.0.0.0/8\"",[2637,4475,4126],{"class":4404},[2637,4477,4478,4481,4483],{"class":3818,"line":3865},[2637,4479,4480],{"class":4400},"    expires",[2637,4482,4416],{"class":4404},[2637,4484,4486],{"class":4485},"sO5fp","2026-06-01\n",[10,4488,4489,4490],{},"Mehr zum Thema API-Key-Management: ",[267,4491,4493],{"href":4492},"/blog/nhi-management","Non-Human Identity Management",[3792,4495],{},[222,4497,4499],{"id":4498},"layer-3-rate-limiting","Layer 3: Rate Limiting",[10,4501,4502,4504],{},[17,4503,3802],{}," LLM-APIs sind teuer. Ein kompromittierter Key ohne Rate-Limit kann in Stunden fünfstellige Kosten verursachen. Außerdem schützt Rate-Limiting vor DoS und macht Credential-Stuffing unattraktiv.",[3908,4506,4508],{"id":4507},"_31-multi-dimensional-rate-limiting","3.1 Multi-Dimensional Rate Limiting",[10,4510,4511],{},"Bei klassischen APIs reicht oft \"60 Requests pro Minute\". Bei LLMs ist das zu simpel – ein Request mit 100k Tokens kostet 100x mehr als einer mit 1k Tokens. Sie brauchen Token-basiertes Limiting.",[1787,4513,4515],{"className":3811,"code":4514,"language":3813,"meta":1524,"style":1524},"from slowapi import Limiter\nfrom slowapi.util import get_remote_address\n\nlimiter = Limiter(key_func=get_remote_address)\n\n# Request-basiert (Basis-Schutz)\n@app.post(\"/chat\")\n@limiter.limit(\"60/minute\")\nasync def chat(request: Request):\n    ...\n\n# Token-basiert (kritisch bei LLMs!)\nclass TokenRateLimiter:\n    def __init__(self, max_tokens_per_minute: int):\n        self.max_tokens = max_tokens_per_minute\n        self.windows = {}  # user_id -> deque of (timestamp, tokens)\n\n    async def check(self, user_id: str, estimated_tokens: int) -> bool:\n        window = self.windows.get(user_id, deque())\n\n        # Alte Einträge entfernen (> 1 Minute)\n        now = time.time()\n        while window and window[0][0] \u003C now - 60:\n            window.popleft()\n\n        # Aktuelle Summe\n        current_tokens = sum(t for _, t in window)\n\n        if current_tokens + estimated_tokens > self.max_tokens:\n            return False\n\n        window.append((now, estimated_tokens))\n        self.windows[user_id] = window\n        return True\n",[1794,4516,4517,4522,4527,4531,4536,4540,4545,4550,4555,4560,4565,4569,4574,4579,4584,4589,4594,4598,4603,4608,4612,4618,4624,4629,4635,4640,4646,4652,4657,4663,4669,4674,4680,4686],{"__ignoreMap":1524},[2637,4518,4519],{"class":3818,"line":3819},[2637,4520,4521],{},"from slowapi import Limiter\n",[2637,4523,4524],{"class":3818,"line":1525},[2637,4525,4526],{},"from slowapi.util import get_remote_address\n",[2637,4528,4529],{"class":3818,"line":1531},[2637,4530,3874],{"emptyLinePlaceholder":1568},[2637,4532,4533],{"class":3818,"line":3835},[2637,4534,4535],{},"limiter = Limiter(key_func=get_remote_address)\n",[2637,4537,4538],{"class":3818,"line":3841},[2637,4539,3874],{"emptyLinePlaceholder":1568},[2637,4541,4542],{"class":3818,"line":3847},[2637,4543,4544],{},"# Request-basiert (Basis-Schutz)\n",[2637,4546,4547],{"class":3818,"line":3853},[2637,4548,4549],{},"@app.post(\"/chat\")\n",[2637,4551,4552],{"class":3818,"line":3859},[2637,4553,4554],{},"@limiter.limit(\"60/minute\")\n",[2637,4556,4557],{"class":3818,"line":3865},[2637,4558,4559],{},"async def chat(request: Request):\n",[2637,4561,4562],{"class":3818,"line":3871},[2637,4563,4564],{},"    ...\n",[2637,4566,4567],{"class":3818,"line":3877},[2637,4568,3874],{"emptyLinePlaceholder":1568},[2637,4570,4571],{"class":3818,"line":2489},[2637,4572,4573],{},"# Token-basiert (kritisch bei LLMs!)\n",[2637,4575,4576],{"class":3818,"line":2487},[2637,4577,4578],{},"class TokenRateLimiter:\n",[2637,4580,4581],{"class":3818,"line":1571},[2637,4582,4583],{},"    def __init__(self, max_tokens_per_minute: int):\n",[2637,4585,4586],{"class":3818,"line":3898},[2637,4587,4588],{},"        self.max_tokens = max_tokens_per_minute\n",[2637,4590,4591],{"class":3818,"line":3903},[2637,4592,4593],{},"        self.windows = {}  # user_id -> deque of (timestamp, tokens)\n",[2637,4595,4596],{"class":3818,"line":4060},[2637,4597,3874],{"emptyLinePlaceholder":1568},[2637,4599,4600],{"class":3818,"line":4066},[2637,4601,4602],{},"    async def check(self, user_id: str, estimated_tokens: int) -> bool:\n",[2637,4604,4605],{"class":3818,"line":4173},[2637,4606,4607],{},"        window = self.windows.get(user_id, deque())\n",[2637,4609,4610],{"class":3818,"line":4372},[2637,4611,3874],{"emptyLinePlaceholder":1568},[2637,4613,4615],{"class":3818,"line":4614},21,[2637,4616,4617],{},"        # Alte Einträge entfernen (> 1 Minute)\n",[2637,4619,4621],{"class":3818,"line":4620},22,[2637,4622,4623],{},"        now = time.time()\n",[2637,4625,4626],{"class":3818,"line":3577},[2637,4627,4628],{},"        while window and window[0][0] \u003C now - 60:\n",[2637,4630,4632],{"class":3818,"line":4631},24,[2637,4633,4634],{},"            window.popleft()\n",[2637,4636,4638],{"class":3818,"line":4637},25,[2637,4639,3874],{"emptyLinePlaceholder":1568},[2637,4641,4643],{"class":3818,"line":4642},26,[2637,4644,4645],{},"        # Aktuelle Summe\n",[2637,4647,4649],{"class":3818,"line":4648},27,[2637,4650,4651],{},"        current_tokens = sum(t for _, t in window)\n",[2637,4653,4655],{"class":3818,"line":4654},28,[2637,4656,3874],{"emptyLinePlaceholder":1568},[2637,4658,4660],{"class":3818,"line":4659},29,[2637,4661,4662],{},"        if current_tokens + estimated_tokens > self.max_tokens:\n",[2637,4664,4666],{"class":3818,"line":4665},30,[2637,4667,4668],{},"            return False\n",[2637,4670,4672],{"class":3818,"line":4671},31,[2637,4673,3874],{"emptyLinePlaceholder":1568},[2637,4675,4677],{"class":3818,"line":4676},32,[2637,4678,4679],{},"        window.append((now, estimated_tokens))\n",[2637,4681,4683],{"class":3818,"line":4682},33,[2637,4684,4685],{},"        self.windows[user_id] = window\n",[2637,4687,4689],{"class":3818,"line":4688},34,[2637,4690,4691],{},"        return True\n",[3908,4693,4695],{"id":4694},"_32-budget-limits","3.2 Budget-Limits",[10,4697,4698],{},"Rate-Limits schützen pro Minute, Budgets pro Monat. Definieren Sie für jeden Key oder User ein monatliches Budget und alertieren Sie frühzeitig.",[1787,4700,4702],{"className":3811,"code":4701,"language":3813,"meta":1524,"style":1524},"class BudgetEnforcer:\n    async def check_budget(self, user_id: str, estimated_cost: float) -> bool:\n        user = await get_user(user_id)\n        current_spend = await get_current_month_spend(user_id)\n\n        if current_spend + estimated_cost > user.monthly_budget:\n            await notify_budget_exceeded(user_id)\n            return False\n\n        return True\n\n    async def record_spend(self, user_id: str, actual_cost: float):\n        await increment_spend(user_id, actual_cost)\n\n        # Alert bei 80%, 90%, 100%\n        current = await get_current_month_spend(user_id)\n        user = await get_user(user_id)\n        percentage = current / user.monthly_budget\n\n        if percentage >= 1.0:\n            await alert_budget_exceeded(user_id)\n        elif percentage >= 0.9:\n            await alert_budget_warning(user_id, 90)\n        elif percentage >= 0.8:\n            await alert_budget_warning(user_id, 80)\n",[1794,4703,4704,4709,4714,4719,4724,4728,4733,4738,4742,4746,4750,4754,4759,4764,4768,4773,4778,4782,4787,4791,4796,4801,4806,4811,4816],{"__ignoreMap":1524},[2637,4705,4706],{"class":3818,"line":3819},[2637,4707,4708],{},"class BudgetEnforcer:\n",[2637,4710,4711],{"class":3818,"line":1525},[2637,4712,4713],{},"    async def check_budget(self, user_id: str, estimated_cost: float) -> bool:\n",[2637,4715,4716],{"class":3818,"line":1531},[2637,4717,4718],{},"        user = await get_user(user_id)\n",[2637,4720,4721],{"class":3818,"line":3835},[2637,4722,4723],{},"        current_spend = await get_current_month_spend(user_id)\n",[2637,4725,4726],{"class":3818,"line":3841},[2637,4727,3874],{"emptyLinePlaceholder":1568},[2637,4729,4730],{"class":3818,"line":3847},[2637,4731,4732],{},"        if current_spend + estimated_cost > user.monthly_budget:\n",[2637,4734,4735],{"class":3818,"line":3853},[2637,4736,4737],{},"            await notify_budget_exceeded(user_id)\n",[2637,4739,4740],{"class":3818,"line":3859},[2637,4741,4668],{},[2637,4743,4744],{"class":3818,"line":3865},[2637,4745,3874],{"emptyLinePlaceholder":1568},[2637,4747,4748],{"class":3818,"line":3871},[2637,4749,4691],{},[2637,4751,4752],{"class":3818,"line":3877},[2637,4753,3874],{"emptyLinePlaceholder":1568},[2637,4755,4756],{"class":3818,"line":2489},[2637,4757,4758],{},"    async def record_spend(self, user_id: str, actual_cost: float):\n",[2637,4760,4761],{"class":3818,"line":2487},[2637,4762,4763],{},"        await increment_spend(user_id, actual_cost)\n",[2637,4765,4766],{"class":3818,"line":1571},[2637,4767,3874],{"emptyLinePlaceholder":1568},[2637,4769,4770],{"class":3818,"line":3898},[2637,4771,4772],{},"        # Alert bei 80%, 90%, 100%\n",[2637,4774,4775],{"class":3818,"line":3903},[2637,4776,4777],{},"        current = await get_current_month_spend(user_id)\n",[2637,4779,4780],{"class":3818,"line":4060},[2637,4781,4718],{},[2637,4783,4784],{"class":3818,"line":4066},[2637,4785,4786],{},"        percentage = current / user.monthly_budget\n",[2637,4788,4789],{"class":3818,"line":4173},[2637,4790,3874],{"emptyLinePlaceholder":1568},[2637,4792,4793],{"class":3818,"line":4372},[2637,4794,4795],{},"        if percentage >= 1.0:\n",[2637,4797,4798],{"class":3818,"line":4614},[2637,4799,4800],{},"            await alert_budget_exceeded(user_id)\n",[2637,4802,4803],{"class":3818,"line":4620},[2637,4804,4805],{},"        elif percentage >= 0.9:\n",[2637,4807,4808],{"class":3818,"line":3577},[2637,4809,4810],{},"            await alert_budget_warning(user_id, 90)\n",[2637,4812,4813],{"class":3818,"line":4631},[2637,4814,4815],{},"        elif percentage >= 0.8:\n",[2637,4817,4818],{"class":3818,"line":4637},[2637,4819,4820],{},"            await alert_budget_warning(user_id, 80)\n",[3792,4822],{},[222,4824,4826],{"id":4825},"layer-4-output-filtering","Layer 4: Output Filtering",[10,4828,4829,4831],{},[17,4830,3802],{}," Input-Validation allein reicht nicht. LLMs können auch bei \"sauberen\" Inputs problematische Outputs generieren – PII aus dem Training, System-Prompt-Leaks oder Policy-Verletzungen.",[3908,4833,4835],{"id":4834},"_41-pii-redaktion-im-output","4.1 PII-Redaktion im Output",[10,4837,4838],{},"Das LLM könnte persönliche Daten aus seinem Training oder aus dem Kontext in der Antwort wiedergeben. Scannen Sie Outputs genauso wie Inputs.",[1787,4840,4842],{"className":3811,"code":4841,"language":3813,"meta":1524,"style":1524},"from presidio_anonymizer import AnonymizerEngine\n\ndef filter_pii_in_output(response: str) -> str:\n    analyzer = AnalyzerEngine()\n    anonymizer = AnonymizerEngine()\n\n    results = analyzer.analyze(text=response, language=\"de\")\n\n    if results:\n        log_security_event(\"pii_in_output\", len(results))\n        anonymized = anonymizer.anonymize(\n            text=response,\n            analyzer_results=results\n        )\n        return anonymized.text\n\n    return response\n",[1794,4843,4844,4849,4853,4858,4863,4868,4872,4877,4881,4885,4890,4895,4900,4905,4909,4914,4918],{"__ignoreMap":1524},[2637,4845,4846],{"class":3818,"line":3819},[2637,4847,4848],{},"from presidio_anonymizer import AnonymizerEngine\n",[2637,4850,4851],{"class":3818,"line":1525},[2637,4852,3874],{"emptyLinePlaceholder":1568},[2637,4854,4855],{"class":3818,"line":1531},[2637,4856,4857],{},"def filter_pii_in_output(response: str) -> str:\n",[2637,4859,4860],{"class":3818,"line":3835},[2637,4861,4862],{},"    analyzer = AnalyzerEngine()\n",[2637,4864,4865],{"class":3818,"line":3841},[2637,4866,4867],{},"    anonymizer = AnonymizerEngine()\n",[2637,4869,4870],{"class":3818,"line":3847},[2637,4871,3874],{"emptyLinePlaceholder":1568},[2637,4873,4874],{"class":3818,"line":3853},[2637,4875,4876],{},"    results = analyzer.analyze(text=response, language=\"de\")\n",[2637,4878,4879],{"class":3818,"line":3859},[2637,4880,3874],{"emptyLinePlaceholder":1568},[2637,4882,4883],{"class":3818,"line":3865},[2637,4884,4038],{},[2637,4886,4887],{"class":3818,"line":3871},[2637,4888,4889],{},"        log_security_event(\"pii_in_output\", len(results))\n",[2637,4891,4892],{"class":3818,"line":3877},[2637,4893,4894],{},"        anonymized = anonymizer.anonymize(\n",[2637,4896,4897],{"class":3818,"line":2489},[2637,4898,4899],{},"            text=response,\n",[2637,4901,4902],{"class":3818,"line":2487},[2637,4903,4904],{},"            analyzer_results=results\n",[2637,4906,4907],{"class":3818,"line":1571},[2637,4908,3963],{},[2637,4910,4911],{"class":3818,"line":3898},[2637,4912,4913],{},"        return anonymized.text\n",[2637,4915,4916],{"class":3818,"line":3903},[2637,4917,3874],{"emptyLinePlaceholder":1568},[2637,4919,4920],{"class":3818,"line":4060},[2637,4921,4922],{},"    return response\n",[3908,4924,4926],{"id":4925},"_42-system-prompt-leakage-detection","4.2 System Prompt Leakage Detection",[10,4928,4929],{},"Ein häufiges Angriffsziel: Nutzer versuchen, den System-Prompt zu extrahieren. Wenn das LLM beginnt, seine Instruktionen preiszugeben, sollten Sie die Response blocken.",[1787,4931,4933],{"className":3811,"code":4932,"language":3813,"meta":1524,"style":1524},"SYSTEM_PROMPT_INDICATORS = [\n    \"meine anweisungen sind\",\n    \"mir wurde gesagt\",\n    \"mein system prompt\",\n    \"ich wurde instruiert\",\n    \"meine richtlinien\",\n]\n\ndef check_system_prompt_leakage(response: str) -> bool:\n    lower_response = response.lower()\n    for indicator in SYSTEM_PROMPT_INDICATORS:\n        if indicator in lower_response:\n            log_security_event(\"potential_system_prompt_leak\", indicator)\n            return True\n    return False\n\ndef filter_output(response: str) -> str:\n    if check_system_prompt_leakage(response):\n        return \"Ich kann diese Anfrage nicht beantworten.\"\n\n    return filter_pii_in_output(response)\n",[1794,4934,4935,4940,4945,4950,4955,4960,4965,4969,4973,4978,4983,4988,4993,4998,5003,5008,5012,5017,5022,5027,5031],{"__ignoreMap":1524},[2637,4936,4937],{"class":3818,"line":3819},[2637,4938,4939],{},"SYSTEM_PROMPT_INDICATORS = [\n",[2637,4941,4942],{"class":3818,"line":1525},[2637,4943,4944],{},"    \"meine anweisungen sind\",\n",[2637,4946,4947],{"class":3818,"line":1531},[2637,4948,4949],{},"    \"mir wurde gesagt\",\n",[2637,4951,4952],{"class":3818,"line":3835},[2637,4953,4954],{},"    \"mein system prompt\",\n",[2637,4956,4957],{"class":3818,"line":3841},[2637,4958,4959],{},"    \"ich wurde instruiert\",\n",[2637,4961,4962],{"class":3818,"line":3847},[2637,4963,4964],{},"    \"meine richtlinien\",\n",[2637,4966,4967],{"class":3818,"line":3853},[2637,4968,4126],{},[2637,4970,4971],{"class":3818,"line":3859},[2637,4972,3874],{"emptyLinePlaceholder":1568},[2637,4974,4975],{"class":3818,"line":3865},[2637,4976,4977],{},"def check_system_prompt_leakage(response: str) -> bool:\n",[2637,4979,4980],{"class":3818,"line":3871},[2637,4981,4982],{},"    lower_response = response.lower()\n",[2637,4984,4985],{"class":3818,"line":3877},[2637,4986,4987],{},"    for indicator in SYSTEM_PROMPT_INDICATORS:\n",[2637,4989,4990],{"class":3818,"line":2489},[2637,4991,4992],{},"        if indicator in lower_response:\n",[2637,4994,4995],{"class":3818,"line":2487},[2637,4996,4997],{},"            log_security_event(\"potential_system_prompt_leak\", indicator)\n",[2637,4999,5000],{"class":3818,"line":1571},[2637,5001,5002],{},"            return True\n",[2637,5004,5005],{"class":3818,"line":3898},[2637,5006,5007],{},"    return False\n",[2637,5009,5010],{"class":3818,"line":3903},[2637,5011,3874],{"emptyLinePlaceholder":1568},[2637,5013,5014],{"class":3818,"line":4060},[2637,5015,5016],{},"def filter_output(response: str) -> str:\n",[2637,5018,5019],{"class":3818,"line":4066},[2637,5020,5021],{},"    if check_system_prompt_leakage(response):\n",[2637,5023,5024],{"class":3818,"line":4173},[2637,5025,5026],{},"        return \"Ich kann diese Anfrage nicht beantworten.\"\n",[2637,5028,5029],{"class":3818,"line":4372},[2637,5030,3874],{"emptyLinePlaceholder":1568},[2637,5032,5033],{"class":3818,"line":4614},[2637,5034,5035],{},"    return filter_pii_in_output(response)\n",[3908,5037,5039],{"id":5038},"_43-content-policy-enforcement","4.3 Content Policy Enforcement",[10,5041,5042],{},"Für Hate Speech, Gewalt und andere Policy-Verletzungen bietet OpenAI eine kostenlose Moderation-API – jetzt auch multimodal (Text + Bilder). Nutzen Sie sie – auch wenn Sie andere Modelle verwenden.",[1787,5044,5046],{"className":3811,"code":5045,"language":3813,"meta":1524,"style":1524},"async def check_content_policy(response: str) -> ContentPolicyResult:\n    # Text-Moderation (kostenlos, basiert auf GPT-4o)\n    moderation = await openai.moderations.create(input=response)\n\n    if moderation.results[0].flagged:\n        categories = moderation.results[0].categories\n        log_security_event(\"content_policy_violation\", categories)\n        return ContentPolicyResult(\n            passed=False,\n            categories=categories\n        )\n\n    return ContentPolicyResult(passed=True)\n\n# Neu 2025: Auch Bilder können moderiert werden\nasync def check_image_policy(image_url: str) -> ContentPolicyResult:\n    moderation = await openai.moderations.create(\n        model=\"omni-moderation-latest\",\n        input=[{\"type\": \"image_url\", \"image_url\": {\"url\": image_url}}]\n    )\n    return ContentPolicyResult(passed=not moderation.results[0].flagged)\n",[1794,5047,5048,5053,5058,5063,5067,5072,5077,5082,5087,5091,5096,5100,5104,5109,5113,5118,5123,5128,5133,5138,5142],{"__ignoreMap":1524},[2637,5049,5050],{"class":3818,"line":3819},[2637,5051,5052],{},"async def check_content_policy(response: str) -> ContentPolicyResult:\n",[2637,5054,5055],{"class":3818,"line":1525},[2637,5056,5057],{},"    # Text-Moderation (kostenlos, basiert auf GPT-4o)\n",[2637,5059,5060],{"class":3818,"line":1531},[2637,5061,5062],{},"    moderation = await openai.moderations.create(input=response)\n",[2637,5064,5065],{"class":3818,"line":3835},[2637,5066,3874],{"emptyLinePlaceholder":1568},[2637,5068,5069],{"class":3818,"line":3841},[2637,5070,5071],{},"    if moderation.results[0].flagged:\n",[2637,5073,5074],{"class":3818,"line":3847},[2637,5075,5076],{},"        categories = moderation.results[0].categories\n",[2637,5078,5079],{"class":3818,"line":3853},[2637,5080,5081],{},"        log_security_event(\"content_policy_violation\", categories)\n",[2637,5083,5084],{"class":3818,"line":3859},[2637,5085,5086],{},"        return ContentPolicyResult(\n",[2637,5088,5089],{"class":3818,"line":3865},[2637,5090,3953],{},[2637,5092,5093],{"class":3818,"line":3871},[2637,5094,5095],{},"            categories=categories\n",[2637,5097,5098],{"class":3818,"line":3877},[2637,5099,3963],{},[2637,5101,5102],{"class":3818,"line":2489},[2637,5103,3874],{"emptyLinePlaceholder":1568},[2637,5105,5106],{"class":3818,"line":2487},[2637,5107,5108],{},"    return ContentPolicyResult(passed=True)\n",[2637,5110,5111],{"class":3818,"line":1571},[2637,5112,3874],{"emptyLinePlaceholder":1568},[2637,5114,5115],{"class":3818,"line":3898},[2637,5116,5117],{},"# Neu 2025: Auch Bilder können moderiert werden\n",[2637,5119,5120],{"class":3818,"line":3903},[2637,5121,5122],{},"async def check_image_policy(image_url: str) -> ContentPolicyResult:\n",[2637,5124,5125],{"class":3818,"line":4060},[2637,5126,5127],{},"    moderation = await openai.moderations.create(\n",[2637,5129,5130],{"class":3818,"line":4066},[2637,5131,5132],{},"        model=\"omni-moderation-latest\",\n",[2637,5134,5135],{"class":3818,"line":4173},[2637,5136,5137],{},"        input=[{\"type\": \"image_url\", \"image_url\": {\"url\": image_url}}]\n",[2637,5139,5140],{"class":3818,"line":4372},[2637,5141,4029],{},[2637,5143,5144],{"class":3818,"line":4614},[2637,5145,5146],{},"    return ContentPolicyResult(passed=not moderation.results[0].flagged)\n",[3792,5148],{},[222,5150,5152],{"id":5151},"layer-5-monitoring-alerting","Layer 5: Monitoring & Alerting",[10,5154,5155,5157],{},[17,5156,3802],{}," Die anderen Layer sind präventiv. Monitoring ist detektiv – es hilft Ihnen, Angriffe zu erkennen, die durch die anderen Layer geschlüpft sind, und gibt Ihnen die Daten für Forensik und Compliance.",[3908,5159,5161],{"id":5160},"_51-was-sie-loggen-sollten","5.1 Was Sie loggen sollten",[10,5163,5164],{},"Nicht den vollen Prompt – das wäre ein Datenschutzproblem. Aber genug Metadaten, um Anomalien zu erkennen und Incidents zu untersuchen.",[1787,5166,5168],{"className":3811,"code":5167,"language":3813,"meta":1524,"style":1524},"@dataclass\nclass AIRequestLog:\n    timestamp: datetime\n    request_id: str\n    user_id: str\n    model: str\n    input_tokens: int\n    output_tokens: int\n    input_hash: str  # Nicht den vollen Input loggen!\n    latency_ms: float\n    status: str\n    cost: float\n    flagged: bool\n    flags: List[str]  # PII, injection_attempt, etc.\n\nasync def log_request(log: AIRequestLog):\n    await siem_client.send(log.to_dict())  # An SIEM senden\n    await billing_service.record(log)       # Für Billing\n    await analytics_service.record(log)     # Für Analytics\n",[1794,5169,5170,5175,5180,5185,5190,5195,5200,5205,5210,5215,5220,5225,5230,5235,5240,5244,5249,5254,5259],{"__ignoreMap":1524},[2637,5171,5172],{"class":3818,"line":3819},[2637,5173,5174],{},"@dataclass\n",[2637,5176,5177],{"class":3818,"line":1525},[2637,5178,5179],{},"class AIRequestLog:\n",[2637,5181,5182],{"class":3818,"line":1531},[2637,5183,5184],{},"    timestamp: datetime\n",[2637,5186,5187],{"class":3818,"line":3835},[2637,5188,5189],{},"    request_id: str\n",[2637,5191,5192],{"class":3818,"line":3841},[2637,5193,5194],{},"    user_id: str\n",[2637,5196,5197],{"class":3818,"line":3847},[2637,5198,5199],{},"    model: str\n",[2637,5201,5202],{"class":3818,"line":3853},[2637,5203,5204],{},"    input_tokens: int\n",[2637,5206,5207],{"class":3818,"line":3859},[2637,5208,5209],{},"    output_tokens: int\n",[2637,5211,5212],{"class":3818,"line":3865},[2637,5213,5214],{},"    input_hash: str  # Nicht den vollen Input loggen!\n",[2637,5216,5217],{"class":3818,"line":3871},[2637,5218,5219],{},"    latency_ms: float\n",[2637,5221,5222],{"class":3818,"line":3877},[2637,5223,5224],{},"    status: str\n",[2637,5226,5227],{"class":3818,"line":2489},[2637,5228,5229],{},"    cost: float\n",[2637,5231,5232],{"class":3818,"line":2487},[2637,5233,5234],{},"    flagged: bool\n",[2637,5236,5237],{"class":3818,"line":1571},[2637,5238,5239],{},"    flags: List[str]  # PII, injection_attempt, etc.\n",[2637,5241,5242],{"class":3818,"line":3898},[2637,5243,3874],{"emptyLinePlaceholder":1568},[2637,5245,5246],{"class":3818,"line":3903},[2637,5247,5248],{},"async def log_request(log: AIRequestLog):\n",[2637,5250,5251],{"class":3818,"line":4060},[2637,5252,5253],{},"    await siem_client.send(log.to_dict())  # An SIEM senden\n",[2637,5255,5256],{"class":3818,"line":4066},[2637,5257,5258],{},"    await billing_service.record(log)       # Für Billing\n",[2637,5260,5261],{"class":3818,"line":4173},[2637,5262,5263],{},"    await analytics_service.record(log)     # Für Analytics\n",[3908,5265,5267],{"id":5266},"_52-anomaly-detection","5.2 Anomaly Detection",[10,5269,5270],{},"Statische Regeln fangen bekannte Patterns. Anomaly Detection fängt unbekannte. Bauen Sie Baselines pro User auf und alertieren Sie bei Abweichungen.",[1787,5272,5274],{"className":3811,"code":5273,"language":3813,"meta":1524,"style":1524},"class AnomalyDetector:\n    def __init__(self):\n        self.baselines = {}  # user_id -> BaselineStats\n\n    async def check(self, user_id: str, request: AIRequest) -> List[Anomaly]:\n        anomalies = []\n        baseline = self.baselines.get(user_id)\n\n        if not baseline:\n            return []  # Erste Requests, noch keine Baseline\n\n        # Ungewöhnliche Zeit\n        if not baseline.is_typical_hour(request.timestamp.hour):\n            anomalies.append(Anomaly(\"unusual_time\", severity=\"medium\"))\n\n        # Ungewöhnliches Volume\n        if request.tokens > baseline.avg_tokens * 3:\n            anomalies.append(Anomaly(\"high_token_count\", severity=\"medium\"))\n\n        # Ungewöhnliches Model\n        if request.model not in baseline.typical_models:\n            anomalies.append(Anomaly(\"unusual_model\", severity=\"low\"))\n\n        # Ungewöhnliche IP\n        if request.ip not in baseline.known_ips:\n            anomalies.append(Anomaly(\"new_ip\", severity=\"high\"))\n\n        return anomalies\n",[1794,5275,5276,5281,5286,5291,5295,5300,5305,5310,5314,5319,5324,5328,5333,5338,5343,5347,5352,5357,5362,5366,5371,5376,5381,5385,5390,5395,5400,5404],{"__ignoreMap":1524},[2637,5277,5278],{"class":3818,"line":3819},[2637,5279,5280],{},"class AnomalyDetector:\n",[2637,5282,5283],{"class":3818,"line":1525},[2637,5284,5285],{},"    def __init__(self):\n",[2637,5287,5288],{"class":3818,"line":1531},[2637,5289,5290],{},"        self.baselines = {}  # user_id -> BaselineStats\n",[2637,5292,5293],{"class":3818,"line":3835},[2637,5294,3874],{"emptyLinePlaceholder":1568},[2637,5296,5297],{"class":3818,"line":3841},[2637,5298,5299],{},"    async def check(self, user_id: str, request: AIRequest) -> List[Anomaly]:\n",[2637,5301,5302],{"class":3818,"line":3847},[2637,5303,5304],{},"        anomalies = []\n",[2637,5306,5307],{"class":3818,"line":3853},[2637,5308,5309],{},"        baseline = self.baselines.get(user_id)\n",[2637,5311,5312],{"class":3818,"line":3859},[2637,5313,3874],{"emptyLinePlaceholder":1568},[2637,5315,5316],{"class":3818,"line":3865},[2637,5317,5318],{},"        if not baseline:\n",[2637,5320,5321],{"class":3818,"line":3871},[2637,5322,5323],{},"            return []  # Erste Requests, noch keine Baseline\n",[2637,5325,5326],{"class":3818,"line":3877},[2637,5327,3874],{"emptyLinePlaceholder":1568},[2637,5329,5330],{"class":3818,"line":2489},[2637,5331,5332],{},"        # Ungewöhnliche Zeit\n",[2637,5334,5335],{"class":3818,"line":2487},[2637,5336,5337],{},"        if not baseline.is_typical_hour(request.timestamp.hour):\n",[2637,5339,5340],{"class":3818,"line":1571},[2637,5341,5342],{},"            anomalies.append(Anomaly(\"unusual_time\", severity=\"medium\"))\n",[2637,5344,5345],{"class":3818,"line":3898},[2637,5346,3874],{"emptyLinePlaceholder":1568},[2637,5348,5349],{"class":3818,"line":3903},[2637,5350,5351],{},"        # Ungewöhnliches Volume\n",[2637,5353,5354],{"class":3818,"line":4060},[2637,5355,5356],{},"        if request.tokens > baseline.avg_tokens * 3:\n",[2637,5358,5359],{"class":3818,"line":4066},[2637,5360,5361],{},"            anomalies.append(Anomaly(\"high_token_count\", severity=\"medium\"))\n",[2637,5363,5364],{"class":3818,"line":4173},[2637,5365,3874],{"emptyLinePlaceholder":1568},[2637,5367,5368],{"class":3818,"line":4372},[2637,5369,5370],{},"        # Ungewöhnliches Model\n",[2637,5372,5373],{"class":3818,"line":4614},[2637,5374,5375],{},"        if request.model not in baseline.typical_models:\n",[2637,5377,5378],{"class":3818,"line":4620},[2637,5379,5380],{},"            anomalies.append(Anomaly(\"unusual_model\", severity=\"low\"))\n",[2637,5382,5383],{"class":3818,"line":3577},[2637,5384,3874],{"emptyLinePlaceholder":1568},[2637,5386,5387],{"class":3818,"line":4631},[2637,5388,5389],{},"        # Ungewöhnliche IP\n",[2637,5391,5392],{"class":3818,"line":4637},[2637,5393,5394],{},"        if request.ip not in baseline.known_ips:\n",[2637,5396,5397],{"class":3818,"line":4642},[2637,5398,5399],{},"            anomalies.append(Anomaly(\"new_ip\", severity=\"high\"))\n",[2637,5401,5402],{"class":3818,"line":4648},[2637,5403,3874],{"emptyLinePlaceholder":1568},[2637,5405,5406],{"class":3818,"line":4654},[2637,5407,5408],{},"        return anomalies\n",[3908,5410,5412],{"id":5411},"_53-alert-rules","5.3 Alert-Rules",[10,5414,5415],{},"Definieren Sie klare Alert-Rules mit Severity und Action. Wer wird wann benachrichtigt? Was passiert automatisch?",[1787,5417,5419],{"className":4385,"code":5418,"language":4387,"meta":1524,"style":1524},"alerts:\n  - name: injection_attempt_detected\n    condition: flags contains \"injection_attempt\"\n    severity: high\n    action: notify_security_team\n\n  - name: pii_in_output\n    condition: flags contains \"pii_detected\"\n    severity: medium\n    action: notify_privacy_team\n\n  - name: unusual_activity\n    condition: anomaly_score > 0.8\n    severity: medium\n    action: notify_security_team\n\n  - name: budget_exceeded\n    condition: monthly_spend > budget\n    severity: low\n    action: disable_key, notify_user\n",[1794,5420,5421,5428,5440,5450,5460,5470,5474,5485,5494,5503,5512,5516,5527,5536,5544,5552,5556,5567,5576,5585],{"__ignoreMap":1524},[2637,5422,5423,5426],{"class":3818,"line":3819},[2637,5424,5425],{"class":4400},"alerts",[2637,5427,4405],{"class":4404},[2637,5429,5430,5432,5435,5437],{"class":3818,"line":1525},[2637,5431,4410],{"class":4404},[2637,5433,5434],{"class":4400},"name",[2637,5436,4416],{"class":4404},[2637,5438,5439],{"class":4419},"injection_attempt_detected\n",[2637,5441,5442,5445,5447],{"class":3818,"line":1531},[2637,5443,5444],{"class":4400},"    condition",[2637,5446,4416],{"class":4404},[2637,5448,5449],{"class":4419},"flags contains \"injection_attempt\"\n",[2637,5451,5452,5455,5457],{"class":3818,"line":3835},[2637,5453,5454],{"class":4400},"    severity",[2637,5456,4416],{"class":4404},[2637,5458,5459],{"class":4419},"high\n",[2637,5461,5462,5465,5467],{"class":3818,"line":3841},[2637,5463,5464],{"class":4400},"    action",[2637,5466,4416],{"class":4404},[2637,5468,5469],{"class":4419},"notify_security_team\n",[2637,5471,5472],{"class":3818,"line":3847},[2637,5473,3874],{"emptyLinePlaceholder":1568},[2637,5475,5476,5478,5480,5482],{"class":3818,"line":3853},[2637,5477,4410],{"class":4404},[2637,5479,5434],{"class":4400},[2637,5481,4416],{"class":4404},[2637,5483,5484],{"class":4419},"pii_in_output\n",[2637,5486,5487,5489,5491],{"class":3818,"line":3859},[2637,5488,5444],{"class":4400},[2637,5490,4416],{"class":4404},[2637,5492,5493],{"class":4419},"flags contains \"pii_detected\"\n",[2637,5495,5496,5498,5500],{"class":3818,"line":3865},[2637,5497,5454],{"class":4400},[2637,5499,4416],{"class":4404},[2637,5501,5502],{"class":4419},"medium\n",[2637,5504,5505,5507,5509],{"class":3818,"line":3871},[2637,5506,5464],{"class":4400},[2637,5508,4416],{"class":4404},[2637,5510,5511],{"class":4419},"notify_privacy_team\n",[2637,5513,5514],{"class":3818,"line":3877},[2637,5515,3874],{"emptyLinePlaceholder":1568},[2637,5517,5518,5520,5522,5524],{"class":3818,"line":2489},[2637,5519,4410],{"class":4404},[2637,5521,5434],{"class":4400},[2637,5523,4416],{"class":4404},[2637,5525,5526],{"class":4419},"unusual_activity\n",[2637,5528,5529,5531,5533],{"class":3818,"line":2487},[2637,5530,5444],{"class":4400},[2637,5532,4416],{"class":4404},[2637,5534,5535],{"class":4419},"anomaly_score > 0.8\n",[2637,5537,5538,5540,5542],{"class":3818,"line":1571},[2637,5539,5454],{"class":4400},[2637,5541,4416],{"class":4404},[2637,5543,5502],{"class":4419},[2637,5545,5546,5548,5550],{"class":3818,"line":3898},[2637,5547,5464],{"class":4400},[2637,5549,4416],{"class":4404},[2637,5551,5469],{"class":4419},[2637,5553,5554],{"class":3818,"line":3903},[2637,5555,3874],{"emptyLinePlaceholder":1568},[2637,5557,5558,5560,5562,5564],{"class":3818,"line":4060},[2637,5559,4410],{"class":4404},[2637,5561,5434],{"class":4400},[2637,5563,4416],{"class":4404},[2637,5565,5566],{"class":4419},"budget_exceeded\n",[2637,5568,5569,5571,5573],{"class":3818,"line":4066},[2637,5570,5444],{"class":4400},[2637,5572,4416],{"class":4404},[2637,5574,5575],{"class":4419},"monthly_spend > budget\n",[2637,5577,5578,5580,5582],{"class":3818,"line":4173},[2637,5579,5454],{"class":4400},[2637,5581,4416],{"class":4404},[2637,5583,5584],{"class":4419},"low\n",[2637,5586,5587,5589,5591],{"class":3818,"line":4372},[2637,5588,5464],{"class":4400},[2637,5590,4416],{"class":4404},[2637,5592,5593],{"class":4419},"disable_key, notify_user\n",[3792,5595],{},[25,5597,5599],{"id":5598},"tools-frameworks","Tools & Frameworks",[10,5601,5602],{},"Sie müssen nicht alles selbst bauen. Diese Open-Source-Tools und Frameworks decken wesentliche Teile des 5-Layer-Modells ab. Stand: Dezember 2025.",[222,5604,5606],{"id":5605},"llm-guard-protect-ai","LLM Guard (Protect AI)",[10,5608,5609],{},"Open-Source-Bibliothek für Input- und Output-Scanning. Deckt Prompt Injection, Toxicity, PII und mehr ab. Aktiv gepflegt (letztes Update November 2025).",[1787,5611,5613],{"className":3811,"code":5612,"language":3813,"meta":1524,"style":1524},"from llm_guard import scan_prompt, scan_output\nfrom llm_guard.input_scanners import PromptInjection, Toxicity\nfrom llm_guard.output_scanners import Sensitive, Relevance\n\ninput_scanners = [PromptInjection(), Toxicity()]\noutput_scanners = [Sensitive(), Relevance()]\n\n# Input scannen\nsanitized_prompt, results, is_valid = scan_prompt(\n    input_scanners, user_prompt\n)\n\n# Output scannen\nsanitized_output, results, is_valid = scan_output(\n    output_scanners, user_prompt, llm_response\n)\n",[1794,5614,5615,5620,5625,5630,5634,5639,5644,5648,5653,5658,5663,5668,5672,5677,5682,5687],{"__ignoreMap":1524},[2637,5616,5617],{"class":3818,"line":3819},[2637,5618,5619],{},"from llm_guard import scan_prompt, scan_output\n",[2637,5621,5622],{"class":3818,"line":1525},[2637,5623,5624],{},"from llm_guard.input_scanners import PromptInjection, Toxicity\n",[2637,5626,5627],{"class":3818,"line":1531},[2637,5628,5629],{},"from llm_guard.output_scanners import Sensitive, Relevance\n",[2637,5631,5632],{"class":3818,"line":3835},[2637,5633,3874],{"emptyLinePlaceholder":1568},[2637,5635,5636],{"class":3818,"line":3841},[2637,5637,5638],{},"input_scanners = [PromptInjection(), Toxicity()]\n",[2637,5640,5641],{"class":3818,"line":3847},[2637,5642,5643],{},"output_scanners = [Sensitive(), Relevance()]\n",[2637,5645,5646],{"class":3818,"line":3853},[2637,5647,3874],{"emptyLinePlaceholder":1568},[2637,5649,5650],{"class":3818,"line":3859},[2637,5651,5652],{},"# Input scannen\n",[2637,5654,5655],{"class":3818,"line":3865},[2637,5656,5657],{},"sanitized_prompt, results, is_valid = scan_prompt(\n",[2637,5659,5660],{"class":3818,"line":3871},[2637,5661,5662],{},"    input_scanners, user_prompt\n",[2637,5664,5665],{"class":3818,"line":3877},[2637,5666,5667],{},")\n",[2637,5669,5670],{"class":3818,"line":2489},[2637,5671,3874],{"emptyLinePlaceholder":1568},[2637,5673,5674],{"class":3818,"line":2487},[2637,5675,5676],{},"# Output scannen\n",[2637,5678,5679],{"class":3818,"line":1571},[2637,5680,5681],{},"sanitized_output, results, is_valid = scan_output(\n",[2637,5683,5684],{"class":3818,"line":3898},[2637,5685,5686],{},"    output_scanners, user_prompt, llm_response\n",[2637,5688,5689],{"class":3818,"line":3903},[2637,5690,5667],{},[222,5692,5694],{"id":5693},"nemo-guardrails-nvidia","NeMo Guardrails (NVIDIA)",[10,5696,5697],{},"NVIDIA's Framework für programmierbare Conversation-Guardrails. Version 0.18.0 (November 2025) unterstützt jetzt auch Reasoning-Traces (BotThinking Events), LangGraph-Integration und Multi-Agent-Workflows.",[1787,5699,5701],{"className":3811,"code":5700,"language":3813,"meta":1524,"style":1524},"from nemoguardrails import RailsConfig, LLMRails\n\nconfig = RailsConfig.from_path(\"./config\")\nrails = LLMRails(config)\n\n# Guardrails automatisch angewendet\nresponse = rails.generate(messages=[{\"role\": \"user\", \"content\": prompt}])\n",[1794,5702,5703,5708,5712,5717,5722,5726,5731],{"__ignoreMap":1524},[2637,5704,5705],{"class":3818,"line":3819},[2637,5706,5707],{},"from nemoguardrails import RailsConfig, LLMRails\n",[2637,5709,5710],{"class":3818,"line":1525},[2637,5711,3874],{"emptyLinePlaceholder":1568},[2637,5713,5714],{"class":3818,"line":1531},[2637,5715,5716],{},"config = RailsConfig.from_path(\"./config\")\n",[2637,5718,5719],{"class":3818,"line":3835},[2637,5720,5721],{},"rails = LLMRails(config)\n",[2637,5723,5724],{"class":3818,"line":3841},[2637,5725,3874],{"emptyLinePlaceholder":1568},[2637,5727,5728],{"class":3818,"line":3847},[2637,5729,5730],{},"# Guardrails automatisch angewendet\n",[2637,5732,5733],{"class":3818,"line":3853},[2637,5734,5735],{},"response = rails.generate(messages=[{\"role\": \"user\", \"content\": prompt}])\n",[10,5737,5738,5741],{},[17,5739,5740],{},"Wichtig:"," Python 3.10+ erforderlich (Support für 3.9 wurde im Oktober 2025 entfernt).",[222,5743,5745],{"id":5744},"microsoft-presidio","Microsoft Presidio",[10,5747,5748],{},"Der Goldstandard für PII-Detection und Anonymisierung. Unterstützt Deutsch und viele andere Sprachen. Für managed Services: Azure AI Language PII Detection bietet ähnliche Funktionalität als Cloud-Service.",[1787,5750,5752],{"className":3811,"code":5751,"language":3813,"meta":1524,"style":1524},"from presidio_analyzer import AnalyzerEngine\nfrom presidio_anonymizer import AnonymizerEngine\n\nanalyzer = AnalyzerEngine()\nanonymizer = AnonymizerEngine()\n\n# PII finden\nresults = analyzer.analyze(\n    text=text,\n    entities=[\"PERSON\", \"EMAIL_ADDRESS\", \"PHONE_NUMBER\"],\n    language=\"de\"\n)\n\n# Anonymisieren\nanonymized = anonymizer.anonymize(text=text, analyzer_results=results)\n",[1794,5753,5754,5759,5763,5767,5772,5777,5781,5786,5791,5796,5801,5806,5810,5814,5819],{"__ignoreMap":1524},[2637,5755,5756],{"class":3818,"line":3819},[2637,5757,5758],{},"from presidio_analyzer import AnalyzerEngine\n",[2637,5760,5761],{"class":3818,"line":1525},[2637,5762,4848],{},[2637,5764,5765],{"class":3818,"line":1531},[2637,5766,3874],{"emptyLinePlaceholder":1568},[2637,5768,5769],{"class":3818,"line":3835},[2637,5770,5771],{},"analyzer = AnalyzerEngine()\n",[2637,5773,5774],{"class":3818,"line":3841},[2637,5775,5776],{},"anonymizer = AnonymizerEngine()\n",[2637,5778,5779],{"class":3818,"line":3847},[2637,5780,3874],{"emptyLinePlaceholder":1568},[2637,5782,5783],{"class":3818,"line":3853},[2637,5784,5785],{},"# PII finden\n",[2637,5787,5788],{"class":3818,"line":3859},[2637,5789,5790],{},"results = analyzer.analyze(\n",[2637,5792,5793],{"class":3818,"line":3865},[2637,5794,5795],{},"    text=text,\n",[2637,5797,5798],{"class":3818,"line":3871},[2637,5799,5800],{},"    entities=[\"PERSON\", \"EMAIL_ADDRESS\", \"PHONE_NUMBER\"],\n",[2637,5802,5803],{"class":3818,"line":3877},[2637,5804,5805],{},"    language=\"de\"\n",[2637,5807,5808],{"class":3818,"line":2489},[2637,5809,5667],{},[2637,5811,5812],{"class":3818,"line":2487},[2637,5813,3874],{"emptyLinePlaceholder":1568},[2637,5815,5816],{"class":3818,"line":1571},[2637,5817,5818],{},"# Anonymisieren\n",[2637,5820,5821],{"class":3818,"line":3898},[2637,5822,5823],{},"anonymized = anonymizer.anonymize(text=text, analyzer_results=results)\n",[222,5825,5827],{"id":5826},"cloud-provider-guardrails-2025","Cloud-Provider Guardrails (2025)",[10,5829,5830],{},"Die großen Cloud-Provider bieten inzwischen native Guardrails:",[42,5832,5833,5839,5845],{},[45,5834,5835,5838],{},[17,5836,5837],{},"Azure Prompt Shields"," – Machine-Learning-basierter Schutz gegen Prompt Injection, integriert in Azure AI Foundry",[45,5840,5841,5844],{},[17,5842,5843],{},"AWS Bedrock Guardrails"," – Content-Filter, Topic-Blocking und PII-Redaktion für Amazon Bedrock",[45,5846,5847,5850],{},[17,5848,5849],{},"OpenAI Moderation API"," – Kostenlos, jetzt multimodal (Text + Bilder), basiert auf GPT-4o",[222,5852,5854],{"id":5853},"spezialisierte-security-plattformen","Spezialisierte Security-Plattformen",[42,5856,5857,5863,5869],{},[45,5858,5859,5862],{},[17,5860,5861],{},"Lakera"," – AI-native Plattform spezialisiert auf Prompt Injection Detection",[45,5864,5865,5868],{},[17,5866,5867],{},"Mindgard"," – Automated AI Red Teaming mit Runtime-Protection",[45,5870,5871,5874],{},[17,5872,5873],{},"Purple Llama (Meta)"," – Open-Source-Tools für Cyber Security und Input/Output Safeguards",[25,5876,5878],{"id":5877},"fazit-die-reihenfolge-zählt","Fazit: Die Reihenfolge zählt",[10,5880,5881],{},"Nicht alle Layer müssen am ersten Tag implementiert sein. Priorisieren Sie risikoorientiert:",[10,5883,5884,5887],{},[17,5885,5886],{},"Woche 1: Input Validation + Authentication."," Ohne diese beiden ist alles andere wertlos. Ein LLM ohne Input-Validation ist ein offenes System für Prompt Injection. Ohne Authentication wissen Sie nicht einmal, wer angreift.",[10,5889,5890,5893],{},[17,5891,5892],{},"Woche 2: Rate Limiting + Budget-Controls."," Kosten-Explosionen durch Missbrauch sind einer der häufigsten realen Incidents bei LLM-APIs. Setzen Sie Limits, bevor Sie live gehen – nicht nachdem die erste Rechnung kommt.",[10,5895,5896,5899],{},[17,5897,5898],{},"Woche 3-4: Output Filtering + Monitoring."," Output-Filter schützen vor PII-Leaks und System-Prompt-Leakage. Monitoring gibt Ihnen die Visibility, um Anomalien zu erkennen, bevor sie zu Incidents werden.",[10,5901,5902],{},"Die Code-Beispiele in diesem Artikel sind Startpunkte. Passen Sie sie an Ihre Architektur an – aber implementieren Sie alle 5 Layer.",[25,5904,1490],{"id":1489},[42,5906,5907,5914,5919,5924],{},[45,5908,5909,5913],{},[267,5910,5912],{"href":5911},"/blog/llm-integration","Sichere LLM-Integration"," – Die 5 Integration-Patterns",[45,5915,5916,5918],{},[267,5917,4493],{"href":4492}," – API-Key-Lifecycle und Rotation",[45,5920,5921,5923],{},[267,5922,1503],{"href":445}," – API Security im Gesamtkontext",[45,5925,5926,5930],{},[267,5927,5929],{"href":5928},"/enterprise-architektur","Enterprise AI Architecture"," – Zurück zur Übersicht",[5932,5933,5934],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sQwZJ, html code.shiki .sQwZJ{--shiki-light:#85E89D;--shiki-default:#85E89D;--shiki-dark:#85E89D}html pre.shiki code .s9RsZ, html code.shiki .s9RsZ{--shiki-light:#E1E4E8;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sWBnw, html code.shiki .sWBnw{--shiki-light:#9ECBFF;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .sO5fp, html code.shiki .sO5fp{--shiki-light:#79B8FF;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":1524,"searchDepth":1525,"depth":1525,"links":5936},[5937,5941,5945,5952,5959,5960],{"id":3597,"depth":1525,"text":3598,"children":5938},[5939,5940],{"id":3607,"depth":1531,"text":3608},{"id":3649,"depth":1531,"text":3650},{"id":3682,"depth":1525,"text":3683,"children":5942},[5943,5944],{"id":3689,"depth":1531,"text":3690},{"id":3773,"depth":1531,"text":3774},{"id":3783,"depth":1525,"text":3784,"children":5946},[5947,5948,5949,5950,5951],{"id":3796,"depth":1531,"text":3797},{"id":4180,"depth":1531,"text":4181},{"id":4498,"depth":1531,"text":4499},{"id":4825,"depth":1531,"text":4826},{"id":5151,"depth":1531,"text":5152},{"id":5598,"depth":1525,"text":5599,"children":5953},[5954,5955,5956,5957,5958],{"id":5605,"depth":1531,"text":5606},{"id":5693,"depth":1531,"text":5694},{"id":5744,"depth":1531,"text":5745},{"id":5826,"depth":1531,"text":5827},{"id":5853,"depth":1531,"text":5854},{"id":5877,"depth":1525,"text":5878},{"id":1489,"depth":1525,"text":1490},"2025-11-23","5-Layer Security-Modell für LLM-APIs: Input Validation, Authentication, Rate Limiting, Output Filtering, Monitoring. Mit Code-Beispielen und Tool-Empfehlungen.","api-security","2025-12-04",{},{"title":1509,"description":5962},"blog/api-security","f-7csP4kL873JPSHPMlfiopeiZazEIYzxUPi4JM5DoU",{"id":5970,"title":5971,"body":5972,"created":7112,"description":7113,"extension":1564,"icon":7114,"keyword":7115,"lastUpdated":7112,"meta":7116,"navigation":1568,"order":7117,"path":7118,"readingTime":2487,"seo":7119,"stem":7120,"__hash__":7121},"blog/blog/cra-software-sicherheit.md","CRA und Softwareentwicklung: Security by Design als Pflicht",{"type":7,"value":5973,"toc":7078},[5974,5980,5991,5994,5998,6005,6008,6088,6095,6099,6106,6110,6117,6120,6172,6176,6179,6184,6201,6206,6276,6281,6285,6292,6296,6350,6354,6357,6363,6369,6375,6389,6395,6401,6405,6412,6416,6477,6483,6509,6513,6516,6520,6526,6532,6552,6556,6563,6577,6583,6587,6590,6594,6597,6717,6721,6724,6729,6761,6766,6772,6776,6779,6805,6810,6814,6817,6910,6916,6920,6924,6935,6939,6950,6954,6968,6972,6986,6990,7001,7005,7016,7020,7023,7028,7048,7051,7053],[10,5975,5976,5977],{},"Ab dem 11. Dezember 2027 darf kein Produkt mit digitalen Elementen mehr auf den EU-Markt gebracht werden, das die Anforderungen des Cyber Resilience Act (CRA) nicht erfüllt. Für Softwarehersteller bedeutet das: ",[17,5978,5979],{},"Security by Design ist keine Best Practice mehr – es ist Gesetz.",[10,5981,5982,5983,5986,5987,5990],{},"Die Konsequenzen bei Nichteinhaltung sind erheblich: Bis zu ",[17,5984,5985],{},"15 Millionen Euro"," oder ",[17,5988,5989],{},"2,5% des globalen Jahresumsatzes",". Marktaufsichtsbehörden können den Verkauf stoppen oder Rückrufe anordnen. Und die Anforderungen betreffen nicht nur das fertige Produkt, sondern den gesamten Entwicklungsprozess – von der ersten Codezeile bis zum letzten Sicherheitsupdate.",[10,5992,5993],{},"Dieser Artikel zeigt Ihnen, was der CRA konkret für Ihre Softwareentwicklung bedeutet, welche Pflichten auf Sie zukommen, und wie Sie Ihre CI/CD-Pipelines CRA-konform aufstellen.",[25,5995,5997],{"id":5996},"was-der-cra-für-softwareentwicklung-bedeutet","Was der CRA für Softwareentwicklung bedeutet",[10,5999,6000,6001,6004],{},"Der CRA richtet sich an Hersteller von \"Produkten mit digitalen Elementen\". Das umfasst ",[17,6002,6003],{},"jede kommerzielle Software",", die auf dem EU-Markt vertrieben wird – ob als Standalone-Anwendung, Firmware, SaaS mit Client-Komponente oder eingebettete Software in Hardware.",[10,6006,6007],{},"Die zentrale Anforderung: Produkte müssen während ihres gesamten Lebenszyklus sicher sein. Das beginnt beim Design, geht über die Entwicklung und reicht bis zur Außerbetriebnahme. Artikel 13 des CRA definiert die Pflichten des Herstellers – und die sind umfassend.",[84,6009,6010,6022],{},[87,6011,6012],{},[90,6013,6014,6016,6019],{},[93,6015,2929],{},[93,6017,6018],{},"CRA-Artikel",[93,6020,6021],{},"Frist",[106,6023,6024,6035,6045,6055,6066,6077],{},[90,6025,6026,6029,6032],{},[111,6027,6028],{},"Security by Design",[111,6030,6031],{},"Art. 13 (1)",[111,6033,6034],{},"Ab Inkrafttreten",[90,6036,6037,6040,6043],{},[111,6038,6039],{},"Schwachstellen-Management",[111,6041,6042],{},"Art. 13 (6)",[111,6044,6034],{},[90,6046,6047,6050,6053],{},[111,6048,6049],{},"SBOM-Erstellung",[111,6051,6052],{},"Art. 13 (5)",[111,6054,6034],{},[90,6056,6057,6060,6063],{},[111,6058,6059],{},"Update-Bereitstellung",[111,6061,6062],{},"Art. 13 (8)",[111,6064,6065],{},"Min. 5 Jahre",[90,6067,6068,6071,6074],{},[111,6069,6070],{},"Meldepflicht bei Schwachstellen",[111,6072,6073],{},"Art. 14",[111,6075,6076],{},"24h nach Bekanntwerden",[90,6078,6079,6082,6085],{},[111,6080,6081],{},"Technische Dokumentation",[111,6083,6084],{},"Anhang VII",[111,6086,6087],{},"Vor Inverkehrbringen",[10,6089,6090,6091,20],{},"Für eine umfassende Übersicht zum CRA-Compliance-Prozess: ",[267,6092,6094],{"href":6093},"/blog/cyber-resilience-act-compliance","CRA Compliance im Detail",[25,6096,6098],{"id":6097},"sbom-die-stückliste-ihrer-software","SBOM: Die Stückliste Ihrer Software",[10,6100,6101,6102,6105],{},"Eine ",[17,6103,6104],{},"Software Bill of Materials (SBOM)"," ist das Herzstück der CRA-Compliance für Entwicklungsteams. Sie dokumentiert alle Komponenten, aus denen Ihre Software besteht – ähnlich einer Zutatenliste bei Lebensmitteln.",[222,6107,6109],{"id":6108},"warum-die-sbom-so-wichtig-ist","Warum die SBOM so wichtig ist",[10,6111,6112,6113,6116],{},"Moderne Software besteht zu ",[17,6114,6115],{},"70–90% aus Open-Source-Komponenten",". Wenn eine Schwachstelle wie Log4Shell bekannt wird, müssen Sie innerhalb von Stunden wissen, ob Ihr Produkt betroffen ist. Ohne SBOM ist das ein manueller, fehleranfälliger Prozess, der Tage dauern kann. Mit SBOM dauert es Minuten.",[10,6118,6119],{},"Der CRA fordert in Artikel 13 (5), dass Hersteller eine SBOM erstellen und pflegen. Die EU-Kommission wird das genaue Format noch spezifizieren, aber zwei Standards haben sich etabliert:",[84,6121,6122,6138],{},[87,6123,6124],{},[90,6125,6126,6129,6132,6135],{},[93,6127,6128],{},"Standard",[93,6130,6131],{},"Herausgeber",[93,6133,6134],{},"Stärken",[93,6136,6137],{},"Verbreitung",[106,6139,6140,6156],{},[90,6141,6142,6147,6150,6153],{},[111,6143,6144],{},[17,6145,6146],{},"CycloneDX",[111,6148,6149],{},"OWASP",[111,6151,6152],{},"Sicherheitsfokus, VEX-Support, leichtgewichtig",[111,6154,6155],{},"Stark wachsend",[90,6157,6158,6163,6166,6169],{},[111,6159,6160],{},[17,6161,6162],{},"SPDX",[111,6164,6165],{},"Linux Foundation",[111,6167,6168],{},"ISO-Standard (ISO/IEC 5962:2021), Lizenz-Fokus",[111,6170,6171],{},"Etabliert",[222,6173,6175],{"id":6174},"sbom-in-der-praxis-implementieren","SBOM in der Praxis implementieren",[10,6177,6178],{},"Eine SBOM muss automatisiert generiert werden – manuelle Pflege skaliert nicht. Integrieren Sie die Generierung in Ihren Build-Prozess.",[10,6180,6181],{},[17,6182,6183],{},"Minimale SBOM-Inhalte nach CRA:",[42,6185,6186,6189,6192,6195,6198],{},[45,6187,6188],{},"Name und Version jeder Komponente",[45,6190,6191],{},"Lieferant bzw. Herkunft",[45,6193,6194],{},"Abhängigkeitsbeziehungen (direkt und transitiv)",[45,6196,6197],{},"Bekannte Schwachstellen zum Zeitpunkt der Auslieferung",[45,6199,6200],{},"Lizenzinformationen",[10,6202,6203],{},[17,6204,6205],{},"Tools für die SBOM-Generierung:",[84,6207,6208,6224],{},[87,6209,6210],{},[90,6211,6212,6215,6218,6221],{},[93,6213,6214],{},"Tool",[93,6216,6217],{},"Open Source?",[93,6219,6220],{},"Unterstützte Formate",[93,6222,6223],{},"Besonderheit",[106,6225,6226,6240,6252,6264],{},[90,6227,6228,6231,6234,6237],{},[111,6229,6230],{},"Syft (Anchore)",[111,6232,6233],{},"Ja",[111,6235,6236],{},"CycloneDX, SPDX",[111,6238,6239],{},"Breite Sprachunterstützung",[90,6241,6242,6245,6247,6249],{},[111,6243,6244],{},"Trivy (Aqua)",[111,6246,6233],{},[111,6248,6236],{},[111,6250,6251],{},"Kombiniert SBOM + Vulnerability Scan",[90,6253,6254,6257,6259,6261],{},[111,6255,6256],{},"cdxgen",[111,6258,6233],{},[111,6260,6146],{},[111,6262,6263],{},"Speziell für CycloneDX optimiert",[90,6265,6266,6269,6271,6273],{},[111,6267,6268],{},"OWASP Dependency-Track",[111,6270,6233],{},[111,6272,6146],{},[111,6274,6275],{},"SBOM-Management-Plattform",[10,6277,6278,6280],{},[17,6279,1103],{}," Generieren Sie die SBOM bei jedem Build und speichern Sie sie versioniert. So können Sie jederzeit nachweisen, welche Komponenten in welcher Produktversion enthalten waren.",[25,6282,6284],{"id":6283},"schwachstellen-management-die-24-stunden-pflicht","Schwachstellen-Management: Die 24-Stunden-Pflicht",[10,6286,6287,6288,6291],{},"Artikel 14 des CRA schreibt vor: ",[17,6289,6290],{},"Innerhalb von 24 Stunden"," nach Bekanntwerden einer aktiv ausgenutzten Schwachstelle müssen Sie die ENISA (EU-Agentur für Cybersicherheit) informieren. Innerhalb von 72 Stunden folgt ein detaillierter Bericht. Das ist ambitioniert – und ohne strukturierte Prozesse nicht machbar.",[222,6293,6295],{"id":6294},"was-das-konkret-bedeutet","Was das konkret bedeutet",[84,6297,6298,6309],{},[87,6299,6300],{},[90,6301,6302,6304,6307],{},[93,6303,2023],{},[93,6305,6306],{},"Pflicht",[93,6308,3142],{},[106,6310,6311,6324,6337],{},[90,6312,6313,6318,6321],{},[111,6314,6315],{},[17,6316,6317],{},"24 Stunden",[111,6319,6320],{},"Frühwarnung an ENISA",[111,6322,6323],{},"Betroffenes Produkt, Art der Schwachstelle, erste Einschätzung",[90,6325,6326,6331,6334],{},[111,6327,6328],{},[17,6329,6330],{},"72 Stunden",[111,6332,6333],{},"Detaillierter Bericht",[111,6335,6336],{},"Technische Details, Auswirkungen, geplante Maßnahmen",[90,6338,6339,6344,6347],{},[111,6340,6341],{},[17,6342,6343],{},"14 Tage",[111,6345,6346],{},"Abschlussbericht",[111,6348,6349],{},"Ursachenanalyse, implementierte Fixes, Lessons Learned",[222,6351,6353],{"id":6352},"schwachstellen-management-prozess-aufbauen","Schwachstellen-Management-Prozess aufbauen",[10,6355,6356],{},"Ein CRA-konformes Schwachstellen-Management umfasst fünf Kernelemente:",[10,6358,6359,6362],{},[17,6360,6361],{},"1. Kontinuierliches Monitoring:"," Überwachen Sie Ihre Abhängigkeiten automatisch auf neue CVEs. Tools wie Dependabot, Snyk oder OWASP Dependency-Track gleichen Ihre SBOM kontinuierlich gegen Schwachstellen-Datenbanken ab.",[10,6364,6365,6368],{},[17,6366,6367],{},"2. Triage und Priorisierung:"," Nicht jede Schwachstelle hat die gleiche Kritikalität. Nutzen Sie CVSS-Scores als Ausgangspunkt, aber bewerten Sie immer im Kontext Ihrer Anwendung. Eine kritische Schwachstelle in einer Bibliothek, deren betroffene Funktion Sie nicht nutzen, hat eine andere Priorität als eine mittlere Schwachstelle in einem exponierten Eingabepfad.",[10,6370,6371,6374],{},[17,6372,6373],{},"3. Koordinierte Offenlegung:"," Der CRA verlangt, dass Hersteller einen Prozess für die koordinierte Schwachstellen-Offenlegung (Coordinated Vulnerability Disclosure) etablieren. Das bedeutet: eine öffentlich erreichbare Kontaktmöglichkeit für Sicherheitsforscher, definierte Reaktionszeiten und eine Vulnerability Disclosure Policy.",[10,6376,6377,6380,6381,6384,6385,6388],{},[17,6378,6379],{},"4. Patch-Entwicklung und -Verteilung:"," Sicherheitspatches müssen zeitnah entwickelt, getestet und verteilt werden. Der CRA fordert, dass Patches ",[17,6382,6383],{},"kostenlos"," und ",[17,6386,6387],{},"separat von Feature-Updates"," bereitgestellt werden – Nutzer sollen nicht gezwungen sein, ein Feature-Update zu installieren, nur um eine Sicherheitslücke zu schließen.",[10,6390,6391,6394],{},[17,6392,6393],{},"5. Dokumentation:"," Jeder Schritt muss nachvollziehbar dokumentiert werden. Wann wurde die Schwachstelle bekannt? Wann wurde die ENISA informiert? Welche Maßnahmen wurden ergriffen? Diese Dokumentation ist bei einer Prüfung durch Marktaufsichtsbehörden entscheidend.",[10,6396,6397,6398,20],{},"Wie Sie Schwachstellen-Management in einen sicheren Entwicklungslebenszyklus einbetten: ",[267,6399,6400],{"href":1570},"SSDLC – Secure Software Development Lifecycle",[25,6402,6404],{"id":6403},"update-pflicht-mindestens-5-jahre","Update-Pflicht: Mindestens 5 Jahre",[10,6406,6407,6408,6411],{},"Einer der folgenreichsten Aspekte des CRA: ",[17,6409,6410],{},"Hersteller müssen für mindestens 5 Jahre"," nach Inverkehrbringen Sicherheitsupdates bereitstellen. Oder länger, wenn die erwartete Produktlebensdauer es erfordert.",[222,6413,6415],{"id":6414},"was-das-für-ihre-planung-bedeutet","Was das für Ihre Planung bedeutet",[84,6417,6418,6427],{},[87,6419,6420],{},[90,6421,6422,6425],{},[93,6423,6424],{},"Aspekt",[93,6426,2929],{},[106,6428,6429,6438,6447,6457,6467],{},[90,6430,6431,6435],{},[111,6432,6433],{},[17,6434,2731],{},[111,6436,6437],{},"Min. 5 Jahre ab Inverkehrbringen jeder Version",[90,6439,6440,6444],{},[111,6441,6442],{},[17,6443,1010],{},[111,6445,6446],{},"Updates müssen kostenlos sein",[90,6448,6449,6454],{},[111,6450,6451],{},[17,6452,6453],{},"Trennung",[111,6455,6456],{},"Sicherheitsupdates separat von Feature-Updates",[90,6458,6459,6464],{},[111,6460,6461],{},[17,6462,6463],{},"Zeitnah",[111,6465,6466],{},"\"Ohne Verzögerung\" nach Identifikation einer Schwachstelle",[90,6468,6469,6474],{},[111,6470,6471],{},[17,6472,6473],{},"Dokumentation",[111,6475,6476],{},"Installationsanleitung und Änderungsprotokoll erforderlich",[10,6478,6479,6482],{},[17,6480,6481],{},"Die strategische Konsequenz:"," Sie müssen Ihre Software so architektieren, dass Sicherheitsupdates auch nach Jahren noch möglich sind. Das bedeutet:",[42,6484,6485,6491,6497,6503],{},[45,6486,6487,6490],{},[17,6488,6489],{},"Modulare Architektur:"," Sicherheitsrelevante Komponenten müssen austauschbar sein, ohne das gesamte Produkt neu zu bauen.",[45,6492,6493,6496],{},[17,6494,6495],{},"Langfristige Abhängigkeiten-Strategie:"," Wenn eine Bibliothek, die Sie nutzen, in drei Jahren End-of-Life geht, müssen Sie einen Plan haben.",[45,6498,6499,6502],{},[17,6500,6501],{},"Update-Infrastruktur:"," Sie brauchen einen zuverlässigen Kanal, um Updates an Ihre Nutzer zu verteilen – und nachweisen zu können, dass Updates verfügbar gemacht wurden.",[45,6504,6505,6508],{},[17,6506,6507],{},"Budgetplanung:"," Die 5-Jahres-Pflicht muss in die Produktkalkulation einfließen. Sicherheitsupdates sind kein optionaler Service, sondern eine gesetzliche Verpflichtung.",[25,6510,6512],{"id":6511},"open-source-und-der-cra","Open Source und der CRA",[10,6514,6515],{},"Die Behandlung von Open-Source-Software war einer der meistdiskutierten Aspekte bei der CRA-Verhandlung. Das Ergebnis ist differenziert – und für Unternehmen relevant.",[222,6517,6519],{"id":6518},"wer-ist-betroffen","Wer ist betroffen?",[10,6521,6522,6525],{},[17,6523,6524],{},"Nicht betroffen"," sind Open-Source-Projekte, die ohne kommerzielle Absicht entwickelt werden. Ein Hobby-Projekt auf GitHub fällt nicht unter den CRA, selbst wenn es von Unternehmen genutzt wird.",[10,6527,6528,6531],{},[17,6529,6530],{},"Betroffen"," sind:",[42,6533,6534,6540,6546],{},[45,6535,6536,6539],{},[17,6537,6538],{},"Unternehmen, die Open Source kommerziell einsetzen:"," Sie sind als Hersteller verantwortlich für die Sicherheit des Gesamtprodukts – einschließlich aller Open-Source-Komponenten.",[45,6541,6542,6545],{},[17,6543,6544],{},"Open Source Stewards:"," Der CRA führt den neuen Begriff \"Open Source Software Steward\" ein. Das sind Organisationen (z.B. Stiftungen), die die Entwicklung von Open Source mit kommerzieller Absicht systematisch unterstützen. Sie haben reduzierte Pflichten, müssen aber einen Sicherheitsprozess nachweisen.",[45,6547,6548,6551],{},[17,6549,6550],{},"Kommerzielle Open-Source-Anbieter:"," Wer Open Source mit kommerziellem Support oder als Teil eines kommerziellen Produkts anbietet, unterliegt den vollen CRA-Pflichten.",[222,6553,6555],{"id":6554},"konsequenzen-für-ihr-unternehmen","Konsequenzen für Ihr Unternehmen",[10,6557,6558,6559,6562],{},"Wenn Sie Open-Source-Bibliotheken in Ihrem Produkt verwenden – und das tun Sie fast sicher – tragen ",[17,6560,6561],{},"Sie"," die Verantwortung für deren Sicherheit. Das bedeutet:",[42,6564,6565,6568,6571,6574],{},[45,6566,6567],{},"Jede eingebundene Open-Source-Komponente muss in der SBOM erfasst sein",[45,6569,6570],{},"Sie müssen Schwachstellen in diesen Komponenten überwachen und darauf reagieren",[45,6572,6573],{},"Wenn ein Upstream-Projekt eine Schwachstelle nicht behebt, müssen Sie selbst einen Fix bereitstellen oder die Komponente ersetzen",[45,6575,6576],{},"Die 5-Jahres-Update-Pflicht gilt auch für Schwachstellen in Open-Source-Abhängigkeiten",[10,6578,6579,6582],{},[17,6580,6581],{},"Praktische Empfehlung:"," Führen Sie eine Risikobewertung Ihrer Open-Source-Abhängigkeiten durch. Wie aktiv wird das Projekt gepflegt? Gibt es einen Security-Response-Prozess? Wie schnell werden Schwachstellen behoben? Projekte mit niedrigem Maintenance-Level in kritischen Pfaden sind ein CRA-Risiko.",[25,6584,6586],{"id":6585},"cra-konforme-cicd-pipelines","CRA-konforme CI/CD-Pipelines",[10,6588,6589],{},"Die größte Hebelwirkung für CRA-Compliance erzielen Sie, wenn Sie die Anforderungen direkt in Ihre CI/CD-Pipeline integrieren. Statt manueller Prüfungen vor jedem Release automatisieren Sie die Compliance-Checks als Quality Gates.",[222,6591,6593],{"id":6592},"pipeline-architektur-für-cra-compliance","Pipeline-Architektur für CRA-Compliance",[10,6595,6596],{},"Eine CRA-konforme Pipeline erweitert den klassischen Build-Test-Deploy-Prozess um Sicherheits- und Compliance-Schritte:",[84,6598,6599,6611],{},[87,6600,6601],{},[90,6602,6603,6606,6609],{},[93,6604,6605],{},"Pipeline-Stage",[93,6607,6608],{},"CRA-Relevanz",[93,6610,2180],{},[106,6612,6613,6626,6639,6652,6665,6678,6691,6704],{},[90,6614,6615,6620,6623],{},[111,6616,6617],{},[17,6618,6619],{},"Pre-Commit",[111,6621,6622],{},"Secret Detection, Linting",[111,6624,6625],{},"detect-secrets, pre-commit hooks",[90,6627,6628,6633,6636],{},[111,6629,6630],{},[17,6631,6632],{},"Build",[111,6634,6635],{},"SBOM-Generierung",[111,6637,6638],{},"Syft, cdxgen",[90,6640,6641,6646,6649],{},[111,6642,6643],{},[17,6644,6645],{},"SAST",[111,6647,6648],{},"Statische Codeanalyse",[111,6650,6651],{},"SonarQube, Semgrep, CodeQL",[90,6653,6654,6659,6662],{},[111,6655,6656],{},[17,6657,6658],{},"SCA",[111,6660,6661],{},"Abhängigkeiten-Prüfung",[111,6663,6664],{},"Trivy, Snyk, OWASP Dependency-Check",[90,6666,6667,6672,6675],{},[111,6668,6669],{},[17,6670,6671],{},"DAST",[111,6673,6674],{},"Dynamische Tests",[111,6676,6677],{},"OWASP ZAP, Nuclei",[90,6679,6680,6685,6688],{},[111,6681,6682],{},[17,6683,6684],{},"Container Scan",[111,6686,6687],{},"Image-Sicherheit",[111,6689,6690],{},"Trivy, Grype",[90,6692,6693,6698,6701],{},[111,6694,6695],{},[17,6696,6697],{},"Compliance Gate",[111,6699,6700],{},"SBOM-Vollständigkeit, keine kritischen CVEs",[111,6702,6703],{},"Dependency-Track, Policy-Engine",[90,6705,6706,6711,6714],{},[111,6707,6708],{},[17,6709,6710],{},"Sign & Attest",[111,6712,6713],{},"Integritätsnachweis",[111,6715,6716],{},"Sigstore, cosign",[222,6718,6720],{"id":6719},"quality-gates-definieren","Quality Gates definieren",[10,6722,6723],{},"Definieren Sie klare Kriterien, wann ein Build die Pipeline passieren darf und wann nicht. Diese Gates müssen dokumentiert und auditierbar sein.",[10,6725,6726],{},[17,6727,6728],{},"Empfohlene Quality Gates:",[42,6730,6731,6737,6743,6749,6755],{},[45,6732,6733,6736],{},[17,6734,6735],{},"Keine kritischen oder hohen Schwachstellen"," in Abhängigkeiten ohne dokumentierte Risikobewertung",[45,6738,6739,6742],{},[17,6740,6741],{},"SBOM erfolgreich generiert"," und alle Komponenten aufgelöst",[45,6744,6745,6748],{},[17,6746,6747],{},"Statische Analyse bestanden"," – keine Findings der Kategorie \"Critical\"",[45,6750,6751,6754],{},[17,6752,6753],{},"Alle Sicherheitstests bestanden"," – SAST, SCA, Container Scan",[45,6756,6757,6760],{},[17,6758,6759],{},"Artefakte signiert"," – Build-Integrität nachweisbar",[10,6762,6763,6765],{},[17,6764,5740],{}," Ein Quality Gate, das permanent übergangen wird, ist wertlos. Definieren Sie einen klaren Eskalationsprozess, wenn ein Gate blockiert, und dokumentieren Sie jede Ausnahme mit Begründung und Risikobewertung.",[10,6767,6768,6769,20],{},"Wie Security Champions in Entwicklungsteams diese Prozesse verankern: ",[267,6770,6771],{"href":344},"OWASP Security Champion Programm",[222,6773,6775],{"id":6774},"supply-chain-security","Supply Chain Security",[10,6777,6778],{},"Der CRA fordert Integritätsschutz für die gesamte Software-Lieferkette. Das umfasst:",[42,6780,6781,6787,6793,6799],{},[45,6782,6783,6786],{},[17,6784,6785],{},"Build-Reproduzierbarkeit:"," Können Sie nachweisen, dass ein bestimmtes Artefakt aus einem bestimmten Quellcode entstanden ist?",[45,6788,6789,6792],{},[17,6790,6791],{},"Artefakt-Signierung:"," Signieren Sie Ihre Build-Artefakte kryptographisch, damit Nutzer deren Integrität prüfen können.",[45,6794,6795,6798],{},[17,6796,6797],{},"SLSA-Framework:"," Das Supply-chain Levels for Software Artifacts Framework bietet ein Reifegradmodell für Supply Chain Security – von SLSA Level 1 (Dokumentation) bis SLSA Level 4 (hermetische Builds).",[45,6800,6801,6804],{},[17,6802,6803],{},"Abhängigkeiten-Pinning:"," Nutzen Sie Lockfiles und überprüfen Sie Checksummen. Ein manipuliertes Paket in Ihrer Dependency-Chain kann Ihr gesamtes Produkt kompromittieren.",[10,6806,6807,6808,20],{},"Zum Thema API-Absicherung in der Lieferkette: ",[267,6809,1509],{"href":309},[25,6811,6813],{"id":6812},"dokumentationspflichten-was-sie-nachweisen-müssen","Dokumentationspflichten: Was Sie nachweisen müssen",[10,6815,6816],{},"Die technische Dokumentation nach Anhang VII des CRA ist umfangreich. Für Entwicklungsteams sind insbesondere folgende Nachweise relevant:",[84,6818,6819,6830],{},[87,6820,6821],{},[90,6822,6823,6825,6827],{},[93,6824,6473],{},[93,6826,3142],{},[93,6828,6829],{},"Empfohlenes Format",[106,6831,6832,6845,6858,6871,6884,6897],{},[90,6833,6834,6839,6842],{},[111,6835,6836],{},[17,6837,6838],{},"Sicherheitsarchitektur",[111,6840,6841],{},"Threat Model, Angriffsoberfläche, Schutzmaßnahmen",[111,6843,6844],{},"Architekturdiagramme, STRIDE-Analyse",[90,6846,6847,6852,6855],{},[111,6848,6849],{},[17,6850,6851],{},"SBOM",[111,6853,6854],{},"Alle Komponenten mit Versionen und Lizenzen",[111,6856,6857],{},"CycloneDX oder SPDX (maschinenlesbar)",[90,6859,6860,6865,6868],{},[111,6861,6862],{},[17,6863,6864],{},"Schwachstellen-Prozess",[111,6866,6867],{},"Meldewege, Reaktionszeiten, Eskalation",[111,6869,6870],{},"Prozessdokumentation, SLAs",[90,6872,6873,6878,6881],{},[111,6874,6875],{},[17,6876,6877],{},"Test-Ergebnisse",[111,6879,6880],{},"SAST, DAST, SCA, Penetrationstests",[111,6882,6883],{},"Automatisierte Reports aus CI/CD",[90,6885,6886,6891,6894],{},[111,6887,6888],{},[17,6889,6890],{},"Update-Historik",[111,6892,6893],{},"Alle Sicherheitsupdates mit Changelog",[111,6895,6896],{},"Versionierte Release Notes",[90,6898,6899,6904,6907],{},[111,6900,6901],{},[17,6902,6903],{},"Risikobewertung",[111,6905,6906],{},"Bewertung identifizierter Risiken und Mitigationen",[111,6908,6909],{},"Risiko-Register",[10,6911,6912,6915],{},[17,6913,6914],{},"Automatisierung ist entscheidend."," Generieren Sie so viel Dokumentation wie möglich automatisch aus Ihrer Pipeline. SBOM, Test-Ergebnisse und Schwachstellen-Reports lassen sich direkt aus den CI/CD-Tools exportieren. Das reduziert den manuellen Aufwand und stellt sicher, dass die Dokumentation immer aktuell ist.",[25,6917,6919],{"id":6918},"praxisfahrplan-in-6-schritten-zur-cra-konformen-entwicklung","Praxisfahrplan: In 6 Schritten zur CRA-konformen Entwicklung",[222,6921,6923],{"id":6922},"schritt-1-bestandsaufnahme-monat-1","Schritt 1: Bestandsaufnahme (Monat 1)",[42,6925,6926,6929,6932],{},[45,6927,6928],{},"Inventarisieren Sie alle Produkte, die unter den CRA fallen",[45,6930,6931],{},"Erfassen Sie aktuelle Entwicklungsprozesse und -tools",[45,6933,6934],{},"Identifizieren Sie Gaps zu den CRA-Anforderungen",[222,6936,6938],{"id":6937},"schritt-2-sbom-prozess-etablieren-monat-2","Schritt 2: SBOM-Prozess etablieren (Monat 2)",[42,6940,6941,6944,6947],{},[45,6942,6943],{},"Wählen Sie ein SBOM-Format (CycloneDX empfohlen)",[45,6945,6946],{},"Integrieren Sie SBOM-Generierung in den Build-Prozess",[45,6948,6949],{},"Richten Sie SBOM-Management ein (z.B. OWASP Dependency-Track)",[222,6951,6953],{"id":6952},"schritt-3-schwachstellen-management-aufsetzen-monat-23","Schritt 3: Schwachstellen-Management aufsetzen (Monat 2–3)",[42,6955,6956,6959,6962,6965],{},[45,6957,6958],{},"Implementieren Sie automatisiertes Schwachstellen-Scanning",[45,6960,6961],{},"Definieren Sie Triage-Prozess und Verantwortlichkeiten",[45,6963,6964],{},"Erstellen Sie eine Vulnerability Disclosure Policy",[45,6966,6967],{},"Testen Sie den 24-Stunden-Meldeprozess",[222,6969,6971],{"id":6970},"schritt-4-cicd-pipeline-erweitern-monat-34","Schritt 4: CI/CD-Pipeline erweitern (Monat 3–4)",[42,6973,6974,6977,6980,6983],{},[45,6975,6976],{},"Integrieren Sie SAST, SCA und Container-Scanning",[45,6978,6979],{},"Definieren Sie Quality Gates mit klaren Schwellenwerten",[45,6981,6982],{},"Implementieren Sie Artefakt-Signierung",[45,6984,6985],{},"Automatisieren Sie die Dokumentationsgenerierung",[222,6987,6989],{"id":6988},"schritt-5-update-strategie-definieren-monat-45","Schritt 5: Update-Strategie definieren (Monat 4–5)",[42,6991,6992,6995,6998],{},[45,6993,6994],{},"Planen Sie die 5-Jahres-Update-Pflicht in die Produktarchitektur ein",[45,6996,6997],{},"Etablieren Sie einen separaten Kanal für Sicherheitsupdates",[45,6999,7000],{},"Definieren Sie SLAs für Patch-Bereitstellung nach Kritikalität",[222,7002,7004],{"id":7003},"schritt-6-auditierung-und-verbesserung-monat-6-dann-fortlaufend","Schritt 6: Auditierung und Verbesserung (Monat 6, dann fortlaufend)",[42,7006,7007,7010,7013],{},[45,7008,7009],{},"Führen Sie ein internes Audit gegen die CRA-Anforderungen durch",[45,7011,7012],{},"Dokumentieren Sie verbleibende Gaps und Mitigationspläne",[45,7014,7015],{},"Etablieren Sie quartalsweise Reviews des gesamten Prozesses",[25,7017,7019],{"id":7018},"fazit-früh-starten-systematisch-aufbauen","Fazit: Früh starten, systematisch aufbauen",[10,7021,7022],{},"Der CRA macht Security by Design zur gesetzlichen Pflicht. Das ist ein Paradigmenwechsel für Unternehmen, die Sicherheit bisher als nachgelagertes Thema behandelt haben. Aber es ist auch eine Chance: Wer seine Entwicklungsprozesse jetzt CRA-konform aufstellt, reduziert nicht nur regulatorische Risiken, sondern baut robustere Software.",[10,7024,7025],{},[17,7026,7027],{},"Die drei wichtigsten Sofortmaßnahmen:",[1458,7029,7030,7036,7042],{},[45,7031,7032,7035],{},[17,7033,7034],{},"SBOM-Generierung automatisieren"," – das ist die Grundlage für alles Weitere und in wenigen Tagen implementierbar.",[45,7037,7038,7041],{},[17,7039,7040],{},"Schwachstellen-Scanning in die Pipeline integrieren"," – Tools wie Trivy oder Snyk lassen sich mit minimalem Aufwand einbinden.",[45,7043,7044,7047],{},[17,7045,7046],{},"24-Stunden-Meldeprozess definieren"," – dieser Prozess muss stehen, bevor die erste kritische Schwachstelle auftaucht.",[10,7049,7050],{},"Die technischen Maßnahmen sind überschaubar. Die größere Herausforderung liegt in der organisatorischen Verankerung: klare Verantwortlichkeiten, dokumentierte Prozesse und eine Kultur, in der Sicherheit kein Hindernis ist, sondern integraler Bestandteil der Softwareentwicklung.",[25,7052,1490],{"id":1489},[42,7054,7055,7061,7067,7073],{},[45,7056,7057,7060],{},[267,7058,7059],{"href":6093},"CRA Compliance"," – Der vollständige Compliance-Leitfaden",[45,7062,7063,7066],{},[267,7064,7065],{"href":1570},"SSDLC"," – Sicherer Entwicklungslebenszyklus im Detail",[45,7068,7069,7072],{},[267,7070,7071],{"href":344},"OWASP Security Champion"," – Security in Entwicklungsteams verankern",[45,7074,7075,7077],{},[267,7076,310],{"href":309}," – Schnittstellen absichern",{"title":1524,"searchDepth":1525,"depth":1525,"links":7079},[7080,7081,7085,7089,7092,7096,7101,7102,7110,7111],{"id":5996,"depth":1525,"text":5997},{"id":6097,"depth":1525,"text":6098,"children":7082},[7083,7084],{"id":6108,"depth":1531,"text":6109},{"id":6174,"depth":1531,"text":6175},{"id":6283,"depth":1525,"text":6284,"children":7086},[7087,7088],{"id":6294,"depth":1531,"text":6295},{"id":6352,"depth":1531,"text":6353},{"id":6403,"depth":1525,"text":6404,"children":7090},[7091],{"id":6414,"depth":1531,"text":6415},{"id":6511,"depth":1525,"text":6512,"children":7093},[7094,7095],{"id":6518,"depth":1531,"text":6519},{"id":6554,"depth":1531,"text":6555},{"id":6585,"depth":1525,"text":6586,"children":7097},[7098,7099,7100],{"id":6592,"depth":1531,"text":6593},{"id":6719,"depth":1531,"text":6720},{"id":6774,"depth":1531,"text":6775},{"id":6812,"depth":1525,"text":6813},{"id":6918,"depth":1525,"text":6919,"children":7103},[7104,7105,7106,7107,7108,7109],{"id":6922,"depth":1531,"text":6923},{"id":6937,"depth":1531,"text":6938},{"id":6952,"depth":1531,"text":6953},{"id":6970,"depth":1531,"text":6971},{"id":6988,"depth":1531,"text":6989},{"id":7003,"depth":1531,"text":7004},{"id":7018,"depth":1525,"text":7019},{"id":1489,"depth":1525,"text":1490},"2026-02-22","CRA-Anforderungen an Entwicklung: SBOM, Schwachstellen-Management, Update-Pflicht und CRA-konforme CI/CD-Pipelines. Praxisleitfaden für Entwicklungsteams.","wrench-screwdriver","cra-software-sicherheit",{},51,"/blog/cra-software-sicherheit",{"title":5971,"description":7113},"blog/cra-software-sicherheit","cSJL6te47zSzfV38W5vwinno5HYKJkFQJuwXcRPPCU8",1774965941607]