Schadcode in Python-Paketen trifft Discord-Bot-Plattform mit 170.000 Usern

Eine mehrstufige Supply-Chain-Attacke hat unter anderem erfolgreich die Platform Top.gg infiltriert und Schadcode an die User verteilt.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Schadecode auf Rechner

(Bild: Gorodenkoff/Shutterstock.com)

Lesezeit: 5 Min.
Inhaltsverzeichnis

Security-Forscher von Checkmarx haben eine Supply-Chain-Attacke entdeckt, die Python-Pakete mit Schadcode über einen mehrstufigen Angriff verteilt hat. Die Angreifer haben zunächst Pakete mit Schadcode auf die reguläre Paket-Registry von Python hochgeladen. Später haben sie eine Domäne für eine eigene Paket-Registry registriert und dort eine mit Schadcode versehene Kopie des weitverbreiteten Pakets Colorama bereitgestellt.

Schließlich sind die Angreifer GitHub-Accounts angegangen, die sie übernommen haben, um den Schadcode gezielt in andere Projekte einzuschleusen. Den Angriff auf eine Python-Library für die Discord-Bot-Plattform Top.gg konnte Checkmarx nachvollziehen. Die Discord-Bot-Plattform hat laut Checkmarx 170.000 User. Wie viele tatsächlich von dem Angriff auf die Python-Library, die auf GitHub eine überschaubare Nutzerzahl hat, betroffen sind, ist allerdings nicht klar.

Andere Projekte haben die Angreifer wohl ebenfalls erfolgreich infiltriert.

Der erste Anlauf des Angriffs geht wohl bis in den November 2022 zurĂĽck. Seinerzeit hat jemand mit dem User-Namen felpes drei Pakete mit unterschiedlichem Schadcode auf der offiziellen Python-Paket-Registry PyPI (Python Package Index) hochgeladen.

Der mehrstufige Angriff in der jetzigen Form begann allerdings erst im Februar 2024: Die Angreifer registrierten zunächst die Domäne pypihosted(.org). Damit bereiteten sie eine Typosquatting-Attacke vor: Üblicherweise zielt diese Form des Angriffs auf Pakete mit leicht geänderten Namen: Aus my-packet wird my-paket, mypacket oder my_packet. Irgendwer wird sich schon vertippen. In dem Fall des Domain-Typosquatting sollte der Domänenname der Angreifer suggerieren, dass es sich um die offizielle PyPI-Plattform handelt, die allerdings nicht pypihosted, sondern pythonhosted.org heißt.

Dass jemand den Hostnamen versehentlich einträgt, wäre dennoch unwahrscheinlich. Der Angriff nutzt daher die Möglichkeit, in den Dependencies den Host-Namen einer Paket-Registry einzutragen, aus der sich der Python-Paketmanager bedient. Dabei dürfte die geänderte Domain nur wenigen auf Anhieb auffallen.

Der eigentliche Schadcode findet sich in dem Paket Colorama, das auf PyPI nach wie vor in der regulären Version ohne Schadcode vorliegt. Dieser fand sich aber in der Kopie auf der Domäne pypihosted.

Um die manipulierten Pakete zu verteilen, haben die Angreifer gezielt GitHub-Accounts angegriffen. Dabei konnten sie unter anderem Zugriff auf den Account des Users editor-syntax erlangen, den Maintainer des Top.gg-Projekts auf GitHub. Checkmarx geht davon aus, dass der Account-Diebstahl ĂĽber gestohlene Session-Cookies erfolgte.

Schließlich konnten die Angreifer als editor-syntax eine Änderung an der Datei requirements.txt mit den Projekt-Dependencies vornehmen, die schließlich die infizierte Colorama-Datei von der falschen Domäne statt der regulären verwendet.

Die Ă„nderung in der requirements-Datei ist nachvollziehbar, aber gut getarnt.

(Bild: Checkmarx)

Der tatsächliche User editor-syntax bekam den Angriff erst mit, als andere sich darüber beschwerten, dass seine Änderungen Schadcode ins Projekt eingebracht hätten.

Offenbar sind auch andere Projekte betroffen. Die Angreifer änderten jeweils nicht nur die einzelnen Zeilen mit dem Domänennamen, sondern führten zum Verschleiern gleichzeitig zahlreiche harmlose Änderungen an der Codebasis durch.

Nach dem erfolgreichen Einschleusen des Schadcodes erfolgt der eigentliche Angriff wiederum in mehreren Stufen. Zunächst einmal ist der Launcher für den Schadcode im Colorama-Paket innerhalb der Datei init.py untergebracht und dort auf simple, aber effiziente Weise versteckt: Vor dem Befehl befinden sich der legitime Code und zahlreiche Leerzeichen. Der Befehl selbst führt mittels exec Code aus, den er von pypihosted herunterlädt.

Im weiteren Vorgehen nutzen die Angreifer für den Code laut Checkmarx unterschiedliche Verschleierungstechniken wie chinesische und japanische Zeichenketten und irreführende Variablennamen. Letztlich sucht der Code einen zufälligen Ordner und wählt einen zufälligen Dateinamen, um die endgültige Schadcode-Datei herunterzuladen und diese schließlich über die Windows-Registry in den Bootvorgang einzubeziehen.

Die Schadsoftware sorgt ĂĽber den Run-Key in der Windows-Registry dafĂĽr, dass das Betriebssystem sie bei jedem Start ausfĂĽhrt.

(Bild: Checkmarx)

Das Paket lädt dann von einem Remote-Server die jeweils aktuelle Schadsoftware, die darauf ausgelegt ist, sensible Daten auszulesen. Dazu sucht sie nach Informationen in unterschiedlichen Bereichen von diversen Browser-Daten, Discord-Tokens und Wallets für Kryptowährung bis zu Telegram-Session-Informationen und Instagram-Session-Tokens.

AuĂźerdem findet sich im Schadcode wohl ein Keylogger. Die Software kann die Daten laut der Analyse sowohl an den Remote-Server als auch ĂĽber anonyme File-Sharing-Dienste verteilen.

Checkmarx hat die pypihosted-Domäne mit Schadcode gemeldet, und Cloudflare hat sie inzwischen abgeschaltet.

Dass die Tarnung über den Hostnamen der falschen Python-Registry gut funktioniert, zeigt ein Issue auf GitHub: Als die Domäne nicht mehr verfügbar war, meldete jemand nicht etwa die Fake-Domäne über ein Issue, sondern die Tatsache, dass das in den Dependencies eingetragene pypihosted nicht erreichbar ist.

Einige merkten den Angriff über die falsche PyPI-Domäne nicht, sondern mussten erst von anderen Developern darauf aufmerksam gemacht werden.

(Bild: Checkmarx)

Weitere Details zu dem Angriff lassen sich dem Checkmarx-Blog und einem Beitrag eines Betroffenen auf Medium entnehmen.

(rme)