Entwicklung & Code
Infostealer für Windows, macOS und Linux in zehn Pakten auf npm gefunden
Im JavaScript-Paketmanager npm waren seit Anfang Juli Pakete mit gut verstecktem Schadcode verfügbar. Das auf Software-Supply-Chain-Security spezialisierte Unternehmen Socket hat zehn Pakete gefunden, die zusammen auf 9900 Downloads kommen. Laut dem Socket-Blog waren sie am 28. Oktober noch auf npm verfügbar, sind dort inzwischen aber nicht mehr zu finden.
Weiterlesen nach der Anzeige
Die Pakete laden einen für das Betriebssystem passenden Infostealer nach, der unter Windows, macOS und Linux Zugangsdaten abgreift. Der Angriff ist mehrfach verschleiert.
Typosquatting als Türöffner
Die Angreifer setzen bei der Verteilung des Schadcodes auf Typosquatting: Die npm-Pakete tragen ähnliche Namen wie legitime Packages, darunter typescriptjs statt TypeScript und dizcordjs statt discord.js. Socket hat folgende Pakete mit Schadcode gefunden: typescriptjs, deezcord.js, dizcordjs ,dezcord.js, etherdjs, ethesjs, ethetsjs, nodemonjs, react-router-dom.js und zustand.js.
Die Installationsroutine, die sich im "postinstall" der Konfiguration in package.json befindet, öffnet betriebssystemabhängig ein neues Terminalfenster, in dem sie dann mittels Node die Anwendung app.js startet. Auf die Weise bleibt die Ausführung im Hauptfenster verborgen.
Mehrfach verschleierter Schadcode
Die Datei app.js verschleiert den Schadcode mit unterschiedlichen Methoden, darunter URL-Encoding und Switch-Anweisungen mit hexadezimalen und oktale Berechnungen:
Weiterlesen nach der Anzeige
// Control flow obfuscation makes it difficult to follow execution path
var kMvc = (0x75bcd15-0O726746425); // Evaluates to 0
while(kMvc < (0o1000247%0x10023)) { // Loop condition with mixed bases
switch(kMvc) {
case (0x75bcd15-0O726746425): // Case 0
kMvc = condition ? (262270%0o200031) : (0o204576-67939);
break;
case (0o203030-67070): // Case 1
// Actual logic here
break;
}
}
Die Kommentare im Codeausschnitt stammen von Socket. Um authentisch zu wirken, zeigt die Malware schließlich vor dem Start ein CAPTCHA als ASCII Art an.
DAs CAPTCHA ist eine reine Ablenkungsmaßnahme.
(Bild: Socket)
Nach der Eingabe einer beliebigen Zeichensequenz – das CAPTCHA ist eine reine Ablenkungsmaßnahme – sendet der Schadcode die IP-Adresse des Zielsystems an einen Server der Angreifer und lädt ein Binary herunter, das zum zuvor ermittelten Betriebssystem passt.
Cross-Plattform-Infostealer
Dafür wechselt die Schadsoftware die Programmiersprache auf Python: Der Schadcode findet sich in dem PyInstaller-Paket mit dem in keinster Weise verschleierten Namen „data_extracter“. PyInstaller verpackt eine Python-Anwendungen mit allen Dependencies in ein Paket und führt es auf dem Zielsystem aus. PyInstaller ist für Linux, Windows und macOS verfügbar und benötigt keine Python-Installation.
data_extracter sucht in zahlreichen Verzeichnissen und Dateien nach Zugangsdaten, darunter Firefox- und Chromium-Datenverzeichnisse, Directories für SSH-Schlüssel und Konfigurationsverzeichnisse wie ~/.aws/credentials. Das Programm durchsucht unter anderem SQLite-Datenbankdateien und JSON-Konfigrautionsdateien auf API-Keys und andere Credentials.
Die Anwendung greift zudem Cookie-Daten aus dem Browser ab und untersucht betriebssystemabhängig die Keyrings. Außerdem versucht sie Authentifizierungs-Token abzugreifen. Die gesammelten Credentials verpackt der data_extracter in eine Zip-Datei, die er schließlich an einen Server der Angreifer sendet.
Wer eins der genannten Pakete installiert hat, muss davon ausgehen, dass die Angreifer Daten abgegriffen haben. Auch wenn die gefundenen Pakete inzwischen nicht mehr zu finden sind, waren sie über drei Monate im Umlauf, und schon aufgrund der ausgefeilten Verschleierungstechniken könnten andere Pakete mit einer Variante des Angriffs betroffen sein.
Weitere Details zu den betroffenen Paketen, der Netzwerkinfrastruktur und den verwendeten MITRE ATT&CK-Techniken finden sich im Socket-Blog.
Der Vorfall ist ein erneutes Indiz, dass npm für Supply-Chain-Angrffe anfällig bleibt. Entwickler können jedoch einige Schutzmaßnahmen ergreifen.
(rme)