Anatomie eines KI-Datenlecks: drei Geschichten aus unserer Telemetrie
Drei reale, anonymisierte KI-Datenlecks aus unserer Telemetrie: AWS-Keys in Copilot, Kunden-PII in ChatGPT, proprietärer Code in Claude. Was anschlug, was sich danach änderte.
Drei Vorfälle, drei Lehren, keine Kundennamen
Das Nützlichste, was wir veröffentlichen können, ist kein Benchmark und kein Whitepaper. Es ist das, was in echten Organisationen tatsächlich in der Woche passiert, nachdem sie Zeuslock scharfgeschaltet haben. Die drei Geschichten unten sind komponierte Fallstudien, basierend auf Mustern, die wir in der Kundentelemetrie immer wieder sehen. Branche, Größe, Region und Details wurden so weit verändert, dass keine Organisation identifizierbar ist. Die Erkennungslogik und die menschliche Reaktion dagegen sind so wiedergegeben, wie sie wirklich abgelaufen sind.
Jede Geschichte folgt demselben Muster: Setup (wer tat was), was wir gesehen haben (der Fund mit maskierter Vorschau), was anschlug (welcher Detektor, welcher Schweregrad, welche Aktion) und was die Kundin oder der Kunde anschließend getan hat (die Richtlinien- oder Prozessänderung, die den Kreis schließt). Es geht nicht darum, Beschäftigte an den Pranger zu stellen. In jedem Fall versuchte die Person nur, ihren Job schneller zu machen. Es geht darum, die Lücke zwischen Absicht und Exposition zu zeigen — und wie eine wirklich nützliche Kontrolle im richtigen Moment aussieht.
Geschichte 1: ein AKIA-Key, ein Stacktrace und eine ehrliche Debug-Session
Ein Backend-Entwickler einer Series-B-Fintech war seit drei Stunden mit einem Produktionsincident beschäftigt. Die Deploy-Pipeline hatte sich an einem Permissions-Fehler verschluckt, und das Team verbrannte den europäischen Vormittag, um vor Börsenöffnung einen Fix auszuliefern. Der Entwickler kopierte den fehlschlagenden CloudWatch-Stacktrace, öffnete Microsoft Copilot in VS Code und stellte die naheliegende Frage: warum scheitert das, und welche Permission muss ich dieser IAM-Rolle hinzufügen?
Der eingefügte Block war rund 60 Zeilen lang. Versteckt in Zeile 14: die buchstäbliche AWS Access Key ID, die der Deploy-Runner benutzte, in der Form AKIAIO******************, zusammen mit Region, Rollen-ARN und genug Kontext, um die Credential trivial nutzbar zu machen, falls sie das Haus jemals verlassen sollte. Der Entwickler hatte nicht absichtlich ein Geheimnis kopiert. Er hatte einen Stacktrace kopiert, in dem zufällig ein Geheimnis steckte.
Die Zeuslock-Browser-Erweiterung und der Desktop-Agent schlugen binnen Millisekunden an. Ausgelöster Detektor: api_key:aws auf der strengen Regex-Schicht (Präfix AKIA plus 20 Zeichen Base32), in unter 80 ms vom in der EU gehosteten ML-Modell mit hohem Confidence-Score bestätigt. Schweregrad: kritisch. Aktion gemäß der Entwicklerrichtlinie zu diesem Zeitpunkt: Anonymisieren. Der eingefügte Text erreichte Copilot, wobei der Key durch eine strukturell gültige Attrappe ersetzt war, der Rest des Traces unverändert. Copilot lieferte trotzdem eine vollkommen brauchbare Antwort zur fehlenden s3:PutObject-Berechtigung — das Modell brauchte den echten Key zu keiner Sekunde, um über IAM nachzudenken.
Die Operator Console verzeichnete den Vorfall mit vollständiger Zuordnung: Benutzer, Host, Quell-URL (github.com/copilot) und ein gesalzener Hash des Klartextgeheimnisses, damit das Sicherheitsteam mit AWS CloudTrail korrelieren konnte, ohne das Geheimnis je zu speichern. Die Reaktion der Sicherheitsleiterin war zweigleisig. Erstens wurde der AKIA-Key innerhalb einer Stunde aus Hygienegründen rotiert, obwohl er das Gerät nie verlassen hatte. Zweitens wurde die Entwicklerrichtlinie für die Familie api_key:* in allen Engineering-Gruppen von Anonymisieren auf Blockieren verschärft, und in jedem Backend-Repository wurde ein Pre-Commit-Hook mit gitleaks eingeführt, damit dieselbe Leckklasse eine Schicht früher gefangen wird — beim git commit statt erst beim Einfügen in ein KI-Tool.
Geschichte 2: 200 Zeilen Kundenhistorie, in ChatGPT geworfen für „Sentiment“
Eine Senior-Support-Analystin eines mittelgroßen Online-Retailers bereitete die wöchentliche Eskalationszusammenfassung für die Leitung Kundenservice vor. Das übliche interne Tool war an diesem Tag träge, also exportierte die Analystin die letzte Woche an Beschwerde-Threads aus dem CRM als CSV, öffnete ChatGPT, fügte den 200-Zeilen-Block ein und bat: fasse die Top-3-Beschwerden nach Thema zusammen und sag mir, welche am wütendsten klingen.
Der Block enthielt 47 Kunden-E-Mail-Adressen, 31 Postanschriften aus Frankreich, Spanien und Deutschland, die vollständige Bestellhistorie zu jeder Beschwerde und in 12 Fällen ein Teil-Kartenidentifikator der Form **** **** **** 4242. Aus DSGVO-Sicht war das, ehrlich gesagt, eine recht klassische unrechtmäßige Weiterübermittlung an einen US-Subdienstleister außerhalb der erklärten Verarbeitungskette. Die Analystin handelte nicht böswillig. ChatGPT war schneller als das interne Tool, und niemand hatte ihr je konkret das Gegenteil erklärt.
Zeuslock löste in einer einzigen Übermittlung drei Detektoren aus: email (47 Treffer, hohe Konfidenz), address (31 Treffer, hohe Konfidenz, locale-bewusst für FR / ES / DE) und credit_card_partial auf den maskierten PAN-Fragmenten. Schweregrad: hoch. Aktion in der Support-Team-Richtlinie: Anonymisieren. Der Prompt, der ChatGPT tatsächlich erreichte, wurde on-the-fly umgeschrieben: jede E-Mail wurde zu user1@example.com, user2@example.com und so weiter, jede Adresse wurde zu einer strukturell gültigen, aber fiktiven europäischen Adresse im gleichen Land, jeder Teil-PAN zu einer Luhn-gültigen Attrappe. Der Bestelltext und die Beschwerdesätze blieben unangetastet. ChatGPT lieferte eine völlig brauchbare Zusammenfassung — die drei Topthemen waren Lieferverzögerungen, Größeninkonsistenzen bei einer bestimmten Produktlinie und ein Anzeigefehler in der Rechnungsdarstellung —, weil keine dieser Schlüsse echte personenbezogene Daten brauchte.
Der Kunde nahm eine kleine, aber wirkungsstarke Änderung vor. ChatGPT wurde für das Support-Team nicht blockiert. Es wurde ein einseitiger Abschnitt im internen Benutzerhandbuch ergänzt, überschrieben mit „das sichere Muster“, mit einem Screenshot der anonymisierten Vorschau aus Zeuslock und dem Satz: so sah dein Prompt für das Modell tatsächlich aus, die Antwort war trotzdem nützlich, also kannst du dieses Muster weiter nutzen. Die Verhaltens-Compliance stieg, weil das Team visuell sah, dass das schützende Verhalten nichts kostet.
Das Verhalten, das wir wollen, ist nicht „hört auf, KI zu benutzen“. Das Verhalten, das wir wollen, ist „nutzt KI frei, auf einer Nutzlast, aus der vorher all das entfernt wurde, was dort von Anfang an nie hätte stehen dürfen“. Anonymisierung ist die Brücke.
Geschichte 3: 400 Zeilen Kern-IP, Refactoring-Rat und eine Desktop-App
Ein Senior-Engineer einer europäischen Healthtech überarbeitete ein Modul tief im proprietären Scoring-Engine — ehrlich gesagt das einzige Asset, weshalb das Unternehmen Investoren hat. Der Engineer öffnete die Claude-Desktop-App und fügte ein 400-zeiliges Python-Modul ein, um Refactoring-Vorschläge zu bekommen, insbesondere wie sich verschachtelte Bedingungen in eine testbarere Form abflachen ließen. Das Modul enthielt die tatsächlichen Scoring-Gewichte, die Funktionsnamen, die direkt der patentierten Methodik entsprechen, und das interne Paketpräfix, das es nur in diesem Unternehmen gibt.
Das ist die am schwersten zu fangende Leck-Klasse. Es gibt keine Regex für „unser geistiges Eigentum“. Die Zeuslock-Erkennung, die hier griff, war geschichtet: eine generische source_code-Heuristik markierte die Übermittlung als großen Python-Block mit hoher syntaktischer Dichte und niedrigem Anteil natürlicher Sprache, und ein eigener Detektor, den der Kunde drei Wochen zuvor gebaut hatte — auf das interne Paketpräfix und drei reservierte Funktionsnamen gemünzt —, hob den Schweregrad von mittel auf kritisch. Aktion gemäß der Richtlinie des IP-besitzenden Teams: Blockieren. Der Desktop-Agent fing die Übermittlung ab, bevor sie das Gerät verließ. Claude bekam nichts zu sehen. Der Engineer sah ein Modal, das erklärte, was gematcht hatte, einen Link zur internen Policy-Seite und einen Ein-Klick-Pfad, um beim Sicherheitsteam eine Ausnahme zu beantragen, falls das Refactoring extern wirklich vertretbar war.
Der operative Nachgang war von allen drei der interessanteste. Statt die Richtlinie für alle zu verschärfen, teilte der Kunde die Entwicklerrichtlinie in zwei Profile. Teams, die die Scoring-Engine, die patentierten Codepfade und die Modell-Trainingspipeline anfassen, laufen unter einem strengen Profil: source_code und der eigene IP-Detektor stehen beide auf Blockieren. Teams, die Utility-Services, internes Tooling und die öffentliche Marketing-Site ausliefern, laufen unter einem lockereren Profil: source_code bleibt auf Anonymisieren, damit sie weiter Refactoring-Hilfe für Code bekommen, bei dem die Kosten eines externen Einfügens praktisch null sind. Die Aufteilung wurde als einabsätzige Richtliniennotiz veröffentlicht und über die bestehenden SCIM-Gruppen durchsetzbar gemacht — kein Engineer muss sich merken, in welchem Modus er ist, der Agent weiß es.
Was diese drei Fälle gemeinsam haben
Zusammengelesen reimen sich die drei Geschichten mehr, als sie sich unterscheiden. In jedem Fall war die Person produktiv, nicht nachlässig. In jedem Fall war das Geheimnis oder das personenbezogene Datum für die eigentliche Frage beiläufig — niemand hat einen Key eingefügt, um einen Key zu leaken, sondern weil er an der Fehlermeldung hing, zu der man Hilfe brauchte. In jedem Fall hätte das Modell die gleiche nützliche Antwort auf einer anonymisierten oder leeren Nutzlast erzeugt. Und in jedem Fall war die dauerhafte Lösung kein Memo. Sie war eine Richtlinienänderung, in den Agenten verdrahtet, gestützt durch eine kleine Prozessänderung, ins Team verdrahtet.
Falls Sie Zahlen für dieses Quartal brauchen:
- Setzen Sie die Familie
api_key:*für Engineering-Gruppen aufBlockieren. Die Fehlalarmquote auf AWS-, Stripe-, GitHub-, Slack- und OpenAI-Schlüsselmustern ist niedrig genug, dassBlockierenab Woche 3 angemessen ist. Koppeln Sie es mit einem Pre-Commit-Hook in den Repositories, die zählen. - Halten Sie PII für nichttechnische Teams auf
Anonymisierenund dokumentieren Sie das sichere Muster. Zeigen Sie die maskierte Vorschau. Zeigen Sie, dass das Modell weiter nützlich bleibt. Verhaltensänderung passiert, wenn schützendes Verhalten sichtbar nichts kostet. - Bauen Sie mindestens einen eigenen Detektor für Ihre eigene IP. Nehmen Sie das interne Paketpräfix, die Patent-IDs, die reservierten Funktionsnamen. Backtesten Sie ihn in der Operator Console gegen die letzten 30 Tage Vorfälle, bevor Sie auf
Blockierenumschalten. Der Detektor, den Sie in einem Nachmittag bauen, fängt ein Leck, das keine generische Anbieter-Regex je gefangen hätte. - Teilen Sie die Entwicklerrichtlinie nach Team, nicht nach Tool. IP-besitzende Teams brauchen ein anderes Profil als Utility-Teams. Verdrahten Sie die Aufteilung über Ihre bestehenden Identitätsgruppen, damit sie automatisch durchgesetzt bleibt, während Leute kommen, wechseln und gehen.
Nichts davon braucht ein neues Tool, einen neuen Prozess oder ein Memo an den Vorstand. Es braucht den ehrlichen Blick auf die drei Zeilen Ihres Vorfalldashboards, die Sie diesen Monat am meisten erschreckt haben, und die ehrliche Antwort, welcher Richtlinienmodus sie gestoppt hätte. Operative Details finden Sie im Leitfaden Erkennungsrichtlinien konfigurieren und in der Referenz zu eigenen Detektoren. Die drei Geschichten oben starteten dort, wo Ihre auch starten. Sie endeten mit einer Richtlinienänderung, klein genug, um sie an einem Freitag auszuliefern.
Protect your data from AI leaks
Try Zeuslock free — DLP for ChatGPT, Claude, Gemini and more.
Book a demo →