Der Stealer packte die Platzhalter ein
Am 15. Oktober berichtete Symantec, dass Aoki, ein dieses Jahr erstmals gesichteter Infostealer, jetzt Zugangsdaten von Coding-Agenten sucht: .claude.json, Codex’ config.toml und .env-Dateien, Tokens für GitHub Copilot, Cursor, Gemini, JetBrains AI Assistant und Kiro sowie AWS-Schlüssel. In Bromure Agentic Coding enthält jede dieser Dateien einen Platzhalter, Anmeldungen und Schlüssel bleiben verschlüsselt auf dem Mac, und ein Platzhalter, der an den Server eines Stealers geht, hält die Maschine an.
Die Liste des Stealers beginnt jetzt mit Ihrem Coding-Agenten. Er will .claude.json, die Codex-Konfiguration und die .env-Dateien daneben.
Ein Infostealer hatte es früher auf Browser-Cookies, gespeicherte Passwörter, Krypto-Wallets und Discord-Tokens abgesehen. Aoki nimmt all das immer noch mit. Neuere Builds suchen zusätzlich nach den Dateien, die Ihr Coding-Agent in Ihrem Home-Ordner ablegt.
Symantecs Threat Hunter Team beschrieb die Änderung am Mittwoch, dem 15. Oktober, in Aoki: Infostealer Targets AI Coding Assistant Credentials. Infosecurity Magazine berichtete am selben Tag. Aoki, nach einer Zeichenkette in seiner Entschlüsselungsroutine auch Aokigahara genannt, tauchte Anfang dieses Jahres auf. Symantec schreibt, dass „frühere Versionen der Malware keine KI-bezogenen Dateien ins Visier nahmen“. Die neueste Probe tut es.
Was Aoki mitnimmt
Symantec listet die Agent-Dateien der neuesten Probe auf:
.claude.jsonund die Cookies von Claude Desktop.- ChatGPT-Cookies.
- Codex’
config.tomlund.env-Dateien. - Die lokale Zustandsdatenbank von Cursor, die „Chat-Kontext und Code-Schnipsel zwischenspeichern kann“.
- Tokens für GitHub Copilot, Cursor, Google Gemini, JetBrains AI Assistant und Kiro.
- AWS-Zugangsdaten.
Der Rest der Liste ist die übliche Infostealer-Beute: mehr als vierzig
Browser, rund neunzig Wallet-Erweiterungen, Desktop-Wallets,
Passwortmanager, Telegram, Discord, FTP- und VPN-Clients. Aoki sucht außerdem
nach jeder Datei, deren Name secret, privatekey, keystore, mnemonic,
passphrase oder backup enthält. Symantec merkt an, dass „die Malware
keine Liste von Backdoor-Befehlen hat“. Sie sammelt, was sie findet, und
schickt es per POST an einen /gate-Endpunkt auf ihrem
Command-and-Control-Server.
Symantec erklärt, warum sich die Agent-Dateien lohnen: „Wie Kartendaten lässt sich ein gestohlener KI-Schlüssel direkt zu Geld machen.“ Der Käufer verbraucht Kontingent auf Ihrem Konto, eine Praxis, die als LLMjacking bekannt ist. Dieselben Tokens „können Angreifern ermöglichen, unter der Identität eines legitimen Nutzers zu handeln“, und reichen bis zu den Repositories, Cloud-Konten und CI/CD-Pipelines, mit denen das Konto verbunden ist.
Symantec sagt nicht, wie Aoki auf eine Maschine gelangt. Auf dem Laptop
eines Entwicklers mit Coding-Agent ist der naheliegende Weg ein Paket. Der
Agent installiert täglich Dutzende davon auf eigene Faust, und eine bösartige
Abhängigkeit mit einem postinstall-Skript läuft mit den Rechten des
Agenten, sobald npm install fertig ist.
Dieselbe Liste in einer Bromure-Maschine
In Bromure Agentic Coding läuft der Agent in einer Linux-VM auf Ihrem Mac. Echte Zugangsdaten gelangen nie in diese VM. Der Mac hält sie in einem verschlüsselten Tresor und schreibt Platzhalter in die VM, die wie die echten aussehen, damit jedes Tool sie akzeptiert. Ein Proxy auf dem Mac tauscht jeden Platzhalter auf der Leitung gegen den echten Wert, und zwar nur bei Anfragen an den Host, zu dem die Zugangsdaten gehören.
Setzen Sie einen Stealer mit Aokis Liste in diese VM und gehen Sie seine Checkliste mit ihm durch.
.claude.json und der Claude-Schlüssel
Claude Code läuft in der VM mit sk-ant-api03-brm-…, einem
Platzhalter-Schlüssel. Wenn Sie sich mit einem Claude-Abo angemeldet haben,
wurden die OAuth-Tokens bei der Anmeldung auf dem Mac abgefangen und
verschlüsselt in claude-subscription.enc gespeichert. Der Host erneuert
das Access-Token etwa fünf Minuten vor Ablauf und fügt es in Anfragen an
Anthropic ein. Die VM hält nie ein Refresh-Token, also enthält weder
.claude.json noch irgendetwas anderes im Home-Ordner gültige
Claude-Zugangsdaten, die der Stealer mitnehmen könnte.
Codex’ config.toml, auth.json und .env
Codex bekommt eine vorbelegte ~/.codex/auth.json mit einem gefälschten
JWT, dessen Ablaufdatum weit in der Zukunft liegt, damit der Client nicht
versucht, es zu erneuern. Die echte ChatGPT-Anmeldung liegt auf dem Mac in
codex-subscription.enc. Ein OpenAI-API-Schlüssel erscheint in der VM als
sk-brm-….
Eine Projekt-.env, importiert mit Import env file… im Bereich
Credentials der Maschine, kommt mit denselben Variablennamen zurück,
jeder Wert ein brm_…-Platzhalter, beschränkt auf die Hosts, die Sie
wählen. Ihr Code liest STRIPE_KEY wie eh und je, und der Stealer liest
brm_….
GitHub, AWS und SSH
~/.git-credentials und GH_TOKEN enthalten einen ghp_-Platzhalter mit
40 Zeichen wie das Original. Es gibt keine ~/.aws/credentials.
~/.aws/config verweist auf einen credential_process-Helfer, der dem AWS
SDK die echte Access-Key-ID mit einem falschen, 40 Zeichen langen geheimen
Schlüssel übergibt, und der Mac signiert jede Anfrage auf dem Weg zu AWS neu.
Ein Stealer, der die Ausgabe des Helfers kopiert, bekommt einen geheimen
Schlüssel, der nur InvalidSignatureException liefert.
Die Stichwortsuche nach privatekey oder id_ed25519 findet nichts.
SSH_AUTH_SOCK ist in der VM eine Brücke zu einem Signier-Agenten auf dem
Mac, und die Bytes des privaten Schlüssels gehen nie hinüber.
Cookies
Aoki will die Cookies von Claude Desktop und ChatGPT. Die VM der Maschine hat weder eine Desktop-App noch ein Browserprofil, das sich lesen ließe. Wenn Sie sich für Bromure bei Claude oder ChatGPT anmelden, öffnet sich die Anmeldeseite im Browser Ihres Macs, und die Tokens landen im Tresor. Der Agent surft mit einem Chromium, das in einer eigenen, wegwerfbaren Sidecar-VM läuft, getrennt von der VM der Maschine, sodass ein Stealer in der VM des Agenten das Browserprofil nicht erreicht.
Der Upload an /gate
Zum Schluss schickt Aoki seine Beute per POST an /gate. Symantec nennt
dobeqnesmot[.]cc, hjazfioe[.]surf und neihite[.]cc. In einer
Bromure-Maschine muss diese Anfrage durch den Proxy auf dem Mac, denn der
Proxy ist der einzige Weg der VM ins Netz.
Der Proxy durchsucht jede ausgehende Anfrage, Header und Body, nach
Platzhaltern, die anderswohin unterwegs sind als zu dem Host, für den sie
ausgestellt wurden. Ein sk-ant-api03-brm-…-Wert hat genau eine legitime
Zielfamilie, Anthropic. Ein ghp_-Platzhalter gehört zu GitHub. In einem
POST an eine .cc-Domain können sie nur Exfiltration bedeuten. Der Proxy
antwortet mit HTTP 451 und leitet nichts weiter. Die VM hält sofort an, und
der Mac zeigt This environment may have been compromised, mit einer
Zeile pro geleaktem Platzhalter: eine Token-Vorschau, der Name der
Zugangsdaten, der Host, zu dem sie gehören, und der Host, den der Stealer
angesteuert hat.
Was dann passiert, entscheiden Sie. Save for Investigation exportiert die Festplatte der VM, ihren Home-Ordner und die freigegebenen Ordner in einen Ordner Ihrer Wahl und fährt die Maschine dann herunter. Shut down stoppt sie und markiert sie als kompromittiert. Eine kompromittierte Maschine startet erst nach Wipe and Launch wieder, das Festplatte und Home-Ordner ersetzt und Ihre Tokens, SSH-Schlüssel und Einstellungen behält. Ihre Claude-Anmeldung, Ihr GitHub-Token und Ihre AWS-Schlüssel waren nie in der VM, also hat der Stealer nichts kopiert, das Sie rotieren müssten.
Sie können den Upload auch schon vor dem Scan stoppen. Stellen Sie im
Bereich Guardrails der Maschine unter Outbound connections den
Punkt Unmatched traffic auf Deny und tragen Sie die Hosts ein, die
die Maschine braucht. Eine Verbindung zu einer unbekannten .cc-Domain wird
dann abgewiesen, und die Security Timeline zeigt dafür eine rote
Firewall-Zeile.
Verpackt der Stealer seine Beute so, dass der Scan die Platzhalter nicht lesen kann, erhält der Server am anderen Ende trotzdem Werte, die sich nirgends authentifizieren. Ein Platzhalter funktioniert nur, wenn er auf dem Weg zu dem Host, für den er ausgestellt wurde, durch den Proxy Ihres Macs läuft.
Bevor der Stealer läuft
Der wahrscheinlichste Weg in die VM eines Agenten ist ein Paket, das der Agent installiert hat. Der Bereich Supply Chain der Maschine prüft jeden Abruf auf dem Mac, bevor die VM ihn zu sehen bekommt:
- Die Mindestalter-Sperre, standardmäßig aktiv mit zwei Tagen Minimum,
blendet Paketversionen aus, die jünger als die Grenze sind. Ein gekapertes
Release, das binnen Stunden zurückgezogen wird, erreicht
npm installnie. - Das Entfernen von Installationsskripten streicht, wenn Sie es
einschalten, die Hooks
preinstall,install,postinstallundprepareaus jedem npm-Tarball unterwegs, der übliche Weg, auf dem npm-Malware bei der Installation läuft. - OSV, socket.dev oder Depi blockieren Versionen mit bekannten Sicherheitshinweisen und Pakete, die als Malware oder Typosquats markiert sind, mit einem 451, dessen Begründung der Paketmanager wörtlich ausgibt.
Jeder Abruf erscheint in der Security Timeline, sodass Sie nach einem Vorfall das Paket finden, das den Stealer hereingebracht hat.
Wenn der Stealer auf dem Mac läuft
Aokis Dateiliste zeigt auch, was ein Stealer auf dem Mac selbst findet, und
eine Bromure-Installation fügt dem nichts hinzu. Bromure importiert die
Anmeldungen der Claude- oder Codex-CLI Ihres Macs nicht und braucht sie
nicht: Die Agenten laufen in der VM, und ihre Anmeldungen liegen im Tresor.
Alles unter ~/Library/Application Support/BromureAC/, was ein Geheimnis
enthält, ist AES-GCM-Chiffretext. Der Hauptschlüssel liegt im Data Protection
Keychain, gebunden an Bromures Signaturidentität, und wird nie
synchronisiert. Ein Stealer, der den Ordner kopiert, erbeutet verschlüsselte
Blobs.
Symantec hebt die lokale Datenbank von Cursor hervor, weil sie Chat-Kontext und Code zwischenspeichert. Bromures Aufzeichnung dessen, was der Agent getan hat, der Session-Trace, ist im Ruhezustand mit demselben Tresorschlüssel verschlüsselt und speichert Token-Tausche nur als Vorschau aus erstem und letztem Zeichen. Kein echtes Geheimnis erscheint in einem Trace, ob verschlüsselt oder nicht.
Jede Datei auf der Liste enthält einen Platzhalter
.claude.json, Codex’ auth.json und config.toml, importierte .env-Werte, Git-Zugangsdaten und die AWS-Konfiguration tragen allesamt Platzhalter. Refresh-Tokens und private SSH-Schlüssel kommen nie in die VM.
Der Upload stoppt die Maschine
Der Proxy findet Platzhalter auf dem Weg zu einem Host, für den sie nicht ausgestellt wurden, antwortet mit 451, hält die VM an und nennt jeden geleakten Zugang.
Nichts zu rotieren
Wipe and Launch ersetzt Festplatte und Home-Ordner und behält Ihre Schlüssel. Der Stealer hat Werte erbeutet, die nur durch den Proxy Ihres Macs funktionieren.
Die Tür wird bewacht
Mindestalter-Sperre, Entfernen von Installationsskripten und Reputationsprüfungen laufen auf dem Mac, bevor ein Paket die VM erreicht, und jeder Abruf wird protokolliert.
Die Liste wird länger
Laut Symantec scheinen Aokis Fähigkeiten „sich noch in aktiver Entwicklung zu befinden“, und andere Stealer werden die Liste kopieren. Aoki hat die Agent-Dateien aufgenommen, weil sich gestohlene Agent-Schlüssel und -Anmeldungen verkaufen lassen. Lassen Sie Ihre Agenten in einer Bromure-Maschine laufen, und der Käufer bekommt ein Bündel Platzhalter, das kein Server außerhalb des Proxys Ihres Macs annimmt.
Zur alltäglichen Variante desselben Problems, bei der der Agent selbst ein Geheimnis in sein Transkript kopiert, lesen Sie Das Transkript behielt das Token. Zu einem Wurm, der es aus einem kompromittierten npm-Paket heraus auf dieselben Dateien abgesehen hatte, lesen Sie Das Widerrufen des Tokens war der Auslöser.