Técnicas de Evasión de Antivirus

¿Cómo funciona los Antivirus?

Los antivirus no dejan de ser programas software cuyo objetivo es proteger los dispositivos en los que esta´n intalados frente a los riesgos de seguirdad que puedan llegar a ellos. En un principio, estas herramientas se basaban en detectar y eliminar los virus que intentaban dañar el sistema, pero con el paso de los años y la evolución que han experimentado las amenazas informáticas, los antimalware modernos incorporan muchas mas funcinalidades que procuran mantener protegido lo más posible su entorno.

Pero aunque el fin que busquen todos los antivirus sea el mismo, existen diferencias fundamentales en la forma de actuar que tiene cada uno en función del modo en que buscan las amenazas para la seguridad.

Antivirus basados en firmas

En el mundo de las herramientas de protección, se conoce con el nombre de firmas a la información sobre los distintos malware conocidos que almacenan las bases de datos de los antivirus.

En este caso, el funcionamiento de los antivirus se basa en buscar dentro de los archivos analizados secuencias de bytes que coincidan con estas firmas conocidas, de modo que detecten las amenazas antes de que se ejecuten en el sistema.

Los creadores de malware, para intentar saltarse estas protecciones, recurren a la técnica conocida como ofuscación, mediante la cual intentan hacer pasar desapercibido el código fuente real de su software para que no sea detectado como una firma potencialmente peligrosa para el antivirus.

Funcionamiento de un antivirus basado en firmas

Creación del Malware => Descubrimiento del Malware => Actualización de la Base de Datos => Sistema Protegido

Antivirus Heurísticos

En este caso, no se buscan características conocidas previamente de los programas maliciosos, sino que analiza el software que se ejeuta en el equipo en busca de patrones anómalos o peligrosos de comportamiento que pueden dañar el sistema.

A diferencia de lo que pasaba con los antivirus basados en firmas, no es necesario que el malware en cuestión haya sido detectado antes, por lo que este tipo de antimalware cobra mucha importancia frente a amenazas nuevas que no han sido incluidas todavía en las bases de datos de los sistemas de protección, lo cual es especialmente sensible teniendo en cuenta la cantidad de malware nuevo que surge cada dia.

Este tipo de análisis resulta más proactivo que los antivirus basados en firmas y nos va a mantener a salvo frente a amenazas muy nuevas, pero por el contrario su uso nos va arrojar un numero de falsos positivos y nos va a consumir muchos más recursos en el sistema para mantenernos protegidos.

Funcionamiento de un antivirus heurístico

Creación del Malware => Análisis de Comportamiento => Sistema Protegido

En definitiva, cada modo de funcionamiento tiene sus ventajas y sus inconvenientes. Por suerte, muchas soluciones de seguridad del mercado conbinan ambos métodos para ofrecernos la mejor protección posible aprovechando las bondades de cada uno de ellos dentro de un mismo producto.

Los antivirus funcionan principalmente mediante la detección de firmas conocidas relacionadas con malware o con las herramientas empleadas para su desarrollo. Metasploit es una herramienta muy conocida, por lo que cuando se genera un shellcode con msfvenom será detectado y bloqueado por prácticamente todos los antivirus. Se pueden modificar las firmas con diversas técnicas que se mencionarán posteriormente, aunque estos cambios generalmente no serán efectivos contra herramientas que basen su detección en análisis del comportamiento.

Esto representa un problema tanto durante la explotación como durante la post-explotación, cuando se intenta desplegar y ejecutar código en el equipo cliente, por lo que será necesario utilizar distintas técnicas tendentes a reducir o evitar completamente la detección. Entre las más comunes se pueden citar las siguientes:

  • Cerrar el antivirus: se trata de una medida extrema que impedirá que detecte los archivos generados por el pentester, pero exponiendo el equipo a malware real. No se debe emplear nunca en acciones de pentesting, sobre todo en entornos de producción. Algunas de las heramientas más utilizados son defendnot o no-defender.
  • Ejecución en memoria: su eficacia se basa en que las posibilidades de detección disminuyen, dado que no se descarga el archivo malicioso en el disco duro. Sin embargo, el riesgo no se elimina del todo y cada vez es más común que sea detectado.
  • Uso de scripts en lugar de ejecutables: en ocasiones se podrá utilizar PowerShell para realizar acciones que no serán detectadas por el antivirus, pero, al igual que en el caso anterior, cada vez es una medida menos eficaz.
  • Compilación manual de un código fuente utilizando diferentes opciones: si las firmas están generadas para una forma de compilar un código fuente, cabe la posibilidad de disminuir la posibilidad detección utilizando parámetros de configuración diferentes.
  • Usar herramientas y payloads propios: es una de las técnicas más eficaces, dado que si el código es totalmente original ningún fabricante de antivirus tendrá firmas.
  • Ofuscación: Modificar el aspecto del código fuente para que la firma varíe por completo sin alterar su funcionamiento básico.
  • Ghost writing: se trata de una técnica de manipulación de código consistente en desensamblar un exploit compilado, añadir o modificar algunas instrucciones en ensamblador que no afecten al funcionamiento del mismo, y volverlo a compilar.
  • Encoders: con la utilización de encoders se modifica el payload original para que las firmas no coincidan con las que detecta el antivirus. Cuanto más popular sea el encoder utilizado, más difícil será evitar la detección.
  • Packers: son aplicaciones que utilizan un algoritmo para generar un archivo ejecutable que contiene los datos comprimidos y el código para descomprimirlos. Al ejecutar el binario, el payload se descomprime y se ejecuta en memoria. Algunas de las packers más utilizados son UPX, FSG, PECompact, o mpress.
  • Binders: estos programas se utilizan para embeber código malicioso en binarios legítimos. Algunos ejemplos son Exejoiner o Exebinder. msfvenom también se puede utilizar para realizar esta acción.
  • Crypters: cifran el ejecutable con el propósito de dificultar el análisis por parte del antivirus. Cuando se cifra un payload con un crypter se genera una parte sin cifrar denominada stub, que es la que se ejecuta en primer lugar. El stub realiza tres acciones: busca el payload cifrado en el binario, localiza la clave de cifrado, y lo descifra directamente en memoria sin que toque el disco. Un crypter bastante conocido es Hyperion.

A pesar de haber enumerado un buen número de técnicas, para tener una mayor probabilidad de éxito es necesario combinar varias de las técnicas anteriores. Existen herramientas que facilitan esta tarea, entre las que se pueden destacar Shellter, The Backdoor Factory, Veil-Framework, Magic Unicorn y Ehowla.

Los diferentes desarrolladores de productos de seguridad utilizan diferentes tecnologías y pueden manejar diferentes firmas, por lo que una técnica que resulte efectiva en un caso podría ser totalmente inútil en otro. Es decir, no existe una herramienta ni técnica mágica, la mejor será la que permita evitar la detección en el entorno y momento concretos en el que se realicen las acciones ofensivas. La correcta identificación del antivirus empleado por la organización resultará de gran importancia para poder realizar pruebas en un entorno de laboratorio.

Un error muy común cuando se realizan pruebas para evadir antivirus es subir los archivos a servicios de análisis de malware como Virus Total. Esto es un error, dado que ese tipo de servicios comparten las muestras subidas con los desarrolladores de antivirus, por lo que aunque no sea detectado en este momento podría serlo en un breve plazo de tiempo. La mejor manera de probar la detección es instalar el antivirus en un equipo no conectado a Internet.

Si deseas profundizar en la implementación técnica de estos conceptos, te recomiendo consultar la guía de Evasión de Antivirus (AV) en HackTricks. Allí encontrarás ejemplos de código reales sobre cómo evadir AMSI en memoria, técnicas de DLL Sideloading y metodologías para eludir entornos de Sandboxing.