Zamegljevanje je umetnost preoblikovanja kode za premagovanje zaznave na osnovi podpisov ob ohranjanju njene prvotne funkcionalnosti. Kot penetracijski tester se močno zanašam na razumevanje metod zamegljevanja, ne da bi pomagal napadalcem pri skrivanju, temveč da pomagam svojim strankam razumeti, zakaj njihova orodja za statično analizo odpovejo in kako lahko zgradijo bolj odporne strategije zaznave. Ta objava pokriva koncepte znotraj MITRE ATT&CK tehnike T1027 (zameglene datoteke ali informacije) in njenih podtehnik ter branilcem zagotavlja znanje, potrebno za učinkovito zaznavanje zameglenih groženj.
Tehnike prikrivanja datotek in informacij sistematično opisuje MITRE ATT&CK T1027.
Zakaj zamegljevanje deluje proti statični analizi
Statična analiza preučuje kodo brez njenega izvajanja in se zanaša na ujemanje vzorcev z znanimi zlonamernimi podpisi. Temeljna slabost statične analize je, da išče specifične vzorce bajtov, nize ali strukture. Ko napadalci te značilnosti spremenijo z zamegljevanjem, se koda več ne ujema z znanimi podpisi, čeprav ostaja njeno vedenje identično. Razumevanje te omejitve branilcem pomaga ceniti, zakaj statična analiza sama po sebi ni zadostna in zakaj mora vedenjska zaznava dopolnjevati pristope na osnovi podpisov. Dobro zameglena zlonamerna koda ima morda povsem edinstven hash in ne vsebuje prepoznavnih nizov, pa vendar izvaja natančno ista zlonamerna dejanja ob izvajanju.
Tehnike zamegljevanja nizov
Nizi v zlonamerni kodi so med najpogostejšimi elementi za podpise zaznave. Napadalci uporabljajo različne metode za skrivanje prepoznavnih nizov pred statičnimi skenerji.
- Zamenjava znakov in veriženje - Razbitje nizov na manjše fragmente in njihovo ponovno sestavljanje med izvajanjem premaga preprosto ujemanje nizov. Branilci bi se morali zavedati, da bodo njihova statična pravila, ki iščejo celotne nize, kot so specifična imena funkcij ali URL-ji, zgrešila fragmentirane variante. Gradnja zaznave za vzorce rekonstrukcije nizov je bolj robustna kot iskanje specifičnih nizov.
- Kodiranje (Base64, XOR, AES) - Kodiranje preoblikuje berljive nize v neprepoznavne binarne podatke. Base64 je najpogostejša metoda kodiranja in branilci bi morali iskati funkcije za dekodiranje Base64 v kombinaciji s sumljivimi dolžinami nizov. XOR kodiranje z enobajtnim ključem je trivialno obrnjeno, vendar še vedno premaga osnovno skeniranje podpisov. Bolj sofisticirani napadalci uporabljajo večbajne ključe XOR ali šifriranje AES, ki zahteva pridobitev ključa med izvajanjem za dekodiranje. Branilci bi morali označiti prisotnost rutin za dekodiranje v kombinaciji s kodiranimi podatkovnimi bloki kot sumljivo.
- Zloraba spremenljivk okolja - V sistemu Windows lahko napadalci sestavijo nize iz vrednosti spremenljivk okolja, vlekoč znake iz poti, kot sta %COMSPEC% ali %WINDIR%, da sestavijo ukaze. Ta tehnika je posebej pogosta v napadih z ukazno vrstico in jo je mogoče zaznati s spremljanjem neobičajnih vzorcev širjenja spremenljivk okolja v ukaznih vrsticah procesov.
- Skladanje nizov - Namesto uporabe nizovnih literalov napadalci potiskajo posamezne znake na sklad in gradijo nize znak po znaku. To v celoti odpravi nize iz datoteke, kar naredi statično zaznavo skoraj nemogočo. Vedenjska zaznava med izvajanjem je primarna obramba proti tej tehniki.
Metode zamegljevanja kode
Poleg skrivanja nizov napadalci spreminjajo strukturo in tok svoje kode za premagovanje analitičnih orodij in zmedenje obratnih inženirjev.
- Preimenovanje spremenljivk - Zamenjava pomenskih imen spremenljivk in funkcij z naključnimi nizi otežuje ročno analizo. Čeprav to neposredno ne vpliva na avtomatizirano zaznavo, upočasnjuje odziv na incidente in forenzično analizo. Branilci bi morali vložiti v avtomatizirana orodja za odstranjevanje obfuskacije, ki lahko poenostavijo zamegleno kodo za hitrejšo analizo.
- Sploščitev nadzornega toka - Ta tehnika preoblikuje naravni nadzorni tok programa v avtomat stanj, ki ga poganja razporednik, kar izjemno otežuje statično sledenje logiki. Vsi bloki kode so postavljeni na isto raven in nadzorovani s stikalno spremenljivko. Branilci bi morali prepoznati, da je močno sploščen nadzorni tok sam po sebi indikator zamegljevanja in zato sumljiv.
- Vstavljanje mrtve kode - Dodajanje nefunkcionalne kode, ki se nikoli ne izvede, spremeni podpis datoteke brez vpliva na funkcionalnost. Branilci bi se morali osredotočiti na vedenjsko analizo namesto ujemanja podpisov, ko se sumi vstavljanje mrtve kode, saj dejansko zlonamerno vedenje ostaja dosledno.
- Neprozorni predikati - To so pogojni stavki, ki se vedno ovrednotijo na isti rezultat, vendar se zdijo dvoumni orodjem za statično analizo. Dodajajo lažne veje, ki zmedejo avtomatizirano analizo. Napredni razkompilatorji lahko včasih identificirajo in odstranijo neprozorne predikate, vendar ostajajo učinkoviti proti enostavnejšim orodjem za analizo.
Okolje zamegljevanja PowerShell
PowerShell je močno ciljan za zamegljevanje, ker je močen napadni vektor, ki je tudi močno nadzorovan. Razumevanje okolja zamegljevanja branilcem pomaga zgraditi boljše zaznave, specifične za PowerShell.
- Manipulacija žetonov - PowerShell omogoča obsežno manipulacijo svojih sintaktičnih žetonov. Ukazi so lahko zapisani z naključno uporabo velikih črk, vstavljanjem znakov za ubežanje (backtick), zamenjavo spremenljivk in oblikovanjem nizov. Na primer, preprost cmdlet je mogoče prepisati na ducate načinov, ki se vsi izvajajo identično. Branilci bi morali normalizirati ukaze PowerShell pred uporabo pravil zaznave, odstraniti znake za ubežanje (backtick), normalizirati velikost črk in razrešiti vzdevke.
- Plasti kodiranja - Napadalci uporabljajo več plasti kodiranja, zavijajo Base64 kodirane ukaze v druge plasti kodiranja. Parameter -EncodedCommand je dobro znan, vendar napadalci uporabljajo tudi kodiranje po meri znotraj skript. Branilci bi morali označiti globoko gnezdene vzorce kodiranja in spremljati skripte, ki vsebujejo več operacij kodiranja ali dekodiranja, kot je pričakovano za njihov navedeni namen.
- Dekompozicija skriptnih blokov - Razbitje zlonamerne skripte na več manjših skriptnih blokov, od katerih vsak posamezno izgleda benigno, premaga analizo posameznih blokov. Branilci potrebujejo sisteme zaznave, ki lahko korelirajo več skriptnih blokov iz iste seje za identifikacijo zlonamernega namena, ki sega čez več izvršnih enot.
Zaznava in obramba pred zamegljevanjem
Zaznavanje zamegljene zlonamerne kode zahteva premik onkraj zaznave na osnovi podpisov k sprejetju vedenjskih in hevrističnih pristopov. Tu so strategije, ki jih priporočam svojim strankam.
- Meritev entropije zamegljevanja - Zameglena koda ima običajno višjo entropijo (naključnost) kot legitimna koda. Orodja, ki merijo entropijo skript, ukaznih vrstic in vsebine datotek, lahko označijo potencialno zamegleno vsebino za nadaljnjo analizo. Skripte PowerShell z visoko entropijo zahtevajo dodaten nadzor.
- Uvedba vedenjske zaznave - Ker zamegljevanje spremeni, kako koda izgleda, ne pa kaj počne, je vedenjska zaznava, ki spremlja dejanja med izvajanjem, po naravi odporna na zamegljevanje. Osredotočite svoje inženirstvo zaznave na vedenja, ki so pomembna, kot so dostop do poverilnic, lateralno premikanje in ekstrakcija podatkov, namesto na specifične vzorce kode, ki jih uvedejo.
- Izkoriščajte AMSI za odstranjevanje obfuskacije - Kot je opisano v moji prejšnji objavi o AMSI, ta vmesnik vidi dekodirano obliko skript pred izvajanjem. Zagotovite, da je AMSI aktiven in da ima vaš ponudnik protivirusne zaščite trenutne podpise za znane zlonamerne vzorce v njihovi dekodirani obliki.
- Omogočite celovito beleženje PowerShell - Beleženje skriptnih blokov (dogodek ID 4104) zajame dekodirano vsebino skript PowerShell in zagotavlja jasen vpogled v to, kar se je dejansko izvršilo, ne glede na to, koliko plasti zamegljevanja je bilo uporabljenih. To je eno najmočnejših orodij, ki jih imajo branilci proti zamegljevanju PowerShell.
- Uporabite izvajanje v izoliranem okolju - Predložite sumljive datoteke in skripte v izolirano okolje za dinamično analizo. Peskovniki izvršijo kodo in opazujejo njeno vedenje, pri čemer zaobidejo vse plasti zamegljevanja. Integrirajte analizo v izoliranem okolju v vaše delovne tokove varnosti e-pošte in zaščite končnih točk.
Testiranje vaše zaznave zamegljevanja
- Testiranje proti ciljnemu AV in EDR - Med penetracijskimi testi dokumentiram, katere tehnike zamegljevanja zaobidejo naročnikova orodja za zaznavanje in na kateri ravni. To razkrije specifične vrzeli v zaznavi, ki jih je treba odpraviti.
- Uporaba več skenirnih mehanizmov - Noben posamezen mehanizem ne ulovi vsega. Testirajte zameglene vzorce proti več mehanizmom zaznave, da razumete svojo celotno pokritost in identificirate, kateri mehanizmi zagotavljajo najboljšo zaznavo zamegljevanja.
- Ločeno testiranje zaznave med izvajanjem - Preverite, da tudi če statična zaznava zgreši zamegleno zlonamerno kodo, vaše zmožnosti vedenjske zaznave med izvajanjem ujamejo zlonamerna dejanja, ko se zlonamerna koda izvede.
- Uravnotežite svojo strategijo zaznave - Cilj ni premagati vsega zamegljevanja prek statične analize, kar je tekmovanje, v katerem ne morete zmagati. Namesto tega zgradite uravnoteženo strategijo, kjer statična zaznava lovi generične grožnje, vedenjska zaznava pa lovi sofisticirane, močno zameglene zlonamerne kode.
Sorodno branje: Tehnike obvoda AMSI: PowerShell in naprej in Zloraba sistemskih orodij: Uporaba vgrajenih orodij.
Zanima vas več o tej temi? Preberite mojo strokovno stran o Evasion & EDR →
Komentarji
Ni še komentarjev. Bodite prvi!
Dodaj komentar