Stan zagrożeń w internecie znajduje się obecnie na poziomie standardowym. Nie występują duże epidemie a eksperci z Kaspersky Lab nie zanotowali żadnych poważnych incydentów związanych z bezpieczeństwem. Poziom zagrożenia: 1

Nazywam się HDRoot! Część 1

Tagi:

Jakiś czas temu, śledząc aktywność grupy Winnti, natknęliśmy się na intrygującą próbkę.

MD5

Rozmiar

Konsolidator

Data kompilacji

2C85404FE7D1891FD41FCEE4C92AD305

241’904

10.00

2012-08-06 16:12:29

Właściwość

Wartość

CompanyName

Microsoft Corporation

FileDescription

Net Command

FileVersion

6.1.7600.16385 (win7_rtm.090713-1255)

InternalName

net.exe

LegalCopyright

© Microsoft Corporation. All rights reserved.

OriginalFilename

net.exe

ProductName

Microsoft® Windows® Operating System

Była ona chroniona przez komercyjny program wykonywalny VMProtect Win64, podpisany przy użyciu znanego, zhakowanego certyfikatu chińskiej organizacji Guangzhou YuanLuo Technology. Co więcej, właściwości tego programu wykonywalnego sugerowały, że jest to Net Command (net.exe) Microsoftu, i nawet po uruchomieniu próbki otrzymaliśmy dane wyjściowe typowe dla oryginalnego narzędzia net.exe:  

hdroot_1.png

Podszywanie się pod net.exe

Wszystko to wskazywało, że próbka jest raczej podejrzana.

Bootkit

Ponieważ kod programu był chroniony, analiza jego funkcjonalności stanowiłaby żmudne zadanie. Na szczęście, zrzut ujawnił kilka unikatowych i dość istotnych ciągów oraz cztery kolejne próbki ukryte wewnątrz początkowej próbki: wersje Win32 i Win64 jednej biblioteki i jednego sterownika: 

hdroot_2_auto.png

Ciągi w kodzie szkodliwego oprogramowania

Ciągi te pozwoliły nam przypuszczać, że próbka ta stanowiła w rzeczywistości instalatora bootkita. Dzięki pewnym wyraźnym artefaktom znaleźliśmy podobną próbkę bez ochrony kodu, która potwierdziła nasze podejrzenia. 

Na początek, uruchommy to narzędzie:

hdroot_3.png

Oryginalne dane wyjściowe HDD Rootkita

Parametry programu mówią same za siebie – narzędzie to instaluje bootkita, który infekuje system operacyjny na etapie rozruchu przy użyciu backdoora określonego jako parametr. Backdoor ten musi być programem wykonywalnym Win32 lub biblioteką dołączaną dynamicznie. 

Narzędzie to nosi nazwę „HDD Rootkit”; stąd też podstawa nazw naszego werdyktu HDRoot. 22 sierpnia 2006 r. numer wersji wynosił 1.2. 

Można zatem stwierdzić, że chroniona wersja stanowiła to samo narzędzie, zmodyfikowane w celu wykorzystania go po stronie ofiary, tak aby w przypadku wykrycia go przez kogoś spoza kręgu atakujących, nie został ujawniony cel tego narzędzia.

HDD Rootkit utrzymuje grupę zasobów, które również posiadają wiele mówiące nazwy:

hdroot_4.png

Zasoby HDD Rootkita

Możemy przeczytać następujące informacje:  

„MBR” przechowuje pierwszy fragment szkodliwego kodu, który jest wstrzykiwany do rekordu MBR zainfekowanego komputera;


“BOOT” – drugi fragment szkodliwego kodu rozruchowego;
“RKIMAGE” – trzeci fragment szkodliwego kodu rozruchowego;  
“DLLLOAD” – dynamicznie dołączana biblioteka, która jest spychana przez szkodliwy kod rozruchowy do systemu plików oraz autouruchamianie systemu operacyjnego. 

Spróbujmy uruchomić jakiś program wykonywalny przy użyciu bootkita. W naszym eksperymencie rolę programu wykonywalnego odgrywa nieszkodliwy program, który nie robi nic poza utworzeniem pliku w folderze głównym na dysku C:. Spróbuję uruchomić go przy użyciu narzędzia HDD Rootkit z następującym poleceniem:      

hdroot.exe inst write_to_c.exe c:

wskazując, że chciałbym zainstalować bootkita na dysku C: który spowoduje uruchomienie programu write_to_c.exe podczas uruchomienia systemu.

hdroot_5_auto.png

Instalacja bootkita HDRoot na żywo

Narzędzie sprawdza, czy istnieje wolne miejsce na wskazanym dysku, i odmawia zainstalowania bootkita, gdy wartość ta jest mniejsza niż 30% całkowitego miejsca.

hdroot_6.png

Sprawdzanie wolnego miejsca na dysku

A zatem bootkit został zainstalowany. Sprawdźmy, co się wydarzyło. Najpierw fragment kodu w głównym rekordzie rozruchowym jest zastępowany szkodliwym fragmentem z zasobu „MBR”:  

hdroot_7_auto.png

Zasób „MBR”

Dwa pierwsze bajty rozszerzonego sektora inicjującego EB 70 oznaczają przeskok do 72-go offsetu, gdzie zlokalizowana jest reszta pierwszego bloku kodu rozruchowego. Zera przed 0x70 i po 0xB0 oznaczają, że kod oryginalnego rekordu MBR na tych pozycjach pozostaje nietknięty. Poniżej przedstawiono załatany rekord MBR po zainstalowaniu bootkita:      

hdroot_8_auto.png

Szkodliwy kod wstrzyknięty do rekordu MBR

Pierwszy fragment ładuje następny blok kodu rozruchowego, który został umieszczony przez instalatora bootkita w 11 sektorze (Offset: 0x1400 bajtów). Drugi blok jest pobierany z zasobu „BOOT”.

hdroot_9.png

Drugi blok rozruchowy

Bajt na ósmym offsecie drugiego bloku rozruchowego stanowi numer dysku, a kolejna wartość DWORD stanowi offset w sektorach, w których zlokalizowana jest kolejna część rozruchowa. Przykład ma wartość 0x80, która oznacza dysk 0 i offset 0x5FD9A0, co po pomnożeniu przez 0x200 bajtów (rozmiar sektora) daje 0xBFB34000. Jest to offset w bajtach względem początku dysku, gdzie instalator bootkita umieścił trzeci blok rozruchowy pobrany z jego zasobu „RKIMAGE”.  

Zasób „RKIMAGE” posiada duży fragment kodu, który implementuje wstrzykiwanie DLL (biblioteka DLL jest pobierana z zasobu „DLLLOAD”) do systemu plików i dokonuje zmian w rejestrze systemu, tak aby biblioteka DLL została załadowana i uruchomiona wraz ze startem systemu. Ponieważ ten fragment kodu jest wykonywany na wczesnym etapie rozruchu, nie istnieje żaden interfejs API w celu uzyskania dostępu do systemu plików, a kod samodzielnie analizuje systemy plików (FAT32 i NTFS).     

hdroot_10.png

Obsługiwane systemy plików

Szkodnik szuka zakodowanego na sztywno specjalnego pliku, którego zawartość jest zastępowana biblioteką DLL pobieraną z określonego miejsca na dysku. Większość znalezionych przez nas wersji HDRoota wykorzystuje do tych celów plik %windir%\WMSysPr9.prx. Czasami biblioteka DLL nadpisuje jakąś istniejącą bibliotekę systemową, co z pewnością nie jest bezpiecznym sposobem działania szkodliwego oprogramowania, ponieważ w niektórych przypadkach może spowodować awarię systemu operacyjnego i powiadomić użytkownika o infekcji. Wśród plików, które mogą zostać wykorzystane do nadpisania, zauważyliśmy:     

%windir%\twain.dll
%windir%\msvidc32.dll
%windir%\help\access.hlp
%windir%\help\winssnap.hlp
%windir%\system\olesvr.dll
%windir%\syswow64\C_932.NLS
%windir%\syswow64\C_20949.NLS
%windir%\syswow64\dssec.dat
%windir%\syswow64\irclass.dll
%windir%\syswow64\msvidc32.dll
%windir%\syswow64\kmddsp.tsp

Następnie, kod odczytuje zawartość pliku %windir%\system32\config\system, który przechowuje zawartość gałęzi rejestru HKEY_LOCAL_MACHINE\SYSTEM. Gałąź rejestru zawiera między innymi informacje dotyczące zainstalowanych usług. Wiele usług systemowych jest uruchamianych podczas logowania się do systemu operacyjnego jako ServiceDll za pośrednictwem svchost.exe, gdzie ścieżka do biblioteki funkcji, która ma zostać uruchomiona, zostaje określona w wartości rejestru ServiceDll dla określonej usługi. Szkodliwy kod rozruchowy wyszukuje w pliku „system” zakodowaną na sztywno ścieżkę do biblioteki systemowej   powiązanej z usługą systemową i zastępuje tę wartość ścieżką do wstrzykniętej biblioteki DLL (np. %windir%\WMSysPr9.prx). We wszystkich wersjach, jakie napotkaliśmy, ustaliliśmy, że HDRoot wykorzystał następujące usługi:   

 

Wewnętrzna nazwa usługi

Wyświetlana nazwa usługi

Ścieżka poszukiwania

wuauserv

Automatic Updates

system32\wuauserv.dll

LanManServer

Server

system32\srvsvc.dll

schedule

Task Scheduler

system32\schedsvc.dll

winmgmt

Windows Management Instrumentation

system32\wbem\wmisvc.dll

A zatem, gdy system operacyjny zaczyna uruchamiać usługi, zamiast załadować oryginalną usługę DLL svchost.exe, ładuje szkodliwą. Ta szkodliwa biblioteka nie robi nic poza ładowaniem i uruchamianiem backdoora pobieranego z wyznaczonego offsetu na dysku twardym, gdzie umieścił go instalator HDD Rootkit. Znaleźliśmy dwie wersje HDRoota, które wykonują tę czynność przy użyciu różnych metod. Pierwsza z nich zapisuje jedynie backdoora jako plik %windir%\temp\svchost.exe i wykonuje go z pomocą funkcji API WinExec. Wszystko wskazuje na to, że autor tego szkodliwego oprogramowania uznał później, że nie jest to najlepszy sposób uruchamiania backdoora, ponieważ jest on widoczny dla rozwiązań antywirusowych, a fakt uruchomienia aplikacji może zostać zauważony podczas sprawdzania zdarzeń w logach systemu. Inna wersja biblioteki DLL nie umieszcza pliku, ale alokuje backdoora w pamięci, przygotowuje go do właściwego wykonania (ładuje biblioteki zgodnie z tabelą importu) i uruchamia go tam samodzielnie. Podejście to jest bardziej utajnione, ponieważ znacznie zmniejsza szanse wykrycia backdoora nawet w przypadku zidentyfikowania biblioteki DLL lub zatrutego rekordu MBR.       

Powracając do naszego eksperymentu, gdy zostanie wykonane polecenie

hdroot.exe inst write_to_c.exe c:

uruchamiamy ponownie system operacyjny. Po tym, jak zostanie załadowany, możemy zobaczyć wynik uruchomienia naszego programu write_to_c.exe, który zachowuje się, jak gdyby był backddorem: 

 

hdroot_11.png

Stworzony plik testowy zzz.bin

Plik C:\zzz.bin jest widoczny od razu po załadowaniu się systemu Windows, co potwierdza, że program write_to_c.exe został poprawnie wykonany. 

Cały proces infekcji HDRoota wygląda następująco:

hdroot_12_auto.png

Schemat działania HDRoota

Co ciekawe, szkodnik ten nie posiada funkcjonalności uruchamiania oryginalnej usługi, która została podmieniona podczas procesu rozruchu. Ponieważ „zainfekowane” usługi są częścią systemu operacyjnego, zaniechanie tej czynności mogłoby spowodować niewłaściwe działanie systemu Windows i zdradzić infekcję. Jest to jeszcze dziwniejsze, zważywszy na to, że szkodliwe oprogramowanie próbuje zatrzeć swoje ślady. „Próbuje”, gdyż tak naprawdę nie udaje mu się to. Umieszczona biblioteka DLL posiada funkcję przywracania oryginalnej wartości ServiceDll w rejestrze, przechowując ścieżkę do biblioteki DLL związanej z tą usługą. Jednak z powodu zawierającego błędy kodu w trzecim bloku rozruchowym (od „RKIMAGE”), który w niewielkim stopniu łata zawartość „DLLLOAD” przed wstrzykiwaniem, biblioteka DLL zaczyna przechowywać niewłaściwe dane na zakodowanych na sztywno offsetach i uniemożliwia bibliotece DLL znalezienie poprawnej ścieżki rejestru do ServiceDll w celu przywrócenia oryginalnej wartości. To dlatego, na przykład, po zalogowaniu się do system Windows nadal widoczny jest “C:\WINDOWS\WMSysPr9.prx” zamiast “C:\WINDOWS\system32\wuauserv.dll

 

hdroot_13.png

Ścieżka prowadzi do wstrzykniętej szkodliwej biblioteki DLL w rejestrze

hdroot_14.png

Błędna ścieżka rejestru i nazwa wartości

hdroot_15.png

Rejestr SubKey omyłkowo nadpisany pierwotną wartością ServiceDll

Należy stwierdzić, że szkodliwe oprogramowanie zostało stworzone dość niedbale, co nie pasuje do tak poważnego ugrupowania stosującego ataki APT jak Winnti. Zauważyliśmy jednak, że autor tego szkodnika starał się, aby bootkit działał poprawnie na etapie rozruchu, aby nie dopuścić do całkowitego uniemożliwienia załadowania systemu operacyjnego. Jednak wspomniane wyżej błędy stanowią dość wyraźne oznaki infekcji na komputerze. Na przykład, nie działają oryginalne usługi, takie jak Windows Update czy Harmonogram zadań, ale wygląda na to, że nikt tego nie zauważył.        

Podczas dochodzenia wykryliśmy kilka backdoorów wykorzystywanych przez bootkita Windows Update do infekowania systemów operacyjnych. Te szkodliwe programy zostaną opisane w kolejnej części naszego artykułu.