PyPI stopte nieuwe gebruikers en projecten terwijl het de supply chain-aanval verdedigde

Supply chain-aanvallen, zoals de nieuwste PyPI-ontdekking, injecteren kwaadaardige code in ogenschijnlijk functionele softwarepakketten die door ontwikkelaars worden gebruikt.  Ze komen steeds vaker voor.
Toename / Supply chain-aanvallen, zoals de nieuwste PyPI-ontdekking, injecteren kwaadaardige code in ogenschijnlijk functionele softwarepakketten die door ontwikkelaars worden gebruikt. Ze komen steeds vaker voor.

Getty-afbeeldingen

PyPI, een cruciale opslagplaats voor open source-ontwikkelaars, heeft het maken van nieuwe projecten en de registratie van nieuwe gebruikers tijdelijk stopgezet na een pakketuploadaanval waarbij kwaadaardige code werd uitgevoerd op elk apparaat waarop deze waren geïnstalleerd. Tien uur later hief hij de schorsing op.

PyPI, een afkorting voor Python Package Index, is een bron voor applicaties en codebibliotheken geschreven in de programmeertaal Python. Zowel Fortune 500-bedrijven als onafhankelijke ontwikkelaars vertrouwen op de repository om de nieuwste versies van de code te verkrijgen die nodig zijn om hun projecten uit te voeren. Kort na 19.00 uur PT op woensdag begon de site een bannerbericht weer te geven waarin bezoekers werd geïnformeerd dat de site tijdelijk het maken van nieuwe projecten en de registratie van nieuwe gebruikers opschortte. Het bericht legde niet uit waarom, noch gaf het een schatting van wanneer de schorsing zou worden opgeheven.

Een screenshot van de opschortingsmelding.
Toename / Een screenshot van de opschortingsmelding.

Controleermarx

Ongeveer 10 uur later hervatte PyPI het maken van een nieuw project en het registreren van een nieuwe gebruiker. Opnieuw gaf de site geen reden voor de 10 uur durende storing.

Volgens beveiligingsbedrijf Checkmarx werd PyPI in de uren voorafgaand aan de sluiting aangevallen door gebruikers die waarschijnlijk geautomatiseerde middelen gebruikten om kwaadaardige pakketten te uploaden die, wanneer ze werden uitgevoerd, de apparaten van gebruikers infecteerden. De aanvallers gebruikten een techniek die bekend staat als typosquatting, waarbij gebruik wordt gemaakt van typefouten die gebruikers maken bij het invoeren van de namen van populaire pakketten in opdrachtregelinterfaces. Door kwaadaardige pakketten namen te geven die lijken op populaire, goedaardige pakketten, rekenen aanvallers erop dat hun kwaadaardige pakketten worden geïnstalleerd wanneer iemand per ongeluk de verkeerde naam invoert.

“Dreigingsactoren richten zich op slachtoffers met de Typosquatting-aanvalstechniek door hun CLI te gebruiken om Python-pakketten te installeren”, schreven Checkmarx-onderzoekers Yehuda Gelb, Jossef Harush Kadouri en Tzachi Zornstain donderdag. “Dit is een aanval in meerdere fasen en een kwaadaardige lading die tot doel heeft crypto-wallets, gevoelige browsergegevens (cookies, extensiegegevens, enz.) en verschillende inloggegevens te stelen. Bovendien gebruikte de kwaadaardige lading een persistentiemechanisme om het opnieuw opstarten te overleven.”

Een screenshot van enkele van de kwaadaardige pakketten die door Checkmarx zijn gevonden.
Toename / Een screenshot van enkele van de kwaadaardige pakketten die door Checkmarx zijn gevonden.

Controleermarx

In het bericht stond dat de kwaadaardige pakketten “hoogstwaarschijnlijk zijn gemaakt met behulp van automatisering”, maar ging er niet verder op in. Pogingen om PyPI-functionarissen te bereiken voor commentaar waren niet onmiddellijk succesvol. Pakketnamen geïmiteerd die van populaire pakketten en bibliotheken zoals Requests, Pillow en Colorama.

De tijdelijke opschorting is slechts de nieuwste ontwikkeling die de toegenomen bedreigingen benadrukt waarmee het ecosysteem voor softwareontwikkeling wordt geconfronteerd. Vorige maand ontdekten onderzoekers een aanval op de open source GitHub-repository die de site overspoelde met miljoenen pakketten met versluierde code die wachtwoorden en cryptocurrencies van ontwikkelaarsapparaten stalen. De kwaadaardige pakketten waren klonen van de legitieme pakketten, waardoor ze met het blote oog moeilijk te onderscheiden waren.

De verantwoordelijke partij automatiseerde het proces dat de legitieme pakketten scheidde, wat inhield dat de broncode werd gekopieerd zodat ontwikkelaars deze konden gebruiken in een onafhankelijk project dat voortbouwde op het origineel. Het resultaat waren miljoenen vorken met namen die identiek waren aan de originele. In de identieke code zat een kwaadaardige lading, verpakt in meerdere verduisteringslagen. Hoewel GitHub de meeste kwaadaardige pakketten snel kon verwijderen, slaagde het bedrijf er niet in ze allemaal te filteren, waardoor de site voortdurend in een lus bleef.

Soortgelijke aanvallen zijn een feit voor bijna alle open source-repository’s, inclusief npm pack picks en RubyGems.

Eerder deze week rapporteerde Checkmarx over een afzonderlijke supply chain-aanval die ook gericht was op Python-ontwikkelaars. Deelnemers aan die aanval hebben de Colorama-tool gekloond, kwaadaardige code erin verborgen en deze beschikbaar gemaakt voor download op een nep-mirrorsite met een getypt domein dat de legitieme files.pythonhosted.org nabootste. De aanvallers kaapten de accounts van populaire ontwikkelaars, mogelijk door de authenticatiecookies te stelen die ze gebruikten. Vervolgens gebruikten ze de gekaapte accounts om kwaadaardige patches bij te dragen die instructies bevatten om een ​​kwaadaardige Colorama-kloon te downloaden. Checkmarx zei dat het bewijs heeft gevonden dat sommige ontwikkelaars met succes zijn geïnfecteerd.

In een aankondiging op donderdag kondigden Checkmarx-onderzoekers aan:

De kwaadaardige code bevindt zich in het setup.py-bestand van elk pakket, waardoor automatische uitvoering na installatie mogelijk is.

Bovendien gebruikte de kwaadaardige lading een techniek waarbij het setup.py-bestand versluierde code bevat die is gecodeerd met behulp van de Fernet-coderingsmodule. Nadat het pakket was geïnstalleerd, werd de versluierde code automatisch uitgevoerd, waardoor de kwaadaardige lading werd gelanceerd.

Controleermarx

Tijdens de uitvoering probeerde de kwaadaardige code in het setup.py-bestand extra payload van de externe server te downloaden. De URL voor de payload wordt dynamisch samengesteld door de pakketnaam toe te voegen als queryparameter.

Een screenshot van de code die de dynamische URL maakt.
Toename / Een screenshot van de code die de dynamische URL maakt.

Controleermarx

De gedownloade payload wordt ook gecodeerd met behulp van de Fernet-module. Eenmaal ontsleuteld bleek uit de lading dat er uitgebreide informatie was gestolen, bedoeld om gevoelige informatie uit de machine van het slachtoffer te halen.

De kwaadaardige payload maakte ook gebruik van een persistentiemechanisme om ervoor te zorgen dat deze actief bleef op het gecompromitteerde systeem, zelfs na de eerste uitvoering.

Een schermafbeelding die de code toont die persistentie mogelijk maakt.
Toename / Een schermafbeelding die de code toont die persistentie mogelijk maakt.

Controleermarx

Naast het gebruik van typosquatting en een soortgelijke techniek die bekend staat als brandjacking om ontwikkelaars te misleiden om kwaadaardige pakketten te installeren, maken bedreigingsactoren ook gebruik van afhankelijkheidsverwarring. De techniek werkt door kwaadaardige pakketten te uploaden naar openbare codeopslagplaatsen en deze een naam te geven die identiek is aan een pakket dat is opgeslagen in de interne opslagplaats van de doelontwikkelaar waarvan een of meer ontwikkelaarstoepassingen afhankelijk zijn. Applicaties voor ontwikkelaarssoftwarebeheer geven vaak de voorkeur aan externe codebibliotheken boven interne codebibliotheken, zodat ze een kwaadaardig pakket downloaden en gebruiken in plaats van een vertrouwd pakket. In 2021 gebruikte een onderzoeker een soortgelijke techniek om met succes vervalste code uit te voeren op netwerken van Apple, Microsoft, Tesla en tientallen andere bedrijven.

Er zijn geen trefzekere manieren om je tegen dergelijke aanvallen te beschermen. In plaats daarvan moeten ontwikkelaars pakketten zorgvuldig controleren en dubbelchecken voordat ze worden geïnstalleerd, waarbij ze goed moeten letten op elke letter in de naam.