Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!

Fałszywe repozytoria GitHub z narzędziami OSINT rozprzestrzeniają złośliwe oprogramowanie

29 grudnia 2025, 03:48 | Aktualności | 1 komentarz

Osoby związane z szeroko rozumianym IT, zarządzające systemami czy tworzące oprogramowanie, to szczególnie łakomy kąsek dla grup przestępczych działających w cyfrowym świecie. Nie jest to nowe zjawisko. Tym razem mamy do czynienia z pewną ewolucją.

TLDR:

  • Złośliwe oprogramowanie w wiarygodny sposób imituje przydatne narzędzia dla programistów oraz służące do OSINT-u.
  • W celu zbudowania reputacji, cyberprzestępcy przeprowadzili dobrze zaplanowaną, wielomiesięczną kampanię w mediach społecznościowych, na blogach oraz na GitHubie.
  • Wykorzystywane przez nich oprogramowanie w prosty, ale niezwykle skuteczny sposób wykorzystuje socjotechnikę i słabości systemu Windows wynikające z wstecznej zgodności, ale nie będące formalnie podatnościami.
  • Używany podczas kampanii malware sprytnie unika oprogramowania antywirusowego, a w przypadku jakiejkolwiek niezgodności automatycznie usuwa się z systemu ofiary minimalizując pozostawione przez siebie ślady.

Cyberprzestępcy zamiast łamać platformy zdecydowali się uderzyć w nasz najczulszy punkt, jakim jest zaufanie. Punktem początkowym ataku jest przejęcie repozytoriów GitHub. Przejmowane są repozytoria o tematyce narzędzi programistycznych lub narzędzi OSINT. Atakujący umieszczają w nich jedynie kilka linijek kodu odpowiedzialnych za ciche pobranie zdalnego pliku HTA i uruchomienie go za pomocą mshta.exe. Za cel obierane są repozytoria, które w przeszłości zdobyły dobrą reputację oraz nowe, dla których sztucznie tworzona jest wzbudzająca zaufanie historia. Aby uwiarygodnić oszustwo, przygotowane do tego celu repozytoria promowane są na blogach czy w serwisie YouTube. Badacze z Morphisec zwracają uwagę, że logika początkowej części ataku jest wyjątkowo perfidna. HTA to technologia uruchamiania stron internetowych (HTML, Dynamic HTML oraz jeden z kilku lub kilka języków skryptowych obsługiwanych przez przeglądarkę Internet Explorer, takich jak VBScript lub JScript) jako aplikacji w systemie Windows w kontekście lokalnym (zamiast sieciowego, co ma miejsce w przypadku normalnych stron internetowych). Dzięki tej technologii moduł ładujący zawiera tylko minimalne polecenie pobrania i uruchomienia zdalnego pliku HTA. Plik RAT jest zewnętrzny i pozostaje bezplikowy podczas uruchamiania oraz niewidoczny podczas statycznego przeglądu kodu.

Schemat ataku (źródło: Morphisec)

Pobrany i uruchomiony w taki sposób plik HTA zawiera pełną wersję silnika PyStoreRAT. PyStoreRAT to dotychczas nieudokumentowany trojan zdalnego dostępu (tzw. RAT) oparty na języku JavaScript, dostarczany za pomocą lekkich modułów ładujących w językach Python i JavaScript, osadzonych w repozytoriach języka Python hostowanych w serwisie GitHub. O PyStoreRAT dowiadujemy się z raportu Morphisec:

PyStoreRAT itself is a modular, multi-stage JS implant capable of executing a wide range of payload formats, including EXE, DLL, PowerShell, MSI, Python, JavaScript, and HTA modules, includes explicit evasion logic targeting CrowdStrike Falcon, supports persistency and implements advanced spreading functionality. In observed incidents, PyStoreRAT deployed the Rhadamanthys stealer as a follow-on payload.

Pierwsze oznaki aktywności kampanii datowane są na połowę czerwca 2025 roku. Najwcześniejsze odnalezione ślady znalezione zostały w publicznie dostępnych indeksach na chińskich blogach. We wrześniu 2025 roku rozszerzono klaster repozytorium i zarejestrowano pierwsze domeny C2. Działaniom tym towarzyszyła szeroko zakrojona, dobrze przygotowana kampania promocyjna obejmująca pełne spektrum mediów społecznościowych, w tym filmy “Top 5” na YouTube oraz liczne wpisy na blogach prowadzonych w języku chińskim.

Wpisy w mediach społecznościowych mające na celu uwiarygodnienie rzekomych narzędzi (źródło: Morphisec)

W kolejnych tygodniach cyberprzestępcy stopniowo modyfikowali dystrybuowane przez siebie oprogramowanie. Zmiany te wprowadziły lekkie zaciemnianie, techniki kodowania ciągów znaków i zmiany konstrukcyjne mające na celu zmniejszenie wykrywalności loaderów podczas pobieżnej kontroli.

Zmodyfikowane w ten sposób oprogramowanie udostępnianie w repozytoriach GitHub obsługuje w pełni interaktywne menu i symulowane procesy, aby nie wzbudzać podejrzeń u użytkowników, choć jak wskazali badacze, znaczna część opisywanych repozytoriów w rzeczywistości nie oferowała funkcjonalnych narzędzi. Podstawione oprogramowanie wyświetlało podstawowe monity, statyczne menu lub nieinteraktywne interfejsy. Tak udające przydatne narzędzia złośliwe oprogramowanie w tle uruchamia mshta.exe jako ukryty podproces (jest to parser plików HTA w systemach Windows). Podproces mshta.exe inicjuje połączenie z serwerem C2, który weryfikuje nagłówek User-Agent, aby ograniczyć możliwość zewnętrznych interakcji. Tylko żądania zgodne z konkretnym podpisem mshta otrzymują payload. Serwer wysyła plik HTA, który wykonywany jest przez parser mshta.exe bazujący na JavaScript PyStoreRAT.

W dalszym etapie PyStoreRAT ukrywa wszystkie ważne ciągi takie, jak adresy C2, zapytania WMI czy ścieżki plików w postaci zaszyfrowanej i rekonstruuje je dopiero w czasie wykonywania (XOR z zahardkodowanym kluczem). Po uruchomieniu skrypt zbiera informacje na temat zainfekowanego systemu. Wygenerowany zostaje unikalny identyfikator sprzętowy (HWID). Dodatkowo oprogramowanie pobiera nazwę komputera/użytkownika, wersję i architekturę systemu, sprawdza zainstalowane programy antywirusowe oraz poziom uprawnień (administrator/SYSTEM). Na finansowe motywacje twórców PyStoreRAT może wskazywać fakt, że podczas rozpoznania systemu ofiary, malware poszukuje śladów portfeli kryptowalut takich, jak Ledger Live, Trezor, Exodus, Atomic, Guarda oraz BitBox02. Aby utrudnić działalność badawczą, został wyposażony w mechanizm zabezpieczający, który sprawdza, czy został pobrany jako HTA przez http(s). W przeciwnym razie kończy działanie, a plik HTA zostaje usunięty w celu utrudnienia ewentualnej późniejszej analizy powłamaniowej.

(źródło: Morphisec)

Ciekawym elementem działań mających na celu uniknięcie wykrycia jest poszukiwanie działających w zaatakowanym systemie programów antywirusowych. Sprawdzone zostają ciągi znaków „Falcon” (CrowdStrike Falcon) i ciągi znaków „Reason” (CyberReason lub ReasonLabs) w AntiVirusProduct. Sprawdzony zostaje również proces o nazwie csfalconservice (CrowdStrike Falcon). W przypadku wykrycia, malware próbuje przerwać drzewo procesów, uruchamiając następny etap poleceniem cmd.exe /c start “” /b mshta.exe. Brak wykrycia sprawia, że kontynuowane jest wykonywanie mshta.exe.

Malware poszukuje oprogramowania antywirusowego (źródło: Morphisec)

Twórcy złośliwego oprogramowania zadbali także o mechanizm persystencji. Aby przetrwać ponowne uruchomienia, PyStoreRAT rejestruje zaplanowane zadanie za pośrednictwem obiektu COM Schedule.Service. Zadanie jest zamaskowane jako „NVIDIA App SelfUpdate_[GUID]” i jest uruchamiane co 10 minut lub po zalogowaniu.

PyStoreRAT używa dwuetapowego mechanizmu sesji. Pierwszym etapem jest rejestracja, podczas której setRequest wysyła profil ofiary do serwera C2. W odpowiedzi dostaje unikalny token sesji. Drugi etap określany jest autoryzacją. Wraz z otrzymanym wcześniej tokenem w nagłówku (Authorization: Bearer [Session_Token]), malware wysyła żądanie do /getUpdates, aby pobrać listę zadań. Taka logika działania zabezpiecza listę działań przed prostym przeglądaniem przez adres URL – tylko zarejestrowane i autoryzowane sesje otrzymają komendy.

Po otrzymaniu zaszyfrowanej listy zadań, PyStoreRAT odszyfrowuje ją korzystając z configBuilder i przekazuje surowy ciąg do buildInstance. Złośliwe oprogramowanie nie korzysta ze standardowego JSON.parse() i uznawanej za podejrzaną funkcję eval(). Zamiast tego malware wykorzystuje własny parser. Ręcznie dekonstruuje ciąg JSON za pomocą split(“},{“) i Regular Expressions, aby wyodrębnić pary klucz-wartość. Taki mechanizm pozwala uniknąć wyzwalania większości hooków EDR.

Po rejestracji złośliwe oprogramowanie wprowadza pętlę do przetwarzania instrukcji JSON z C2. Badacze zidentyfikowali 11 scenariuszy, wśród których znalazły się zadania takie, jak wstrzykiwanie DLL przez rundll32, programowe usuwanie zaplanowanego zadania „NVIDIA”, pobieranie surowego kodu JScript z C2 i wykonywanie go dynamicznie w pamięci przy użyciu eval(), czy enumeracja dysków wymiennych za pośrednictwem Win32_DiskDrive (USB Worming). Ma to na celu zastąpienie legalnych dokumentów (.docx, .pdf, .exe) złośliwymi skrótami .lnk. Skróty te wykonują ładunek złośliwego oprogramowania przed otwarciem oryginalnego pliku, ułatwiając ruch boczny. Ponadto jeden z opisywanych w raporcie scenariuszy zadań zakładał pobranie i uruchomienie jako finalny ładunek stealera Rhadamanthys.

Samo oprogramowanie prawdopodobnie nie jest najbardziej finezyjnie przygotowanym malwarem w historii. Wykorzystywanie starych funkcjonalności systemu Windows, które w określonych sytuacjach mogą być otwartą furtką do naszego systemu jednocześnie nie będąc podatnościami, również nie jest niczym nowym. Opisywany przypadek pokazuje, że wskaźniki dotychczas uważane za takie, które mogą stanowić o wiarygodności projektu, jak wysoka ocena, informacje i wysoka aktywność w mediach społecznościowych, liczne wpisy na blogach czy dobrze przygotowana kampania promocyjna powinny być stosowane z dużą dozą ostrożności. Ta kampania pokazuje także, jak dużą rolę odgrywa proces targetowania ofiar. Profilowanie systemu ofiary pozwala wybrać atrakcyjne dla cyberprzestępców cele, odcinając działanie w systemach uznawanych za nieatrakcyjne, co ma na celu ograniczyć wykrywalność. Trudno nie odnieść wrażenia, że kampania została skierowana głównie do deweloperów i analityków OSINT, czyli osob, które mają zwykle dostęp do cennych kluczy i środowisk CI/CD oraz wiedzę mogą być drogą do eksfiltracji kolejnych celów. Cała sytuacja powinna skłaniać nas do znacznego krytycyzmu przy korzystaniu z jakichkolwiek źródeł, nawet jeśli pozornie wydają się wiarygodne i sprawdzone.

Źródło: Morphisec

~pu


Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. TobinFrost

    Jako laik zapytam ile czasu rozgryza się tak skomplikowaną kampanię?

    Odpowiedz

Odpowiedz