Zurück zu allen Beiträgen
Veröffentlicht am · von Renaud Deraison

Sie haben Ihren Agenten auf die Liste gesetzt

Gen Digital veröffentlichte am 8. September eine Untersuchung, nach der acht verbreitete Infostealer-Familien inzwischen die lokalen Daten von KI-Coding-Agenten einsammeln: Access- und Refresh-Token, MCP-Konfigurationen, Konversationsdatenbanken, Prompt-Verläufe, Projektspuren. Keine Lücke in Claude, Cursor oder Codex ist im Spiel. Stealer tragen fernverwaltete Sammelregeln, deshalb war das Hinzufügen des Agentenordners nur ein Config-Push auf Maschinen, die ohnehin schon infiziert waren. Bromure Agentic Coding verlegt diesen Ordner in eine VM und füllt ihn mit brm-Attrappen, und hält das Refresh-Token auf dem Host, wo der Gast es nie besitzen kann.

Ihr Coding-Agent hat keinen Fehler, den jemand finden müsste. Jemand hat bemerkt, wo er seine Dateien ablegt, und eine einzige neue Konfigurationszeile an ein paar hunderttausend ohnehin kompromittierte Maschinen ausgerollt.

Am 8. September veröffentlichte Jan Rubín, der das Threat-Research-Team von Gen Digital leitet, einen kurzen Beitrag mit einem unspektakulären Befund. Acht verschiedene Familien verbreiteter Informations-Stehlsoftware sammeln inzwischen die lokalen Daten von KI-Coding-Agenten ein. Sie kopieren Dateien. Das ist die ganze Technik.

Die genannten Ziele lesen sich wie eine Umfrage darüber, was Entwickler dieses Jahr installiert haben: Claude, Cline, Codex, Continue, Cursor, OpenCode, Kilo. Amatera ging auf Cline und Continue los. Remus ging auf Claude, Cursor und OpenCode los. CallbackBeaver nahm Cursor und Claude dazu, und Gen zählte davon mehr als 5.000 Samples in einem Fenster von dreißig Tagen. BeeStealer, STG Stealer, HydraStealer, APEX Stealer und Otter Stealer machen alle eine Variante desselben. Auf macOS heißt die Spielart Djinn Stealer, und deren Liste ist die längste: Claude, Codex, Gemini, Cline, OpenCode, Kilo.

Rubín ist genau darin, was er beschreibt. „Die Aktivität deutet nicht auf eine neu entdeckte Lücke in Claude, Cursor oder Codex hin“, schreibt er. „Sie zeigt vielmehr Kriminelle, die etablierte Stealer anpassen, um wertvolle Dateien einzusammeln, die in vorhersehbaren lokalen Ordnern liegen.“

Die Liste wurde eine Zeile länger

Die Änderung kostete ihre Urheber so gut wie nichts.

Moderne Stealer kodieren nicht fest, was sie mitnehmen. Sie kommen mit fernverwalteten Sammelregeln: ein Konfigurations-Blob, der Ordner, Dateinamen, Datenbankdateien, Endungen und Suchgrenzen auflistet und von der Infrastruktur des Betreibers geholt wird. Ein neues Ziel aufzunehmen bedeutet, wie Cyber Press es zusammenfasste, dass Betreiber „neu populäre KI-Werkzeuge in die Sammellisten der Schadsoftware aufnehmen, indem sie Pfade, Dateinamen oder Datenbankregeln aktualisieren, ohne die Schadsoftware zwingend neu zu bauen“.

Das war eine Produktentscheidung. Jemand hat sich angesehen, welche Ordner inzwischen etwas Verkäufliches enthalten, hat ein paar Pfade in eine Konfiguration geschrieben, und die Maschinen, auf denen eine dieser Familien ohnehin lief, begannen beim nächsten Check-in Agentendaten zu verschicken. Die Betreiber haben nichts neu infiziert. Die Binärdatei auf der Platte blieb gleich, die Erkennungssignatur also auch.

Gen verzeichnete Infostealer-Funde bei 3,3 Millionen eindeutigen geschützten Nutzern im ersten Halbjahr 2026, mit Monatswerten über 500.000. Allein Amatera und Remus tauchten binnen dreier Monate bei Zehntausenden Nutzern auf. Das ist die Population, an die die Betreiber die neue Regel ausgerollt haben.

ein Config-Push, keine KampagneBetreiber — SammelregelnBrowser, Cookies, WalletsSlack, Discord, VPN-Profilessh-Keys, Cloud-Speicherpfade+ Verzeichnisse der KI-Agenteneine Zeile mehr, Septembernächster Check-inbereits infizierte Maschinen3,3 Mio. Nutzer, H1 2026500.000+ Funde pro MonatBinärdatei unverändertkeine Neuinfektion nötigkeine neue Signaturwas das Notebook verlässtAccess- + Refresh-TokenMCP-Server-ZugangsdatenKonversationsdatenbankPrompt-VerlaufProjektnamen, Quellcode-CacheKonto- und Abo-Detailsacht Familien, ein QuartalAmatera · Remus · CallbackBeaver · BeeStealer · STG · Hydra · APEX · Otter — und Djinn auf macOS
Die KI-Coding-Agenten auf die Beuteliste zu setzen, kostete die Betreiber keinen neuen Build. Verbreitete Stealer holen fernverwaltete Sammelregeln (Ordner, Dateinamen, Datenbankdateien, Endungen) von ihren Betreibern. Ein Betreiber hängt die Agentenverzeichnisse an, und jede bereits infizierte Maschine beginnt beim nächsten Check-in, sie einzusammeln. Die Binärdatei auf der Platte ist unverändert, an der Maschine sieht also nichts anders aus.

Was in diesem Ordner liegt

Gens Aufstellung dessen, was die Regeln einsammeln, ist konkret: „Access- und Refresh-Token, in MCP-Konfigurationen gespeicherte Zugangsdaten, Prompt-Verläufe, Konversationsdatenbanken, Kontodetails und Spuren der Projekte, an denen ein Entwickler gearbeitet hat.“

Diese Liste fasst zwei ganz verschiedene Verluste unter einem Namen zusammen.

Der erste ist Zugang. Ein Access-Token kauft eine Sitzung. Ein Refresh-Token kauft Sitzungen, im Plural, so lange es gültig bleibt, weil jemand es so entworfen hat, dass es die Sitzung überlebt, aus der es stammt. Genau diese Eigenschaft macht es diebstahlswürdig, und deshalb lässt das Widerrufen einer Sitzung den Dieb dort, wo er war. Direkt daneben, im selben Ordner, liegen die Zugangsdaten aus Ihrer MCP-Konfiguration, die wieder etwas anderes aufschließen: einen internen Dienst, ein Ticketsystem, eine Datenbank hinter einem HTTP-MCP-Server.

Der zweite Verlust ist Aufklärung, und er ist neuer. Ihr Prompt-Verlauf ist eine geführte Tour durch die Infrastruktur Ihres Arbeitgebers. Cyber Press sagte es schlicht: gestohlene Prompt-Verläufe verraten „Repository-Namen, interne Hostnamen, Infrastrukturdetails, Sicherheitskontrollen, API-Geheimnisse und Geschäftspläne“. An einem Dienstag tippen Sie den Namen des Dienstes ein, den Namen des Clusters, den Grund, warum die Migration hängt, und dann fügen Sie das Snippet mit dem Connection-String darin ein, um zu fragen, warum das Ding immer wieder fehlschlägt. Für Ihr eigenes Chatprotokoll haben Sie nie ein Bedrohungsmodell geschrieben.

Er kommt über ein Suchergebnis

Auch das Aufspielen des Stealers braucht keinen Zero-Day. Im Mai dokumentierte EclecticIQ eine Kampagne, die gefälschte Installationsseiten über die echten hob: claudecode.co.com und geminicli.co.com, der Herstellerdokumentation nahe genug nachempfunden, um einem flüchtigen Blick standzuhalten. Die Seite reicht Ihnen eine PowerShell-Zeile zum Kopieren. Sie führen sie aus und bekommen das gewünschte Werkzeug, ganz offen installiert, während ein zweiter versteckter Befehl einen dateilosen Stealer direkt in den Speicher zieht. Er schaltet unterwegs ETW und AMSI ab und erntet dann Browser, Slack, Teams, Discord, VPN-Clients, SSH-Schlüssel und Cloud-Speicherpfade. Derselbe Akteur spielte dasselbe Stück gegen Node.js, Chocolatey, KeePassXC und Monero.

Das Opfer ist also der Entwickler, der nach einem Coding-Agenten gesucht und auf das oberste Ergebnis geklickt hat. Vier Monate später gibt derselbe Entwickler auch die Token und den Konversationsverlauf des Agenten heraus, weil die Sammelregel eine Zeile gewachsen ist.

Derselbe Durchlauf, in einem Bromure-Workspace

Bromure Agentic Coding führt jeden Coding-Agenten in einer hardwarevirtualisierten Linux-VM auf Ihrem Mac aus und hält jedes echte Geheimnis auf der Host-Seite dieser Grenze. Nehmen Sie Gens Sammelliste Punkt für Punkt und lassen Sie sie gegen einen Workspace laufen. Nehmen Sie an, der Stealer gewinnt auf dem Host, liest die Regel und holt sich jedes Stück.

Access- und Refresh-Token. Wenn Sie ein Claude- oder ChatGPT-Abo statt eines API-Keys nutzen, findet die Anmeldung nie in Ihrer Arbeits-VM statt. Bromure startet eine Wegwerf-VM zur Registrierung, ohne eingehängte Workspace-Ordner und ohne Tauschtabelle für Zugangsdaten, führt darin das echte claude login aus, fängt die entstehenden OAuth-Token auf dem Host ab, verschlüsselt sie und zerstört die VM. Von da an läuft der Gast im API-Key-Modus mit einem deterministischen Fake-Zugangsdatum: ein falscher ANTHROPIC_API_KEY für Claude, eine ~/.codex/auth.json mit einem falschen JWT weit in der Zukunft für Codex, damit der Client nie selbst zu erneuern versucht. Erneuert wird auf dem Host, etwa fünf Minuten vor Ablauf, einmal für jede laufende VM. Das Handbuch benennt die Folge unmissverständlich: der Gast hält nie ein Refresh-Token.

In MCP-Konfigurationen gespeicherte Zugangsdaten. Das MCP-Bearer bekommt dieselbe Behandlung, und der Einstellungsbereich sagt das auch. Das echte Token eines MCP-Servers mit HTTP-Transport bleibt auf dem Host, die Konfiguration, die der Agent liest, bekommt einen brm-mcp_…-Platzhalter, und der Proxy setzt den echten Wert auf der Leitung ein, exakt oder auf Subdomain begrenzt auf den Host dieses Servers und sonst nirgends. Das Feld im MCP-Bereich trägt die Beschriftung Nie an die VM gesendet — vom Proxy ersetzt.

Alles andere, was nach einem Schlüssel aussieht. Jedes Zugangsdatum, das Sie konfigurieren, wird innerhalb der VM durch eine strukturerhaltende Attrappe ersetzt, abgeleitet aus dem echten Wert plus einem Salt pro Installation, sodass sie die Form behält, die Validierer erwarten, und über Sitzungen hinweg stabil bleibt: sk-ant-api03-brm-…, sk-brm-…, xai-brm-…, brm-k8s-…, brm-docker-…, brm-db-…. Der Tauschkanal läuft nur in eine Richtung. Der Host kann Attrappen in den Gast schreiben; es gibt keinen Aufruf, mit dem der Gast einen echten Wert zurückverlangt, und der Agent in der VM weigert sich, ein Zugangsdatum ohne brm--Präfix zu schreiben.

Konversationsdatenbanken, Prompt-Verläufe, Projektverweise, Quellcode-Cache. Diese sind echt und dauerhaft, weil Codearbeit dauerhaften Zustand braucht. Sie liegen im eigenen dauerhaften Home-Ordner der Workspace-VM, einer pro Workspace, hinter dem Hypervisor, statt in dem macOS-Home-Verzeichnis, das die Sammelregel nennt. Eine Regel, die sagt „kopiere das Konfigurationsverzeichnis des Agenten aus dem Benutzerprofil“, findet ein Benutzerprofil ohne Agenten darin.

Der Speicher des Hosts selbst. Was der Host aufbewahrt, ist im Ruhezustand mit AES-GCM unter einem 256-Bit-Hauptschlüssel pro Installation verschlüsselt, der in der macOS-Data-Protection-Keychain liegt, auf die Signaturidentität der App begrenzt und mit abgeschalteter iCloud-Synchronisierung. Die App lädt nichts hoch und synchronisiert nichts. Kopieren Sie den Ordner Application Support oder spielen Sie ein Time-Machine-Backup davon zurück, und ohne den Keychain-Eintrag dieses Macs haben Sie Geheimtext.

die Sammelregel, in einem Workspace ausgeführtwas die Regel verlangtwas sie findetAccess- + Refresh-Tokenein Fake-Key; in der VM existiert kein Refresh-Tokender Host erneuert ~5 Min vor Ablauf, für jede VM auf einmalMCP-Konfigurationbrm-mcp_…echtes Bearer erst auf der Leitung, nur für diesen HostAPI-Keys, Cloud-Zugangsdatensk-ant-api03-brm-… · brm-k8s-… · brm-db-…richtige Form, falscher Wert, außerhalb ihres Bereichs totKonversations-DB, Prompt-Verlaufecht, dauerhaft — und im Home der VM, nicht in Ihremder Pfad in der Regel nennt einen Ordner, den Ihr Mac nicht hat
Die Sammelliste von Gen Digital, Punkt für Punkt, gegen einen Workspace von Bromure Agentic Coding gehalten. Die Abo-Token liegen auf dem Host und werden auf dem Host erneuert, der Gast hält also nie ein Refresh-Token. Das MCP-Bearer in der Konfiguration des Agenten ist ein brm-mcp-Platzhalter. API-Keys sind strukturerhaltende Attrappen. Konversationsdatenbank und Prompt-Verlauf sind echt und liegen im dauerhaften Home der VM statt in dem macOS-Home-Verzeichnis, auf das die Regel zeigt.

Wenn der Durchlauf in der VM passiert

Ein Stealer kann auch andersherum kommen: vom Agenten selbst hereingeholt, über eine Abhängigkeit oder eine vergiftete Anweisung, und im Workspace ausgeführt. Dann gelingt der Durchlauf, und er sammelt Attrappen ein. Beim Hochladen fällt er um.

Jede Attrappe hat genau eine legitime Zielfamilie, den Host-Bereich, für den sie geprägt wurde, also durchsucht der Proxy jede ausgehende Anfrage, Header und Body, mit einem Aho-Corasick-Automaten, der günstig genug ist, um auf allem zu laufen, und sucht nach einer Attrappe, die irgendwohin unterwegs ist, wo sie nicht hingehört. Bei einem Treffer lehnt er die Anfrage mit HTTP 451 ab, ohne ein Byte weiterzuleiten, pausiert die VM auf der Stelle und wirft eine Warnung, die Herunterfahren, Für Untersuchung sichern (zuerst Datenträger, Home- und geteilte Ordner für die Forensik exportieren) oder Fortfahren auf eigenes Risiko anbietet. Das Ereignis landet als rote Credential brokering-Zeile in der Security Timeline, die App markiert den Workspace als kompromittiert, und der nächste Start verlangt Löschen und starten.

Der Proxy meldet außerdem ungetauschte, echt aussehende Geheimnisse im ausgehenden Verkehr: Bearer- und x-api-key-Werte mit bekannten Präfixen wie sk-ant-, ghp_ oder AKIA und opake Token ab zwanzig Zeichen. Die tauchen im Trace Inspector und in bromure-cli trace leaks auf. Meist bedeuten sie, dass jemand ein echtes Geheimnis von Hand in die VM eingefügt hat, und das ist der eine Weg, die Grenze von innen aufzuheben.

Erreichbarkeit ist die dritte Prüfung. Jeder Workspace trägt eine geordnete Egress-Firewall über Aktion, Protokoll, Host oder CIDR, Ports und, für Web-Verkehr, die einzelnen HTTP-Verben, mit einem Segmentschalter für nicht zugeordneten Verkehr. Neue Workspaces erlauben, was keine Regel trifft. Stellen Sie ihn auf Verweigern, listen Sie auf, was die Arbeit braucht, und der C2-Host eines Stealers steht nicht auf der Liste. Zwei Komponenten außerhalb des Gasts setzen das durch: der virtuelle Netzwerk-Switch ordnet jeden Fluss nach Ziel-IP und per DNS mitgelesenem Hostnamen zu, und der Proxy ordnet erneut nach TLS-Servernamen zu. Ihre Regeländerungen erreichen laufende Sitzungen ohne Neustart.

der Zustand liegt in Ihrem Homeein vorhersehbarer Pfad, lesbar für alles, was als Sie läuftdas Verzeichnis des AgentenAccess-Token · Refresh-TokenMCP-Bearer-TokenKonversationsdatenbankPrompt-Verlauf · Projektnamenresidenter Stealer liest die Regel, kopiert den Ordnerdie Binärdatei blieb gleich; nur die Pfadliste nichthochgeladenerneuerbarer Zugang, plus eine Karte des Bestandsder Zustand liegt in einer VM, als AttrappenIhr macOS-Home hat kein Agentenverzeichnis zu nennenWorkspace-VM — dauerhaftes HomeFake-Key · kein Refresh-Tokenbrm-mcp_… · brm-k8s-… · brm-db-…Konversationsdatenbank und Verlauf, hinter dem Hypervisordie echten auf dem Host verschlüsselt, AES-GCM, Keychainvsock 8443 — einziger Weg hinausHost-Proxy — pro Anfrage konsultiertEgress-Firewall · Host, Port, HTTP-VerbTausch · echter Wert nur für einen Hosteine Trace-Zeile pro Anfrage, auf Ihrer MaschineAttrappe außerhalb ihres Bereichs → HTTP 451, VM pausiert, Timeline-Zeile
Zwei Orte, um den Zustand eines Agenten aufzubewahren. Auf einem gewöhnlichen Mac liegen die Token, die MCP-Zugangsdaten und der Konversationsverlauf in einem vorhersehbaren Ordner im Benutzerprofil, genau dem, den die Sammelregel nennt, und alles, was als Sie läuft, kann ihn lesen. In einem Workspace von Bromure Agentic Coding liegt derselbe Zustand im dauerhaften Home einer VM, die Zugangsdaten darin sind brm-Attrappen, und der einzige Weg hinaus ist vsock-Port 8443 zu einem Host-Proxy, der die Firewall prüft, Zugangsdaten tauscht und jede Attrappe abweist, die ihren Bereich verlässt.

Wenn Sie Agenten per Copy-Paste installieren

Prüfen Sie, woher Sie sie haben. Die Kampagne von EclecticIQ hob claudecode.co.com und geminicli.co.com über die echten Seiten und reichte Besuchern eine PowerShell-Zeile, die das echte Werkzeug installierte und dabei einen Stealer in den Speicher zog. Wenn das eine Installation beschreibt, die Sie gemacht haben, behandeln Sie die ganze Maschine als offengelegt: widerrufen Sie Abo-Sitzungen, statt einen einzelnen Schlüssel zu rotieren, rotieren Sie jedes Token in Ihrer MCP-Konfiguration, und lesen Sie Ihren eigenen Prompt-Verlauf so, wie ein Angreifer ihn lesen würde. Die Hostnamen und Repository-Namen darin sind der Teil, den Sie nicht rotieren können.

Die zwei Einstellungen, die das Ziel verkleinern

Registrieren Sie Ihr Claude- oder ChatGPT-Abo über den Workspace-Editor, damit die OAuth-Token auf dem Host abgefangen werden und der Gast auf einem Fake-Key läuft. Öffnen Sie dann Guardrails, stellen Sie Nicht zugeordneter Verkehr auf Verweigern und listen Sie auf, was die Arbeit braucht: allow web api.github.com, allow web registry.npmjs.org, default deny. Führen Sie nach einer Sitzung bromure-cli trace hostnames my-workspace aus, um jeden Host zu sehen, den der Agent erreicht hat, mit Zählern.

Die Beute folgt der Verbreitung

Stealer lernen Ordner in vorhersehbarer Reihenfolge. Browserprofile, dann Kryptowallets, dann Discord- und Slack-Token, dann VPN-Profile. Jeder kam ein oder zwei Jahre nachdem das Ding, zu dem er gehörte, normal geworden war, in die Sammelregeln. Diese Verzögerung ist die Zeit, bis genug Maschinen den Ordner haben, damit sich die Zeile Konfiguration zu schreiben lohnt.

Coding-Agenten haben diese Schwelle dieses Jahr überschritten, zum Eintrittspreis einer Konfigurationsaktualisierung, über acht Familien hinweg, innerhalb eines einzigen Quartals. Kein Patch schließt das, weil nichts kaputt ist. Der Ordner liegt, wo er liegen soll, und enthält, was er enthalten soll, auf einer Maschine, auf der auch Ihr Browser und Ihre E-Mail laufen.

Was den Ausgang ändert, ist, den Ordner weniger wert zu machen als die Mühe, ihn zu kopieren. Legen Sie den Zustand des Agenten auf die andere Seite eines Hypervisors, füllen Sie seine Zugangsdatendateien mit Werten der richtigen Form und der falschen Zahl, und behalten Sie die echten auf dem Host, wo die Erneuerung passiert.

Ihr Coding-Agent ist eine normale Anwendung, die normale Dateien an einem normalen Ort ablegt, und genau deshalb kam er auf die Liste. Entscheiden Sie, wie viel diese Dateien wert sein dürfen, bevor die nächste Familie ihre Konfiguration aktualisiert. Installieren Sie Bromure Agentic Coding und lassen Sie sie die Attrappen kopieren.