Firma Phylum opublikowała na swoim blogu informację o odkryciu ataku, który polega na umieszczeniu zainfekowanych pakietów w PyPI (Python Package Index). Pakiety te zawierają kod odpowiadający za pobranie złośliwych rozszerzeń do przeglądarki w celu przejęcia transakcji kryptowalutowej. Malware wykorzystany w tym ataku to „Clipper” o którym pisaliśmy już w przeszłości – Laplas Clipper.
W ataku wykorzystano technikę typosquatting, polegającą na celowym zapisaniu nazwy z literówką, aby zmylić ofiarę. Atakujący za cel obrali pakiety: aiohttp, beautifulsoup, bitcoinlib, ccxt, colorama, cryptocompare, cryptofeed, freqtrade, matplotlib, pandas, pygame, pyinstaller, pytorch, scikit-learn, scrapy, selenium, solana, tensorflow, vyper, websockets, yfinance. Każdy z nich wystąpił po 13-38 razy, uwzględniając wiele możliwych literówek.
W celu zaciemniania kodu wykorzystano chińskie ideogramy. Na pierwszy rzut oka kod wydaje się skomplikowany, lecz wcale nie jest ciężki do złamania. Dodatkowo wystąpienie nietypowych znaków w kodzie powinno zwrócić uwagę, że coś może być nie tak.
Uruchomienie złośliwego kodu powoduje utworzenie rozszerzenia do przeglądarki z kodem JavaScript sprawdzającym zawartość schowka. Następnie wyszukiwane są skróty do przeglądarek – tj. Google Chrome, Microsoft Edge, Opera oraz Brave – i modyfikowane tak, aby nowo utworzone rozszerzenie było ładowane automatycznie po uruchomieniu przeglądarki. W ten sposób złośliwy kod stale monitoruje zawartość schowka ofiary. W razie wykrycia skopiowania adresu portfela kryptowalutowego, zawartość schowka zostaje podmieniona na jeden z kilku adresów portfeli atakującego, które zostały zamieszczone w kodzie.
W ostatnim czasie widać coraz częstsze informacje o wykryciu złośliwego kodu w pakietach w repozytorium PyPI. Poniżej kilka przykładów zaobserwowanych od początku bieżącego roku:
- W4SP Stealer [1] – wykradanie haseł, ciasteczek uwierzytelniających oraz portfeli kryptowalutowych;
- Lolip0p [2] – pobieranie malware wykradające informacje;
- aptx, bingchilling2, httops i tkint3rs [3] – pobieranie malware, manipulacja plikiem SSH authorized_keys, usuwanie netstat.
W związku z popularnością tego języka programowania i wygodą pochodzącą z wykorzystania gotowych pakietów, nieuważni programiści stali się łatwym celem. Korzystanie z niesprawdzonych pakietów może spowodować duże zagrożenie dla wszelkich projektów, dlatego trzeba zwracać większą uwagę na każde wykorzystywane narzędzie.
Jak można się uchronić przed takimi zagrożeniami?
- Sprawdzać dwukrotnie czy nie popełniło się żadnej literówki – wtedy typosquatting nam niestraszny.
- Wykorzystywać środowiska testowe.
- Weryfikacja hashy.
- Weryfikacja użytkownika, który zamieścił kod w repozytorium (data utworzenia konta, pozostałe projekty).
- Weryfikacja kodu – jest to zadanie czasochłonne lecz nawet pobieżne sprawdzenie może dać efekty (jak chociażby w opisywanym wyżej przypadku, gdzie pojawiły się chińskie znaki).
Zachęcamy również do zapoznania się z artykułem o bezpieczeństwie przy korzystaniu z PyPI.
Przypominamy, że zasady bezpieczeństwa i umiarkowanego zaufania nie dotyczą jedynie Pythona. Niezależnie od używanego języka programowania należy być ostrożnym korzystając z ogólnodostępnych repozytoriów.
Źródła:
[1] Devs targeted by W4SP Stealer malware in malicious PyPi packages
[2] Malicious ‘Lolip0p’ PyPi packages install info-stealing malware
[3] Researchers Uncover Obfuscated Malicious Code in PyPI Python Packages