miércoles, 28 de enero de 2009

Ejecutable ¿o no?, esa es la cuestión

Que un archivo comience con los bytes "4d5a" (hexadecimal), no es casualidad. Se trata de un archivo ejecutable de cualquier sistema operativo de Microsoft.

Concretamente estamos hablando del comienzo de la cabecera PE (Portable Executable), que identifica a los archivos ejecutables de MS-DOS también soportados por compatibilidad en las versiones de los ejecutables posteriores de Windows. Disponemos de más información acerca de la estructura de la cabecera PE aquí y aquí.

Las extensiones de los nombres de los archivos ejecutables de Windows son muchas, las más conocidas son .EXE, (el de toda la vida), .DLL (librerías dinámicas) y los .SYS (Drivers). Menos conocidas son .CPL y DPL. En cualquier caso, todos estos tipos de archivos comienzan con los bytes mencionados y tienen la capacidad de ejecutar código en el sistema, para bien y para mal.

Entrando en el contexto de la seguridad, lo normal es que un archivo ejecutable tenga una extensión como las que hemos visto, como EXE, y lo extraño es encontrar un archivo que por su nombre/extensión no parezca ejecutable y su contenido sí lo sea.

Muchos virus utilizan archivos con extensión .TMP (temporal) para alojarse en ellos y "despistar" al observador. Ahora, su contenido comienza con "4d5a", y digo .TMP como si se trata de cualquier otra extensión que no parezca ser un ejecutable, o simplemente que no tenga extensión. Si no nos percatamos de este detalle, el .TMP de turno puede ser abierto por cualquier otro proceso y ejecutarlo... y en ese caso tenemos papeletas para el premio.

Para saber si existe en nuestro sistema algún archivo que por su extensión no denote "ejecución", he preparado un script en perl. Este script trabaja sobre archivos que NO tengan las extensiones típicas de los ejecutables (exe, dll, sys, drv, ocx, com, cpl, dpl) para comprobar si el contenido comienza con "4d5a". Si el script detecta estos bytes al inicio del archivo, indica la ruta y el nombre del archivo en cuestión. En estos casos, habría que buscar información de la extensión de este archivo y comprobar de qué se trata.

Este script da la opción de realizar esta búsqueda en toda la unidad C: incluyendo todos sus subdirectorios (tarda un buen rato), y también da la opción de realizar esta búsqueda en el directorio actual. En ambos casos, el resultado lo dejará en el archivo resultados.txt del directorio donde se ejecute el script.

He pasado este script en tres ordenadores con Windows XP SP3, y no podeis imaginar la cantidad de archivos que existen, que no parecen ejecutables, y sí lo son. En próximos posts intentaré dar más información acerca de este tipo de extensiones como ax, flt, mui, wpc, etc.

El script está disponible en este enlace.

No hay comentarios: