mercoledì 22 giugno 2011

Bypassing VirusTotal with Code injection


Intro


Prima di tutto vorrei dire che questo post ha tutte le intenzioni di essere a scopo di studio.
Il nostro obbiettivo, è eludere tutti (o quasi) gli antivirus di virus total.
Per fare questo, in poche parole, andremo a modificare l'entrypoint del programma, redirectandolo verso un loop (chiamato encoder XOR) che terminerà riportando il programma verso l'indirizzo seguente all'entrypoint.


Creazione del codice vuoto (Code Cave)


Iniziamo subito con la creazione del codice vuoto...Prendete il vostro debugger (preferibilmente Olly) e controllate se il PE del vostro malware è scrivibile o no; nel caso non lo fosse dovrete ovviamente modificare il PE della sezione ".text" con un PE editor .
Adesso che il programma è scrivibile aprite un hex editor (ce ne sono tanti: hex editor neo, hex workshop ecc..) e inserite, possibilmente infondo, 1000 o piu' byte con valore "0".


Modifica EntryPoint, e redirect 
verso il codice vuoto

A questo punto, bisogna cercare di redirectare il programma al codice vuoto, modificando l'entrypoint.
Questa è un'operazione molto facile, infatti basterà trovare l'entrypoint del programma, prendere uno dei primi offset del codice vuoto, e redirectare l'entrypoint, con un semplice JMP all'offset del codice vuoto scelto.

  Inserimento encoder XOR nel codice vuoto

Qui viene la parte piu' difficile di questa guida, cioè l'inserimento del loop (l'encoder XOR) all'interno del codice vuoto.Proprio perchè difficile, vi scriverò esattamente quel che dovrete inserire nel codice vuoto:
1. Per prima cosa mettiamo nel registro EAX il contenuto dell'istruzione subito dopo il nostro entrypoint; codice: MOV EAX, OFFSET
2. Adesso facciamo lo XOR al codice a cui punta il registro EAX con chiave "0F"; codice: XOR BYTE PTR DS:[EAX].0F
3.Incremento del registro EAX; Codice: INC EAX
4. Comparazione del valore raggiunto di EAX con il valore dell'istruzione finale della sezione .text; codice: CMP EAX, OFFSET
5.Eseguiamo una specie di ciclo IF, usando un JLE, in modo che se il valore raggiunto da EAX non è uguale a quello a cui è stato comparato prima, torni allo XOR, e di conseguenza si incrementi e così via:
JLE SHORT, OFFSET (XOR).



Redirect al corpo del programma

Abbiamo ottenuto l'encoding del malware solo che così com'è non possiamo salvarlo, perchè ovviamente non abbiamo redirectato il programma di nuovo al corpo del programma. Quindi dopo il salto condizionato allo Xor, dobbiamo mettere un salto obbligato verso il corpo del programma.Quindi inseriamo subito dopo il codice JMP OFFSET (quello dopo l' entrypoint). 

Conclusioni

A questo punto il nostro malware non sara' piu' cosi':
EntryPoint --->corpo programma
ma sarà così:
EntryPoint --->JMP--->Encoder XOR--->JMP--->Corpo programma

Nessun commento:

Posta un commento

Ti potrebbero anche interessare

Related Posts Plugin for WordPress, Blogger...