
Interceptor è un driver kernel focalizzato sulla manomissione delle soluzioni EDR/AV nello spazio kernel
Autore: @Cerbersec
Interceptor è un driver kernel focalizzato sulla manomissione di soluzioni EDR/AV nello spazio kernel, tramite la patch delle callback del kernel e l'hooking degli IRP. Interceptor è stato creato durante uno stage presso il Red Team di NVISO Security. I relativi articoli del blog sono disponibili qui (kernel karnage).
Nel 2022, Kernel Karnage è stato presentato al SANS Pen Test HackFest, portando alla pubblicazione di questo repository e delle seguenti demo:
Requisiti:
Passaggi per la build:
git clone https://github.com/NVISO-ARES/Interceptor.gitIl driver può essere installato su macchine che hanno la Driver Signature Enforcement (DSE) disabilitata o che sono in modalità test signing. Per una soluzione per disabilitare la DSE vedi qui. Opzioni alternative includono la firma del driver con un certificato di firma del codice valido.
Nota: Le macchine con Secure Boot o Hypervisor-Protected Code Integrity (HVCI) abilitato non sono vulnerabili
Il driver può essere creato e avviato da un prompt dei comandi o da PowerShell (attenzione agli spazi):
sc create Interceptor type= kernel binPath= C:\Path\To\Driver\Interceptor.sys
sc start Interceptor
sc stop Interceptor
sc delete Interceptor
Usage: InterceptorCLI.exe <option> <parameter> <values>
Options:
-list <parameter>
vendors Elenca tutti i vendor EDR supportati e i loro moduli
modules Elenca tutti i driver caricati
hooked Elenca tutti i driver hookati
callbacks Elenca tutte le callback registrate
-hook <parameter>
index <values> Hooka il/i driver tramite indice
name <device name> Hooka il driver tramite nome (\Device\Name)
-unhook <parameter>
index <values> Rimuove l'hook dal/dai driver tramite indice
all Rimuove l'hook da tutti i driver
-patch <parameter>
vendor <name> Applica la patch a tutti i moduli associati al vendor
module <names> Applica la patch a tutte le callback associate al/i modulo/i
process <values> Applica la patch alla/e callback di processo tramite indice
thread <values> Applica la patch alla/e callback di thread tramite indice
image <values> Applica la patch alla/e callback di immagine tramite indice
registry <values> Applica la patch alla/e callback di registro tramite indice
objectprocess <values> Applica la patch alla/e callback di oggetto processo tramite indice
objectthread <values> Applica la patch alla/e callback di oggetto thread tramite indice
-restore <parameter>
vendor <name> Ripristina tutti i moduli associati al vendor
module <names> Ripristina tutte le callback associate al/i modulo/i
process <values> Ripristina la/e callback di processo tramite indice
thread <values> Ripristina la/e callback di thread tramite indice
image <values> Ripristina la/e callback di immagine tramite indice
registry <values> Ripristina la/e callback di registro tramite indice
objectprocess <values> Ripristina la/e callback di oggetto processo tramite indice
objectthread <values> Ripristina la/e callback di oggetto thread tramite indice
all Ripristina tutte le callback
Values: separati da spazi. vedi -list <modules | hooked | callbacks>
Name: case sensitive. vedi -list <vendors>