Das Python-Paket Abonnieren, entdeckt auf PyPI, wurde identifiziert als böswilligen, enthält eine herkömmliche Infostealer-Malware. Ihr entscheidendes Merkmal ist jedoch die Verwendung fortgeschrittener Code-Verschleierungstechniken, die ihre Nutzlast verschleiern, was die Analyse besonders schwierig macht. Diese Malware verwendet iterativ drei Verschleierungsebenen über ihre Angriffskette hinweg, was erhebliche Hürden für die manuelle Dekonstruktion schafft.
Unser Malware Early Warning-Team meldete das Paket dem PyPI-Sicherheitsteam, das es umgehend entfernte. In diesem Artikel erklären wir die einzelnen Schritte Abonnierenund die Methoden, mit denen dieser seinen Zweck verbirgt, mit einem Schwerpunkt auf der Zusammenarbeit von Infostealer-Malware und Code-Verschleierung.
Verschleierungsebenen der ThreadFluent Infostealer-Malware
1. Dreifache Verschlüsselung
Der Verschleierungsprozess beginnt mit einer stark verschlüsselten Nutzlast, eingebettet in die fluent.py Datei. Der anfängliche Kodierungs- und Entschlüsselungsprozess kann wie folgt zusammengefasst werden:
encoded_data = base64_module.b64decode("... BASE-6 with encrypted payload, IV and RSA-encrypted keys…”);
# … Sequential decryption: ChaCha20, Blowfish and AES …
encrypted_payload = AES_Cipher.new(aes_key, AES_Cipher.MODE_CBC, iv=aes_iv).decrypt(encrypted_payload[16:])
final_payload = unpad_function(encrypted_payload, AES_Cipher.block_size)
exec( zlib_module.decompress(bz2_module.decompress(final_payload)) )
Dieser Verschleierungsprozess umfasst:
- Kompression: Verwenden von gzip und bzip.
- Symmetrische Verschlüsselung: Kettenverschlüsselung mit ChaCha20, Blowfish und AES.
- Asymmetrische Verschlüsselung: RSA wird zum Verschlüsseln der symmetrischen Schlüssel verwendet.
Das Ergebnis wird in Base64 kodiert und eingefügt als kodierte_Daten. Jede Iteration baut auf der vorherigen auf und erzeugt eine verschachtelte Verschlüsselungsstruktur, die es außerordentlich schwierig macht, die tatsächliche Nutzlast ohne Reverse Engineering aufzudecken.
2. Gzip-Dekomprimierung
In vielen Zwischenschritten verwendet die Schadsoftware eine einfache, aber effektive Verschleierungsmethode: Gzip-Komprimierung kombiniert mit Base64-Kodierung.
import base64, zlib; eval(zlib.decompress(base64.b64decode(<STR>).decode('utf-8'))
Diese Technik stellt sicher, dass die verschleierte Nutzlast in allen Phasen verborgen bleibt.
3. Code-Verkettung und dynamische Kompilierung
Die letzte Ebene umfasst die Aufteilung der verschleierten Nutzlast auf mehrere Variablen, die während der Ausführung dynamisch verkettet und dekodiert werden:
import base64, zlib
FEQXCBDOZKHVIhT = '...'
# ....(111 other variables with base-64 encoded values) ...
zZytWuvuEdBXSrO =
eval(<FEQXCBDOZKHVIhT' encoded with '\x>) +
eval(<next variable, encoded>) +
eval( ' zlib.decompress(base64.b64decode(<VAR>)).decode('utf-8') ') + ...
eval(compile(base64.b64decode(eval(zZytWuvuEdBXSrO)).decode('utf-8'), ‘<app>', 'exec'))
Das manuelle Reverse Engineering dieser Phase gestaltet sich besonders mühsam, da jede Variable dekodiert und neu kombiniert werden muss, um die nächste Nutzlast freizugeben.
Durch die Kombination dieser Verschleierungstechniken Infostealer-Malware in Abonnieren entgeht der Entdeckung und zeigt die entscheidende Rolle von Code-Verschleierung bei modernen Cyberangriffen.
Die mehrstufige Angriffskette von ThreadFluent
Die Abonnieren Infostealer-Malware besteht aus vier verschiedenen Phasen, von denen jede zusätzliche Schichten einführt, Code-Verschleierung. Diese Phasen dienen nicht nur dazu, die Nutzlast zu übermitteln, sondern sie auch vor Erkennung und Analyse zu schützen.
Phase 0: Erste Codeausführung
Der Einstiegspunkt ist die __init__.py Datei, die die Ausführung der verschleierten Nutzlast in fluent.py. Diese Datei verwendet mehrschichtige Verschleierung (wie in den Schritten 1–3 beschrieben), um den Dropper der Stufe 1 zu erstellen:
import os,threading
def main():
if os.name == 'nt':
from . import fluent
fluent.main()
thread = threading.Thread(target=main , daemon=True)
thread.start()
Phase 1: Erster Dropper
Der erste Dropper lädt nach der Deobfuskierung zusätzlichen Schadcode herunter und bettet ihn ein. setzt.py, aus einem GitHub-Repository Red-haired-shanks-1337/Anfragen (Warnung: hier könnte sich ein bösartiger Code befinden).
Der Dropper bettet setzt.py in die lokale Installation des beliebten Zugriffe Bibliothek, Änderung ihrer __init__.py Datei, um die Deobfuskation auszuführen und die nächste Stufe zu durchlaufen. Diese Deobfuskation besteht aus der Umkehrung vieler Anwendungen der Verschleierungsebenen 1 … 3.
Stufe 2: Zweiter Dropper
Der zweite Dropper lädt, nachdem er nach demselben Verfahren entschlüsselt wurde, eine weitere Nutzlast herunter. ssl.py aus dem GitHub-Repository, benennt es um in udp.py, und generiert eine Sperrdatei, um sicherzustellen, dass die Malware nicht wiederholt neu installiert wird. Anschließend wird es ausgeführt, um es zu entschlüsseln, was zur Ausführung der endgültigen Infostealer-Nutzlast führt.
Phase 3: Letzter Infostealer
Die letzte Stufe ist ein voll funktionsfähiger Infostealer, der fortgeschrittene Ausweichtechniken einsetzt:
- Anti-Analyse-Funktionen:
- Erkennt Antimalware-Tools und wird beendet, wenn auf der schwarzen Liste stehende Prozesse, IPs, Hostnamen oder virtuelle Umgebungen erkannt werden.
- Datenexfiltration:
- Erfasst umfassende Informationen. Dazu gehören IP- und Mac-Adresse, VPN-Daten, Browser-Cookies/-Verlauf, Kreditkartendaten und Krypto-Wallet-Anmeldeinformationen, einschließlich eines Screenshots.
- Sendet gestohlene Daten (verschlüsselt) über einen Telegrammkanal und verwendet dabei die hier gezeigte Vorlage:
Deobfuskationsstrategie
Um ähnliche Pakete zu analysieren, müssen Forscher deren Verschleierungsebenen systematisch umkehren:
- Schritte zur Verschleierung emulieren: Schreiben Sie Skripte, um die Transformationen (z. B. Entschlüsselung, Dekomprimierung) zu simulieren, ohne die Nutzlast auszuführen.
- Schichten der umgekehrten Verschlüsselung: Extrahieren und entschlüsseln Sie die Nutzlast mit den eingebetteten Schlüsseln und Algorithmen.
- Iterative Analyse: Verarbeiten Sie jeden Zwischenschritt iterativ, um die endgültige Nutzlast zu rekonstruieren.
Um diese Analyse zu optimieren, sind automatisierte Tools und Sandbox-Umgebungen unerlässlich.
Der Bedrohungsakteur
Anscheinend wurde das Paket von zwei PyPI-Konten veröffentlicht, ABIRHOSSAIN10 und anomilano785, derzeit entfernt.
Es gibt ein (derzeit aktives) GitHub-Konto namens ABIRHOSSAIN10, die mit der Kampagne in Zusammenhang stehen könnten. Die Rothaarige-Schenkel-1337 Der GitHub-Benutzer, dem das Repository gehört, das zum Herunterladen der Nutzdaten der Stufen 2 und 3 verwendet wird, wird ebenfalls analysiert.
Obwohl die Zuordnung immer kompliziert ist und die Mitgliedschaft in einem Red Team möglich ist, deuten Art und Umfang der exfiltrierten Informationen auf einen böswilligen Akteur hin.
Fazit: Die Rolle der Code-Verschleierung bei der Entwicklung von Malware
Die Abonnieren Das Paket ist ein Beispiel für moderne Malware-Verschleierung in seiner mehrstufigen Bereitstellung. In Verbindung mit den eingesetzten Umgehungstechniken zeigt dieses Paket eindeutig, dass es versucht, der Erkennung zu entgehen und Analysen zu widerstehen.
Diese Analyse unterstreicht die Bedeutung gemeinsamer Anstrengungen und automatisierter Tools im Kampf gegen derartige Bedrohungen. Durch die Analyse und das Verständnis dieser Methoden können Sicherheitsexperten in Zukunft bessere Abwehrmaßnahmen gegen ähnliche Malware entwickeln.
Wie Xygenis MEW-System verhinderte, dass das bösartige Threadfluent-Paket in die Produktion gelangte
Xygenis Malware-Frühwarnung (MEW) System war maßgeblich an der Eindämmung der Abonnieren Python-Paket, eine bösartige Abhängigkeit mit erweiterten Code-Verschleierung und eine mehrstufige Infostealer-Malware, bevor es Produktionsumgebungen gefährden könnte. So geht's:
- Erkennung durch statische Analyse
MEW gesichtet AbonnierenDurchsucht den versteckten Code und findet verdächtige Anzeichen wie mehrschichtige Verschlüsselung und ungewöhnliche Abhängigkeitsaktivität. - Bewertung der Laufzeiterreichbarkeit
Das System stellte fest, dass der Code des Pakets während der Verwendung ausgeführt werden konnte, und kennzeichnete ihn als ernsthafte Bedrohung, ohne ihn tatsächlich auszuführen. - CI/CD Pipeline Schutz
MEW blockiert Abonnieren in Echtzeit, verhinderte, dass es in Builds aufgenommen wurde und in die Produktion gelangte. Es sendete den Entwicklern umsetzbare Warnmeldungen und sparte so wertvolle Zeit. - Austausch von Bedrohungsinformationen
Xygeni meldete das Paket umgehend an PyPI und gab seine Erkenntnisse an sein globales Sicherheitsnetzwerk weiter, wodurch eine weitere Verbreitung verhindert wurde.
Durch Fangen Abonnieren Das MEW-System von Xygeni stellte bereits frühzeitig sicher, dass der Schadcode weder Software-Lieferketten noch CI/CD zum Arbeitsablauf
Schützen Sie Ihre CI/CD Pipelines kostenlos
Verhindern Sie Bedrohungen wie Abonnieren mit Xygenis Malware-Frühwarnsystem. Starten Sie Ihre die kostenlose Testversion. heute und sichern Sie Ihre Software-Lieferkette.
Luis Rodriguez
Luis Rodriguez ist ein Physiotherapeutcist + Mathematiker und CISSP. Derzeit Mitgründer und CTO von Xygeni Security. Er verfügt über mehr als 20 Jahre Erfahrung im Bereich Softwaresicherheit und war an Projekten beteiligt wie SAST und SCA. Derzeit konzentriert er sich auf software supply chain security.
Daniel Martin
Daniel Martín ist Cybersicherheitsexperte und Mitglied des Xygeni-Forschungssicherheitsteams. Er ist spezialisiert auf SDLC Sicherheits- und Anwendungsschwachstellenminderung.





