
Questo nuovo metodo di utilizzo di NtQueueApcThreadEx, abusando dei parametri ApcRoutine e SystemArgument[0-3] passando un gadget pop r32; ret casuale, può essere utilizzato per un'iniezione di codice furtiva.
Questo metodo innovativo di utilizzo di NtQueueApcThreadEx abusando dei parametri ApcRoutine e SystemArgument[0-3] passando un gadget casuale pop r32; ret può essere impiegato per un'iniezione di codice stealth. In questa PoC, il gadget in questo caso viene scelto casualmente dalla regione di memoria di ntdll.dll che corrisponde a uno schema specifico. Ciò significa che il gadget ritorna dentro lo shellcode.
IMAGE_SCN_CNT_CODE e IMAGE_SCN_MEM_EXECUTE all'interno di ntdll.dll in memoria.NtQueueApcThreadEx, ApcRoutine = indirizzo del gadget scelto casualmente, SystemArgument = puntatore allo shellcode.NtQueueApcThreadEx forzerà l'IP verso il gadget ntdll.dll!<pop r32; ret casuale>, e ritornerà dentro SystemArgument1.Ci sono centinaia di gadget che possono essere usati all'interno di ntdll.dll (almeno nella mia build) — rendendo questa tecnica difficile da rilevare.
Ispezionando la chiamata, a differenza dell'iniezione APC tradizionale, ApcRoutine punterà semplicemente a un indirizzo legittimo all'interno di ntdll.dll.

Questa tecnica è probabilmente un po' complicata da rilevare. Ispezionando le chiamate a NtQueueApcThreadEx, controllare se uno qualsiasi degli argomenti punta verso memoria eseguibile. Un'altra possibile via di rilevamento è controllare se ApcRoutine punta verso un indirizzo all'interno di ntdll — tuttavia questo potrebbe generare molti falsi positivi.
Questa tecnica è stata originariamente descritta nel write-up di Avast su Raspberry Robin qui.