HollowFrame i Matryoshka: zagnieżdżony backdoor w kancelarii
Phishing z plikiem LNK uruchamiał PowerShell, fałszywy runtime Python, loader Go i dwa backdoory Rust. Rozkładamy łańcuch i detekcję.
- AUTOR
- Karol Rapacz / CEO Breachroad · OSCP · PNPT
- PUBLIKACJA
- 31 lipca 2026
- CZAS CZYTANIA
- 12 min czytania
- TEMAT
- Zagrożenia i incydenty
Blackpoint Cyber opisał włamanie do dwóch stacji w kancelarii prawnej, w którym napastnik połączył spear phishing, skrót LNK, wielowarstwowy PowerShell, DLL side-loading, modularny loader Go i dwa backdoory napisane w Rust. Nowe rodziny otrzymały nazwy HollowFrame i Matryoshka.
Łańcuch jest wartościowym studium detekcji, ponieważ niemal każdy etap korzysta z legalnego mechanizmu: skrótu Windows, certutil.exe, PowerShella, prawdziwego python.exe, zadań harmonogramu i API GitHub. Złośliwość wynika z sekwencji i kontekstu, nie z jednego egzotycznego pliku.
Początek: „Case Documents”
Według pierwotnego raportu Blackpoint wiadomość spear-phishingowa prowadziła do zaszyfrowanego archiwum. W środku znajdował się skrót Windows udający dokumenty sprawy.
Po uruchomieniu LNK:
- zapisywał Base64 do
%TEMP%\sgrfm.b64; - tworzył skrypt
%TEMP%\sgrfm.cmd; - używał
certutil.exe -decode; - uruchamiał PowerShell;
- pobierał kolejny etap z
2.26.252[.]84.
Rozdzielenie operacji pomiędzy LNK, CMD, certutil i PowerShell utrudnia wykrycie regułą przypisaną tylko do jednego interpretera.
Obfuskacja i przygotowanie bezpiecznej ścieżki dla malware
Następny skrypt przechowywał zakodowany payload jako ciąg heksadecymalny i odszyfrowywał go powtarzanym kluczem XOR. Następnie sprawdzał uprawnienia administratora i w razie potrzeby uruchamiał UAC przez -Verb RunAs.
Przed pobraniem właściwych komponentów dodawał wykluczenia Microsoft Defender dla:
- katalogu
%LOCALAPPDATA%\Programs\Python\Python311-Brief; - procesu
python.exe.
Kolejność jest ważna. Najpierw powstała strefa o obniżonej kontroli, dopiero potem trafiły do niej pliki. Reguła wykrywająca wyłącznie malware po zapisie może zadziałać za późno; trzeba alarmować na samą zmianę wykluczeń przez nietypowy proces.
Python tylko z nazwy
Skrypt pobierał archiwum Python-3.11.0-embed-amd96.zip. Nazwa przypomina oficjalną dystrybucję embedded, ale sufiks amd96 był nietypowy. Paczka zawierała:
- legalny
python.exe; - złośliwy
python311.dll; vcruntime140.dll.
Uruchomienie python.exe bez skryptu powodowało wczytanie biblioteki z tego samego katalogu. DLL nie była prawdziwym runtime CPython, tylko 64-bitowym modułem Go eksportującym minimalne nazwy wymagane przez hosta. Tak działa DLL side-loading: podpisany lub rozpoznawalny EXE staje się nośnikiem kodu z sąsiedniej biblioteki.
HollowFrame: loader i trwałość
HollowFrame był modularnym loaderem Go. Oceniał, czy działa w sandboxie na podstawie czasu pracy systemu, ilości RAM, liczby plików profilu i ruchu kursora. Mógł ładować dodatkowe komponenty różnymi metodami i tworzyć zadanie harmonogramu.
Tego typu anti-analysis nie gwarantuje niewykrywalności. Daje obrońcy sygnały:
- proces odczytujący wiele właściwości środowiska przed aktywnością;
python.exebez typowych argumentów;- sąsiednia DLL o niezgodnym podpisie;
- uruchamianie kodu Go w procesie udającym Python;
- nowe zadanie bez związku z instalacją legalnego produktu.
Matryoshka: dwa warianty backdoora
Badacze znaleźli dwa warianty Rust:
- pierwszy komunikował się przez HTTP i wykonywał polecenia;
- drugi używał GitHub jako kanału C2 do beaconingu, zadań, rekonesansu, transferu plików i dostarczania kolejnych payloadów.
GitHub nie jest złośliwy, ale ruch API z serwera lub stacji, która nie prowadzi pracy deweloperskiej, powinien mieć właściciela i uzasadnienie. W kampanii pojawiał się wzorzec repozytorium zawierający identyfikator ofiary oraz User-Agent imitujący OneDrive.
Razem HollowFrame i Matryoshka dawały wykonanie poleceń, rozpoznanie Active Directory, transfer plików i możliwość rozbudowy operacji. Raport nie potwierdza pełnego przejęcia domeny ani kradzieży danych klienta kancelarii.
Najlepsze punkty detekcji
Warto korelować w krótkim oknie:
- archiwum z poczty lub komunikatora;
explorer.exeuruchamiający LNK z katalogu pobrań;- zapis
.b64i.cmdw%TEMP%; certutil -decodepoza procesem administracyjnym;- PowerShell z
ExecutionPolicy Bypassi ukrytym oknem; - modyfikację wykluczeń Defender;
- utworzenie katalogu udającego runtime Python;
python.exebez skryptu i z prywatnąpython311.dll;- nowe zadanie harmonogramu;
- dostęp do GitHub API lub nowych adresów C2.
Pojedyncze zdarzenia mogą mieć legalne wyjaśnienie. Ich sekwencja tworzy mocny sygnał.
Reakcja na incydent
Po wykryciu łańcucha:
- odizoluj urządzenie;
- zachowaj pamięć, Prefetch, Amcache, zadania i logi PowerShell;
- wyeksportuj historię zmian Defender;
- zbierz źródłowy LNK, skrypty, ZIP i biblioteki;
- sprawdź poświadczenia używane na stacji;
- przeszukaj środowisko po ścieżkach, hashach i zachowaniu;
- przeanalizuj GitHub API oraz DNS;
- usuń nieautoryzowane wykluczenia dopiero po zebraniu dowodów;
- odbuduj host z zaufanego obrazu przy potwierdzonym backdoorze;
- monitoruj konta i segment kancelarii po przywróceniu.
Metodykę korelacji rozwijamy w przewodniku detection engineering z Sigma i SIEM oraz planie reagowania na incydenty.
Fakty a wnioski Breachroad
Blackpoint potwierdza dwie stacje w jednej nieujawnionej kancelarii, opisany łańcuch i możliwości malware. Publiczne dane nie ustalają operatora, skali poza tym incydentem ani pełnego wpływu biznesowego.
Wniosek Breachroad: allowlisting oparty wyłącznie na nazwie procesu lub podpisie EXE nie zatrzyma side-loadingu. Skuteczna ochrona łączy pochodzenie pliku, linię procesów, zmiany konfiguracji ochrony, bibliotekę ładowaną obok EXE i późniejszą komunikację.
Szkolenia cyberbezpieczeństwa dla zespołów pomagają kancelariom i działom prawnym rozpoznawać kontekstowe przynęty. Audyt bezpieczeństwa IT może zweryfikować PowerShell, polityki Defender, allowlisting i gotowość EDR.


