
Mangle è uno strumento che manipola aspetti di eseguibili compilati (.exe o DLL) per evitare il rilevamento da parte degli EDR.
Per visualizzare l'ultima versione di Mangle o per inviare un problema, fare riferimento a https://github.com/Tylous/Mangle.
Creato da Tyl0us
Presentato a Source Zero Con 2022
Mangle è uno strumento che manipola aspetti di eseguibili compilati (.exe o DLL). Mangle può rimuovere stringhe note basate su Indicatori di Compromissione (IoC) e sostituirle con caratteri casuali, modificare il file aumentandone le dimensioni per evitare gli EDR, e può clonare certificati di firma del codice da file legittimi. In questo modo, Mangle aiuta i loader a eludere gli scanner su disco e in memoria.
Mangle è stato sviluppato in Golang.
Il primo passo, come sempre, è clonare il repository. Prima di compilare Mangle, dovrai installare le dipendenze. Per installarle, esegui i seguenti comandi:
go get github.com/Binject/debug/pe
Poi compilalo
go build Mangle.go
Sebbene Mangle sia scritto in Golang, molte delle funzionalità sono progettate per funzionare su file eseguibili di altri linguaggi. Al momento del rilascio, l'unica funzionalità specifica per Golang è la parte di manipolazione delle stringhe.
./mangle -h
_____ .__
/ \ _____ ____ ____ | | ____
/ \ / \\__ \ / \ / ___\| | _/ __ \
/ Y \/ __ \| | \/ /_/ > |_\ ___/
\____|__ (____ /___| /\___ /|____/\___ >
\/ \/ \//_____/ \/
(@Tyl0us)
Utilizzo di ./Mangle:
-C string
Percorso del file contenente il certificato che si desidera clonare
-I string
Percorso del file originale
-M Modifica il file PE per rimuovere gli indicatori Go
-O string
Il nuovo nome del file
-S int
Di quanti MB aumentare il file
Mangle prende l'eseguibile in input e cerca stringhe note che i prodotti di sicurezza cercano o su cui avvisano. Queste stringhe da sole non sono l'unico punto di rilevamento. Spesso queste stringhe sono in combinazione con altri punti dati e pezzi di telemetria per il rilevamento e la prevenzione. Mangle trova queste stringhe note e sostituisce i valori esadecimali con valori casuali per rimuoverle. IMPORTANTE: Mangle sostituisce la dimensione esatta delle stringhe che sta manipolando. Non aggiunge né più né meno, poiché ciò creerebbe disallineamenti e instabilità nel file. Mangle fa questo usando l'opzione della riga di comando -M.
Attualmente, Mangle funziona solo su file Golang ma col tempo verranno aggiunti altri linguaggi. Se conosci stringhe per altri linguaggi, per favore apri un ticket di segnalazione e inviale.
Prima
Dopo
Praticamente tutti gli EDR non possono scansionare file su disco o in memoria oltre una certa dimensione. Ciò deriva semplicemente dal fatto che i file grandi richiedono più tempo per essere analizzati, scansionati o monitorati. Gli EDR non vogliono influire sulle prestazioni rallentando la produttività dell'utente. Mangle gonfia i file creando un padding di byte nulli (Zeri) alla fine del file. Ciò garantisce che nulla all'interno del file venga compromesso. Per gonfiare un eseguibile, usa l'opzione della riga di comando -S insieme al numero di byte che si desidera aggiungere al file. I payload grandi non sono più un problema con la velocità delle connessioni Internet odierne, tuttavia, non è consigliabile creare un file da 2 gigabyte.
Sulla base di casi di test su numerosi EDR a livello utente e kernel, si consiglia di aumentare le dimensioni di 95-100 megabyte. Poiché i vendor non controllano i file di grandi dimensioni, l'attività passa inosservata, portando all'esecuzione riuscita dello shellcode.
Mangle contiene anche la capacità di prendere l'intera catena e tutti gli attributi da un certificato di firma del codice legittimo da un file e copiarlo su un altro file. Questo include la data di firma, le controfirme e altri attributi misurabili.
Sebbene questa funzionalità possa sembrare simile a un altro strumento che ho sviluppato, Limelighter, la differenza principale tra i due è che Limelighter crea un certificato falso basato su un dominio e lo firma con la data e l'ora correnti, mentre Mangle utilizza attributi validi in cui il timestamp è preso dal file originale. Questa opzione può utilizzare file DLL o .exe da copiare usando l'opzione della riga di comando -C, insieme al percorso del file da cui si desidera copiare il certificato.