Przewiń do głównej treści

OctoRAT - analiza statyczna

·1652 słów·8 min·
Blueteam Malware Forensics
CyberZgroza
Autor
CyberZgroza

Analiza
#

Nazwa pliku: challenge MD5: 9a5ff998dbf0f6923d0b454d89800fb4 SHA1: 4f4fa23e9c503b941a5e91584d6ecc3813962ba1

RAT - Remote Access Trojan. Złośliwe oprogramowanie, które jak sama nazwa wskazuje, służy do uzyskiwania zdalnego dostępu do systemu ofiary, niekiedy imitując ten prawdziwy, “legitny”. Może wykorzystywać kilka funkcjonalności m.in. ukrywanie działań przed AV/EDR, kradzież poświadczeń, keylogging, ekfiltracja plików, włączanie do botnetu - w zależności co atakujący chce osiągnąć.

Przeprowadzę statyczną analizę OctoRAT - nowego malware’u, który pojawił się i zaczął być wykorzystywany od przynajmniej 20 listopada 2025. Wiąże się z tym dłuższa historia związana z kampanią złośliwej wtyczki do Visual Studio Code pod nazwą “prettier-vscode-plus”. Wtyczka była dostępna na oficjalnym marketplace VSCode i wykonywała złośliwy skrypt VBS (dropper) hostowany na GitHubie (pierwszy commit w repozytorium miał miejsce w powyższy dzień), co było wstępnym etapem łańcucha ataku. Następnie za pomocą poleceń Powershell odszyfrowywany i uruchamiany bezpośrednio w pamięci (Invoke-Expression) był loader “Anivia”, który to następnie wstrzykiwał payload do legitnego procesu Visual Code Compiler (vbc.exe). Tym payloadem jest wspomniany OctoRAT. Wstępne szczegóły jego działania i informacje o wykorzystaniu znalazłem we wpisie hxxps://hunt[.]io/blog/malicious-vscode-extension-anivia-octorat-attack-chain.

I w sumie już miałem się zabierać do właściwej części, czyli analizy statycznej, ale pewna rzecz przykuła moją uwagę w powyższym wpisie. Otóż autorowi udało się uzyskać dostęp do panelu logowania C2, skąd atakujący mieli wysyłać polecenia do OctoRAT i udostępnił fragment kodu HTML strony. Poniżej screen samego panelu.

octorat_login_page

Tytułem strony był tag <title> OctoRAT Center - Login</title>. Zacząłem więc poszukiwania z nadzieją, że znajdę te panele, z tym samym tagiem i będące jeszcze dostępne w Internecie. Shodan niczego nie znalazł, więc wypróbowałem alternatywę - FOFA. Udało mu się znaleźć 3 działające serwery, które hostowały panel (widoczne na screenach poniżej). Próbowałem się do nich połączyć w darmowej sandboxowej przeglądarce oraz w AnyRun, ale bez skutku. Wszędzie kończyło się błędem “Connection Refused”. Co ciekawe widoczna jest nawet ikonka ośmiornicy przy dwóch pierwszych adresach IP, tej samej co na panelu u góry.

octorat_ip

octorat_ip2

Kod HTML jednego z panelów OctoRAT. Widoczny formularz logowania.

octorat_login_code

Nieudane połączenie do panelu.

octorat_sandbox

Adresy IP należą hostingu na Seszelach.

octorat_domain

Poniżej analiza odnalezionych adresów IP w VirusTotal.

octorat_vt1

octorat_vt_2

octorat_vt_3

Jak już mamy za sobą to małe threat intelligence, to przejdźmy do praktycznej części - analizy statycznej. W pierwszej kolejności zidentyfikujmy, czy faktycznie mamy do czynienia z plikiem wykonywalnym .NET. Aby to sprawdzić użyłem narzędzia “pestudio” i szukałem konkretnych elementów, charakterystycznych dla .NET.

Po pierwsze, w manifeście widzimy domyślną, charakterystyczną nazwę aplikacji .NET, która jest przypisywana przed kompilacją - “MyApplication.app”.

octorat_net_indicator1

Po drugie, mscoree.dll to biblioteka ładowana przez Windows przy uruchamianiu aplikacji .NET. Inicjalizuje CLR i przekazuje mu kontrolę nad programem. CLR (Common Language Runtime) to środowisko wykonawcze .NET, które uruchamia kod. Sam kod aplikacji jest zapisany jako IL (Intermediate Language), który CLR kompiluje w czasie działania do natywnego kodu procesora.

octorat_indicator_2

Plik PE możemy też zidentyfikować przy użyciu “Detect It Easy”, który potwierdza wykorzystanie frameworka .NET.

octorat_detect_it_easy

Poniżej dodatkowa analiza narzędziem CFF Explorer.

octorat_cff

octorat_cb_net_directory

Udało się również wykryć charakterystyczne dla aplikacji .NET metadane: Strings, GUID, Blob.

octorat_metadata_streams

Mamy potwierdzone, że jest to program .NET. Zacznę teraz analizę w dekompilatorze dnSpy.

Już na samym początku widać, że najpewniej mamy do czynienia z wielofunkcyjnym RAT-em. Przyjrzymy się najważniejszym funkcjom.

octorat_files

W pierwszej kolejności klikamy prawym przyciskiem na Client.exe, a następnie na “Go to Entry Point”. Jest to pierwszy kawałek kodu, który się wykonuje po uruchomieniu programu.

I tym sposobem przechodzimy do metody Main.

octorat_entrypoint

Przechodząc dalej widzimy klasę “iamfine” z metodą “EnsureSQLiteDLL”. Metoda zapisuje w stringach ścieżki w których miałaby znajdować się biblioteka “sqlite3.dll”

  • text - katalog, w którym znajduje się program program .EXE
  • text2 - lokalizacja C:\\Windows\\Microsoft.NET[...]\\sqlite.dll
  • text3 - katalog TEMP

Jeśli biblioteka nie zostanie znaleziona, pobierana jest z serwera FTP pod adresem fxp://server09[.]mentality[.]cloud/public_html/sqlite3[.]dll. Dodatkowo widzimy poświadczenia, które są używane do zalogowania na serwer - login “admin_syn” i hasło “Black900”. Biblioteka jest pobierana, ponieważ wiele obecnych przeglądarek przechowuje wrażliwe informacje w bazach SQLite - w ten sposób OctoRAT przygotowuje się do ich kradzieży. Nie znamy jednak prawdziwej zawartości biblioteki.

octorat_sql_dll_get

Z ciekawości sprawdziłem adres w AnyRun i wygląda na to, że serwer nadal jest aktywny, ale poświadczenia nie działają - konkretnie hasło.

octorat_ftp1

Dodatkowo, analizując ruch sieciowy możemy zobaczyć, że atakujący korzysta z serwera Pure-FTPd. Ostatecznie nie udało mi się pobrać biblioteki.

octorat_ftp2

octorat_ftp3

Dobra, ale wróćmy do kodu. OctoRAT używa atrybutu FileAttribute.Hidden, ukrywając niektóre wykorzystywane pliki w eksploratorze i nie są domyślnie widoczne - musimy włączyć wyświetlanie ukrytych plików, aby je zobaczyć. Głównym celem tego jest utrudnienie wykrycia przez użytkownika bądź administratora. Nie jest to skuteczna metoda przed wykryciem przez AV bądź EDR.

octorat_iamfine

Wracając do Entry Point widzimy, że program sprawdza, czy działa z podwyższonymi uprawnieniami (isRunningElevated - zwraca true or false po sprawdzeniu czy proces działa z uprawnieniami administratora). Jeśli nie, to przeprowadza UAC Bypass (BypassUACFodHelper).

octorat_bypass

Dzięki braku obfuskacji widzimy jak na tacy jakiej metody użyli twórcy OctoRAT do ominięcia systemu UAC i uruchomienia procesu w imieniu administratora. Mechanizm działa następująco - fodhelper.exe to podpisany przez Microsoft binarny plik systemowy odpowiedzialny za obsługę „Features on Demand” (opcjonalnych funkcji Windows). W jego konfiguracji (konkretnie manifeście) ustawione jest autoElevate="true", co oznacza, że program automatycznie startuje z podniesionymi uprawnieniami bez wyświetlania okna UAC (chyba że user włączył opcję “always notify”). Aby jednak móc korzystać z tego narzędzia, user musi mieć uprawnienia administratora.

Sam proces fodhelper.exe, aby otworzyć ustawienia systemowe, korzysta z protokołu ms-settings:. Obsługa takiego protokołu jest definiowana w rejestrze Software\Classes\ms-settings\Shell\Open\command. System przy rozwiązywaniu takich skojarzeń najpierw sprawdza wpisy w HKCU\Software\Classes, a dopiero potem w HKLM\Software\Classes. Malware wykorzystuje ten mechanizm, tworząc w HKCU własny klucz pod tą ścieżką i ustawiając jego wartość domyślną na ścieżkę do swojego pliku wykonywalnego, a dodatkowo dodając pustą wartość w DelegateExecute, co powoduje użycie mechanizmu delegowanego wykonania i pominięcie standardowej walidacji. W efekcie, gdy fodhelper.exe próbuje wywołać ms-settings:, Windows odczytuje nadpisane skojarzenie z HKCU i uruchamia wskazany tam plik, który dziedziczy podniesione uprawnienia procesu wywołującego (czyli fodhelpera). Po wykonaniu kodu klucz rejestru jest usuwany, aby ukryć ślady działania (DeleteSubKeyTree).

octorat_uacbypass

Jeśli metoda się nie powiedzie, to następuje próba uruchomienia procesu z uprawnieniami admina przez “runas”. A jeśli i to się nie powiedzie, to proces kontynuuje swoje działania z obecnymi uprawnieniami.

Jedną z funkcjonalności OctoRAT jest możliwość kradzieży poświadczeń z przeglądarek. Zapisuje je w archiwum ZIP i wysyła do wskazanego serwera. Dane pobierane są ze zmiennych środowiskowych. Co ciekawe widzimy, że jeśli program nie znajdzie adresu IP i portu hosta docelowego (zmienne text i text2 mają wartość NULL lub są puste), to defaultowa wartość jest ustawiana na localhost z portem 8080. Może to być zabezpieczenie przed błędem i niespodziewanym zakończeniem programu.

Dodatkowo OctoRAT wykorzystuje mechanizm synchronizacji mutex (mutual exclusion object). Jest to unikalny identyfikator, który zapobiega utworzeniu nowej, drugiej instancji OctoRAT. Nie może być dwóch lub więcej jednocześnie.

octorat_browser_1

OctoRAT zbiera poświadczenia ze zmiennych środowiskowych APPDATA i LOCALAPPDATA

octorat_browser2

Skradzione poświadczenia są następnie zapisywane i wysyłane w archiwum ZIP do wskazanego serwera.

octorat_uploadtoserver

Dopiero po przesłaniu poświadczeń malware wykonuje pełną inicjalizację (Program.Initialize) i łączy się z serwerem C2 (Program.Run), aby przyjmować zdalne instrukcje.

octorat_init

octorat_c2

OctoRAT posiada również metody z klasy “FunFunctions” mające głównie na celu prześladowanie ofiary - m.in. otwieranie i zamykanie napędu CD, wyświetlanie wiadomości w oknach, otwieranie kalkulatora, notepada, minimalizacja okien, granie dźwięków, czy otwieranie stron internetowych - atakujący ma tu bezpośredni dostęp do bibliotek Windowsa np. user32.dll.

octorat_fun_functions

octorat_fun1

octorat_fun2

Malware przesyła do serwera C2 informacje dotyczące hosta m.in. nazwę użytkownika, liczbę monitorów, informację czy ma portfele do kryptowalut, kraj rezydowania. Całość jest składania w plik w formacie JSON.

octorat_host_info

OctoRAT posiada również funkcjonalność wallet grabbera. Skanuje system ofiary w poszukiwaniu portfeli kryptowalut w formie rozszerzeń do przeglądarek oraz aplikacji desktopowych.

octorat_wallet1

octorat_wallet2

Atakujący kopiuje i zapisuje całe foldery portfeli do katalogu tymczasowego TEMP. Następnie z folderów tworzy archiwa ZIP i przesyła co serwera C2. Na koniec tymczasowy katalog jest usuwany.

octorat_wallet5

octorat_wallet_send

OctoRAT wykorzystuje mechanizm persistence tworząc schedule task, który wykonuje się i uruchamia malware co 1 minutę. Dla niepoznaki nazwany został “WindowsUpdate”. OctoRAT tworzy permanentny system autostartu. Identyfikator MITRE ATT&CK to T1053.005.

octorat_schedule_task

Malware może wykonać polecenie modyfikacji klucza rejestru widocznego poniżej i kompletnie wyłączyć UAC. Dzięki temu atakujący może wykonywać czynności w systemie bez wyświetlania okna UAC z prośbą o akceptację administratora, co mogłoby zaalarmować ofiarę.

octorat_uac

Malware może wyłączyć firewalla dla wszystkich profili przez polecenie “netsh advfirewall set allprofiles state off”. Network shell (netsh) to wbudowane narzędzie Windows do m.in. konfiguracji sieciowych oraz firewalla.

octorat_firewall

Ważna do odnotowania jest również funkcja samozniszczenia SelfDelete(), a właściwie ukrycia. Plik wykonywalny OctoRAT może zostać ukryty w eksploratorze plików i dodatkowo oznaczony jako plik systemowy, co oznacza, że włączenie wyświetlania ukrytych plików w eksploratorze nie wystarczy, aby zobaczyć ten plik. Trzeba również odznaczyć opcję “Hide protected operating system files”.

octorat_hide

Malware ma również funkcję keyloggera. W kodzie widoczny jest format w jakim zapisywany jest tekst. Widoczny jest również mechanizm escapowania znaków, aby dane przesyłane w formacie JSON nie zawierały błędów.

octorat_keylog

Wnioski? Mamy do czynienia z zaawansowanym, wielofunkcyjnym RAT-em, łączącym ze sobą funkcje: keyloggera, wallet grabbera, spyware’a oraz stealera. Posiada też funkcje pozwalające aktywnie prześladować ofiarę. Biorąc wszystko pod uwagę, OctoRAT jest bronią cyberprzestępców, których motywem są głównie zyski finansowe ze sprzedaży danych. Raczej nie jest to oprogramowanie do ataków na infrastrukturę krytyczną przez grupy APT, chociaż funkcje szpiegowskie/keyloggera mogą posłużyć do kradzieży poświadczeń w pierwszych etapach takiego ataku.

Reguła YARA
#

YARA to właściwie jednocześnie narzędzie i język służące do klasyfikowania malware’u. W regułach YARA określa się 3 elementy: metadane (opis, data utworzenia, autor), charakterystyczne dane, po których rozpoznajemy malware (za pomocą strings, hex strings lub regexa) oraz warunki, które muszą zostać spełnione, aby sklasyfikować plik jako konkretny malware.

Aby ułatwić identyfikację OctoRAT stworzyłem przykładową regułę, która bierze pod uwagę zidentyfikowane funkcjonalności.

import "pe"

rule OctoRAT
{
	meta: 
		author = "cyberzgroza"
		description = "Potential OctoRAT"
		hash_reference_1 = "9a5ff998dbf0f6923d0b454d89800fb4"
		hash_reference_2 = "69905105c88d17248aa705855c89c6c6"
		filetype = "pe"
		date = "01.03.2026"
		
	strings:
		$s_1 = "OctoRAT" nocase
		$s_2 = "FileAttributes.Hidden" nocase
		$s_3 = "WalletGrabber" nocase
		$s_4 = "keylogger" nocase 
		$s_5 = "schtasks" nocase // persistence
		$s_6 = "fodhelper" nocase // uac bypass
		$s_8 = "funfunctions" nocase
		$s_9 = "browserdataextractor" nocase //kradziez poswiadczen
		$s_11 = "browserhistory" nocase  //historia przegladarki
		$s_7 = /registry\./i  //modyfikacja rejestru
		$s_10 = /.{0,50}mutex.{0,50}\{.*?\}/is // identyfikacja mutexu  
		$s_12 = /sqlite\./i
	
	condition:  
		pe.is_pe and  
		3 of ($s*) // minimum 3 stringi
}

Related

Malicious VBA analysis - LetsDefend
·1341 słów·7 min
Blueteam Macro Phishing
Analiza makr z załącznika z maila phishingowego