Identificación de un malware 1. Presentación de los malwares por familias 9 1.1 Introducción 9 1.2 Backdoor 10 1.3 Ransomware y locker 11 1.4 Stealer 12 1.5 Rootkit 13 2. Escenario de infección 14 2.1 Introducción 14 2.2 Escenario 1: la ejecución de un archivo adjunto 14 2.3 Escenario 2: el clic desafortunado 15 2.4 Escenario 3: la apertura de un documento infectado 16 2.5 Escenario 4: los ataques informáticos 16 2.6 Escenario 5: los ataques físicos: infección por llave USB 17 3. Técnicas de comunicación con el C&C 17 3.1 Introducción 17 3.2 Actualización de la lista de nombres de dominio 18 3.3 Comunicación mediante HTTP/HTTPS/FTP/IRC 18 3.4 Comunicación mediante e-mail 19 3.5 Comunicación mediante una red punto a punto 19 3.6 Comunicación mediante protocolos propietarios 19 3.7 Comunicación pasiva 20 3.8 Fast flux y DGA (Domain Generation Algorithms) 20 4. Recogida de información 21 4.1 Introducción 21 4.2 Recogida y análisis del registro 22 4.3 Recogida y análisis de los registros de eventos 24 4.4 Recogida y análisis de los archivos ejecutados durante el arranque 25 4.5 Recogida y análisis del sistema de archivos 26 4.6 Gestión de los archivos bloqueados por el sistema operativo 32 1/8
4.7 Framework de investigación inforense 33 4.8 Herramienta FastIR Collector 35 5. Imagen de memoria 37 5.1 Presentación 37 5.2 Realización de una imagen de memoria 38 5.3 Análisis de una imagen de memoria 41 5.4 Análisis de la imagen de memoria de un proceso 48 6. Funcionalidades de los malwares 49 6.1 Técnicas para ser persistente 49 6.2 Técnicas para ocultarse 51 6.3 Malware sin archivo 55 6.4 Esquivar el UAC 56 7. Modo operativo en caso de amenazas a objetivos persistentes (APT) 57 7.1 Introducción 57 7.2 Fase 1: reconocimiento 58 7.3 Fase 2: intrusión 58 7.4 Fase 3: persistencia 59 7.5 Fase 4: pivotar 59 7.6 Fase 5: filtración 60 7.7 Trazas dejadas por el atacante 60 8. Conclusión 61 Análisis básico 1. Creación de un laboratorio de análisis 63 1.1 Introducción 63 1.2 VirtualBox 64 1.3 La herramienta de gestión de muestras de malware Viper 70 2/8
2. Información sobre un archivo 76 2.1 Formato de archivo 76 2.2 Cadenas de caracteres presentes en un archivo 77 3. Análisis en el caso de un archivo PDF 79 3.1 Introducción 79 3.2 Extraer el código JavaScript 79 3.3 Desofuscar código JavaScript 84 3.4 Conclusión 88 4. Análisis en el caso de un archivo de Adobe Flash 88 4.1 Introducción 88 4.2 Extraer y analizar el código ActionScript 89 5. Análisis en el caso de un archivo JAR 90 5.1 Introducción 90 5.2 Recuperar el código fuente de las clases 91 6. Análisis en el caso de un archivo de Microsoft Office 93 6.1 Introducción 93 6.2 Herramientas que permiten analizar archivos de Office 93 6.3 Caso de malware que utiliza macros: Dridex 94 6.4 Caso de malware que utiliza alguna vulnerabilidad 96 7. Uso de PowerShell 98 8. Análisis en el caso de un archivo binario 99 8.1 Análisis de binarios desarrollados en AutoIt 99 8.2 Análisis de binarios desarrollados con el framework.net 101 8.3 Análisis de binarios desarrollados en C o C++ 101 9. El formato PE 102 9.1 Introducción 102 3/8
9.2 Esquema del formato PE 103 9.3 Herramientas para analizar un PE 110 9.4 API de análisis de un PE 113 10. Seguir la ejecución de un archivo binario 117 10.1 Introducción 117 10.2 Actividad a nivel del registro 118 10.3 Actividad a nivel del sistema de archivos 120 10.4 Actividad de red 121 10.5 Actividad de red de tipo HTTP(S) 129 11. Uso de Cuckoo Sandbox 130 11.1 Introducción 130 11.2 Configuración 131 11.3 Uso 136 11.4 Limitaciones 145 11.5 Conclusión 147 12. Recursos en Internet relativos a los malwares 147 12.1 Introducción 147 12.2 Sitios que permiten realizar análisis en línea 148 12.3 Sitios que presentan análisis técnicos 152 12.4 Sitios que permiten descargar samples de malwares 154 Reverse engineering 1. Introducción 157 1.1 Presentación 157 1.2 Legislación 158 2. Ensamblador x86 159 2.1 Registros 159 2.2 Instrucciones y operaciones 164 4/8
2.3 Gestión de la memoria por la pila 170 2.4 Gestión de la memoria por el montículo 173 2.5 Optimización del compilador 173 3. Ensamblador x64 174 3.1 Registros 174 3.2 Parámetros de las funciones 175 4. Análisis estático 176 4.1 Presentación 176 4.2 IDA Pro 176 4.2.1 Presentación 176 4.2.2 Navegación 180 4.2.3 Cambios de nombre y comentarios 183 4.2.4 Script 184 4.2.5 Plug-ins 185 4.3 Radare2 189 4.3.1 Presentación 189 4.3.2 Línea de comandos 189 4.3.3 Interfaces gráficas no oficiales 191 4.4 Técnicas de análisis 191 4.4.1 Comenzar un análisis 191 4.4.2 Saltos condicionales 193 4.4.3 Bucles 194 4.5 API Windows 195 4.5.1 Introducción 195 4.5.2 API de acceso a los archivos 196 4.5.3 API de acceso al registro 199 4.5.4 API de comunicación de red 205 4.5.5 API de gestión de servicios 209 4.5.6 API de los objetos COM 212 4.5.7 Ejemplos de uso de la API 213 4.5.8 Conclusión 222 4.6 Límites del análisis estático 222 5/8
5. Análisis dinámico 222 5.1 Presentación 222 5.2 Immunity Debugger 223 5.2.1 Presentación 223 5.2.2 Control de flujo de ejecución 228 5.2.3 Análisis de una librería 232 5.2.4 Puntos de ruptura 233 5.2.5 Visualización de los valores en memoria 235 5.2.6 Copia de la memoria 236 5.2.7 Soporte del lenguaje Python 237 5.2.8 Conclusión 238 5.3 WinDbg 238 5.3.1 Presentación 238 5.3.2 Interfaz 239 5.3.3 Comandos básicos 241 5.3.4 Plug-in 246 5.3.5 Conclusión 247 5.4 Análisis del núcleo de Windows 247 5.4.1 Presentación 247 5.4.2 Implementación del entorno 247 5.4.3 Protecciones del kernel de Windows 248 5.4.4 Conclusión 249 5.5 Límites del análisis dinámico y conclusión 249 Técnicas de ofuscación 1. Introducción 251 2. Ofuscación de las cadenas de caracteres 253 2.1 Introducción 253 2.2 Caso de uso de ROT13 253 2.3 Caso de uso de la función XOR con una clave estática 256 2.4 Caso de uso de la función XOR con una clave dinámica 262 6/8
2.5 Caso de uso de funciones criptográficas 264 2.6 Caso de uso de funciones personalizadas 271 2.7 Herramientas que permiten decodificar las cadenas de caracteres 281 3. Ofuscación del uso de la API de Windows 282 3.1 Introducción 282 3.2 Estudio del caso de Duqu 283 3.3 Estudio del caso de EvilBunny 287 4. Packers 289 4.1 Introducción 289 4.2 Packers que utilizan la pila 291 4.3 Packers que utilizan el montículo 305 4.4 Encoder Metasploit 313 5. Otras técnicas 315 5.1 Anti-VM 315 5.2 Anti-reverse engineering y anti-debug 317 6. Conclusión 321 Detección, confinamiento y erradicación 1. Introducción 323 2. Indicadores de compromiso de red 325 2.1 Presentación 325 2.2 Uso de los proxys 326 2.3 Uso de detectores de intrusión 328 2.4 Casos complejos 330 3. Detección de archivos 331 3.1 Presentación 331 7/8
3.2 Firmas (o Hash) 332 3.3 Firmas con YARA 334 3.4 Firmas con ssdeep 341 4. Detección y erradicación de malwares con ClamAV 343 4.1 Presentación 343 4.2 Instalación 344 4.3 Uso 346 5. Artefactos del sistema 353 5.1 Tipos de artefactos 353 5.2 Herramientas 354 6. Uso de OpenIOC 356 6.1 Presentación 356 6.2 Uso 357 6.3 Interfaz gráfica de edición 358 6.4 Detección 362 7. Conclusión 367 índice 369 8/8