Darf nicht vs. kann nicht: Warum KI-Sicherheit Architektur ist, kein Regelwerk
Dein KI-Agent soll nicht in die .env schauen? Dann schreibst du es ihm hin — „greif nicht auf Secrets zu, gib keine Tokens aus" — in CLAUDE.md, in den System-Prompt, in die Tool-Beschreibung. Das fühlt sich nach Kontrolle an. Ist aber keine. Es ist eine Bitte. Und eine Bitte ist keine Sicherheitsgrenze.
Das ist der Reflex, mit dem fast jeder anfängt — und der teuerste Denkfehler im Umgang mit KI-Agenten. Denn er verwechselt zwei grundverschiedene Dinge: einem System sagen, es solle sich anständig verhalten, und ein System bauen, in dem das Fehlverhalten gar nicht möglich ist. Darf nicht — gegen kann nicht.
Kurz gesagt — Eine Prompt-Regel sagt dem Agenten, was er nicht tun soll. Architektur sorgt dafür, dass er es nicht tun kann. Nur das Zweite hält, wenn es darauf ankommt. KI-Sicherheit ist eine Frage von Struktur, nicht von Anweisung.
Warum „darf nicht" nicht hält
Eine Anweisung im Prompt ist eine Empfehlung — und Empfehlungen werden ignoriert. Von diesem Agenten, vom nächsten, von einem Tool, das ihn umwickelt, oder von einem Angreifer, der eine Anweisung in genau die Daten schmuggelt, die der Agent ohnehin liest (indirekte Prompt-Injektion). Du kannst nicht jede Eingabe vorhersehen, gegen die deine Regel bestehen muss.
Und das ist nicht meine Privatmeinung — es ist der Stand der Forschung. Sogar die Leute, die diese Guardrails bauen, bekommen sie nicht dicht:
- Ein Team der Lancaster University / Mindgard hat sechs prominente Schutzsysteme untersucht, darunter Microsofts Azure Prompt Shield und Metas Prompt Guard — und sie mit simpler Zeichen-Injektion ausgehebelt, in Einzelfällen mit bis zu 100 % Erfolgsquote („Bypassing LLM Guardrails", arXiv).
- Als OpenAI im Oktober 2025 sein eigenes Guardrails-Framework veröffentlichte, war es binnen Tagen umgangen — von HiddenLayer, indem sie genau das Modell prompt-injizierten, das Prompt-Injektion erkennen soll (HiddenLayer: „Same Model, Different Hat").
Der zweite Fall zeigt das strukturelle Problem hinter „eine KI bewacht eine KI": Der Wächter erbt die Schwäche dessen, was er bewachen soll. Setzt du ein Sprachmodell als Richter über ein Sprachmodell, sitzt im Richter dieselbe Lücke wie im Angeklagten. Noch ein Modell draufzustapeln macht die Grenze nicht härter — nur teurer.
„Darf nicht" ist nicht „kann nicht"
Hier liegt die Linie, die wirklich zählt. Jede Sicherheitsmaßnahme sitzt auf einer von zwei Seiten:
- „Darf nicht" — hängt davon ab, dass sich jemand an eine Regel hält: der Agent, der Nutzer, ein Guardrail-Modell. Bricht, sobald einer von ihnen es nicht tut — aus Bosheit, aus Manipulation oder schlicht aus Unachtsamkeit beim nächsten Tool in der Kette.
- „Kann nicht" — das Fehlverhalten ist architektonisch unmöglich. Es gibt keine Regel zu befolgen und nichts zu umgehen. Der Angreifer kann so kreativ sein, wie er will; der Pfad existiert einfach nicht.
Daraus folgt eine einzige Frage, mit der du jede angebotene „KI-Sicherheit" prüfen kannst:
Hängt das davon ab, dass sich jemand an eine Regel hält — oder macht es den Fehler unmöglich?
Lautet die Antwort „Regel", behandle es als Best-Effort-Stups, nicht als Grenze. Das ist der erste Test für alles, was sich als Sicherheitsgrenze ausgibt — Erkennung, Monitoring und Rotation kommen obendrauf, nicht an seine Stelle.
| Maßnahme | Typ | Was ein Angreifer dafür braucht |
|---|---|---|
| „Gib keine Secrets aus" im System-Prompt | darf nicht | nur eine geschickte Anweisung |
| Guardrail-Modell prüft Ein-/Ausgabe | darf nicht (probabilistisch) | eine geschickte Anweisung |
| Secret nie im Agent-Kontext (Env-Injektion) | kann nicht | einen echten Exploit (z. B. Prozess-Env auslesen) |
| Netzwerk-Egress auf Allowlist | kann nicht | einen echten Exploit (z. B. DNS-Exfiltration) |
| Sandbox + minimale Rechte | kann nicht | einen Sandbox-Escape |
| Generierung/Ausführung getrennt | kann nicht | eine Lücke in der Policy |
Der Unterschied ist nicht „sicher" gegen „unsicher" — strukturelle Grenzen sind nicht unfehlbar. Der Punkt ist ein anderer: Eine Verhaltensregel umgehst du mit einem Satz; eine strukturelle Grenze nur mit einem echten Exploit. Du zwingst den Angreifer vom Tippen einer Anweisung auf das Finden einer Lücke — von Minuten auf Wochen, von jedem auf wenige. Genau das ist der Gewinn.
Wie „kann nicht" aussieht
Die gute Nachricht: Die strukturelle Seite ist nicht exotisch. Es sind dieselben Prinzipien, die du in jeder ernsthaften Infrastruktur längst anwendest — nur konsequent auf den Agenten gezogen.
Das Secret existiert gar nicht im Kontext des Agenten. Du gibst ihm die Fähigkeit, ein Credential zu benutzen, nicht es zu lesen: Der Wert lebt in der Umgebung des Kindprozesses, den der Agent startet — nicht im Gesprächsverlauf, den das Modell liest. Kein Prompt kann das Modell dazu bringen, einen Wert auszugeben, der nie in seinem Kontext stand. (Ein voll kompromittierter Agent mit freier Shell kann ihn weiterhin aus der Prozess-Umgebung lesen oder neu beziehen — das ist ein anderes Bedrohungsmodell, das du mit den nächsten Punkten verengst.) Den Lese-vs-Benutzen-Trick habe ich in Wie KI-Agents Zugangsdaten leaken Schritt für Schritt durchexerziert.
Egress auf eine Allowlist. Der Agent erreicht nur freigegebene Ziele. Steht im Prompt „schick das an evil.example.com", läuft es ins Leere — dieses Ziel existiert für ihn nicht. Ein Luftspalt ist das nicht: über DNS-Anfragen oder ein ohnehin erlaubtes Ziel lässt sich weiterhin etwas hinausschmuggeln — deshalb gehört DNS-Ebene-Kontrolle dazu, und erlaubte Ziele bleiben halb-vertrauenswürdig. Aber der naheliegende Kanal — „schick es irgendwohin" — ist zu.
Sandbox plus minimale Rechte. Generierter Code läuft isoliert, mit kurzlebigen Credentials und genau den Rechten, die die Aufgabe braucht — nicht mehr. Das begrenzt den Schaden; es macht Ausführung nicht „sicher", denn ein Coding-Agent muss ja genau den fremden Code ausführen, der das Risiko ist. Die belastbare Form sind deshalb Wegwerf-Umgebungen ohne dauerhafte Credentials: Was schiefgeht, bleibt im Container, statt sich auszubreiten.
Generierung von Ausführung trennen. Eine unabhängige Instanz entscheidet, ob eine Aktion erlaubt ist — und zwar eine deterministische Policy aus Capabilities und Allowlists, kein zweites Modell, das dieselbe Schwäche erbte. Ein gekaperter Plan läuft dann gegen eine Wand, solange er etwas will, das die Policy nicht ohnehin erlaubt.
Keiner dieser Punkte vertraut darauf, dass der Agent brav ist. Genau das ist der Unterschied.
Das sage nicht nur ich
Die Branche ist an derselben Stelle angekommen. Die OWASP Top 10 for Agentic Applications (Dezember 2025) führen unter ASI05 – Unexpected Code Execution als Gegenmaßnahme nicht „sag dem Agenten, er soll vorsichtig sein", sondern: Generierung von Ausführung trennen und Code in kurzlebigen Micro-VMs oder Sandboxes laufen lassen (OWASP Gen AI Security Project). Das NIST Generative AI Profile (NIST AI 600-1) führt Prompt-Injektion als erstklassiges, einzuplanendes Risiko, nicht als Randnotiz (NIST).
Und die Angriffsfläche ist real, nicht hypothetisch: Die Untersuchung „IDEsaster" fand Ende 2025 über 30 Schwachstellen (24 zugewiesene CVEs) quer durch GitHub Copilot, Cursor, Windsurf, Claude Code und weitere — die getesteten KI-IDEs waren allesamt verwundbar (berichtet bei The Hacker News). Die Werkzeuge, denen du heute schon vertraust, sind Teil des Bedrohungsmodells. Eine Prompt-Regel ändert daran nichts; eine Sandbox schon.
Die eine Frage
KI-Agenten produktiv einzusetzen heißt nicht, ihnen beizubringen, brav zu sein. Es heißt, die Umgebung so zu bauen, dass der naheliegende Fehler ins Leere läuft. Verhalten lässt sich erbitten; Architektur lässt sich erzwingen — und nur das Erzwungene hält, wenn ein echter Angreifer, ein verwirrtes Modell oder einfach der nächste Quartals-Deadline-Druck dagegendrückt.
Wenn dir das nächste Mal jemand „wir haben der KI gesagt, sie soll das nicht" als Sicherheit verkauft, stell die eine Frage: Hängt das davon ab, dass sich der Agent an eine Regel hält — oder macht es den Fehler unmöglich? Das Erste ist Theater. Das Zweite ist Sicherheit.
Genau solche Grenzen sauber zu ziehen — so dass Automatisierung schnell bleibt, ohne still Risiko aufzubauen — ist Teil meiner Arbeit. Lass uns reden.