
Genera shellcode indipendente dalla posizione per x86, x64 o AMD64+x86 che carica assembly .NET, file PE e altri payload Windows dalla memoria e li esegue con parametri.

Versione corrente: v1.1
Donut è un codice indipendente dalla posizione che consente l'esecuzione in memoria di file VBScript, JScript, EXE, DLL e assembly .NET. Un modulo creato da Donut può essere ottenuto da un server HTTP oppure incorporato direttamente nel loader stesso. Il modulo è opzionalmente cifrato utilizzando il cifrario a blocchi Chaskey con una chiave a 128 bit generata casualmente. Dopo che il file viene caricato ed eseguito in memoria, il riferimento originale viene cancellato per scoraggiare gli scanner di memoria. Il generatore e il loader supportano le seguenti caratteristiche:
Sono disponibili librerie dinamiche e statiche sia per Linux che per Windows che possono essere integrate nei propri progetti. È disponibile anche un modulo Python di cui puoi saperne di più in Costruzione e utilizzo dell'estensione Python.
Donut contiene loader individuali per ogni tipo di file supportato. Per gli assembly .NET EXE/DLL, Donut utilizza l'API Unmanaged CLR Hosting API per caricare il Common Language Runtime. Una volta che il CLR è caricato nel processo host, viene creato un nuovo Application Domain per consentire l'esecuzione di Assembly in AppDomain usa e getta. Quando l'AppDomain è pronto, l'assembly .NET viene caricato tramite il metodo AppDomain.Load_3. Infine, il Punto di ingresso per gli EXE o il metodo pubblico per le DLL specificato dall'utente viene invocato con eventuali parametri aggiuntivi. Fare riferimento a MSDN per la documentazione sull'API Unmanaged CLR Hosting. Per un esempio autonomo di un host CLR, fare riferimento al codice qui.
I file VBScript e JScript vengono eseguiti utilizzando l'interfaccia IActiveScript. C'è anche un supporto minimo per alcuni dei metodi forniti da Windows Script Host (wscript/cscript). Per un esempio autonomo, fare riferimento al codice qui. Per una descrizione più dettagliata, leggere: Esecuzione in memoria di JavaScript, VBScript, JScript e XSL
I file EXE/DLL non gestiti o nativi vengono eseguiti utilizzando un loader PE personalizzato con supporto per Import ritardati, TLS e patch della riga di comando. Sono supportati solo i file con informazioni di rilocazione. Leggere Esecuzione in memoria di DLL per maggiori informazioni.
Il loader può disabilitare AMSI e WLDP per aiutare a eludere il rilevamento di file dannosi eseguiti in memoria. Per maggiori informazioni, leggere Come i Red Team bypassano AMSI e WLDP per il codice dinamico .NET. Supporta anche la decompressione dei file in memoria utilizzando aPLib o l'API RtlDecompressBuffer. Leggere Compressione dei dati per maggiori informazioni.
A partire dalla v1.0, anche ETW viene bypassato. Come con AMSI/WLDP, questo è un sistema modulare che ti permette di sostituire il bypass predefinito con il tuo. Il bypass predefinito è derivato dalla ricerca di XPN. Leggere Nascondere il tuo .NET - ETW per maggiori informazioni.
Per impostazione predefinita, il loader sovrascrive gli header PE dei PE non gestiti (dall'indirizzo di base a `IMAGE_OPTIONAL_HEADER.SizeOfHeaders`). Se non viene utilizzato un modulo fittizio (module overloading), gli header PE vengono azzerati. Se viene utilizzato un modulo fittizio, gli header PE del modulo fittizio vengono utilizzati per sovrascrivere quelli del modulo payload. Questo serve a scoraggiare il rilevamento confrontando gli header PE dei moduli in memoria con il file che li supporta su disco. L'utente può richiedere che tutti gli header PE siano conservati nel loro stato originale. Questo è utile in scenari in cui il modulo payload deve accedere ai propri header PE, ad esempio durante la ricerca di risorse PE incorporate.
Per una guida dettagliata all'uso del generatore e a come Donut influisce sulle tecniche operative, leggere Donut - Iniettare assembly .NET come shellcode. Per maggiori informazioni sul loader, leggere Caricare assembly .NET dalla memoria.
Chi desidera saperne di più sugli interni dovrebbe fare riferimento alle Note per sviluppatori.