Funciones de AMSI

AMSI Ezaugarriak

Celia Catalán


Kaixo guztioi! Duela argitalpen batzuk, AMSIren sarrerari buruz hitz egin genuen. Gaurkoan sakontzen jarraituko dugu AMSIren mundua. Oraingo honetan, duten funtzioetan sakonduko dugu PowerShell bezalako interpreteak erabiltzen ditu neurketekin komunikatzeko segurtasuna AMSI APIari esker.

AMSI Windows APIaren (erabiltzaile modua) parte denez, Microsoft-ek dokumentatuta dago, garatzaileek arazorik izan ez dezaten hura erabiltzean. Hau da, Windows API liburutegiek dokumentazioa dute haien funtzioak nola egituratzen diren, bakoitzak zer parametro espero dituen funtzioa, jasotzen dituen balioak, etab.

Lehenik eta behin, AmsiInitialize funtzioa dugu. Hau funtzioa PowerShellen edozein komando exekutatu aurretik deitzen da, hau da Hau da, funtzio honi interpretea exekutatzen den unean deitzen zaio. Hori dela eta, eraso eta saihesteko funtzio korapilatsua da Ezin duzu logika aldatu PowerShell komandoak erabiliz.



Microsoft-en dokumentazioak funtzio hau esaten digu bi parametro jasotzen ditu:

  • Lehenengo parametroa izena da. DLL erabiliko duen aplikazioa, gure kasuan PowerShell izango dena.

  • Bigarren parametroa izeneko erakusle huts bat da. amsiContext. Erakusle hau AmsiInitialize funtzioak beteko du eta izango da gainerako funtzioekin erabiltzen da.


Hurrengo funtzioa AmsiOpenSession da. Zuk duzun bakoitzean PowerShell komando bat exekutatu, beharrezkoa da AMSIrekin saio bat sortzea, beraz zein funtzio hau deituko den.



Microsoft-en dokumentazioak funtzio hau esaten digu Bi parametro ere jasotzen ditu:

  • Lehen argumentua amsiContext da, hau da, baliokidea aurreko funtzioan bete den testuingurura.

  • Bigarren argumentua erakuslea da hutsa deitua amsiSession. Erakusle hau AmsiOpenSession funtzioak beteko du eta izango da beste funtzio batzuek erabiltzen dute.

AmsiInitialize bezala, kode bat itzultzen du. funtzioa behar bezala exekutatu den edo ez adierazten du.

Hirugarrenik, AmsiScanString eta AmsiScanBuffer ditugu. Bi funtzioek helburu bera dute eta erabiltzeko modua nahikoa da antzekoa. Hainbeste, AmsiScanString-ek behean deitzen duela AmsiScanBuffer. Funtzio hauen lana a-ren edukia harrapatzea da komandoa gero AV/EDR-ek eskaneatzeko.


Microsoft-en dokumentazioak esaten digu dio AmsiScanString-ek bost parametro jasotzen dituela:

  • Lehen argumentuak testuingurua adierazten du. bete egin da lehenengo funtzioa (AmsiInitialize).

  • Bigarren argumentua kate bat da, eta horrek komandoaren edukia adierazten du.

  • Hirugarren argumentua da. modukoa identifikatzaile.

  • Laugarren argumentua saioa da, zeina, dugun bezala aurretik ikusia, AmsiOpenSession funtzioan bete da.

  • Azkenik, bosgarren argumentuarekin funtzioa eskanearen emaitza irudikatuko duen erakusle huts bat jasotzen du (hau da. (hau da, AV/EDRak malwarea dela edo ez esaten duen). Balioak izan daitezke honako hau:        


Bestalde, AmsiScanBuffer komandoa irudikatuko duen kate baten ordez buffer bat jasotzen du. Horrez gain, buffer horren luzera ere adierazi behar da. Beste batzuk argumentuak berdinak dira bi funtzioetarako.

Azkenik, biak AmsiScanString AmsiScanBuffer-erako HRESULT itzultzen da, hau da, era berean aurreko funtzioetan, funtzioa exekutatu den adierazten duen modua zuzen. Kontuan izan behar da eskanearen emaitza ez dela nahastu behar funtzioaren emaitzarekin, bi balio guztiz desberdinak direnak.

Hala ere, balioak dira. Bai, elkarren menpe daude. emaitzaren edukia ezin da izan AMSI_RESULT_DETECTED, HRESULT E_INVALIDARG bada, honek esan nahi baitu analisia ez zela egingo argudioak baliogabeak direlako.

Baina kasualitatez bada, batzuen ustez errore mota, emaitzaren edukiak malwarea dagoela adierazten du, baina HRESULT INVALIDARG da, komandoa normal exekutatuko da, geroztik HRESULT egiaztatuko da lehenik, eta funtzioa exekutatu dela adierazten badu normalean, emaitza
ren edukia egiaztatuko du

Azkenik, funtzioa dugu AmsiCloseSession, eskaneatzea dagoeneko egin denean gertatzen dena. Hau PowerShell-en komando bat exekutatzen duzunean ere deitzen da funtzioa. Etxerako lanak Funtzio hau saioa ixtea da, berriro erabili ezin dadin.



Microsoft-en dokumentazioak esaten digu Bi parametro jasotzen dituela dio:

  • Hasierako testuingurua.
  • Itxi nahi duzun saioa.

funtzio hutsa izatea, ez du ezer itzultzen. Hau da, Microsoft-en aldetik ez dago errore-kontrolik. saioa ondo itxi den, edo nolabaitekoa izan den jakiteko porrota.

Beraz, bat irekitzen dugunean PowerShell, API deien fluxua honako hau izango litzateke:



Eta PowerShell dagoeneko irekita dagoenean eta komandoak exekutatzen ditugunean, API deien fluxua honako hau izango litzateke:


Eta gaurkoz, nahikoa da! AMSIrekin jarraituko dugu hurrengo zatietan.

Juan Gabriel Ruiz, Senior Security Analyst at Zerolynx eta Justo Martín, Segurtasun-analista Zerolynx .




var article = document.querySelector('#medium-feed-article-root'); baldin(artikulua) { article.style.display = 'bat ere ez'; }
Itzuli blogera

Utzi iruzkin bat

Kontuan izan iruzkinak argitaratu aurretik onartu behar direla.