Malware w repozytoriach NPM i PyPI

avlab.pl 8 godzin temu
Zdjęcie: Malware w repozytoriach NPM i PyPI


Zajmująca się różnymi usługami w zakresie bezpieczeństwa IT, a także znany dostawca urządzeń sieciowych, firma Fortinet w niedawnym raporcie przedstawiła wyniki analizy prawie półtora miliona paczek NPM (przeznaczonych dla projektów Node.js) oraz 400 tys. paczek PyPI używanych przez programistów Python. Wyniki są jednoznaczne i niestety dość łatwe do przewidzenia – znaczna część modułów wykazywała złośliwe działanie.

Przykładem podanym przez Fortinet jest kilka paczek PyPI. Pośród ich funkcjonalności można wymienić ekstrakcję danych z przeglądarki Chrome.

Przykład złośliwego kodu Python (po odszyfrowaniu)

Programiści najczęściej pracują na koncie z uprawnieniami administratora, niezależnie czy to system Windows, Linux, czy macOS. Scenariusz, w którym złośliwa paczka wykonuje destrukcyjne czynności (takie jak kradzież dostępów do publicznych środowisk klienta czy choćby pozwala zrozumieć architekturę jego systemu na podstawie wykradzionych danych), nie jest trudny do wyobrażenia. Z drugiej strony nie można mówić o komfortowej i wydajnej pracy bez wspomnianych uprawnień lokalnego administratora.

Oczywiście ewentualnie złośliwe działanie nie ogranicza się do lokalnego środowiska programisty. Specyficzna paczka wykorzystywana w aplikacji internetowej może dla przykładu udostępniać dane zgromadzone w serwisie nieautoryzowanym odbiorcom. W obu przypadkach może wiązać się to z ogromnymi konsekwencjami prawnymi i finansowymi.

Korzystanie z zewnętrznych framework’ów i modułów – Composer dla PHP, NPM dla Node.js, PyPI dla Python, Maven dla Java itd. – jest standardem i jednocześnie dobrą praktyką. Gotowe rozwiązania umożliwiają szybsze dostarczanie funkcjonalności w aplikacji (niejednokrotnie i tak wymagane są dodatkowe dostosowania). Korzystny jest też wpływ na bezpieczeństwo. Dla przykładu framework PHP Laravel posiada zabezpieczenia m.in. przed atakami CSRF i SQL injection, o których implementacji programista mógłby zapomnieć lub wykonać je niepoprawnie.

Nieco gorszą praktyką jest używanie gotowych rozwiązań dla funkcjonalności, które można uznać za pewne podstawowe algorytmy. Wystarczy wspomnieć o modułach is-odd i is-even w NPM, które sprawdzają, czy podana liczba jest odpowiednio nieparzysta/parzysta. „Składanie” aplikacji z takich pojedynczych, prostych modułów raczej nie świadczy pozytywnie o umiejętnościach autora. Moduły mają też swoje zależności, stąd czasem wielkość katalogu przeznaczonego dla zewnętrznych paczek jest spora.

Z tego powodu zalecane jest korzystanie ze znanych i sprawdzonych rozwiązań, ale też regularne audyty kodu aplikacji (najlepiej w połączeniu z automatycznymi testami bezpieczeństwa). w tej chwili próg wejścia w programowanie został zmniejszony z uwagi na sztuczną inteligencję. Niedoświadczone osoby są narażone choćby na nieświadome uruchomienie malware pochodzącego z zainfekowanego modułu.

Idź do oryginalnego materiału