Hace tiempo que quería publicar un documento que explique someramente como se crean las firmas para los antivirus. Es un tema complejo e interesante, los antivirus salvo excepciones no son dados a promulgar sus técnicas al común, ya sea por motivos de seguridad o por motivos económicos.
En este pequeño artículo voy a resumir las técnicas empleadas por los antivirus para la creación de firmas, dejando a un lado las detecciones por heurística.
Si no tienes ni idea de que es una firma puedes empezar leyendo aquí.
Las firmas de los antivirus forman en su conjunto una base de datos que el antivirus emplea para identificar ficheros peligrosos, cuando un antivirus escanea un archivo en busca de virus o troyanos lo que hace es buscar unos patrones o firmas en los archivos, estos patrones o firmas han sido construidos previamente tras el análisis en laboratorio del virus o troyano en cuestión.
Veamos paso a paso como generar una de estas firmas, tal como lo harían en un laboratorio antivirus, aprendiendo así un poco más sobre el funcionamiento de estos programas.
Lo primero que hace el antivirus al analizar un archivo es determinar el formato de dicho archivo, es decir, identificar el archivo como un EXE, una DLL, un BAT, un .COM etc. pues dependiendo del tipo de archivo nuestro antivirus trabajará de forma diferente.
Imaginemos que el antivirus va a analizar un archivo .exe y que ha determinado que su estructura corresponde con PE (portable ejecutable), una vez que el antivirus sabe que estructura debe tener el archivo entonces pasará a realizar un análisis de dicha estructura.
Por ejemplo tratará de determinar la información básica de todo PE como su Entry Point, el número de secciones, la TimeDateStamp, la ImageBase, y todos los datos básicos que están definidos dentro del propio archivo.
Después analizará todas sus secciones, buscando cualquier indicio de que el archivo está empacado para tratar de desempacarlo. Si logra desempacar el archivo el análisis continuará entonces sobre el archivo desempacado y no sobre el original, de manera que repetirá todas las acciones desde el principio (tipo de archivo, análisis de sus secciones y cabecera, etc.).
Si no logra desempacarlo entonces el análisis se seguirá realizando sobre el archivo empacado.
Algunos antivirus comprueban también si el archivo está unido a otros archivos (bindeado) o si contiene dentro otro archivo (por ejemplo como recurso). Si determinan que esto está sucediendo entonces separan los archivos y los analizan desde el principio por separado.
Igual hacen con los archivos encriptados, si detectan el tipo de crypter tratarán de descifrar el archivo para analizarlo sin el cifrado.
Si no fueran capaces de desempacar, descifrar, separar, entonces los del laboratorio pondrán las firmas al archivo empacado, cifrado, unido.
Este proceso de desempacado lo puede realizar el antivirus automáticamente, o lo realizan manualmente en el laboratorio al analizar las muestras.
Ahora veremos las soluciones más sencillas que se han implementado para crear firmas para los antivirus:
Checksum MD5
Tan sencillo como calcular el MD5 del archivo. Es un método sencillo pero muy facil de romper. Con tan solo cambiar un byte del archivo original conseguiremos que el antivirus no detecte nada. Por lo que nuestro antivirus nunca puede usar este método de manera exclusiva.
Comparando la suma de comprobación original con la obtenida al analizar el archivo podemos comprobar si es o no el mismo archivo. Como digo esta técnica es muy floja pero es la más básica.
Existen otros algoritmos ampliamente extendidos que se emplean igual que MD5, como SHA o CRC.
Para que este método sea algo más efectivo es preferible basar la firma no en la suma de comprobación del fichero completo sino de algunas de sus partes, por ejemplo de alguna de sus secciones.
Firmas del cuerpo
En estas firmas lo que hacemos es crear firmas en formato hexadecimal, una firma sería una cadena de números hexadecimales tomados del cuerpo del archivo analizado. Esa cadena puede buscarse en todo el cuerpo o en una posición específica representada por EOF - n donde EOF es el final del archivo y n el número de bytes que debemos retroceder para buscar la cadena. Aunque pueden usarse otras referencias para marcar la posición como EP + n o cualquier cosa que se les ocurra.
Pueden obtenerse varias firmas del archivo y realizar operaciones con ellas, por ejemplo comprobar que existen 2 ó más firmas, si no existe alguna, determinar que existe un número concreto de secciones para buscar las firmas en el cuerpo, etc.
Firmas en los recursos
Algunos archivos maliciosos siempre tienen por ejemplo el mismo icono, por lo que puede analizarse tanto la suma de comprobación del recurso como una cadena hexadecimal del mismo. Esta es una sección predefinida llamada .rcrs
Firmas en los metadatos
Los metadatos de un archivo PE están en un lugar específico de los archivos, en los recursos del archivo y se localizan con el nombre VS_VERSION_INFORMATION donde podemos extraer información valiosa para identificar el archivo.
Nuevamente podemos emplear una suma de comprobación o una cadena de números hexadecimales.
Como ven no sería muy complicado crear nuestro propio antivirus que realice un escaneo bajo demanda del usuario y mediante una base de datos de firmas comprobar si el archivo es malware o no. Y por supuesto un buen método combinado de sumas de comprobación y firmas en el cuerpo de los virus.
Incluso sería buena idea dotarlo de firmas blancas, es decir, firmas que aseguren que no es un virus.
La mejor manera de elegir firmas del cuerpo del virus es analizándolo con un depurador como el Olly Debugger y buscando aquellas rutinas propias de un virus, troyano o lo que sea el malware en cuestión.
Los antivirus actuales emplean más tipos de análisis, pues el análisis estático no es del todo eficaz debido a las múltiples modificaciones que se le pueden hacer a los archivos. Por ello tienen firmas referidas al comportamiento del programa, de modo que analizando sus acciones (en una especie de sandbox o entorno seguro) determinan si el programa es potencialmente peligroso.
Y aquí termino. No es mucho, pero son ideas que pueden servir para entender un poco los antivirus.
No hay comentarios:
Publicar un comentario