Dirottamento AppDomainManager: Hijack Execution Flow via AppDomainManager (T1574.014)

La tecnica T1574.014 sfrutta il meccanismo con cui il framework .NET carica gli assembly attraverso la classe AppDomainManager, responsabile della creazione e gestione degli application domain all'interno di un processo. Un application domain è un ambiente di runtime isolato che ospita l'esecuzione di codice .NET, e ogni assembly (file .exe o .dll compilati per il CLR) può essere caricato al suo interno come codice eseguibile.

L'attaccante può abusare di questo meccanismo in due modi principali: creando un application domain personalizzato dentro un processo bersaglio per caricare un assembly arbitrario, oppure manomettendo i file di configurazione .config o le variabili d'ambiente che regolano il runtime .NET, così da forzare applicazioni legittime a caricare un assembly malevolo identificato per nome.

MITRE ATT&CK colloca la tecnica in tre tattiche: TA0003 Persistence, perché la modifica dei file di configurazione sopravvive ai riavvii; TA0004 Privilege Escalation, quando il processo dirottato gira con privilegi elevati; e TA0005 Defense Evasion, poiché il codice ostile viene eseguito dentro un binario firmato Microsoft, eludendo controlli basati su reputazione e firma. L'impatto operativo è significativo: il payload eredita la firma e il contesto del processo host, rendendo la detection tradizionale basata su hash o certificati sostanzialmente inefficace. Il malware IMAPLoader (S1152) è documentato come esempio concreto di adozione della tecnica in campagne reali.

La simulazione controllata di T1574.014 parte dalla comprensione della catena: il CLR .NET, all'avvio di un processo host, legge il file <eseguibile>.exe.config e cerca gli attributi appDomainManagerAssembly e appDomainManagerType dentro il tag <runtime>. Se questi puntano a un assembly presente nella GAC o nella directory dell'eseguibile, il CLR lo carica prima del codice legittimo.

In laboratorio, la procedura standard per un red team prevede tre fasi. Prima, la creazione dell'assembly malevolo: un progetto Class Library in C# che eredita da AppDomainManager e sovrascrive InitializeNewDomain, dove viene collocato il payload (una reverse shell, uno spawn di Cobalt Strike — a pagamento — o un beacon di Sliver, open source). L'assembly va firmato con strong name tramite sn -k key.snk e compilato con la key referenziata, requisito per il caricamento come AppDomainManager.

Seconda fase: il deployment. L'assembly firmato viene registrato nella Global Assembly Cache con gacutil /i MyManager.dll (richiede Visual Studio SDK, open source per la Community Edition) oppure copiato nella stessa directory dell'eseguibile bersaglio. Poi si crea il file .config accanto al binario target — un buon candidato per i test è PresentationHost.exe o un'applicazione custom .NET — con il blocco XML che dichiara appDomainManagerAssembly puntando all'assembly ostile e appDomainManagerType al nome completo della classe.

Terza fase: l'esecuzione. Basta lanciare il binario legittimo per triggerare il caricamento. In alternativa, si possono impostare le variabili d'ambiente APPDOMAIN_MANAGER_ASM e APPDOMAIN_MANAGER_TYPE a livello utente o macchina tramite setx, per un effetto persistente che si attiva a ogni esecuzione .NET.

Per l'automazione offensiva esistono framework come NetLoader (open source) e i moduli di Covenant (open source, in manutenzione limitata) che facilitano la generazione dell'assembly e del config. Il progetto Donut (open source) è utile per convertire payload arbitrari in shellcode caricabile da un AppDomainManager custom.

Per validare l'efficacia in un engagement, il red team dovrebbe testare processi host diversi: eseguibili Microsoft firmati come msbuild.exe, applicazioni di terze parti in Program Files, e servizi che girano come SYSTEM. La verifica finale avviene osservando il caricamento del modulo tramite Process Explorer (gratuito, Sysinternals) o API Monitor (gratuito), confermando che l'assembly appare nello spazio del processo firmato.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.