
Implementazione di Ghostly-Hollowing tramite syscall alterate per iniezione remota di PE
[!NOTE] Il repository originale utilizzava in precedenza una licenza errata che ometteva l'attribuzione al fondatore di DeceptIQ, @Rad9800, il cui repository TamperingSyscalls è pubblicato sotto licenza MIT. Il suo lavoro era già stato riconosciuto nel modulo del corso (Tampered Syscalls Via Hardware BreakPoints) ed è inoltre indicato nella nostra pagina pubblica Third-Party Licenses Page.
Quando siamo venuti a conoscenza dell'omissione, abbiamo prontamente corretto il repository originale e contattato Rad il giorno stesso per scusarci della svista. Nonostante i nostri migliori sforzi per correggere l'errore involontario, non ha risposto e ha bloccato ogni ulteriore comunicazione; cinque mesi dopo abbiamo ricevuto una notifica di rimozione DMCA, che ha portato all'eliminazione del repository originale.
Purtroppo, l'escalation in malafede non ci ha lasciato alcuna via pratica per risolvere la questione, quindi abbiamo ripubblicato il repository con la corretta licenza e l'attribuzione in atto.
Questa implementazione utilizza due tecniche trattate nei recenti aggiornamenti del corso di Maldev Academy:
Tampered Syscalls Via Hardware BreakPoints: Utilizzata per aggirare gli hook in userland falsificando al contempo gli argomenti della syscall invocata.
Ghostly Hollowing: Una tecnica ibrida tra Process Hollowing e Process Ghosting.
Tutte le syscall invocate nell'implementazione vengono chiamate tramite la macro TAMPER_SYSCALL. Questa macro chiama la funzione StoreTamperedSyscallParms per:
syscall nello stub della syscall NtQuerySecurityObject (cioè la syscall esca), e impostare un breakpoint hardware a questo indirizzo.Quando si chiama la macro TAMPER_SYSCALL, TAMPER_SYSCALL falsifica i primi quattro argomenti della syscall invocata con valori NULL. Successivamente chiama la syscall NtQuerySecurityObject, attivando il breakpoint installato in precedenza.
Gestiamo l'eccezione sollevata sostituendo l'SSN della syscall esca (NtQuerySecurityObject) con quello della syscall realmente invocata (ad esempio l'SSN di ZwAllocateVirtualMemory). Quindi sostituiamo gli argomenti falsificati con quelli reali. Questi passaggi vengono eseguiti nella funzione VEH .
Recuperare il payload PE: l'implementazione recupera il payload PE (mimikatz.exe) dal disco. In una situazione ideale, dovresti crittografare il payload e salvarlo nella sezione delle risorse.
Creare un file vuoto sul disco: crea un file temporaneo (.tmp) nella directory $env:TMP. Questo file verrà successivamente sovrascritto con il payload PE.
Creare una sezione ghost dal file temporaneo: una sezione ghost viene creata chiamando ZwCreateSection per creare una sezione dal file .tmp in attesa di eliminazione, chiudendo l'handle del file ed eliminando il file dal disco.
Creare un processo remoto: utilizzando la WinAPI CreateProcess, creiamo un processo remoto e vi mappiamo la sezione ghost.
Patchare ImageBaseAddress: applica una patch all'elemento ImageBaseAddress della struttura PEB in modo che punti alla sezione ghost mappata, ed esegui il punto di ingresso del payload PE tramite thread hijacking.
Un enorme ringraziamento a hasherezade per aver pubblicato Ghostly Hollowing e tutte le sue altre interessanti tecniche di injection.
ExceptionHandlerCallbackRoutine