Ransomware in Python-Paketmanager PyPI: Die Rückkehr der Skriptkiddies

Eine Reihe von Paketen hat auf Typosquatting gesetzt und Code verbreitet, der unter Windows Dateien verschlüsselt. Die Motive sind schleierhaft.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen

(Bild: Gorodenkoff/Shutterstock.com)

Lesezeit: 3 Min.
Inhaltsverzeichnis

Auf dem Python-Paketmanager PyPI fanden sich bis vor Kurzem offenbar Packages, die einen Ransomware-Angriff unter Windows starten. Der Angreifer setzt auf Typosquatting: Sonatype hat drei Pakete identifiziert, die einen ähnlichen Namen wie die häufig genutzte HTTP-Library Requests tragen: requesys, requesrs und requesr.

Eine Untersuchung des Inhalts von requesys hat Python-Code zutage gefördert, der unter Windows unter anderem durch die Benutzerverzeichnis-Unterordner "Documents", "Pictures", "Videos" und "Music" geht und die Inhalte verschlüsselt. Dabei verwendet er das Python-Modul Fernet im Paket cryptography.

Der Code geht typische Unterverzeichnisse des User-Verzeichnisses durch, um die Inhalte zu verschlüsseln.

(Bild: Sonatype)

Nachdem das Programm die Inhalte verschlüsselt hat, erscheint ein Fenster mit dem Hinweis darauf, dass nun die Dateien verschlüsselt seien und das Opfer leider keinen Schlüssel habe. Der Paketautor mit dem Pseudonym b8ff könne aber auf Discord helfen. Dazu solle man die Einladung auf den Discord-Server OHR (Our Hope Remains) annehmen.

Laut den Untersuchungen von Sonatype lädt der Code tatsächlich den Schlüssel auf den Discord-Server des Angreifers hoch. Dort standen zur Zeit der Untersuchung im Discord-Kanal #ransomware-notifications die Usernamen von 15 Opfern, die das Paket installiert und ausgeführt hatten. Unter den Usernamen fand sich der zum Entschlüsseln der Verzeichnisse erforderliche Schlüssel. Der jüngste Eintrag im Kanal stammt vom 31. Juli.

Der Discord-Channel zeigt, dass der Angriff wohl über mehrere Monate Opfer gesucht hat.

(Bild: Sonatype)

Das ursprüngliche Paket mit dem Angriffscode enthielt den Code im Klartext. Inzwischen hat der Angreifer die Version 1.5 veröffentlicht, die eine Base64-enkodierte Datei als Windows Executable mitbringt. Die Arbeitsweise bleibt wohl dieselbe: Das Programm verschlüsselt die Inhalte, lädt den Schlüssel auf den Discord-Server und zeigt den Warnhinweis mit der Einladung.

Nicht nur der Code ist inzwischen verschleiert, auch die Intention ist schleierhaft. Unter dem Pseudonym b8ff findet sich auf GitHub das Repository Python Exploits, das auf den Einsatz der Ransomware und sogar den Blogbeitrag von Sonatype hinweist. Das Readme warnt, dass b8ff keinerlei Verantwortung dafür übernimmt, wie Anwender das Modul nutzen. Unter dem Pseudonym OHR findet sich zudem ein YouTube-Channel mit Hacking Tutorials.

Es ist somit nicht erkennbar, dass b8ff als ethischer Hacker lediglich vor den Gefahren warnen will, zumal der Code tatsächlich und ohne Warnung die Daten verschlüsselt. Es ist jedoch ebenso keine finanzielle Motivation erkennbar: Die Opfer erhalten ihren Schlüssel auf Discord ohne Lösegeldzahlung.

Der Verfasser des Codes hat aber auf Sonatypes Anfrage reagiert und erklärt, dass die Pakete vollständig als Open Source verfügbar seien und es sich um ein "Fun-Projekt" handle. Er bezeichnet den Code als harmlos: "The Ransomware has [technically] no ransom", da er kein Geld verlange. Schließlich outet er sich fast schon klischeehaft als Skriptkiddie: "Ich gehe noch zur Schule und derzeit kenne ich Python, Lua, HTML und ein wenig C++; das ist es schon".

Typosquatting und Co in PyPI und npm

Schadcode in Open-Source-Paketen gehört zu den verbreiteten Angriffen auf die Software Supply Chain. Angreiferinnen und Angreifer veröffentlichen auf Paketmanagern vermeintlich nützliche Pakete, die Developer in ihren Anwendungen verwenden. Häufige Methoden sind das Typosquatting und das Brandjacking. Letzteres verwendet Firmennamen wie Twilio, um eine legitime Quelle vorzutäuschen.

Beim Typosquatting tragen die Pakete mit Schadcode Namen, die den Bezeichnungen beliebter Pakete ähneln. Die Methode setzt zum einen auf Tippfehler und verwendet zum anderen Trennzeichen wie Unter- und Bindestriche. Aus my-packet wird my-paket, mypacket oder my_packet. Irgendwer wird sich schon vertippen, so die berechtigte Hoffnung der Angreifenden.

Ein weiterer Angriffsvektor sind zunächst nützliche und harmlose Pakete, die den Schadcode erst dann mitbringen, wenn sie eine gewisse Verbreitung erreicht haben. Das npm-Team hatte 2019 mit electron-native-notify ein solches Package entdeckt. Schließlich versucht Dependency Confusion intern gehostete Dependencies durch gleichnamige externe Pakete mit Schadcode zu ersetzen. Letztere bekommen dazu eine hohe Versionsnummer, da die Paketinstallationswerkzeuge wie pip je nach Einstellung das Paket mit der höchsten Nummer verwenden, das vermeintlich das aktuellste ist.

Weitere Details zum Angriff und dem Code lassen sich dem Sonatype-Blog entnehmen. Inzwischen hat b8ff das Paket auf PyPI umbenannt, und die beiden Pakete mit Typosquatting-Potenzial requesrs und requesr finden sich ebenfalls nicht mehr im Verzeichnis des Paketmanagers.

(rme)