Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

Šiuo straipsniu užbaigiame publikacijų seriją, skirtą kenkėjiškos programinės įrangos analizei. IN pirmoji dalis Atlikome išsamią užkrėsto failo, kurį Europos įmonė gavo paštu, analizę ir aptikome „AgentTesla“ šnipinėjimo programą. Į antra dalis aprašė pagrindinio AgentTesla modulio žingsnis po žingsnio analizės rezultatus.

Šiandien CERT Group-IB kenkėjiškų programų analizės specialistas Ilja Pomerancevas kalbės apie pirmąjį kenkėjiškų programų analizės etapą – pusiau automatinį „AgentTesla“ pavyzdžių išpakavimą pagal trijų mini atvejų pavyzdį iš CERT Group-IB specialistų praktikos.

Paprastai pirmasis kenkėjiškų programų analizės etapas yra pakuotojo, šifravimo priemonės, apsaugos ar įkroviklio apsaugos pašalinimas. Daugeliu atvejų šią problemą galima išspręsti paleidus kenkėjišką programą ir atlikus išrašymą, tačiau yra situacijų, kai šis metodas netinka. Pavyzdžiui, jei kenkėjiška programa yra šifravimo priemonė, jei ji apsaugo savo atminties sritis nuo išmetimo, jei kode yra virtualios mašinos aptikimo mechanizmų arba jei kenkėjiška programa paleidžiama iš karto po paleidimo. Tokiais atvejais naudojamas vadinamasis „pusiau automatinis“ išpakavimas, tai yra, tyrėjas visiškai kontroliuoja procesą ir gali bet kada įsikišti. Panagrinėkime šią procedūrą, kaip pavyzdį naudodami tris AgentTesla šeimos pavyzdžius. Tai gana nekenksminga kenkėjiška programa, jei išjungiate jos prieigą prie tinklo.

1 pavyzdys

Šaltinio failas yra MS Word dokumentas, kuriame naudojamas pažeidžiamumas CVE-2017-11882.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Dėl to naudingas krovinys atsisiunčiamas ir paleidžiamas.

Proceso medžio ir elgesio žymenų analizė rodo injekciją į procesą RegAsm.exe.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Yra AgentTesla būdingų elgesio žymenų.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Atsisiųstas pavyzdys yra vykdomasis . NET- failas, apsaugotas apsauga .NET reaktorius.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Atidarykime jį paslaugų programoje dnSpy x86 ir pereikite prie įėjimo taško.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Eidami į funkciją DateTimeOffset, rasime naujojo inicijavimo kodą . NET- modulis. Padėkime lūžio taškas mus dominančioje eilutėje ir paleiskite failą.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Viename iš grąžintų buferių galite pamatyti MZ parašą (0x4D 0x5A). Išsaugokime.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Išmestas vykdomasis failas yra dinaminė biblioteka, kuri yra įkroviklis, t.y. ištraukia naudingąją apkrovą iš išteklių skyriaus ir paleidžia ją.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Tuo pačiu metu sąvartyne nėra reikalingų išteklių. Jie yra pirminiame pavyzdyje.

Naudingumas dnSpy turi dvi itin naudingas funkcijas, kurios padės mums gana greitai sukurti „Frankenšteiną“ iš dviejų susijusių failų.

  1. Pirmasis leidžia „įklijuoti“ dinaminę biblioteką į pirminį pavyzdį.

    Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

  2. Antrasis – perrašyti funkcijos kodą įėjimo taške, kad būtų iškviestas norimas įterptos dinaminės bibliotekos metodas.

    Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

Išsaugome savo „Frankenšteiną“, rinkinį lūžio taškas eilutėje, grąžinant buferį su iššifruotais ištekliais, ir sukurti iškrovimą pagal analogiją su ankstesniu etapu.

Antrasis sąvartynas įrašytas VB.NET vykdomąjį failą, kuris yra apsaugotas mums pažįstamo apsaugos ConfuserEx.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Nuėmę apsaugą, naudojame anksčiau parašytas YARA taisykles ir įsitikiname, kad išpakuota kenkėjiška programa tikrai yra AgentTesla.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

2 pavyzdys

Šaltinio failas yra MS Excel dokumentas. Dėl integruotos makrokomandos vykdomas kenkėjiškas kodas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Dėl to paleidžiamas PowerShell scenarijus.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Scenarijus iššifruoja C# kodą ir perduoda jam valdymą. Pats kodas yra įkrovos įkroviklis, kaip matyti iš smėlio dėžės ataskaitos.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Naudingoji apkrova yra vykdomasis failas . NET-failas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Failo atidarymas dnSpy x86, matote, kad jis užtemdytas. Uždengimo pašalinimas naudojant įrankį de4dot ir grįžti prie analizės.

Nagrinėdami kodą galite atrasti šią funkciją:

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Užkoduotos eilutės yra įspūdingos Įejimas и remtis. Mes dedame lūžio taškas į pirmąją eilutę, paleiskite ir išsaugokite buferio reikšmę baitas_0.

Sąvartynas vėl yra programa . NET ir apsaugotas ConfuserEx.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Pašaliname užmaskavimą naudodami de4dot ir įkelti į dnSpy. Iš failo aprašymo suprantame, su kuo susiduriame CyaX-Sharp krautuvas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Šis krautuvas turi plačias anti-analizės funkcijas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Ši funkcija apima integruotų „Windows“ apsaugos sistemų apėjimą, „Windows Defender“ išjungimą, taip pat smėlio dėžės ir virtualios mašinos aptikimo mechanizmus. Galima įkelti naudingąją apkrovą iš tinklo arba saugoti išteklių skyriuje. Paleidimas atliekamas įpurškiant į savo procesą, į jo paties proceso dublikatą arba į procesus MSBuild.exe, vbc.exe и RegSvcs.exe priklausomai nuo užpuoliko pasirinkto parametro.

Tačiau mums jie mažiau reikšmingi nei Antidempingas- funkcija, kuri prideda ConfuserEx. Jo šaltinio kodą galima rasti adresu GitHub.

Norėdami išjungti apsaugą, pasinaudosime galimybe dnSpy, kuri leidžia redaguoti IL-kodas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Išsaugokite ir įdiekite lūžio taškas į naudingojo krovinio iššifravimo funkcijos iškvietimo liniją. Jis yra pagrindinės klasės konstruktoriuje.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Paleidžiame ir išmetame naudingą krovinį. Naudodami anksčiau parašytas YARA taisykles įsitikiname, kad tai yra AgentTesla.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis

3 pavyzdys

Šaltinio failas yra vykdomasis failas VB Native PE32-failas.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Entropijos analizė rodo, kad yra daug užšifruotų duomenų.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Analizuodami paraiškos formą VB dekompiliatorius galite pastebėti keistą pikselių foną.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Entropijos grafikas bmp-image yra identiškas pradinio failo entropijos grafikai, o dydis yra 85% failo dydžio.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Bendra vaizdo išvaizda rodo, kad naudojama steganografija.

Atkreipkite dėmesį į proceso medžio išvaizdą, taip pat į injekcijos žymeklio buvimą.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Tai rodo, kad vyksta išpakavimas. „Visual Basic“ krautuvams (dar žinomas kaip VBKrypt arba VBI injektorius) įprastas naudojimas apvalkalo kodas inicijuoti naudingą apkrovą, taip pat atlikti pačią injekciją.

Analizė į VB dekompiliatorius parodė įvykio buvimą Įkelti prie formos FegatassocAirballoon2.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Eime IDA pro nurodytu adresu ir išstudijuokite funkciją. Kodas yra labai užmaskuotas. Mus dominantis fragmentas pateikiamas žemiau.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Čia proceso adresų erdvė nuskaitoma, ar nėra parašo. Šis požiūris yra labai abejotinas.

Pirma, nuskaitymo pradžios adresas 0x400100. Ši vertė yra statinė ir nereguliuojama, kai pagrindas perkeliamas. Idealiomis šiltnamio sąlygomis jis parodys pabaigą PE- vykdomojo failo antraštė. Tačiau duomenų bazė nėra statiška, jos reikšmė gali keistis, o tikrojo reikiamo parašo adreso paieška, nors ir nesukels kintamojo perpildymo, gali užtrukti labai ilgai.

Antra, parašo prasmė iWGK. Manau, akivaizdu, kad 4 baitai yra per maži, kad garantuotų unikalumą. Ir jei atsižvelgsite į pirmąjį tašką, tikimybė suklysti yra gana didelė.

Tiesą sakant, reikalingas fragmentas yra pritvirtintas prie anksčiau rasto galo bmp- nuotraukos poslinkiu 0xA1D0D.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Įvykdymas Shellkodas atliekami dviem etapais. Pirmasis iššifruoja pagrindinį korpusą. Šiuo atveju raktas nustatomas brutalios jėgos pagalba.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Išmeskite iššifruotą Shellkodas ir pažiūrėk į linijas.

Pirma, dabar žinome funkciją sukurti antrinį procesą: CreateProcessInternalW.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Antra, mes sužinojome apie fiksavimo sistemoje mechanizmą.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Grįžkime prie pradinio proceso. Padėkime lūžio taškas apie CreateProcessInternalW ir tęsti vykdymą. Toliau matome ryšį NtGetContextThread/NtSetContextThread, kuris pakeičia vykdymo pradžios adresą į adresą ShellCode.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Prisijungiame prie sukurto proceso su derintuvu ir aktyvuojame įvykį Sustabdyti bibliotekos įkėlimą / iškrovimą, tęskite procesą ir palaukite, kol bus įkeltas . NET- bibliotekas.

Tolesnis naudojimas ProcessHacker sąvartynų regionai, kuriuose yra neišpakuotų . NET- taikymas.

Sustabdome visus procesus ir ištriname kenkėjiškos programos kopiją, kuri buvo įdėta į sistemą.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Išmestas failas yra apsaugotas apsauga .NET reaktorius, kurį galima lengvai pašalinti naudojant pagalbinę priemonę de4dot.

Rinkimuose nepavyko: paleiskite AgentTesla švariu vandeniu. 3 dalis
Naudodami anksčiau parašytas YARA taisykles įsitikiname, kad tai yra AgentTesla.

apibendrinti

Taigi, mes išsamiai pademonstravome pusiau automatinio mėginio išpakavimo procesą, kaip pavyzdį naudodami tris mini dėklus, taip pat išanalizavome kenkėjiškas programas, remdamiesi visaverčiu atveju, išsiaiškinome, kad tiriamas pavyzdys yra „AgentTesla“, nustatydami jo funkcionalumą ir visas kompromiso rodiklių sąrašas.

Mūsų atlikta kenkėjiško objekto analizė reikalauja daug laiko ir pastangų, o šį darbą įmonėje turėtų atlikti specialus darbuotojas, tačiau ne visos įmonės yra pasirengusios įdarbinti analitiką.

Viena iš Group-IB Kompiuterinės ekspertizės ir kenkėjiškų kodų analizės laboratorijos teikiamų paslaugų – reagavimas į kibernetinius incidentus. Kad klientai negaištų laiko tvirtindami dokumentus ir aptardami juos kibernetinės atakos metu, Group-IB pradėjo Reagavimo į incidentus laikiklis, išankstinio prenumeratos reagavimo į incidentus paslauga, kuri taip pat apima kenkėjiškų programų analizės veiksmą. Daugiau informacijos apie tai galima rasti čia.

Jei norite dar kartą ištirti, kaip išpakuojami AgentTesla pavyzdžiai ir kaip tai daro CERT Group-IB specialistas, galite atsisiųsti internetinio seminaro įrašą šia tema čia.

Šaltinis: www.habr.com

Добавить комментарий