Nach der Analyse von OpenSourceMalware beginnt die Infektionskette mit WEL1DROPPER. Der Downloader prüft zunächst Betriebssystem und Prozessorarchitektur und lädt dann eine kompatible Nutzlast von einem von drei Cloudflare-Workers-Hosts nach. Scheitern die HTTPS-Downloads, weicht die Schadsoftware auf plattformspezifische Domains aus und nutzt DNS-TXT-Einträge, um die nächste Stufe von der Domain „wel1[.]ru“ zu beziehen.
Paul McCarty beschreibt das Verfahren so: Das Paket fragt zuerst einen TXT-Eintrag von „c.<domain>“ ab. Dessen Antwort interpretiert es als Zahl der Nutzlast-Fragmente und akzeptiert dabei Werte zwischen 1 und 2.000. Anschließend fordert es nummerierte TXT-Einträge an, setzt die zurückgelieferten Zeichenketten zusammen und dekodiert sie per Base64 in einen Binärpuffer. Die finale Nutzlast wird in einen temporären Ordner geschrieben und unter Linux und macOS mit „/bin/sh“, unter Windows mit „cmd.exe“ ausgeführt.
Sonatype zufolge wird die letzte Stufe als entkoppelter Prozess gestartet. Die Windows-Variante patcht Event Tracing for Windows (ETW) und die Antimalware Scan Interface (AMSI), um die Überwachung zu stören, prüft auf Sandboxes und virtuelle Umgebungen, richtet Persistenz über einen Registry-Run-Schlüssel und eine geplante Aufgabe ein und lädt dann eine verschlüsselte Nutzlast unter „/pkg/update_win.exe“ herunter und startet sie.
Die Infektionskette unter macOS verläuft laut Sonatype ähnlich. Auch hier sucht die Schadsoftware nach Debuggern und Analyseartefakten, lädt anschließend eine passende Nutzlast unter „/pkg/beacon_mac.bin“ von einem entfernten Server und greift bei Fehlschlägen ebenfalls auf die DNS-TXT-Auslieferung zurück. Für Persistenz richtet sie einen LaunchAgent ein und startet die Binärdatei danach ebenfalls als entkoppelten Prozess.
Das Linux-Beispiel ist dagegen eine mit UPX gepackte ELF-Binärdatei. Sie ist so konfiguriert, dass sie zusätzliche Nutzlasten von einer Cloudflare-Worker-URL („oob-worker[.]cf99-9b3.workers[.]dev“) nachlädt. Am Ende steht laut Bericht die Bereitstellung von Sliver, einem quelloffenen Command-and-Control-Framework.
Die Pakete enthalten außerdem eine Datei namens „lib/telemetry.js“. OpenSourceMalware zufolge implementiert sie ein auf den ersten Blick plausibles Telemetrie-SDK, enthält aber ebenfalls die Downloader-Logik. Der Einstiegspunkt des Pakets importiere diese Datei nicht, und sie enthalte keine zusätzliche fest kodierte Infrastruktur. Die überdimensionierte Telemetrie-Implementierung solle offenbar Rauschen erzeugen und das bösartige Verhalten bei einer schnellen Prüfung wie native Profiling- oder Analysefunktionalität wirken lassen.
Laut OpenSourceMalware könnte es sich um eine Weiterentwicklung der im April beobachteten Dependency-Confusion-Kampagne „Moika“ handeln. Damals wurden mehr als 250 Pakete im npm-Registry veröffentlicht, um Umgebungsinformationen zu stehlen und eine betriebssystemspezifische zweite Stufe auszuliefern. Hinweise wie die Domains „tcsbank[.]ru“ und „cloudpayments[.]ru“ in der macOS-Nutzlast legen zudem nahe, dass die aktuelle Kampagne russische Finanzinstitute und mobile Zahlungen im Blick haben könnte.
Parallel dazu hat Palo Alto Networks Unit 42 mehrere Kampagnen gegen npm und das Python Package Index (PyPI) dokumentiert. Außerdem beobachteten die Forscher Chrome-Erweiterungen, die als Spiele-Emulatoren, Passwortmanager, Produktivitätswerkzeuge, CSS-Inspektoren und Markdown-Konverter beworben werden und den Browser in einen Proxy für Web-Crawling verwandeln. Die Erweiterungen enthalten laut Unit 42 dasselbe kommerzielle SDK zum Teilen von Web-Bandbreite, das den Browser mit einem Wohnnetz-Proxy eines Drittanbieters für Web-Scraping verbindet. Die Crawl-Befehle kommen über eine dauerhafte WebSocket-Verbindung, Seiten werden über ein verborgenes iframe in aktiven Tabs abgerufen, im Hintergrund in Markdown umgewandelt und an ein entferntes Cloud-Backend gesendet. Einige Erweiterungen offenbaren diese Praxis laut Unit 42 in ihren Beschreibungen im Chrome Web Store und in den Datenschutzerklärungen ihrer SaaS-Websites; nach der Installation fordert das SDK Nutzer zum Opt-in auf. Als Beispiel nennt Unit 42 die Erweiterung InstaSkip mit der Kennung „mdondgockboebafloibbhjofmoedmnnn“.
