Tipos de formatos ejecutables
Existen múltiples formatos de archivos ejecutables. En entornos Windows, los más comunes son PE (Portable Executable), y en sistemas Unix/Linux, el formato predominante es ELF (Executable and Linkable Format). Además, en plataformas más antiguas como PS1 (PlayStation 1), se utilizan otros formatos propietarios.
Relacionado: Ver Ghidra e Immunity Debugger para análisis. Radare2 para desensamblado. Forense de memoria para análisis de malware en ejecución.
En el ámbito del malware, es común encontrar archivos downloader, que descargan y ejecutan un PE malicioso. Un ejemplo típico es Cobalt Strike, que utiliza macros para descargar y ejecutar un PE, permitiendo la ejecución de código malicioso en la máquina víctima.
Formato ELF
El formato ELF (Executable and Linkable Format) es el estándar en sistemas basados en Unix y Linux. Se compone de múltiples secciones y encabezados (headers and sections), que incluyen:
- .bss: Almacena variables estáticas no inicializadas.
- .text: Contiene el código ejecutable del programa.
- .data: Sección donde residen las variables globales y datos inicializados.
- .plt (Procedure Linkage Table): Contiene las direcciones de funciones importadas.
- .got (Global Offset Table): Contiene direcciones de memoria utilizadas para llamadas a funciones dinámicas.
- .symtab: Contiene los símbolos de las funciones y variables del binario, permitiendo la resolución de direcciones en tiempo de ejecución.
El header ELF contiene información sobre el programa y su estructura, mientras que las secciones de código y datos permiten su ejecución y almacenamiento en memoria.
El análisis de archivos ELF puede realizarse con herramientas como:
- objdump -t: Para visualizar la tabla de símbolos.
- objdump -d: Para desensamblar el binario y analizar su código.
- readelf -h: Para ver el encabezado del ELF.
La sección .init es la responsable de la carga del main. Durante la ejecución, el sistema operativo carga las librerías necesarias basándose en la tabla de símbolos y resuelve las direcciones dinámicas.
Formato PE (Portable Executable)
El formato PE es el estándar en Windows para ejecutables y bibliotecas dinámicas (DLLs). Una de sus ventajas es su amplia compatibilidad con versiones antiguas del sistema operativo, aunque esta misma característica puede ser explotada por malware para ejecutar código en sistemas más recientes.
Componentes principales del PE:
- AddressOfEntryPoint: Dirección de inicio del programa, donde se encuentra la función
main. - ImageBase: Dirección base del programa en memoria. Los malware suelen modificar este valor para evitar detección.
- .rsrc: Sección que almacena recursos como iconos, imágenes o datos empaquetados en formato ZIP.
- VirtualSize: Tamaño virtual del segmento en la memoria.
- RawSize: Tamaño del segmento en el disco.
- Packers: Técnicas de compresión de ejecutables, como UPX, que reducen el tamaño del PE y dificultan su análisis. Estos archivos se desempaquetan en memoria en tiempo de ejecución.
Análisis de binarios y detección de malware
Para analizar ejecutables y detectar posibles amenazas, se utilizan herramientas como:
- PEStudio: Permite analizar la estructura de los archivos PE, verificando firmas digitales, secciones y comportamiento sospechoso.
- CFF Explorer: Facilita la inspección de PE, visualización de secciones y análisis de imports/exports.
- Dependency Walker: Analiza dependencias de un binario y sus librerías dinámicas.
El registro de Windows (regedit) almacena información del sistema y configuraciones de programas, siendo un objetivo frecuente del malware. Algunas claves relevantes incluyen:
- HKEY_CLASSES_ROOT: Almacena asociaciones de archivos y configuraciones de COM.
- HKEY_LOCAL_MACHINE: Contiene configuraciones globales del sistema y programas instalados.
Técnicas de evasión y empaquetado en PE
Algunos binarios son strippeados, lo que significa que han sido eliminadas sus tablas de símbolos para dificultar el análisis.
Técnicas de ocultación:
-
Uso de packers (como UPX): Estos comprimen los ejecutables y almacenan las cabeceras en secciones poco usuales, dejando solo un pequeño código ejecutable con alta entropía. Para detectar un ejecutable empaquetado, se puede verificar:
- Si el RawSize es 0.
- Si el ejecutable es detectado con herramientas como PEiD.
-
Manipulación de importaciones/exportaciones:
- Los exe suelen importar más librerías, mientras que las DLLs exportan más funciones.
- El uso de BCLib permite cargar librerías de forma dinámica, evitando que las importaciones sean detectadas en el análisis estático.
-
Ofuscación de código y eliminación de símbolos:
- Si un malware está escrito en ensamblador y se eliminan las tablas de símbolos, se vuelve más difícil determinar sus funcionalidades exactas.
Conclusión
El análisis de binarios en formatos ELF y PE es clave en la investigación de malware y en la seguridad informática. El uso de herramientas adecuadas como PEStudio, CFF Explorer y objdump facilita la detección de anomalías y técnicas de evasión. Además, entender cómo funcionan los loaders y las tablas de símbolos ayuda a comprender el comportamiento del código malicioso y sus métodos de ejecución en memoria.