Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

Sa artikulong ito kinukumpleto namin ang serye ng mga publikasyong nakatuon sa pagsusuri ng malisyosong software. SA ang unang bahagi Nagsagawa kami ng isang detalyadong pagsusuri ng isang nahawaang file na natanggap ng isang kumpanya sa Europa sa pamamagitan ng koreo at natuklasan ang AgentTesla spyware doon. Sa ang ikalawang bahagi inilarawan ang mga resulta ng isang hakbang-hakbang na pagsusuri ng pangunahing module ng AgentTesla.

Ngayon si Ilya Pomerantsev, isang espesyalista sa pagsusuri ng malware sa CERT Group-IB, ay magsasalita tungkol sa unang yugto ng pagsusuri ng malware - semi-awtomatikong pag-unpack ng mga sample ng AgentTesla gamit ang halimbawa ng tatlong mini-cases mula sa pagsasanay ng mga espesyalista ng CERT Group-IB.

Karaniwan, ang unang yugto sa pagsusuri ng malware ay ang pag-alis ng proteksyon sa anyo ng isang packer, cryptor, protector o loader. Sa karamihan ng mga kaso, maaaring malutas ang problemang ito sa pamamagitan ng pagpapatakbo ng malware at pagsasagawa ng dump, ngunit may mga sitwasyon kung saan hindi angkop ang paraang ito. Halimbawa, kung ang malware ay isang encryptor, kung pinoprotektahan nito ang mga rehiyon ng memorya nito mula sa pagtatapon, kung ang code ay naglalaman ng mga mekanismo ng pag-detect ng virtual machine, o kung ang malware ay nagre-reboot kaagad pagkatapos magsimula. Sa ganitong mga kaso, ginagamit ang tinatawag na "semi-automatic" na pag-unpack, iyon ay, ang mananaliksik ay may kumpletong kontrol sa proseso at maaaring mamagitan anumang oras. Isaalang-alang natin ang pamamaraang ito gamit ang tatlong sample ng pamilyang AgentTesla bilang isang halimbawa. Ito ay medyo hindi nakakapinsalang malware kung hindi mo pinagana ang access sa network nito.

Sample No. 1

Ang source file ay isang MS Word na dokumento na nagsasamantala sa kahinaan na CVE-2017-11882.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Bilang resulta, ang payload ay nai-download at inilunsad.

Ang pagsusuri sa puno ng proseso at mga marker ng pag-uugali ay nagpapakita ng iniksyon sa proseso RegAsm.exe.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
May mga behavioral marker na katangian ng AgentTesla.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang na-download na sample ay ang maipapatupad . NET-file na protektado ng isang tagapagtanggol .NET Reactor.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Buksan natin ito sa utility dnSpy x86 at pumunta sa entry point.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Sa pamamagitan ng pagpunta sa function DateTimeOffset, makikita natin ang initialization code para sa bago . NET-modyul. Ilagay natin breakpoint sa linya na interesado kami at patakbuhin ang file.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Sa isa sa mga ibinalik na buffer makikita mo ang pirma ng MZ (0x4D 0x5A). I-save natin ito.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang dumped executable file ay isang dynamic na library na isang loader, i.e. kinukuha ang payload mula sa seksyon ng mapagkukunan at inilulunsad ito.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Kasabay nito, ang mga kinakailangang mapagkukunan mismo ay wala sa dump. Sila ay nasa sample ng magulang.

Kagamitan dnSpy ay may dalawang lubhang kapaki-pakinabang na functionality na makakatulong sa aming mabilis na lumikha ng "Frankenstein" mula sa dalawang nauugnay na file.

  1. Ang una ay nagbibigay-daan sa iyo na "i-paste" ang isang dynamic na library sa parent sample.

    Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

  2. Ang pangalawa ay muling isulat ang function code sa entry point upang tawagan ang nais na paraan ng ipinasok na dynamic na library.

    Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

I-save namin ang aming "Frankenstein", set breakpoint sa linya na nagbabalik ng buffer na may mga na-decrypt na mapagkukunan, at gumawa ng dump ayon sa pagkakatulad sa nakaraang yugto.

Ang pangalawang dump ay nakasulat sa VB.NET isang executable file na protektado ng isang tagapagtanggol na pamilyar sa amin ConfuserEx.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Pagkatapos alisin ang tagapagtanggol, ginagamit namin ang mga panuntunan ng YARA na isinulat nang mas maaga at tinitiyak na ang na-unpack na malware ay talagang AgentTesla.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

Sample No. 2

Ang source file ay isang MS Excel na dokumento. Ang isang built-in na macro ay nagdudulot ng pagpapatupad ng malisyosong code.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Bilang resulta, inilunsad ang PowerShell script.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang script ay nagde-decrypt ng C# code at naglilipat ng kontrol dito. Ang code mismo ay isang bootloader, tulad ng makikita rin mula sa ulat ng sandbox.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang payload ay isang executable . NET-file.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Pagbukas ng file sa dnSpy x86, makikita mo na ito ay na-obfuscate. Pag-alis ng obfuscation gamit ang utility de4dot at bumalik sa pagsusuri.

Kapag sinusuri ang code, maaari mong matuklasan ang sumusunod na function:

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang mga naka-encode na linya ay kapansin-pansin Pasukan ΠΈ tumawag sa diyos. Inilagay namin breakpoint sa unang linya, patakbuhin at i-save ang buffer value byte_0.

Naka-on na naman ang dump . NET at protektado ConfuserEx.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Tinatanggal namin ang obfuscation gamit ang de4dot at i-upload sa dnSpy. Mula sa paglalarawan ng file naiintindihan namin na kami ay nahaharap sa CyaX-Sharp loader.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang loader na ito ay may malawak na anti-analysis functionality.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Kasama sa functionality na ito ang pag-bypass sa mga built-in na Windows protection system, hindi pagpapagana ng Windows Defender, pati na rin ang sandbox at virtual machine detection mechanisms. Posibleng i-load ang payload mula sa network o iimbak ito sa seksyon ng mapagkukunan. Isinasagawa ang paglulunsad sa pamamagitan ng pag-iniksyon sa sarili nitong proseso, sa isang duplicate ng sarili nitong proseso, o sa mga proseso MSBuild.exe, vbc.exe ΠΈ RegSvcs.exe depende sa parameter na pinili ng attacker.

Gayunpaman, para sa amin ang mga ito ay hindi gaanong mahalaga kaysa AntiDump-function na nagdadagdag ConfuserEx. Ang source code nito ay matatagpuan sa GitHub.

Upang hindi paganahin ang proteksyon, gagamitin namin ang pagkakataon dnSpy, na nagbibigay-daan sa iyong mag-edit IL-code.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
I-save at i-install breakpoint sa linya ng pagtawag sa payload decryption function. Ito ay matatagpuan sa constructor ng pangunahing klase.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Inilunsad namin at itinatapon ang payload. Gamit ang dating nakasulat na mga panuntunan ng YARA, tinitiyak namin na ito ay AgentTesla.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3

Sample No. 3

Ang source file ay ang executable VB Native PE32-file.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ipinapakita ng pagsusuri sa entropy ang pagkakaroon ng isang malaking piraso ng naka-encrypt na data.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Kapag sinusuri ang application form sa VB Decompiler maaari mong mapansin ang isang kakaibang pixelated na background.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Entropy graph bmp-Ang imahe ay kapareho ng entropy graph ng orihinal na file, at ang laki ay 85% ng laki ng file.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang pangkalahatang hitsura ng imahe ay nagpapahiwatig ng paggamit ng steganography.

Bigyang-pansin natin ang hitsura ng puno ng proseso, pati na rin ang pagkakaroon ng isang marker ng iniksyon.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ito ay nagpapahiwatig na ang pag-unpack ay isinasagawa. Para sa mga Visual Basic loader (aka VBKrypt o VBInjector) karaniwang gamit shellcode para simulan ang kargamento, gayundin ang pag-iniksyon mismo.

Pagsusuri sa VB Decompiler nagpakita ng pagkakaroon ng isang kaganapan Load sa form FegatassocAirballoon2.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Pumunta tayo sa IDA pro sa tinukoy na address at pag-aralan ang function. Ang code ay labis na na-obfuscated. Ang fragment na interesado sa amin ay ipinakita sa ibaba.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Dito ini-scan ang address space ng proseso para sa isang lagda. Ang diskarte na ito ay lubhang kahina-hinala.

Una, ang address ng pagsisimula ng pag-scan 0x400100. Ang halagang ito ay static at hindi nababagay kapag inilipat ang base. Sa perpektong kondisyon ng greenhouse ito ay magsasaad ng katapusan PE-ang header ng executable file. Gayunpaman, ang database ay hindi static, ang halaga nito ay maaaring magbago, at ang paghahanap para sa totoong address ng kinakailangang lagda, kahit na hindi ito magiging sanhi ng isang variable na overflow, ay maaaring tumagal ng napakatagal na panahon.

Pangalawa, ang kahulugan ng lagda iWGK. Sa palagay ko ay halata na ang 4 na bait ay masyadong maliit upang magarantiya ang pagiging natatangi. At kung isasaalang-alang mo ang unang punto, ang posibilidad na magkamali ay medyo mataas.

Sa katunayan, ang kinakailangang fragment ay nakakabit sa dulo ng naunang natagpuan bmp-mga larawan sa pamamagitan ng offset 0xA1D0D.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Katuparan code ng shell isinasagawa sa dalawang yugto. Ang unang deciphers ang pangunahing katawan. Sa kasong ito, ang susi ay tinutukoy ng malupit na puwersa.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Itapon ang na-decrypt code ng shell at tumingin sa mga linya.

Una, alam na natin ngayon ang function upang lumikha ng proseso ng bata: CreateProcessInternalW.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Pangalawa, nalaman namin ang mekanismo ng pag-aayos sa system.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Bumalik tayo sa orihinal na proseso. Ilagay natin breakpoint sa CreateProcessInternalW at ipagpatuloy ang pagpapatupad. Susunod na makikita natin ang koneksyon NtGetContextThread/NtSetContextThread, na nagbabago sa execution start address sa address ShellCode.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Kumonekta kami sa ginawang proseso gamit ang isang debugger at i-activate ang kaganapan Suspindihin sa libraryu load/unload, ipagpatuloy ang proseso at maghintay para sa paglo-load . NET-mga aklatan.

Higit pang gamit ProcessHacker itapon ang mga rehiyon na naglalaman ng hindi naka-pack na . NET-aplikasyon.

Itinigil namin ang lahat ng proseso at tinatanggal ang kopya ng malware na naka-embed sa system.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Ang dumped file ay protektado ng isang tagapagtanggol .NET Reactor, na madaling maalis gamit ang isang utility de4dot.

Nabigo ang turnout: ilantad natin si AgentTesla sa malinis na tubig. Bahagi 3
Gamit ang mga panuntunan ng YARA na nakasulat kanina, tinitiyak namin na ito ang AgentTesla.

upang ibuod

Kaya, ipinakita namin nang detalyado ang proseso ng semi-awtomatikong pag-unpack ng sample gamit ang tatlong mini-case bilang isang halimbawa, at sinuri din ang malware batay sa isang ganap na kaso, nalaman na ang sample na pinag-aaralan ay AgentTesla, na nagtatatag ng functionality nito at isang kumpletong listahan ng mga tagapagpahiwatig ng kompromiso.

Ang pagsusuri sa malisyosong bagay na aming isinagawa ay nangangailangan ng maraming oras at pagsisikap, at ang gawaing ito ay dapat gawin ng isang espesyal na empleyado sa kumpanya, ngunit hindi lahat ng kumpanya ay handa na gumamit ng isang analyst.

Isa sa mga serbisyong ibinibigay ng Group-IB Laboratory of Computer Forensics at Malicious Code Analysis ay ang pagtugon sa mga insidente sa cyber. At upang ang mga customer ay hindi mag-aksaya ng oras sa pag-apruba ng mga dokumento at pag-usapan ang mga ito sa gitna ng isang cyber attack, inilunsad ng Group-IB Retainer ng Tugon sa Insidente, isang serbisyo sa pagtugon sa insidente bago ang subscription na kasama rin ang hakbang sa pagsusuri ng malware. Higit pang impormasyon tungkol dito ay matatagpuan dito.

Kung gusto mong muling pag-aralan kung paano na-unpack ang mga sample ng AgentTesla at makita kung paano ito ginagawa ng isang espesyalista sa CERT Group-IB, maaari mong i-download ang pag-record ng webinar sa paksang ito dito.

Pinagmulan: www.habr.com

Magdagdag ng komento