Pakiet Pythona płynny wątkowo, odkryte na PyPI, zostało zidentyfikowane jako złośliwy, zawierającego konwencjonalne złośliwe oprogramowanie typu infostealer. Jednak jego cechą charakterystyczną jest wykorzystanie zaawansowanych technik zaciemniania kodu, które ukrywają jego ładunek, co sprawia, że analiza jest szczególnie trudna. To złośliwe oprogramowanie wykorzystuje trzy warstwy zaciemniania iteracyjnie w całym łańcuchu ataku, co stwarza znaczne trudności w ręcznej dekonstrukcji.
Nasz zespół ds. wczesnego ostrzegania przed złośliwym oprogramowaniem zgłosił pakiet zespołowi ds. bezpieczeństwa PyPI, który szybko go usunął. W tym artykule wyjaśniamy etapy płynny wątkowoatak i metody, których używa, aby ukryć swój cel, ze szczególnym uwzględnieniem tego, w jaki sposób złośliwe oprogramowanie kradnące informacje i zaciemnianie kodu współdziałają.
Arkusz ściągawek: złośliwe oprogramowanie typu „infostealer” i zaciemnianie kodu
Czym jest złośliwe oprogramowanie Infostealer?
Złośliwe oprogramowanie typu Infostealer działa jak podstępny złodziej w Twoim cyfrowym świecie. Po cichu przechwytuje poufne informacje, takie jak hasła, numery kart kredytowych czy dane osobowe, bez Twojej wiedzy. Programy te rejestrują to, co wpisujesz (keylogging), przechwytują Twoją przeglądarkę lub skanują pliki na Twoim urządzeniu, aby zebrać cenne dane. Co jest najbardziej przerażające? Doskonale potrafią pozostać niezauważone.
Co to jest zaciemnianie kodu?
Zaciemnianie kodu to w zasadzie sztuka ukrywania rzeczy na widoku, często stosowana przez hakerów, aby utrudnić wykrycie lub zrozumienie złośliwego kodu. Wyobraź sobie kogoś, kto celowo pisze kod w sposób mylący, szyfrując jego fragmenty lub zmieniając jego wygląd, aby zmylić narzędzia antywirusowe lub badaczy. To sprytna, ale frustrująca taktyka, która pomaga złośliwemu oprogramowaniu pozostać aktywnym dłużej i uniknąć wykrycia.
Warstwy zaciemniające złośliwego oprogramowania ThreadFluent Infostealer
1. Potrójne szyfrowanie
Proces zaciemniania rozpoczyna się od umieszczenia w komputerze silnie zaszyfrowanego ładunku. fluent.py Plik. Początkowy proces kodowania i deszyfrowania można podsumować następująco:
encoded_data = base64_module.b64decode("... BASE-6 with encrypted payload, IV and RSA-encrypted keys…”); # … Sequential decryption: ChaCha20, Blowfish and AES … encrypted_payload = AES_Cipher.new(aes_key, AES_Cipher.MODE_CBC, iv=aes_iv).decrypt(encrypted_payload[16:]) final_payload = unpad_function(encrypted_payload, AES_Cipher.block_size) exec( zlib_module.decompress(bz2_module.decompress(final_payload)) ) Proces zaciemniania obejmuje:
- Kompresja:Używanie gzip i bzip.
- Szyfrowanie symetryczne:Szyfrowanie łańcuchowe przy użyciu ChaCha20, Blowfish i AES.
- Szyfrowanie asymetryczne:RSA użyto do szyfrowania kluczy symetrycznych.
Wynik jest kodowany w Base64 i wstawiany jako zakodowane_daneKażda iteracja bazuje na poprzedniej, tworząc zagnieżdżoną strukturę szyfrowania, która sprawia, że odkrycie faktycznego ładunku bez inżynierii wstecznej jest wyjątkowo trudne.
2. Dekompresja Gzip
W wielu pośrednich krokach złośliwe oprogramowanie stosuje prostą, ale skuteczną metodę zaciemniania: kompresję Gzip połączoną z kodowaniem Base64.
import base64, zlib; eval(zlib.decompress(base64.b64decode(<STR>).decode('utf-8')) Technika ta gwarantuje, że zaciemniony ładunek pozostanie ukryty na wszystkich etapach.
3. Łączenie kodu i dynamiczna kompilacja
Ostatnia warstwa polega na podzieleniu zaciemnionego ładunku na wiele zmiennych, które są dynamicznie łączone i dekodowane podczas wykonywania:
import base64, zlib FEQXCBDOZKHVIhT = '...' # ....(111 other variables with base-64 encoded values) ... zZytWuvuEdBXSrO = eval(<FEQXCBDOZKHVIhT' encoded with '\x>) + eval(<next variable, encoded>) + eval( ' zlib.decompress(base64.b64decode(<VAR>)).decode('utf-8') ') + ... eval(compile(base64.b64decode(eval(zZytWuvuEdBXSrO)).decode('utf-8'), ‘<app>', 'exec')) Ten etap jest szczególnie uciążliwy w przypadku ręcznej inżynierii wstecznej, ponieważ każdą zmienną należy zdekodować i ponownie połączyć, aby uzyskać kolejny ładunek.
Łącząc te techniki zaciemniania, złośliwe oprogramowanie wykradające informacje in płynny wątkowo unika wykrycia, pokazując kluczową rolę Zaciemnianie kodu we współczesnych cyberatakach.
Wieloetapowy łańcuch ataków ThreadFluent
płynny wątkowo złośliwe oprogramowanie wykradające informacje składa się z czterech odrębnych etapów, z których każdy wprowadza dodatkowe warstwy Zaciemnianie koduEtapy te służą nie tylko do dostarczenia ładunku, ale także do jego zabezpieczenia przed wykryciem i analizą.

Etap 0: Początkowe wykonanie kodu
Punktem wejścia jest __init__.py plik, który inicjuje wykonanie zaciemnionego ładunku w fluent.py. W tym pliku zastosowano wielowarstwową obfuskację (zgodnie z opisem w krokach 1–3) w celu wygenerowania kroplomierza etapu 1:
import os,threading def main(): if os.name == 'nt': from . import fluent fluent.main() thread = threading.Thread(target=main , daemon=True) thread.start() Etap 1: Początkowy kroplomierz
Pierwszy dropper, po odszyfrowaniu, pobiera i osadza dodatkowy złośliwy kod, puts.pyz repozytorium GitHub Rudowłose-nogi-1337/repuests (ostrzeżenie: może tu znajdować się złośliwy kod).
Kroplomierz osadza się puts.py do lokalnej instalacji popularnego wywołań biblioteka, modyfikując jej __init__.py plik do uruchomienia deobfuskacji i wykonania następnego etapu. Ta deobfuskacja polega na odwróceniu wielu aplikacji warstw zaciemniania 1…3.
Etap 2: Drugi kroplomierz
Drugi dropper, po odszyfrowaniu za pomocą tego samego procesu, pobiera kolejny ładunek, ssl.py z repozytorium GitHub, zmienia nazwę na udp.pyi generuje plik blokady, aby zapobiec ponownej instalacji złośliwego oprogramowania. Następnie uruchamiany jest w celu jego odszyfrowania, co skutkuje wykonaniem ostatecznego ładunku kodu wykradającego informacje.
Etap 3: Ostateczny złodziej informacji
Ostatnim etapem jest w pełni funkcjonalny infostealer, który wykorzystuje zaawansowane techniki unikania:
- Funkcje antyanalizy:
- Wykrywa narzędzia antywirusowe i kończy działanie, jeśli wykryje jakiekolwiek procesy, adresy IP, nazwy hostów lub środowiska wirtualne znajdujące się na czarnej liście.
- Eksfiltracja danych:
- Rejestruje wyczerpujące informacje, m.in. adres IP, adres MAC, dane VPN, pliki cookie/historię przeglądarki, dane kart kredytowych i dane uwierzytelniające portfela kryptowalut, w tym zrzut ekranu.
- Wysyła skradzione dane (zaszyfrowane) za pomocą kanału Telegram, korzystając z szablonu pokazanego tutaj:

Strategia deobfuskacji
Aby analizować podobne pakiety, badacze muszą systematycznie odwracać ich warstwy zaciemniające:
- Kroki emulacji zaciemniania: Napisz skrypty symulujące transformacje (np. deszyfrowanie, dekompresję) bez uruchamiania ładunku.
- Warstwy szyfrowania odwrotnego: Wyodrębnij i odszyfruj ładunek, korzystając z osadzonych kluczy i algorytmów.
- Analiza iteracyjna: Przetwarzaj każdy etap pośredni iteracyjnie, aby odtworzyć ostateczny ładunek.
Aby usprawnić tę analizę, niezbędne są zautomatyzowane narzędzia i środowiska testowe.
Chcesz dowiedzieć się więcej o tym, jak wyprzedzać zagrożenia w czasie rzeczywistym?
Pobierz nasz dokument „Wczesne ostrzeganie: wykrywanie zagrożeń w czasie rzeczywistym i ustalanie ich priorytetów” i dowiedz się, jak zabezpieczyć łańcuch dostaw oprogramowania.
Aktor zagrożenia
Najwyraźniej pakiet został opublikowany z dwóch kont PyPI, ABIRHOSSAIN10 oraz anomilano785, obecnie usunięty.
Istnieje (aktualnie aktywne) konto GitHub o nazwie ABIRHOSSAIN10, co może być związane z kampanią. Rudowłose-nogi-1337 Użytkownik GitHub, będący właścicielem repozytorium służącego do pobierania ładunków etapu 2 i 3, jest również przedmiotem analizy.
Choć ustalenie autorstwa jest zawsze skomplikowane, a przynależność do czerwonej drużyny jest możliwa, rodzaj i ilość ujawnionych informacji wskazuje na działanie osoby o złych zamiarach.
Wnioski: Rola zaciemniania kodu w ewolucji złośliwego oprogramowania
płynny wątkowo Pakiet ten jest przykładem nowoczesnego zaciemniania złośliwego oprogramowania w jego wieloetapowym dostarczaniu. W połączeniu z zastosowanymi technikami omijania zabezpieczeń, pakiet ten wyraźnie pokazuje próbę uniknięcia wykrycia i uniemożliwienia analizy.
Niniejsza analiza podkreśla znaczenie współpracy i zautomatyzowanych narzędzi w walce z takimi zagrożeniami. Analizując i rozumiejąc te metody, specjaliści ds. bezpieczeństwa mogą opracować skuteczniejsze metody obrony przed podobnym złośliwym oprogramowaniem w przyszłości.
Jak system MEW firmy Xygeni zapobiegł dotarciu złośliwego pakietu threadfluent do produkcji
Xygeni'ego Wczesne ostrzeganie przed złośliwym oprogramowaniem (MEW) system odegrał kluczową rolę w zatrzymaniu płynny wątkowo Pakiet Pythona, złośliwa zależność zawierająca zaawansowane zaciemnianie kodu i wieloetapowy złośliwe oprogramowanie wykradające informacje, zanim mogłoby to zagrozić środowiskom produkcyjnym. Oto jak:
- Wykrywanie poprzez analizę statyczną
Zauważono MEW płynny wątkowoUkryty kod, wykrywający podejrzane oznaki, takie jak wielowarstwowe szyfrowanie i nietypowa aktywność zależności. - Ocena osiągalności w czasie wykonywania
System wykrył, że kod pakietu może zostać uruchomiony w trakcie użytkowania, co oznacza go jako poważne zagrożenie bez konieczności jego faktycznego uruchomienia. - CI/CD Pipeline ochrona
MEW zablokowany płynny wątkowo w czasie rzeczywistym, uniemożliwiając jego włączenie do kompilacji i uniemożliwiając dotarcie do produkcji. Wysyłał programistom alerty z wnioskami o podjęcie działań, oszczędzając cenny czas. - Wymiana informacji o zagrożeniach
Firma Xygeni szybko zgłosiła pakiet do PyPI i udostępniła wyniki swoich badań swojej globalnej sieci bezpieczeństwa, dzięki czemu udało się zapobiec dalszemu rozprzestrzenianiu się wirusa.
Łapiąc płynny wątkowo system MEW firmy Xygeni już na wczesnym etapie upewniał się, że złośliwy kod nie zaszkodzi łańcuchom dostaw oprogramowania ani CI/CD przepływy pracy.
Chroń swój CI/CD Pipelines za darmo
Zapobiegaj zagrożeniom takim jak płynny wątkowo z systemem wczesnego ostrzegania przed złośliwym oprogramowaniem firmy Xygeni. Rozpocznij Przetestuj za darmo już dziś i zabezpiecz swój łańcuch dostaw oprogramowania.
Luis Rodriguez
Luis Rodriguez jest fizjoterapeutącist + matematyk i CISSP. Obecnie współzałożyciel i dyrektor techniczny w Xygeni Security. Posiada ponad 20 lat doświadczenia w dziedzinie bezpieczeństwa oprogramowania i brał udział w projektach takich jak SAST oraz SCA. Obecnie skupia się na software supply chain security.
Daniel Martin
Daniel Martín jest ekspertem ds. cyberbezpieczeństwa i członkiem zespołu badawczego Xygeni ds. bezpieczeństwa, specjalizującego się w SDLC łagodzenie zagrożeń bezpieczeństwa i aplikacji.






