Ir al contenido principal

¿Son fiables los antivirus?

Cuando de virus y malware se trata, existen cientos de mitos que se propagan como verdades absolutas por la red, sin que nadie se plantee si son ciertas o no. Algunas de las más manidas son que MacOS o Linux no son vulnerables al malware, o que si no se visitan sitios "raros" no hay peligro. Pero la peor sin duda es pensar que si instalamos un antivirus, estaremos bien protegidos. Vamos a realizar un pequeño experimento que dejará asombrado a más de uno.



¿Cómo funciona un antivirus?


Antes de entrar en harina, conviene tener una somera idea de qué es lo que hace un antivirus para detectar las amenazas. Las dos estrategias más usadas para la detección del malware son, por un lado la detección sintáctica, basada en la búsqueda de patrones (llamados firmas), y la detección semántica, que se basa en el análisis del comportamiento de los programas.
En general, la mayoría de los antivirus se basan en la primera técnica y mantienen una bases de datos de firmas con las que tratan de identificar programas peligrosos.
Cuando el antivirus se dispone a analizar un archivo, compara cada una de sus firmas (o un gran número de ellas) con el software analizado, buscando una concordancia. Si la encuentra, lanzará una alerta indicando que ha encontrado un virus.
¿Qué pasa entonces cuando aparece un nuevo virus? Exacto, como no existe una firma para dicho virus en la base de datos, no será capaz de detectarlo.

Es fácil imaginar cual es, pues, el trabajo de un fabricante de antivirus. Casi el 99% de su trabajo es:

- Localizar nuevos virus.
- Analizarlos.
- Crear las firmas para ese virus o familia de virus.
- Incluirlo en la base de datos del antivirus (esa que descargamos cuando actualizamos el antivirus).

Quizás no te hagas una idea de la titánica tarea a la que se enfrentan los fabricantes de antivirus, pero si quieres hacerte una idea piensa que sólo McAfee encuentra 100.000 nuevos ejemplares de malware cada día. Y esos ejemplares se analizan usando dos técnicas diferentes:

- Análisis estático: Un técnico desensambla el virus y lee su código ensamblador para ver qué hace.
- Análisis dinámico: Se ejecuta el virus en un entorno controlado para ver cuáles son sus efectos en el sistema.

Si estás pensando que es imposible analizar tantos virus estás en lo correcto, por lo que las empresas de antivirus desarrollan herramientas más o menos automatizadas basadas en técnicas de detección semántica. Desgraciadamente, estas técnicas son más lentas que la detección por firma, lo que las hace inviables para usarlas en un antivirus comercial.
En cualquier caso, dado el número de amenazas que aparecen cada día y a la tremenda batalla a la que se enfrenta el fabricante (piénsalo la próxima vez que decidas descargar un antivirus sin pagarlo), tu antivirus siempre irá por detrás de los nuevos virus que van apareciendo.


¿Es posible engañar a un antivirus?


Por desgracia, la respuesta es sí. Sólo hay que modificar algunas de sus partes sin modificar su comportamiento para que la firma del antivirus ya no coincida. ¿Cómo se hace esto? hay varias técnicas (conocidas como técnicas de evasión).
La más habitual, pero no la única, es la ofuscación del programa ejecutable. Esto consiste en modificar el programa de forma que mantenga su funcionalidad intacta, mientras que su código es diferente. Algunas formas de conseguir esto son:

- Intercambiar registros: Por ejemplo si tenemos el siguiente código (no te preocupes si no lo entiendes, lo importante es la idea).


mov 0x0,%eax
add 0x10,%eax


podemos cambiarlo sin modificar su comportamiento por el siguiente.


mov 0x0,%ebx
add 0x10,%ebx


- Cambio por instrucciones equivalentes: Sustituir una instrucción o un grupo de ellas por otras equivalentes. Por ejemplo, el código anterior puede sustituirse por el siguiente si cambiar su comportamiento.


xor %eax,%eax
lea (%eax+0x10),%eax


- Reordenación de código: Cambia de lugar bloques de código, incluso funciones enteras pero manteniendo el flujo de ejecución haciendo uso de instrucciones JMP.

- Cifrado: Cifra el código ejecutable. Obviamente hay que añadir al ejecutable una rutina de descifrado. Hay utilidades que automatizan esta tarea. Son los llamados packers o encoders. Podemos considerar que la compresión del ejecutable es otra forma, parecida al cifrado, de ofuscar el código.

Existen más técnicas, pero ya con éstas nos hacemos una buena idea de en qué consiste la ofuscación de un programa ejecutable, y de cómo repercute esto en las posibilidades que tiene el antivirus para detectarlo.


Poniéndolos a prueba


Vamos a ver si realmente los antivirus son tan fáciles de engañar y para ello vamos a coger un malware bien conocido por los antivirus y vamos a tratar de colárselo al mayor número de ellos posible.
Se trata del malware Trojan-Ransom.Win32.BlueScreen.gc, que como vamos a ver seguidamente, no es un problema para la mayoría de los antivirus comerciales.
Vamos a subir una copia del virus a virustotal.com, que como muchos sabréis es una web donde podemos subir un fichero sospechoso para que sea analizado por una gran cantidad de antivirus. Veamos que ocurre.


Como puede observarse, lo han detectado 42 de 48 antivirus. Sorprende que aún haya algunos antivirus que no sean capaz de detectarlo, pero bueno, la mayoría no tienen problema.

Vamos a coger el mismo virus y vamos a tratar de ofuscarlo para ver si somos capaces de colárselo a más antivirus. Vamos a usar la técnica del cifrado del ejecutable que ya hemos visto más arriba. Para ello me voy a valer de una utilidad llamada UPX ampliamente disponible. Es decir, no se trata de ningún software oscuro para hackers, sino que se trata de una herramienta que comprime un ejecutable, tal y como hacen otras utilidades como winzip o winrar.


En la imagen se observa cómo hemos creado un nuevo ejecutable llamado newTrojan.exe usando UPX. Vamos a ver qué tal se portan ahora los antivirus.


Con esta simple e inocente compresión (recordemos que el programa sigue funcionando exactamente igual) hemos conseguido que sólo 27 de los 48 antivirus comerciales más usados lo detecten. ¿Sorprendido?

Hay que tener en cuenta que UPX es una utilidad creada en el año 1998 y, en teoría, fácilmente detectable. UPX deja una firma clara y bien conocida en los programas que comprime facilitando que el antivirus deba ser capaz de descifrarlo para examinar su interior. De hecho UPX usa el mismo método de compresión que winzip.
Dicho esto, y si estas pensando que 27 de 48 no está tan mal siempre que tu tengas instalado uno de los 27 antivirus que detectaron el malware, te diré que existen herramientas mucho más avanzadas que UPX para ofuscar programas ejecutables. Algunas de ellas, que me tomaré la licencia de no nombrar aquí, son capaces de hacer este mismo malware indetectable para los 48 antivirus de virustotal.

Como conclusión final, me gustaría dejar claro que tener un antivirus siempre será mejor que no tenerlo, y mientras más actualizado, mejor. En cualquier caso, ten presente que el mejor antivirus es el sentido común.
Uses el sistema operativo que uses, procura trabajar en el día a día con una cuenta de usuario sin privilegios de administrador. No ejecutes NADA de lo que no estés 100% seguro de su procedencia, y mucho menos cracks, keygens y programas descargados de redes P2P.
¡Ah! Y procura no rootear tu móvil si no es por una muy buena razón.

Comentarios

Publicar un comentario

Entradas populares de este blog

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad

Scripts en NMAP

Cuando pensamos en NMAP, pensamos en el escaneo de puertos de un host objetivo al que estamos relizando una prueba de intrusión, pero gracias a las posibilidades que nos ofrecen su Scripting Engine , NMAP es mucho más que eso. Antes de continuar, un aviso: algunas de posibilidades que nos ofrecen los scripts de NMAP son bastante intrusivas, por lo que recomiendo hacerlas contra hosts propios, máquinas virtuales como las de Metasploitable, o contrato de pentesting mediante. Para este artículo voy a usar las máquinas de Metasploitable3 . No voy a entrar en los detalles sobre el uso básico de NMAP, ya que hay miles de tutoriales en Internet que hablan sobre ello. Lo cierto es que NMAP tiene algunas opciones que permiten obtener información extra, además de qué puertos están abiertos y cuales no. Por ejemplo, la opción -sV trata de obtener el servicio concreto, e incluso la versión del servicio que está corriendo en cada puerto. Otro ejemplo es la opción -O, que intenta averiguar el