Cyberbedrohungen
Shai-hulud 2.0 gegen Cloud- und Entwicklerökosysteme
Shai-hulud 2.0 nutzt eine ausgeklügelte Variante, die Anmeldedaten von großen Cloud-Plattformen und Entwicklerdiensten stiehlt und dank ihrer fortschrittlichen Taktiken sich schnell und unbemerkt in der gesamten Software-Lieferkette verbreiten kann.
Wichtige Erkenntnisse:
- Shai-hulud 2.0 setzt den Diebstahl von Anmeldedaten der ersten Variante fort. Die Malware stiehlt Anmeldedaten und Geheimnisse von großen Cloud-Plattformen sowie NPM-Token und GitHub-Authentifizierungsdaten.
- Sie automatisiert die Kompromittierung der Lieferkette, indem sie alle vom Opfer verwalteten NPM-Pakete mit einer Backdoor versieht und sie mit bösartigen Payloads, die bei der Installation ausgeführt werden, neu veröffentlicht. Dadurch entsteht eine hochgradig wurmfähige Bedrohung, die potenziell Tausende von nachgelagerten Benutzern betreffen kann.
- Die Malware nutzt gestohlene Cloud-Anmeldedaten, um auf Cloud-native Geheimnisverwaltungsdienste zuzugreifen, und verfügt gleichzeitig über destruktiven Code, der Benutzerdaten löscht, wenn die Datenerfassung nicht erfolgreich ist.
- Trend Vision One™ erkennt und blockiert die in diesem Blog beschriebenen Indikatoren für Kompromittierung (IOCs) und bietet Kunden maßgeschneiderte Abfragen zur Bedrohungssuche, Einblicke in Bedrohungen und Intelligence-Berichte.
Im September fand ein Supply-Chain-Angriff auf den Node Package Manager (NPM) statt, bei dem Angreifer eine sehr gezielte Phishing-Kampagne durchführten, um das Konto eines NPM-Paket Maintainers zu kompromittieren. Wir haben bereits detailliert beschrieben, wie der in JavaScript-Pakete eingeschleuste bösartige Code Kryptowährungs-Assets mithilfe von Web-API Hijacking abzweigte, wie der Netzwerkverkehr manipuliert wurde und der Shai-hulud-Wurm über diePayload Cloud-Service-Token stiehlt, Tools zum Scannen geheimer Daten einsetzt und sich auf weitere Konten ausbreitet. Über einen weiteren Vorfall vom 24. November berichtete ein Nachrichtenartikel. Hunderte von NPM-Repositorys wurden durch eine offenbar neue Shai-hulud-Kampagne kompromittiert (Repository-Beschreibung „Sha1-Hulud: The Second Coming“).
Unsere Analyse von Shai-hulud 2.0 zeigt, dass die Malware Anmeldedaten von AWS-, GCP- und Azure-Cloud-Anbietern stehlen kann, darunter API-Schlüssel, Tokens und Passwörter sowie NPM-Tokens und GitHub-Authentifizierungsdaten. Die Schädlingssoftware erstellt außerdem GitHub-Actions-Workflows, die Command-and-Control (C&C) ermöglichen. Darüber hinaus injiziert sie GitHub-Actions-Workflow-Mechanismen, die speziell zum Stehlen von Repository-Geheimnissen entwickelt wurden.
Über den Diebstahl statischer Anmeldedaten hinaus nutzt die Malware gestohlene Cloud-Anmeldedaten, um auf Cloud-native Geheimnis-Managementservices zuzugreifen. Sie kann Geheimnisse aus AWS mithilfe der AWS Secrets Manager API abrufen, Google Cloud-Geheimnisse über die GCP Secret Manager API extrahieren und Azure-Geheimnisse über Azure Key Vault sammeln. Die Malware zielt auch auf Anmeldedaten von Azure Pod Identity ab, einem Legacy-System, das nach wie vor weit verbreitet ist, um Kubernetes-Pods Azure-Identitäten bereitzustellen.
Als Krönung all dieser Funktionen, versieht die Malware automatisch jedes vom Opfer gemanagte NPM-Paket mit einer Backdoor und veröffentlicht es erneut mit bösartigen Payloads, die während der Paketinstallation ausgeführt werden. Dadurch entsteht ein Wurm-fähiger Vektor, der sich exponentiell im NPM-Ökosystem verbreiten und potenziell Tausende von nachgelagerten Benutzern gefährden kann, die den betroffenen Paketen vertrauen. Dieser gesamte Workflow ist automatisiert und wird parallel für bis zu 100 Pakete gleichzeitig ausgeführt, mit maximaler Verbreitung und minimierten Erkennungsmöglichkeiten.
Analyse des Angriffablaufs von Shai-hulud 2.0
Shai-Hulud 2.0 wird als NPM-Paket mit einem bösartigen Vorinstallationsskript geliefert, das während des NPM-Installationsprozesses automatisch ausgeführt wird.
Das ursprüngliche Dropper-Skript setup_bun.js dient als Loader, der während der Installation des NPM-Pakets ausgeführt wird. Sein Hauptzweck besteht darin, sicherzustellen, dass eine Bun-JavaScript-Laufzeitumgebung auf dem System des Opfers verfügbar ist, und diese dann zur Ausführung der eigentlichen Malware-Payload (bun_environment.js) zu verwenden. Danach muss das Setup Script die System PATH-Umgebungsvariable neu laden, um das installierte Executable zu finden. Der Installationsprozess verändert nämlich des Nutzers PATH.
Die letzte Phase des Setup-Skripts koordiniert die Ausführung der eigentlichen Malware- Payload, die in bun_environment.js liegt. Das Skript setzt den Bun-Prozess mit der Payload-Datei als Argument auf. Weitere technische Details finden Sie im Originalbeitrag.
Die Malware nutzt einen Stealth-Ansatz auf Entwicklerrechnern, indem sie einen separaten Hintergrundprozess startet, der es dem übergeordneten Prozess ermöglicht, sofort zu enden, sodass die NPM-Installation in normaler Zeit abgeschlossen wird und kein Verdacht entsteht. Dies geschieht, während der Hintergrund-Unterprozess, der alle Umgebungsvariablen einschließlich der Anmeldedaten geerbt hat, vollständig vor dem Benutzer verborgen weiterläuft, um Anmeldedaten zu stehlen. Dafür verwendet sie ein Modul zum Diebstahl von Anmeldedaten, das auf NPM-Authentifizierungstoken von Entwickler-Workstations abzielt.
Dann wird ein GitHub-Repository erstellt und eine C&C-Infrastruktur eingerichtet. Zunächst überprüft sie, ob die GitHub-Authentifizierung verfügbar ist, um sicherzustellen, dass die Malware über gültige gestohlene GitHub-Anmeldedaten verfügt, bevor sie fortfährt.
Weitere technische Informationen auch zur Erstellung eines bösartigen Workflows für die heimliche Exfiltrierung, dem Sammeln von Multicloud-Anmeldedaten von AWS, der Google Cloud Platform, Azure und der heimlichen Ausnutzung der entsprechenden Manager liefert der Originalbeitrag.
Shai-hulud 2.0 implementiert ein mehrstufiges Exfiltrierungssystem, das vier verschiedene Kategorien gestohlener Daten aggregiert und in ein vom Angreifer kontrolliertes Git-Repository hochlädt, das die Malware automatisch unter dem GitHub-Konto des Opfers erstellt. Der Exfiltrationsprozess erstellt vier separate JSON-Dateien, die jeweils bestimmte Kategorien gestohlener Daten enthalten (siehe Tabelle im Originalbeitrag).
Die Malware versieht automatisch jedes vom Opfer verwaltete NPM-Paket mit einer Backdoor und veröffentlicht es erneut mit bösartigen Payloads, die während der Installation des Pakets ausgeführt werden. Dadurch entsteht ein wurmfähiger Vektor, der sich exponentiell im NPM-Ökosystem verbreiten und potenziell Tausende von nachgelagerten Benutzern gefährden kann, die den betroffenen Paketen vertrauen.
Der Angriff erfolgt in fünf Phasen: Aufspüren aller Pakete, die dem Opfer gehören, Herunterladen der Original-Tarballs, Einfügen bösartiger Preinstall-Hooks, Bündeln des Malware-Installationsprogramms und erneutes Veröffentlichen der modifizierten Pakete als legitime Updates. Dieser gesamte Workflow ist automatisiert und wird parallel für bis zu 100 Pakete gleichzeitig ausgeführt, wodurch die Verbreitung maximiert und die Erkennungswahrscheinlichkeit minimiert wird. Dann durchsucht die Malware die NPM-Registry nach allen von dem authentifizierten Opfer gewarteten Paketen und sortiert die Ergebnisse nach monatlichen Downloads, um die beliebtesten zuerst zu infizieren.
Die Malware bündelt ein ausgeklügeltes mehrstufiges Installationsskript (setup_bun.js), das die Installation der Bun-Laufzeitumgebung und die Ausführung der Malware übernimmt, wie zu Beginn dieser Analyse erwähnt. Dieses Skript ist für den Einsatz auf Windows-, Linux- und macOS-Plattformen ausgelegt.
Nach dem Einschleusen von Schadcode und dem Bündeln von Payloads packt die Malware das modifizierte Paket neu und veröffentlicht es unter Verwendung der Anmeldedaten des Opfers auf NPM. Der Veröffentlichungsprozess nutzt das zuvor im Rahmen des Angriffs erlangte NPM-Authentifizierungs-Token des Opfers, sodass das bösartige Update als legitime Veröffentlichung des vertrauenswürdigen Paket-Maintaniners erscheint.
Indicators of Compromise (IoCs) sind hier zu finden.