
Applica un filtro agli eventi segnalati dal registro eventi di Windows.
Questo è uno strumento che ti consente di utilizzare offensivamente YARA per applicare un filtro agli eventi segnalati dal log degli eventi di Windows.
Scarica l'ultima versione da qui. EvtMuteHook.dll contiene la funzionalità principale; una volta iniettato, applicherà un filtro temporaneo che permetterà la segnalazione di tutti gli eventi. Questo filtro può essere aggiornato dinamicamente senza dover reiniettare. Ho scritto SharpEvtMute.exe, un assembly C# che può essere eseguito facilmente tramite execute in shad0w o execute-assembly in Cobalt Strike. Scriverò anche una versione nativa in C per una migliore integrazione con shad0w.
Un caso d'uso banale sarebbe disabilitare la registrazione degli eventi a livello di sistema. Per farlo possiamo usare la seguente regola yara.
rule disable { condition: true }
Dobbiamo iniziare iniettando l'hook nel servizio eventi.
.\SharpEvtMute.exe --Inject

Ora che l'hook è posizionato possiamo aggiungere il filtro.
.\SharpEvtMute.exe --Filter "rule disable { condition: true }"

Ora tutti gli eventi verranno eliminati dal servizio eventi.
I filtri possono essere modificati dinamicamente senza dover reiniettare un hook. Questo rende veloce e facile aggiornare il filtro attivo.
Un esempio di filtro più complesso sarebbe questo. È in grado di bloccare gli eventi relativi a un dump di memoria di lsass dalla segnalazione da parte di sysmon.
rule block_lsass_dump {
meta:
author = "@_batsec_"
description = "Prevent lsass dumping being reported by sysmon"
strings:
$provider = "Microsoft-Windows-Sysmon"
$image = "lsass.exe" nocase
$access = "GrantedAccess"
$type = "0x1fffff"
condition:
all of them
}
Con una regola complessa come questa è molto più difficile condensarla in una singola riga. Ecco perché ho aggiunto la possibilità di fornire regole codificate in base64.
La regola può essere facilmente convertita in base64 da una riga di comando linux.
base64 -w 0 YaraFilters/lsassdump.yar | echo $(</dev/stdin)
Poi usando il flag --Encoded possiamo passarlo come filtro

Quando si inietta l'hook, SharpEvtMute.exe chiamerà CreateRemoteThread e questa chiamata viene effettuata prima che l'hook venga posizionato, quindi verrà segnalata da Sysmon. Questo perché la funzionalità di iniezione di SharpEvtMute.exe dovrebbe essere usata solo come PoC. Raccomando di iniettare manualmente EvtMuteHook.dll nel servizio di registrazione degli eventi quando la furtività è importante.
Il suo PID può essere trovato eseguendo SharpEvtMute.exe --Pid. L'hook può essere posizionato iniettando manualmente lo shellcode (esegui make in EvtMuteBin) tramite il framework C2 di tua scelta, ad esempio shinject in shad0w.
Vale anche la pena menzionare che l'hook userà una named pipe per aggiornare i filtri. La named pipe si chiama EvtMuteHook_Rule_Pipe (questo nome può essere cambiato facilmente). C'è una regola incorporata nell'hook per garantire che qualsiasi evento che includa questo nome venga automaticamente eliminato, ma sarà comunque un IOC avere questa pipe in ascolto, quindi raccomando di cambiarlo.
Se crei dei filtri utili, sentiti libero di fare una pull request alla directory YaraFilters. Sarebbe bello avere una buona collezione di filtri per nascondere azioni comuni di cui tutti possano beneficiare.