3. Ricardo Gómez
Las entrañas del malware
Trucos anti análisis usados en malware bajo plataformas MS
Windows.
4. ¿Qué es malware?
Malware es un programa que contiene código
malicioso.
Un malware es un virus, un worm, una botnet ...
5. Evolución del malware
2001 Virus Anna Kournikova
“Here you are ;-),” “here you have ;o)” and here
you go ;-)”
Cuerpo del mensaje: "Hi, check this!”
Annakournikova.jpg.vbs
6. Evolución del malware
2004 Mydoom, Netsky, Sasser, Bagger.
2005 Redes de bots para obtener dinero.
TROYANOS BANCARIOS.
7. Evolución del malware
Malware bajo pedido.
Espionaje industrial y ciber-guerra.
TDL4 (2008) (indestructible).
Stuxnet (junio 2010).
Flame (mayo 2012).
Medre (junio 2012).
8. Análisis de malware
Análisis de código (estático).
Análisis de comportamiento (dinámico).
Objetivo de ambos: Explicar cómo funciona el
malware.
9. Análisis de malware
Análisis de código (estático).
Obtener información del malware mirando el archivo
(sin ejecución).
10. Análisis de malware
Análisis de comportamiento (dinámico).
Obtener información del malware mediante la
ejecución del mismo.
11. ¿Qué dificulta el análisis?
Anti-desensamblado
Anti-depuración
Anti-VM
Packers
12. Anti-desensamblado
Código insertado manualmente con la finalidad de
provocar un listado incorrecto en las herramientas de
desensamblado.
14. Anti desemsamblado
Ofuscación
¿Qué es código ofuscado?
Alterar la estructura del código original manteniendo
su funcionalidad original.
Objetivos:
Retrasar el análisis de ingeniería inversa.
Burlar o confundir los motores antivirus y que no
detecten el código malicioso.
¿Fácil o difícil?
22. Anti-debugging
Muy popular entre creadores de malware usada para
reconocer cuando la muestra está bajo el control de
un depurador.
23. Anti-debugging
APIs
IsDebbugerPresent
CheckRemoteDebuggerPresent
NtQueryInformationProcess
OutputDebugString
Chequeo manual de estructuras
Chequeo del PEB
Chequeo del ProcessHeap
Chequeo de NtGlobalFlag
24. Anti-debugging
Identificación del comportamiento del depurador
Comprobaciónes de integridad (checksum)
Chequeos de tiempo de ejecución.
Interferir con la funcionalidad del debugger
Explotar vulnerabilidades del depurador
25. Algunos conceptos
PEB Estructura de datos que contiene una gran
cantidad de información sobre el proceso.
HEAP Forma de manejo de memoria de la cual
puede hacer uso una aplicación cuando necesita
reservar y liberar memoria dinámicamente.
HANDLE Manejador.
26. Anti-debugging
APIs
IsDebuggerPresent
El más básico (y obvio).
El booleano PEB.BeingDebugged se activa si hay
un depurador presente.
FS[0x30] apunta al PEB.
La API kernel32 !IsDebuggerPresent() revisa este
flag
30. Anti-debugging
APIs
OutputDebugString
Envía una cadena al depurador para que la muestre.
Depurado No depurado
OutputDebugString El depurador de
no hace nada. sistema llama
internamente la
función DbgPrint
para mostrar la
string.
32. Anti-debugging
Chequeo manual de estructuras
Byte IsBeingDebugged en el PEB (FS:[30]+2).
Chequeo del ProcessHeap (localizado en 0x18 en
la estructura PEB).
Bytes Flag y ForceFlag.
NT, 2000, Vista y
XP Vista y W7
Campo XP W7
(64 bits) (64 bits)
(32 bits) (32 bits)
Flag 0x0C 0x40 0x14 0x70
ForceFlag 0x10 0x44 0x18 0x74
33. Anti-debugging
Chequeo de NtGlobalFlag
Un programa ejecutado en un depurador se
comporta ligeramente diferente.
Se crean heaps de memoria diferentes.
PEB en el offset 0x68 (no documentada. Si es igual
0x70, está siendo depurado.
34. Anti-debugging
Comportamiento del depurador
Comprobaciónes de integridad (checksum)
Calcular la integridad de una sección de su código.
Chequeos de tiempo de ejecución
RTDSC
QueryPerformanceCounter y GetTickCount
41. Conclusión:
Saber las técnicas es útil para el analista.
Existen plugins, pero para realizar tools se necesita
saber como operan.
El conocimiento permite adaptarse a nuevos
métodos.