Tema 6
Antes de ejecutar una muestra, el archivo ya entrega información valiosa. Las cabeceras, secciones, imports, exports, símbolos y metadatos permiten estimar capacidades, plataforma, arquitectura, empaquetado y posibles puntos de análisis.
Un ejecutable no es solo una secuencia de instrucciones. Es un archivo estructurado que le indica al sistema operativo cómo cargarlo, dónde ubicar sus secciones, qué bibliotecas necesita, cuál es su punto de entrada y qué permisos requiere cada región.
En análisis de malware, revisar el formato ejecutable es una etapa temprana fundamental. Permite identificar arquitectura, tipo de archivo, dependencias, señales de empaquetado, nombres sospechosos, recursos embebidos y metadatos que orientan el resto del trabajo.
En este tema veremos PE, usado principalmente en Windows, y ELF, común en Linux y otros sistemas Unix. No necesitamos memorizar cada campo, pero sí entender qué preguntas responde cada parte del archivo.
Un formato ejecutable define cómo se organiza un archivo que puede ser cargado y ejecutado por un sistema operativo. Incluye cabeceras, secciones, tablas, referencias a bibliotecas, información de reubicación, símbolos y otros datos necesarios para la ejecución.
El loader del sistema operativo usa esa estructura para preparar el proceso en memoria. Por eso, muchas propiedades visibles en el archivo tienen una relación directa con lo que luego veremos en un debugger o monitor de procesos.
PE y ELF resuelven problemas parecidos, pero pertenecen a ecosistemas distintos. PE aparece en ejecutables, DLLs, drivers y otros binarios de Windows. ELF aparece en ejecutables, bibliotecas compartidas, objetos y componentes de Linux o Unix.
| Formato | Plataformas comunes | Ejemplos de archivo |
|---|---|---|
| PE | Windows | .exe, .dll, .sys, .scr, .ocx |
| ELF | Linux, BSD, Unix, sistemas embebidos | Ejecutables, .so, objetos, loaders |
| Mach-O | macOS e iOS | Aplicaciones, frameworks, bibliotecas |
| Scripts | Multiplataforma | PowerShell, Bash, Python, JavaScript |
Aunque este tema se centra en PE y ELF, el hábito de leer estructura, metadatos y dependencias se aplica a otros tipos de archivo.
La extensión no es confiable. Un archivo llamado documento.pdf.exe puede ocultar su naturaleza real, y una muestra puede carecer de extensión o usar una falsa. La identificación debe basarse en contenido, cabeceras y firmas.
En una inspección inicial conviene registrar:
Un archivo PE contiene varias estructuras que permiten a Windows cargarlo correctamente. Algunas son heredadas de compatibilidad histórica y otras son esenciales para ejecución moderna.
| Parte | Función | Valor para el análisis |
|---|---|---|
| DOS Header | Cabecera inicial con firma MZ | Confirma formato y ubicación de cabecera PE |
| PE Header | Identifica arquitectura y propiedades generales | Indica máquina, número de secciones y características |
| Optional Header | Datos de carga y ejecución | Punto de entrada, ImageBase, subsistema y mitigaciones |
| Section Table | Describe secciones del archivo | Permisos, tamaños, nombres y posibles anomalías |
| Data Directories | Ubica imports, exports, recursos y reubicaciones | Guía hacia estructuras de interés |
No todos los campos merecen la misma atención en un triage inicial. Algunos aportan señales rápidas sobre plataforma, comportamiento esperado o rarezas.
Las secciones agrupan código, datos, recursos y otras estructuras. Cada sección tiene nombre, tamaño en archivo, tamaño en memoria, dirección relativa y permisos.
| Sección común | Contenido típico | Qué observar |
|---|---|---|
| .text | Código ejecutable | Tamaño, entropía y permisos de ejecución |
| .rdata | Datos de solo lectura, imports, cadenas | Strings, tablas y referencias útiles |
| .data | Datos globales modificables | Configuración, buffers y estructuras |
| .rsrc | Recursos del ejecutable | Iconos, manifiestos, archivos embebidos |
| .reloc | Información de reubicación | Soporte para cargar en direcciones alternativas |
Nombres extraños, secciones ejecutables y escribibles a la vez, o alta entropía pueden indicar packing, cifrado u ofuscación, aunque siempre hay que confirmar con más evidencia.
La tabla de imports indica qué bibliotecas y funciones externas espera usar el ejecutable. Es una de las fuentes más útiles para inferir capacidades sin ejecutar la muestra.
Ejemplos de lectura:
Los exports son funciones que un módulo ofrece a otros programas. Son especialmente importantes en DLLs, plugins, librerías y componentes cargados por procesos externos.
Analizar exports ayuda a responder:
Los recursos PE pueden contener iconos, diálogos, texto, configuraciones, manifiestos, archivos embebidos o datos usados por el programa. En malware, los recursos pueden usarse para ocultar payloads, señuelos o configuración cifrada.
Los metadatos de versión pueden incluir nombre de producto, compañía, descripción y número de versión. Pueden ser legítimos, falsificados o copiados de software real para parecer confiables.
Una firma digital permite verificar integridad y atribución criptográfica del archivo. Sin embargo, una firma válida no convierte automáticamente un archivo en benigno: puede haber certificados comprometidos, abuso de software legítimo o componentes firmados usados con fines maliciosos.
Aspectos a revisar:
ELF organiza ejecutables y bibliotecas en cabeceras, program headers, section headers, segmentos, símbolos, relocaciones y tablas dinámicas. La estructura exacta depende de si el archivo es ejecutable, biblioteca compartida u objeto intermedio.
| Parte | Función | Valor para el análisis |
|---|---|---|
| ELF Header | Identifica formato, arquitectura y tipo | Confirma plataforma, endianness y punto de entrada |
| Program Headers | Describen segmentos para carga en memoria | Permisos, mapeos y comportamiento del loader |
| Section Headers | Describen secciones lógicas del archivo | Código, datos, símbolos, strings y relocaciones |
| Dynamic Section | Información para enlazado dinámico | Bibliotecas requeridas y funciones resueltas |
| Symbol Tables | Nombres y referencias a funciones o variables | Pistas sobre lógica interna cuando no está despojado |
Las secciones ELF ayudan a ubicar código, datos, tablas y metadatos. En binarios despojados, parte de esta información puede faltar, pero muchas estructuras necesarias para ejecución permanecen.
En ELF, las dependencias dinámicas y símbolos importados permiten inferir capacidades. Un binario que usa funciones de sockets, ejecución de comandos, criptografía o manipulación de archivos puede orientar la investigación.
La diferencia entre un binario con símbolos y uno despojado es importante. Si conserva nombres de funciones, variables o rutas de compilación, el análisis inicial será más directo. Si está stripped, el analista deberá apoyarse más en strings, imports, flujo y comportamiento dinámico.
El punto de entrada indica dónde comienza la ejecución cuando el loader transfiere control al programa. En PE suele encontrarse como AddressOfEntryPoint; en ELF aparece en la cabecera como entry point.
En malware empaquetado, el punto de entrada suele apuntar al stub del packer, no al código original del programa. Por eso, el entry point es importante, pero no siempre representa la lógica principal.
Durante debugging, iniciar en el punto de entrada permite observar desempaquetado, resolución dinámica de APIs, verificaciones del entorno y preparación antes de llegar al comportamiento principal.
La entropía mide, de forma aproximada, qué tan aleatorios parecen los datos. Secciones con entropía alta pueden contener datos comprimidos, cifrados o empaquetados. Esto es común en malware, pero también aparece en software legítimo protegido o comprimido.
Señales que merecen revisión:
Las relocaciones permiten ajustar direcciones cuando un binario no se carga en su dirección preferida. Esto se relaciona con ASLR y con cómo el loader prepara el proceso.
En análisis, las relocaciones importan porque el archivo en disco y la imagen en memoria no siempre coinciden byte a byte. Direcciones relativas, bases de carga y offsets deben interpretarse correctamente para no confundir ubicaciones.
La distinción entre offset de archivo, dirección virtual relativa y dirección virtual absoluta aparecerá con frecuencia en debugging y reversing.
En PE se habla mucho de offset de archivo, RVA y VA. Entender la diferencia evita errores al saltar entre una herramienta de análisis estático y un debugger.
| Concepto | Significado | Uso |
|---|---|---|
| File offset | Posición dentro del archivo en disco | Editar o ubicar bytes en el archivo |
| RVA | Dirección relativa a la base de imagen | Ubicar estructuras dentro de la imagen cargada |
| VA | Dirección virtual real en memoria | Debugging y ejecución en proceso |
La conversión entre estos valores depende de secciones, base de carga y alineación.
Los metadatos no prueban por sí solos si algo es malicioso, pero ayudan a priorizar y formular hipótesis.
Leer el formato ejecutable es una etapa potente, pero incompleta. Un archivo puede ocultar imports, cifrar strings, resolver APIs en tiempo de ejecución, descargar componentes o comportarse de forma distinta según el entorno.
Limitaciones comunes:
Por eso, el análisis del formato debe combinarse con strings, desensamblado, debugging y análisis dinámico cuando corresponda.
El formato ejecutable es la primera capa técnica de un binario. Leerlo bien permite orientar el análisis, detectar anomalías, preparar el entorno de debugging y formular hipótesis antes de correr cualquier código.
En el próximo tema estudiaremos la clasificación de malware: troyanos, ransomware, spyware, worms, rootkits y loaders, para conectar estructura técnica con objetivos y comportamientos típicos.