12 mar 2013

Técnicas de evasión de antivirus (Parte I)

Buenas a todos, la pasada semana Pablo y un servidor tuvimos el placer de participar en la cuarta edición de uno de los congresos de seguridad más importantes a nivel nacional y europeo, la RootedCon. En nuestra intervención presentamos la nueva versión de Flu-AD, de la que os hablaremos largo y tendido en próximos articulos. A lo largo de la presentación os hablamos de varias técnicas de evasión de las que habíamos hecho uso para que Flu-AD lograse evadir los sistemas antivirus. Ya que la charla gustó mucho, nos ha parecido interesante comenzar una nueva cadena de artículos para hablar sobre técnicas de evasión de antivirus, para lograr hacer indetectables malwares, shellcodes, etc.

Hoy daremos comienzo a la cadena poniendo como ejemplo a nuestro querido Flu, aunque en este caso no utilizaremos Flu-AD, si no la versión pública desarrollada en .Net que podéis descargar gratuitamente desde aquí.

Las versiones públicas de Flu han ido siendo detectadas por bastantes antivirus según las hemos ido publicando. En la mayoría tardaron varios meses en ser detectadas y en otras (sobretodo cuando las hemos contado en grandes eventos...), tardaron bastante menos.

Para la demo que hoy veremos vamos a hacer uso de la versión de Flu b0.4 (bastante antigua) y que nos será muy útil para ilustrar la primera de las técnicas que os contaremos, ya que esta versión de Flu es detectada por la mayoría de los antivirus de Virus Total.

Si subimos Flu b0.3.1 (tal cual viene compilado por defecto) a Virus Total, lo primero que veremos es que alguien ya lo ha subido con anterioridad (a la gente le suele faltar tiempo... :-) )

Este ejecutabale viene compilado por defecto apuntando a localhost, por lo que no puede usarse evidentemente para infectar a nadie, porque la conexión la intentaría hacer con la IP 127.0.0.1 (un detalle insignificante... }:-) ).

Flu-Consejo: Si queréis tener un malware indetectable, NO lo subáis a Virus Total, porque en unas horas todas las casas de antivirus recibirán una bonita muestra de tu malware

Para la segunda prueba de hoy, vamos a generar un nuevo bot con el generador de bots, apuntando a otra IP, de esta manera cambiará el hash del exe final. Tras subir este nuevo archivo a Virus Total, se reducírá el número de antivirus que detectan esta versión antigua de Flu:

Como vemos, los antivirus que no son capaces de detectar esta nueva muestra, o se limitan a utilizar todo el hash del exe como "firma" del malware, o su única firma se situaba al final del exe, en la zona donde Flu almacena de manera cifrada la dirección del BotMaster (que es lo único que hemos variado desde el generador de bos), o ambas cosas.

Finalmente vamos a abrir el exe con un editor hexadecimal y vamos a modificar un solo byte (vamos a quitar un byte a ese bonito texto de David Hasselhoff que seguro que algún cachondo ha plantado una firma ahí :P). Tras subirlo hemos podido comprobar como solo 18 antivirus son capaces de detectar esta muestra (de los 40 iniciales, lo que reduce la detectabilidad a la mitad y sin hacer casi nada):

Las casas de antivirus suelen ir a matacaballo generando firmas (es normal y comprensible, ya que reciben muchas muestras al día, yo mismo me he tenido que pegar más de una vez con el servicio de la India de una popular casa de antivirus para que me generasen un DAT para una muestra que se estaban comiendo), y no suelen preocuparse de generar varias firmas de un malware de regiones determinadas del exe, hasta que este no es reportado por un alto número de usuarios (cuando ya suelen tomarlo como una amenaza seria)

Esto es todo por hoy, a lo largo de esta cadena os mostraremos varias técnicas conocidas de evasión, y algunas más curiosas, y dejaramos en detectabilidad 0 algún que otro juguete. Ni que decir tiene que podéis colaborar envíandonos artículos para esta cadena, o proponiendonos ideas para contaros en ella. Estoy seguro que entre todos haremos una cadena bastante interesante :)

Saludos!

3 comentarios:

  1. Saludos, les comparto otra manera de hacer indetectable Flu:1. Al momento de la compilación, usar una herramienta para la ofuscación de código, encripción de cadenas de las variables, compresión y encriptación de recursos. En el propio framework se tiene una buena herramienta llamada DotFuscator, que en su versión opensource nos ayuda a lograr el primer objetivo.2. Crear un ensamblado con pinta de legítimo y un ícono no detectable para el binario. Increíble, pero la mayoría de detecciones de un Avira se pasan con esto.3. Ejecutar el binario en memoria, no desde el disco. Esto se logra con un stub, programando un trozo de código que encripte el binario y al momento de ejecutarlo lo pegue en memoria, lo desencripte en memoria y lo corra desde allí. Es lo que hacen los famosos Crypters.Con esto podremos mantener a Flu indetectable por mucho tiempo y de una forma muy profesional.

    ResponderEliminar
  2. Gracias @Babilonio por las ideas :), sobre eso nos gustaría hablar en próximos posts.Un abrazo!

    ResponderEliminar
  3. Por dios, enséñennos a hacer eso a los aficionados :)

    ResponderEliminar