
Co znajdziesz w tym artykule?
Wprowadzenie do problemu / definicja
Bezpieczeństwo łańcucha dostaw oprogramowania pozostaje jednym z kluczowych wyzwań w ekosystemie JavaScript i npm. Opisana kampania pokazuje, że cyberprzestępcy rozwijają metody ukrywania infrastruktury command-and-control, wykorzystując do tego publiczny blockchain Ethereum zamiast tradycyjnych wskaźników zapisanych w kodzie.
W tym modelu złośliwy pakiet nie zawiera jawnego adresu serwera sterującego. Zamiast tego rekonstruuje go dynamicznie na podstawie danych odczytywanych z transakcji blockchain, co znacząco utrudnia analizę i wykrywanie zagrożenia.
W skrócie
Badacze zidentyfikowali dwa trojanizowane pakiety npm: bianira-ui oraz fluid-type-ui. W kampanii zastosowano technikę określaną jako NullReceiver, rozwijającą wcześniejsze podejście znane jako EtherHiding.
- adres C2 nie był zapisany bezpośrednio w kodzie pakietu,
- malware pobierało dane z transakcji Ethereum o zerowej wartości,
- adres odbiorcy transakcji był wykorzystywany do zakodowania adresu IP serwera C2,
- mechanizm utrudniał wykrycie infrastruktury napastnika i obniżał koszt operacji.
Kontekst / historia
Blockchain od kilku lat przestaje być wyłącznie środowiskiem transakcyjnym i coraz częściej pojawia się w analizach zagrożeń jako nośnik danych, kanał sterowania lub warstwa ukrywania wskaźników kompromitacji. Wcześniejsze techniki, takie jak EtherHiding, opierały się na przechowywaniu złośliwych danych w smart kontraktach lub w polach transakcyjnych.
Nowa metoda stanowi kolejny etap tej ewolucji. Zamiast używać kontraktu lub pola calldata, operatorzy kampanii umieszczali istotną informację bezpośrednio w adresie odbiorcy pustej transakcji Ethereum. To prostsze, tańsze i trudniejsze do wykrycia podejście, które dobrze wpisuje się w trend nadużywania zaufanych publicznych usług do celów ofensywnych.
Choć złośliwe pakiety zostały usunięte z rejestru npm, wcześniej zdążyły zostać pobrane setki razy. To pokazuje, że nawet krótko aktywne biblioteki mogą stanowić realne zagrożenie dla środowisk deweloperskich, pipeline’ów CI/CD i organizacji korzystających z automatycznego pobierania zależności.
Analiza techniczna
Istota techniki NullReceiver polega na wykorzystaniu pozornie zwykłej transakcji Ethereum bez wartości i bez dodatkowego ładunku danych. Złośliwy kod odwołuje się do z góry określonego portfela kontrolowanego przez napastnika, sprawdza jego najnowszą transakcję wychodzącą, odczytuje adres odbiorcy, a następnie interpretuje pierwsze bajty tego adresu jako zakodowany adres IPv4.
W praktyce mechanizm działa według następującego schematu:
- odwołanie do wpisanego na stałe adresu portfela,
- pobranie najnowszej transakcji wychodzącej,
- odczytanie adresu odbiorcy,
- konwersja pierwszych bajtów z formatu szesnastkowego do dziesiętnego,
- uzyskanie adresu IP serwera C2,
- nawiązanie połączenia z odszyfrowanym hostem.
W analizowanym przypadku pierwsze cztery bajty adresu odbiorcy odpowiadały adresowi IP 166.88.134.62. Pozostała część adresu zawierała dodatkowy ciąg znaków ASCII, co może wskazywać na wykorzystanie pozostałych bajtów do znaczników operacyjnych lub pomocniczych identyfikatorów.
Technika ta jest bardziej dyskretna niż klasyczne metody ukrywania wskaźników w smart kontraktach. Nie ma tu jawnego pola danych zawierającego podejrzaną treść, a sama transakcja może wyglądać jak zwykły pusty transfer. W efekcie proste reguły detekcyjne oparte na analizie statycznej lub monitorowaniu typowych artefaktów sieciowych mogą okazać się niewystarczające.
Konsekwencje / ryzyko
Największym problemem jest zwiększona odporność infrastruktury napastnika na blokowanie i analizę. Jeśli adres C2 nie występuje bezpośrednio w kodzie, konfiguracji ani jawnej komunikacji sieciowej, klasyczne skanowanie pakietów i wyszukiwanie wskaźników kompromitacji może nie wykryć zagrożenia.
Dla organizacji korzystających z npm ryzyko obejmuje kilka poziomów. Zagrożone są zarówno stacje robocze programistów, jak i środowiska budowania, w których złośliwa zależność może zostać pobrana automatycznie jako komponent bezpośredni lub pośredni. Dodatkowo analiza incydentu staje się trudniejsza, ponieważ część wskaźników zależy od zewnętrznego stanu blockchain i może się zmieniać wraz z aktywnością operatora.
Istnieje też ryzyko szybkiego kopiowania tej techniki przez innych aktorów. NullReceiver nie wymaga skomplikowanej infrastruktury ani rozbudowanych smart kontraktów, dlatego próg wejścia dla kolejnych kampanii pozostaje stosunkowo niski.
Rekomendacje
Incydent powinien skłonić organizacje do wzmocnienia kontroli nad zależnościami open source oraz do większego nacisku na analizę zachowań uruchamianych bibliotek. Sama analiza kodu źródłowego nie zawsze wystarczy, jeśli złośliwa logika pobiera kluczowe dane dynamicznie z zewnętrznych źródeł.
- stosować ścisłe zatwierdzanie nowych pakietów i blokady wersji,
- utrzymywać wewnętrzne repozytoria zaufanych zależności,
- monitorować połączenia wychodzące z hostów deweloperskich i runnerów CI/CD,
- wykrywać procesy odwołujące się do eksploratorów blockchain, API Ethereum i węzłów RPC bez uzasadnienia biznesowego,
- wdrażać narzędzia SCA, sandboxing i analizę behawioralną nowych bibliotek,
- segmentować środowiska buildowe i ograniczać ich dostęp do Internetu,
- szukać mechanizmów dekodowania danych z ciągów hex oraz adresów portfeli.
Z perspektywy SOC warto rozszerzyć hunting o scenariusze, w których aplikacje JavaScript odczytują zakodowane wartości z danych przypominających adresy blockchain, konwertują pierwsze bajty ciągów szesnastkowych do IPv4 i inicjują połączenia do dynamicznie pozyskanych adresów IP.
Podsumowanie
Przypadek pakietów bianira-ui i fluid-type-ui pokazuje, że ataki na ekosystem npm stają się coraz bardziej wyrafinowane, a blockchain może pełnić rolę ukrytej warstwy sterowania infrastrukturą C2. Technika NullReceiver upraszcza działanie po stronie napastnika, redukuje koszty i jednocześnie utrudnia klasyczną detekcję opartą na sygnaturach.
Dla obrońców oznacza to konieczność łączenia ochrony łańcucha dostaw, telemetrii wykonawczej i monitorowania nietypowych zależności od usług blockchain. To kolejny sygnał, że bezpieczeństwo nowoczesnego oprogramowania wymaga obserwacji nie tylko kodu, ale również realnego zachowania komponentów po uruchomieniu.
Źródła
- The Hacker News — Trojanized npm Packages Employ NullReceiver Tactic to Decode C2 IP from Blockchain — https://thehackernews.com/2026/08/trojanized-npm-packages-decode-c2-ip.html
- OpenSourceMalware — NullReceiver — https://opensourcemalware.com/
- Google Threat Intelligence Group — informacje o kampanii Contagious Interview — https://cloud.google.com/blog/topics/threat-intelligence/
- Guardio Labs — EtherHiding — https://guard.io/labs/
- Ethereum.org — dokumentacja techniczna Ethereum — https://ethereum.org/