Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Nedávno se na Group-IB obrátil evropský výrobce elektroinstalačního zařízení - jeho zaměstnanci obdržel poštou podezřelý dopis se škodlivou přílohou. Ilja Pomerantsev, specialista na analýzu malwaru ze společnosti CERT Group-IB, provedl podrobnou analýzu tohoto souboru, objevil tam spyware AgentTesla a řekl, co lze od takového malwaru očekávat a jak je nebezpečný.

Tímto příspěvkem otevíráme sérii článků o tom, jak analyzovat takové potenciálně nebezpečné soubory, a na ty nejzvučnější čekáme 5. prosince bezplatný interaktivní webinář na toto téma „Analýza malwaru: Analýza skutečných případů“. Všechny detaily jsou pod řezem.

Distribuční mechanismus

Víme, že malware se dostal do počítače oběti prostřednictvím phishingových e-mailů. Příjemce dopisu byl pravděpodobně BCCed.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Analýza hlaviček ukazuje, že odesílatel dopisu byl podvržen. Ve skutečnosti dopis odešel s vps56[.]oneworldhosting[.]com.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Příloha e-mailu obsahuje archiv WinRar qoute_jpeg56a.r15 se škodlivým spustitelným souborem QOUTE_JPEG56A.exe uvnitř.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Ekosystém HPE

Nyní se podívejme, jak vypadá ekosystém zkoumaného malwaru. Níže uvedený diagram ukazuje jeho strukturu a směry interakce komponent.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Nyní se podíváme na jednotlivé součásti malwaru podrobněji.

Nakladač

Původní soubor QOUTE_JPEG56A.exe je zkompilovaný AutoIt v3 skript.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Chcete-li zatemnit původní scénář, obfuskátor s podobným PELock AutoIT-Obfuscator vlastnosti.
Deobfuskace se provádí ve třech fázích:

  1. Odstranění zmatku Pro-Pokud

    Prvním krokem je obnovení řídicího toku skriptu. Control Flow Flattening je jedním z nejběžnějších způsobů ochrany binárního kódu aplikace před analýzou. Matoucí transformace dramaticky zvyšují složitost extrahování a rozpoznávání algoritmů a datových struktur.

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  2. Obnova řádku

    K šifrování řetězců se používají dvě funkce:

    • gdorizabegkvfca - Provádí dekódování podobné Base64

      Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

    • xgacyukcyzxz - jednoduchý byte-bajtový XOR prvního řetězce s délkou druhého

      Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  3. Odstranění zmatku BinaryToString и Provést

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Hlavní zátěž je uložena v rozdělené podobě v adresáři Fonty zdrojové části souboru.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Pořadí lepení je následující: TIEQHCXWFG, IME, SPDGUHIMPV, KQJMWQQAQTKTFXTUOSW, AOCHKRWWSKWO, JSHMSJPS, NHHWXJBMTTSPXVN, BFUTIFWWXVE, HWJHO, AVZOUMVFRDWFLWU.

K dešifrování extrahovaných dat se používá funkce WinAPI CryptDecrypta jako klíč se použije klíč relace vygenerovaný na základě hodnoty fZgFiZlJDxvuWatFRgRXZqmNCIyQgMYc.

Dešifrovaný spustitelný soubor je odeslán na vstup funkce RunPE, která provádí ProcessInject в RegAsm.exe pomocí vestavěného ShellCode (také známý jako RunPE ShellCode). Autorství náleží uživateli španělského fóra nezjistitelné[.]síť pod přezdívkou Wardow.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Za zmínku také stojí, že v jednom z vláken tohoto fóra je obfuskátor pro AutoIt s podobnými vlastnostmi zjištěnými během analýzy vzorku.

Sám ShellCode docela jednoduché a přitahuje pozornost pouze vypůjčené od hackerské skupiny AnunakCarbanak. Funkce hash volání API.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Jsme si také vědomi případů použití Francouzský Shellcode různé verze.
Kromě popsané funkce jsme také identifikovali neaktivní funkce:

  • Blokování ručního ukončení procesu ve správci úloh

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Restartování podřízeného procesu po jeho ukončení

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Obejít UAC

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Uložení užitečného zatížení do souboru

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Ukázka modálních oken

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Čekání na změnu pozice kurzoru myši

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • AntiVM a AntiSandbox

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • sebedestrukce

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  • Čerpání užitečného zatížení ze sítě

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Víme, že taková funkce je pro chránič typická CypherIT, což je zjevně dotyčný bootloader.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Hlavní modul softwaru

Dále stručně popíšeme hlavní modul malwaru a podrobněji jej zvážíme ve druhém článku. V tomto případě se jedná o aplikaci na . NET.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Během analýzy jsme zjistili, že byl použit obfuskátor ConfuserEX.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

IELibrary.dll

Knihovna je uložena jako zdroj hlavního modulu a je to dobře známý plugin pro Agent Tesla, která poskytuje funkce pro extrahování různých informací z prohlížečů Internet Explorer a Edge.

Agent Tesla je modulární špionážní software distribuovaný pomocí modelu malware-as-a-service pod rouškou legitimního keyloggeru. Agent Tesla je schopen extrahovat a přenášet uživatelská pověření z prohlížečů, e-mailových klientů a FTP klientů na server útočníkům, zaznamenávat data ze schránky a zachycovat obrazovku zařízení. V době analýzy byly oficiální stránky vývojářů nedostupné.

Vstupním bodem je funkce GetSavedPasswords třídy InternetExplorer.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1
Obecně je provádění kódu lineární a neobsahuje žádnou ochranu proti analýze. Pozornost si zaslouží pouze nerealizovaná funkce GetSavedCookies. Funkčnost pluginu měla být podle všeho rozšířena, ale nikdy k tomu nedošlo.

Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

Připojení bootloaderu k systému

Pojďme si prostudovat, jak je bootloader připojen k systému. Zkoumaný exemplář se neukotví, ale při podobných událostech se vyskytuje podle následujícího schématu:

  1. Ve složce C:UsersPublic skript je vytvořen Visual Basic

    Příklad skriptu:

    Volební účast selhala: vystavme AgentTeslu čisté vodě. Část 1

  2. Obsah zaváděcího souboru je doplněn znakem null a uložen do složky %Temp%
  3. Pro soubor skriptu je v registru vytvořen klíč automatického spouštění HKCUSoftwareMicrosoftWindowsCurrentVersionRun

Na základě výsledků první části analýzy jsme tedy byli schopni stanovit názvy rodin všech komponent zkoumaného malwaru, analyzovat vzor infekce a také získat objekty pro zápis podpisů. V rozboru tohoto objektu budeme pokračovat v dalším článku, kde se na hlavní modul podíváme podrobněji Agent Tesla. Nenechte si ujít!

Mimochodem, 5. prosince zveme všechny čtenáře na bezplatný interaktivní webinář na téma „Analýza malwaru: analýza skutečných případů“, kde autor tohoto článku, specialista CERT-GIB, online ukáže první fázi analýza malwaru - poloautomatické rozbalení vzorků na příkladu tří reálných minipřípadů z praxe a vy se můžete zúčastnit analýzy. Webinář je vhodný pro specialisty, kteří již mají zkušenosti s analýzou škodlivých souborů. Registrace probíhá výhradně z firemního e-mailu: registr. Čekám na tebe!

zranění

rule AgentTesla_clean{
meta:
    author = "Group-IB"
    file = "78566E3FC49C291CB117C3D955FA34B9A9F3EEFEFAE3DE3D0212432EB18D2EAD"
    scoring = 5
    family = "AgentTesla"
strings:
    $string_format_AT = {74 00 79 00 70 00 65 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 68 00 77 00 69 00 64 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 74 00 69 00 6D 00 65 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 63 00 6E 00 61 00 6D 00 65 00 3D 00 7B 00 33 00 7D 00 0D 00 0A 00 6C 00 6F 00 67 00 64 00 61 00 74 00 61 00 3D 00 7B 00 34 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 3D 00 7B 00 35 00 7D 00 0D 00 0A 00 69 00 70 00 61 00 64 00 64 00 3D 00 7B 00 36 00 7D 00 0D 00 0A 00 77 00 65 00 62 00 63 00 61 00 6D 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 37 00 7D 00 0D 00 0A 00 73 00 63 00 72 00 65 00 65 00 6E 00 5F 00 6C 00 69 00 6E 00 6B 00 3D 00 7B 00 38 00 7D 00 0D 00 0A 00 5B 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 73 00 5D 00}
    $web_panel_format_string = {63 00 6C 00 69 00 65 00 6E 00 74 00 5B 00 5D 00 3D 00 7B 00 30 00 7D 00 0D 00 0A 00 6C 00 69 00 6E 00 6B 00 5B 00 5D 00 3D 00 7B 00 31 00 7D 00 0D 00 0A 00 75 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 5B 00 5D 00 3D 00 7B 00 32 00 7D 00 0D 00 0A 00 70 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 5B 00 5D 00 3D 00 7B 00 33 00 7D 00 00 15 55 00 52 00 4C 00 3A 00 20 00 20 00 20 00 20 00 20 00 20 00 00 15 55 00 73 00 65 00 72 00 6E 00 61 00 6D 00 65 00 3A 00 20 00 00 15 50 00 61 00 73 00 73 00 77 00 6F 00 72 00 64 00 3A 00}
condition:
     all of them
}

rule  AgentTesla_obfuscated {
meta:
    author = "Group-IB"
    file = "41DC0D5459F25E2FDCF8797948A7B315D3CB075398D808D1772CACCC726AF6E9"
    scoring = 5
    family = "AgentTesla"
strings:
    $first_names = {61 66 6B 00 61 66 6D 00 61 66 6F 00 61 66 76 00 61 66 79 00 61 66 78 00 61 66 77 00 61 67 6A 00 61 67 6B 00 61 67 6C 00 61 67 70 00 61 67 72 00 61 67 73 00 61 67 75 00}
    $second_names = "IELibrary.resources"
condition:
     all of them
}

rule AgentTesla_module_for_IE{
meta:
    author = "Group-IB"
    file = "D55800A825792F55999ABDAD199DFA54F3184417215A298910F2C12CD9CC31EE"
    scoring = 5
    family = "AgentTesla_module_for_IE"
strings:
    $s0 = "ByteArrayToStructure" 
    $s1 = "CryptAcquireContext" 
    $s2 = "CryptCreateHash" 
    $s3 = "CryptDestroyHash" 
    $s4 = "CryptGetHashParam" 
    $s5 = "CryptHashData"
    $s6 = "CryptReleaseContext" 
    $s7 = "DecryptIePassword" 
    $s8 = "DoesURLMatchWithHash" 
    $s9 = "GetSavedCookies" 
    $s10 = "GetSavedPasswords" 
    $s11 = "GetURLHashString"  
condition:
     all of them
}

rule RunPE_shellcode {
meta:
    author = "Group-IB"
    file = "37A1961361073BEA6C6EACE6A8601F646C5B6ECD9D625E049AD02075BA996918"
    scoring = 5
    family = "RunPE_shellcode"
strings:
    $malcode = {
      C7 [2-5] EE 38 83 0C // mov     dword ptr [ebp-0A0h], 0C8338EEh
      C7 [2-5] 57 64 E1 01 // mov     dword ptr [ebp-9Ch], 1E16457h
      C7 [2-5] 18 E4 CA 08 // mov     dword ptr [ebp-98h], 8CAE418h
      C7 [2-5] E3 CA D8 03 // mov     dword ptr [ebp-94h], 3D8CAE3h
      C7 [2-5] 99 B0 48 06 // mov     dword ptr [ebp-90h], 648B099h
      C7 [2-5] 93 BA 94 03 // mov     dword ptr [ebp-8Ch], 394BA93h
      C7 [2-5] E4 C7 B9 04 // mov     dword ptr [ebp-88h], 4B9C7E4h
      C7 [2-5] E4 87 B8 04 // mov     dword ptr [ebp-84h], 4B887E4h
      C7 [2-5] A9 2D D7 01 // mov     dword ptr [ebp-80h], 1D72DA9h
      C7 [2-5] 05 D1 3D 0B // mov     dword ptr [ebp-7Ch], 0B3DD105h
      C7 [2-5] 44 27 23 0F // mov     dword ptr [ebp-78h], 0F232744h
      C7 [2-5] E8 6F 18 0D // mov     dword ptr [ebp-74h], 0D186FE8h
      }
condition:
    $malcode 
}

rule AgentTesla_AutoIT_module{
meta:
    author = "Group-IB"
    file = "49F94293F2EBD8CEFF180EDDD58FA50B30DC0F08C05B5E3BD36FD52668D196AF"
    scoring = 5
    family = "AgentTesla"
strings:                                    
    $packedexeau = {55 ED F5 9F 92 03 04 44 7E 16 6D 1F 8C D7 38 E6 29 E4 C8 CF DA 2C C4 E1 F3 65 48 25 B8 93 9D 66 A4 AD 3C 39 50 00 B9 60 66 19 8D FC 20 0A A0 56 52 8B 9F 15 D7 62 30 0D 5C C3 24 FE F8 FC 39 08 DF 87 2A B2 1C E9 F7 06 A8 53 B2 69 C3 3C D4 5E D4 74 91 6E 9D 9A A0 96 FD DB 1F 5E 09 D7 0F 25 FB 46 4E 74 15 BB AB DB 17 EE E7 64 33 D6 79 02 E4 85 79 14 6B 59 F9 43 3C 81 68 A8 B5 32 BC E6}
condition:
     all of them
}

Hashe

Příjmení qoute_jpeg56a.r15
MD5 53BE8F9B978062D4411F71010F49209E
SHA1 A8C2765B3D655BA23886D663D22BDD8EF6E8E894
SHA256 2641DAFB452562A0A92631C2849B8B9CE880F0F8F

890E643316E9276156EDC8A

Styl Archivovat WinRAR
Velikost 823014
Příjmení QOUTE_JPEG56A.exe
MD5 329F6769CF21B660D5C3F5048CE30F17
SHA1 8010CC2AF398F9F951555F7D481CE13DF60BBECF
SHA256 49F94293F2EBD8CEFF180EDDD58FA50B30DC0F08

C05B5E3BD36FD52668D196AF

Styl PE (kompilovaný skript AutoIt)
Velikost 1327616
Původní název Neznámý
DateStamp 15.07.2019
Odkazy Microsoft Linker(12.0)[EXE32]
MD5 C2743AEDDADACC012EF4A632598C00C0
SHA1 79B445DE923C92BF378B19D12A309C0E9C5851BF
SHA256 37A1961361073BEA6C6EACE6A8601F646C5B6ECD

9D625E049AD02075BA996918

Styl ShellCode
Velikost 1474

Zdroj: www.habr.com

Přidat komentář