
Nascondi artefatti di memoria utilizzando ROP e punti di interruzione hardware.
Questo strumento è un semplice PoC su come nascondere artefatti di memoria utilizzando una catena ROP in combinazione con breakpoint hardware. La catena ROP cambierà le protezioni della pagina di memoria del modulo principale in N/A durante il sonno (cioè quando viene chiamata la funzione Sleep). Per informazioni più dettagliate su questa tecnica di evasione della scansione della memoria, consulta il progetto originale Gargoyle. Solo x64.
L'idea è di impostare un breakpoint hardware in kernel32!Sleep e un nuovo filtro di livello superiore per gestire l'eccezione. Quando Sleep viene chiamata, la funzione del filtro eccezioni impostata in precedenza viene attivata, permettendoci di chiamare la catena ROP senza la necessità di utilizzare hook di funzioni classici. In questo modo, evitiamo di lasciare regioni di memoria privata strane e inusuali nel processo correlate a dll ben note.
La catena ROP chiama semplicemente VirtualProtect() per impostare la pagina di memoria corrente a N/A, poi chiama SleepEx e infine ripristina la protezione della memoria RX.
La panoramica del processo è la seguente:
Questo processo si ripete indefinitamente.
Come si può vedere nell'immagine, la protezione della memoria del modulo principale viene cambiata in N/A durante il sonno, evitando scansioni di memoria che cercano pagine con permesso di esecuzione.

Poiché utilizziamo il plugin LITCRYPT per offuscare i letterali stringa, è necessario impostare la variabile d'ambiente LITCRYPT_ENCRYPT_KEY prima di compilare il codice:
C:\Users\User\Desktop\RustChain> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Successivamente, basta compilare il codice ed eseguire lo strumento:
C:\Users\User\Desktop\RustChain> cargo build
C:\Users\User\Desktop\RustChain\target\debug> rustchain.exe
Questo strumento è solo un PoC e alcune funzionalità extra dovrebbero essere implementate per essere pienamente funzionale. Lo scopo principale del progetto era imparare come implementare una catena ROP e integrarla all'interno di Rust. Per questo motivo, questo strumento funzionerà solo se lo usi così com'è, e ci si aspetta errori se provi a usarlo in altri modi (ad esempio, compilandolo in una dll e cercando di caricarlo ed eseguirlo in modo riflessivo).