Izberite jezik

SI-CERT TZ002 / Zlonamerna koda na osnovi skriptnega jezika AutoIt

13.05.2019

AutoIt je skriptni jezik namenjen avtomatizaciji rutinskih postopkov v Windows okolju, npr. različnih vhodno-izhodnih operacij, upravljanje aplikacij, spremljanje virov, skrbniških nalog, preko simulacij tipk, premikanja miške in manipulacije oken.

Zaradi zmožnosti in enostavnosti uporabe skriptnega jezika AutoIt ta ni ostal spregledan s strani piscev zlonamerne kode. Posledično se pri obravnavi primerov okužb na SI-CERT srečamo tudi z vzorci zlonamerne kode osnovane na AutoIt.

Povzetek

V obravnavanem primeru gre za zlonamerno kodo, katere namen je kraja avtentikacijskih podatkov uporabnikov okuženega sistema oz. za eno od različic infostealer trojanskega konja.

Sam proces, ki privede do okužbe poteka v več korakih:

  1. Prejem e-sporočila z .lnk priponko.
  2. Prenos .hta datoteke
  3. Prenos .exe (RAR SFX) datoteke
  4. Extrakcija RAR datoteke
  5. Zagon AutoIt skripte
  6. Generiranje in zagon druge AutoIt skripte
  7. Generiranje izvršljive datoteke
  8. Okužba sistema

Analiza zlonamerne kode na osnovi AutoIt

SI-CERT je prejel vzorec sumljivega sporočila, ki naj bi bil poslan s strani španske banke CaixaBank. Vsebina sporočila skuša uporabnika zavesti v odpiranje pripete arhivske datoteke “TT20180226.pdf.png.zip”. Ta naj bi vsebovala dokumentacijo povezano z nakazili na račun prejemnika sporočila s strani enega od njihovih komitentov.

Lažno sporočilo CaixaBank

V arhivski datoteki se nahaja “TT20180226.pdf.png.lnk” datoteka. Ker je v Windows okolju zakrivanje prikaza končnic znanih vrst datotek privzeto omogočeno in kljub prisotnosti indikatorja, da gre dejansko za bližnjico, nepozornega uporabnika hitro zavede v to, da gre za slikovno datoteko .png (Portable Network Graphics) .

Bližnjica z izgledom .png slikovne datoteke

Vsebina “TT20180226.pdf.png.lnk” razkrije njen namen, ki je zagon .hta (HTML Application) datoteke odložene na spletnem naslovu z Windows komponento mshta.exe.

Vsebina “TT20180226.pdf.png.lnk” datoteke

Izvorna koda “MSHTAPayloadservv.hta” je sestavljena iz HTML, VBScript (Visual Basic Scripting Edition) in Powershell skripto v Base64 zakodiranem nizu.

Base64 kodiranje se uporablja za prenos vseh vrst podatkov po spletu, saj ta zagotavlja, da bodo podatki med prenosom ostali nespremenjeni. Uporaba te tehnike kodiranja je običajna praksa napadalcev za prenos zlonamernega tovora in zakrivanja vsebine (obfuskacijo) ter izogibanju zaznave s strani protivirusnih programov.

Base64 zakodiran niz v .hta datoteki

Odkodiran base64 niz razkrije PowerShell skripto, ki iz oddaljene lokacije prenese izvršilno datoteko “serverfuji.exe”.

PowerShell skript

Da se skripta izvede, s parametrom “-ExecutionPolicy bypass” zaobide privzeto politiko blokade izvajanja skript iz datotek. Uporabniku ob tem ne prikaže nobenega opozorila ali poziva, denimo ali želi dovoliti izvajanje skripte.
Parameter “-WindowStyle hidden” pa zagotavlja zagon skripte brez prikaza okna konzole.

Izvršilno datoteko “serverfuji.exe” pri zapisu na disk preimenuje z imenom v dolžini 5 do 9 naključnih znakov ter jo zažene.

Primer generiranja naključnega imena izvršljive datoteke

V register doda vrednost, ki zagotavlja, da se izvršljiva datoteka izvede po vsakem zagonu sistema (persistence mechanism):

Ne glede na to, da se izvršilna datoteka serverfuji.exe ob prenosu preimenuje, jo bomo za namen članka obravnavali z njenim izvornim imenom.

V primeru “serverfuji.exe” gre za arhivsko samo-razširljivo RAR datoteko (Self-Extracting Rar File), ki ob zagonu, v mapo na poti C:\Users\%uporabniško_ime%\AppData\Local\Temp\71415854, odloži večje število datotek.

Samo-razširljivi RAR datoteki, je podana konfiguracijska datoteka, ki opisuje, kako in kam se ta razpakira ter katere akcije se izvedejo, ko je vsebina razpakirana. Med naključnim tekstom se nahajajo naslednji parametri:

  • Na podlagi “Update” parametrov “UF” se bodo odpakirale datoteke, katerih kopije še niso prisotne in datoteke v SFX arhivu, ki so novejše od tistih v ciljni mapi ter prepis tisih datotek v ciljni mapi, ki so novejše od kopij v SFX arhivu.
  • Parameter “Silent=1” pomeni, da se ne prikaže pogovorno okno, ki smo ga vajeni.
  • “Path” parameter določa kam se bo vsebina SFX datoteka razpakirala
  • “Setup” parameter določa kateri program naj se zažene po uspešni ekstrakciji SFX arhivske datoteke.
Vsebina konfiguracijske datoteke serverfuji.exe SFX RAR
Odložene datoteke po zagonu serverfuji.exe

Po uspešnem razpakiranju se torej izvrši ukaz:
“C:\Users\uporabniško_ime\AppData\Local\Temp\71415854\aoh.exe” tjt=oda

Izvršilna datoteka aoh.exe je preimenovan AutoIt interpreter. Da gre za legitimni interptreter je razvidno iz izračuna zgoščene vrednosti AutoIt3.exe, prenesene iz uradne spletne strani in aoh.exe, ki je del zlonamernega tovora.

Datoteka aoh.exe tako sama po sebi ni zlonamerna. Da bi prišlo do izvršitve zlonamerne kode je potrebno interpreterju podati skripto, v tem primeru “tjt=oda”.

Del AutoIt skripte tjt=oda

Izsek zanimivejših delov “tjt=oda” skripte

Za lažje razumevanje so izseki skripte obdelani in spremenjeni v berljivo obliko.

Skripta vsebuje spremenljivke, na podlagi katerih je vidno, da konfiguracijske podatke bere iz “rok.docx” datoteke.

V resnici ne gre za MS Office datoteko, ampak za tekstovno datoteko v dolžini 1069 vrstic iz katere lahko izluščimo konfiguracijske parametre, vsebuje pa tudi parametre zamaskirane s prestavitvijo znakov prek pripadajočih šestnajstiških števil.

Šestnajstiški niz v “rok.docx” datoteki
Konfiguracijski parametri v rok.docx datoteki

Skripta preverja ali na sistemu teče proces “Avastui.exe”. Če je proces prisoten, z namenom preprečitve zaznave s strani protivirusnega programa zadrži izvajanje kode za 21 sekund.

Opažanja: Skripta ne preverja prisotnosti protivirusne zaščite katerega drugega proizvajalca.

Po javno dostopnih podatkih ima Avast največji tržni delež med proizvajalci AV programske opreme (vir ).

Funkcija “_S0xFA56E059CADB1D6DB397C7643F57CDF6” na podlagi parametra “Dir3ctory” v konfiguracijski datoteki “rok.docx”, preveri če se skripta izvaja iz mape “71415854”, ki se nahaja na poti “C:\Users\uporabniško_ime\AppData\Local\Temp\” , ter da ni odprtega okna z naslovom “71415854”. Če je rezultat preverjanja na podlagi danih pogojev neuspešen, skripta zaključi vse zagnane procese in izvede ponovni zagon sistema.

Preverjanje bo neuspešno, če analizo zlonamerne kode izvajamo medtem ko je mapa “71415854” odprta v Raziskovalcu.

Če je preverjanje uspešno, se izvajanje skripte nadaljuje.
Na podlagi konfiguracijskih parametrov v “rok.docx”, šestnajstiškega niza v spremenljivki “$46014F79ED3EF30B114AEF13E94E1ADE” in naključno generiranega pet znakovnega niza v funkciji “_S0xDECB6E1F7A1579B054389D9327C67D72” se izvede Windows klic, ki generira novo AutoIt skripto.

Naključno generiran pet znakovni niz v funkciji predstavlja tudi ime nove AutoIt skripte, v našem primeru “NPBNU”.

Windows sistemski klic

Oblika imen spremenljivk (npr. _S0xFA56E059CADB1D6DB397C7643F57CDF6) je posledica zakrivanja (obfuskacije).

Izsek novo ustvarjene AutoIt skripte

Izsek zanimivejših delov “NPBNU” AutoIt skripte

Po zapisu skripte (dodeljeno ji je naključno ime) v mapo “71415854” se ta zažene. Konfiguracijske parametre, tako kot skripta “tjt=oda”, bere iz rok.docx datoteke.

Iz razkrite kode so razvidne njene funkcije, ki vključujejo:
– izogibanje analizi v virtualnem in avtomatiziranem analitičnem okolju oz. peskovniku (sandbox):

– zmožnost lepljenja vsebine odložišča na Facebook račun žrtve, pod pogojem, da je spletno mesto odprto v brskalniku:

– v register doda vrednost, ki zagotavlja, da se zlonamerna koda izvede po vsakem zagonu sistema (persistence mechanism):

– onemogoči funkciji ustvarjanja obnovitvenih točk in UAC (Windows User Account Control). Slednji je varnostna funkcija sistema Windows, ki preprečuje nepooblaščene spremembe v operacijskem sistemu s strani aplikacij, uporabnikov ali katere od oblik zlonamerne programske kode.

– izvede inject kode v dinamično knjižnico user32.dll ter zažene nov proces

Uporaba CallWindowProcW funkcije je metoda za vdelavo lupinske kode (shellcode) v Windows okolju.

V tem primeru se ne generira nova AutoIt skripta temveč na podlagi šestnajstiškega niza v rok.docx ustvari Windows prenosljivo izvršljivo datoteko (PE).

Z uporabo ločene konfiguracijske datoteke (rok.docx), se glede na konfiguracijo posamičnega sistema, generira unikatna izvršljiva datoteka.

Na podlagi vsebovanih API klicev v izvršljivi datoteki je že mogoče sklepati, kakšen je namen zlonamerne kode.

Windows API klici

Iz vsebovanih API klicev je razvidno, da zlonamerna koda beleži vnose preko tipkovnice (keylogger), bere vsebino odložišča, izvaja različne operacije v Registru in preverja ali je proces zagnan v razhroščevalniku.

Zbrane podatke pričakovano pošilja na oddaljeno lokacijo, kam pa lahko hitro ugotovimo z analizo strojne kode preko navzkrižnega sklicevanja (X-Ref) ustreznih omrežnih API klicev.

To lahko potrdimo tudi z dinamično analizo binarne kode in zajemom omrežnega prometa.

DNS poizvedbe
Zajet omrežni promet z razvidnim poskusom komunikacije

Zaključek

AutoIt skriptni jezik je zgolj eno od priljubljenih orodij avtorjev zlonamerne kode. Na osnovi tega jezika so bili že ustvarjeni različni črvi, trojanski konji, izsiljevalski virusi …

Večina protivirusnih programskih rešitev, že na podlagi zaznave AutoIT skriptnega jezika, v katerem od procesov, tega označijo za zlonamernega.

Težava je predvsem v tem, da so zaradi tega tudi legitimne AutoIT skripte označene kot zlonamerne; posledično je njihovo izvajanje onemogočeno.
Podjetje AutoIt, v primeru false positive zaznave, uporabnikom svetuje, da se za razrešitev težav obrnejo na izdelovalca protivirusnega programa.