sábado, 2 de febrero de 2013

Evasión de firmas antivirus condicionales


Durante este pasado mes de Enero, me he dedicado a afinar mi herramienta ParameterFuzz, dentro de poco la tendréis disponible como descarga junto a nuevas mejoras añadidas, como es una herramienta Spider y un Encoder para facilitar este tipo de auditorías. No obstante, tenía que encargarme antes de un tema, el cual corrobora que las compañías antivirus, se tiran al barro con detección de firmas “condicionales”.  Y es tan solo agregar un módulo BAS, con algún tipo de algoritmo de cifrado, junto con CSocketMaster para la realización de conexiones y… ¡Toma firma antivirus!

Ciertamente, que utilice Avira Antivirus y no otra solución, no viene a ser más que por la propia experiencia en evasión de firmas y es que este antivirus configurado con heurística en nivel alto, si de algo peca es de falsos positivos… pero “no se escapa ni uno”, que ya decidiré yo mismo que hacer con el “supuesto malware”.  Os preguntareis a que me refiero con eso de las firmas condicionales, no es ni más ni menos que una alerta antivirus, por cada ejecutable que cumpla ciertas condiciones. En mi caso, para realizar el bypass a la firma genérica de TR/Spy.Gen, me ha tocado realizar diferentes pruebas del funcionamiento de su rutina.

Según la descripción de Avira, TR/Spy.Gen es:

“Una rutina de detección genérica, creada para detectar las características comunes de ciertas familias, presentadas en varias versiones.

Esta rutina de detección especial ha sido desarrollada para detectar las versiones aún no descubiertas, y será mejorada constantemente.


Al ser una firma basada en características comunes de una familia y no en una firma creada para un malware en cuestión, no bastará con romper la firma, sino el funcionamiento del ejecutable para llevar a cabo una buena manipulación.
En primer lugar quise ver con AVfucker, cuáles eran los Offsets desde los cuales la firma necesitaba tener presente que ParameterFuzz era un malware.


Llenando espacios de 1.000 Bytes con ceros, podría generar 2047 ejecutables, los cuales alguno dejaría de ser detectado, con el fin de acorralar la firma. Aunque pensándolo mejor, lo hice con 10.000 Bytes, y es que ParameterFuzz empieza a engordar…

Como muestra la siguiente imagen, de los 128 archivos que fueron analizados, 105 habían sido detectados como malware, los restantes me darían juego para encontrar la firma.


Tras varios procesos, del grupo de aquellos que no contenían firma, decidí utilizar el Offset más bajo del ejecutable, del 15.200 al 15.300, ahora sí, tan solo 1 Byte… igual a 100 nuevos archivos para analizar en busca de firmas.


Otra pasada con el antivirus de nuevo… y el resultado fueron 5 archivos indetectables, de Offsets consecutivos y casi idénticos al original, salvo en un 1 byte que rompía la firma de cada uno de ellos. Ninguna de las 5 muestras eran funcionales, con lo que nada mejor que pasarlas a Ollydbg, con el objetivo de ver la parte del código afectada.

Decidí seleccionar el Offset 15.264 para empezar, ya que era una cadena consecutiva la detectada. Así que pasando el decimal 15.264 a hexadecimal me quedaría con 3BA0.


Sorpresa la mía, fue encontrarme con que justo el Entry Point de la aplicación, era el detectado y desde 3BA0 hasta 3BA4, era el espacio ocupado por la firma y por las dos primeras instrucciones hasta 3BA5.


Si leyeron mi anterior entrada moviendo el Entry Point, no tuve más remedio que realizar la migración del Entry Point a otra dirección de memoria. Pero aquí no termina todo, sino que después de realizar el cambio, Avira Antivirus me premiaba con otra firma, TR/Crypt.XPACK. Pensé entonces en introducir código basura o simplemente unos NOP entre ambas instrucciones, con el objetivo de partir la firma y habiendo movido con antelación el Entry Point… ¡pero nada!  Una nueva firma llamada HEUR/Malware, aparecía gracias a mi paranoica configuración.

Un silencio y cara de otro, me conmovió enelpc¡nada es coña!. Se me ocurrió que posiblemente, el hecho de que el Entry Point siempre recibiese como primera instrucción un PUSH, junto a todas las demás condiciones que hacían pensar que ParameterFuzz fuese un malware, podía hacer persistir la firma independientemente de la zona de memoria en donde empezase la aplicación.
Así que copié ambas instrucciones, y las incluí en un hueco dentro de la sección ejecutable.


Evitando la modificación de la dirección de memoria del Entry Point, llené de NOP el hueco de ambas instrucciones y agregué en su lugar, un simple salto JMP hasta el PUSH de inicio.


De esta manera, la condición de que la primera instrucción fuese un JMP, evitaría la rutina de detección del antivirus.


Y ya podría lucir mi ParameterFuzz v1.4, sin tener que agregarlo a las excepciones de Avira Antivir.


No obstante, me pondré en contacto con Avira para tratar de evitar la molestia, ya que no es la primera vez que me pasa algo como esto con un software “inofensivo” y tengo que comunicarlo… ¡al menos que le pongan un nombre bonito en plan Para-Meter-HackTool!

Saludos 4n4les! ;)

7 comentarios:

  1. Que cosa más extraña no?, no debería detectarlo como malware aunque tuviera un push como primera instrucción. De hecho muchos programas hacen eso y no salta como firma. ¿Que tienes en memoria en la posicion 0x42e420 cuando vas a hacer el push?, a ver si va a ser por eso...

    Muy chulo el articulo
    <¡¡IIICHH ICHCHH PASIIITO!!>

    ResponderEliminar
    Respuestas
    1. Que pasa Manu!! Realmente que la primera instrucción sea un PUSH no crea la firma, de lo que hablo en el post es del número de condiciones necesarias para que se cumpla la rutina de detección de la firma TR/Spy.Gen. Existen varios puntos del ejecutable, en los cuales modificando un simple Offset, se rompe la detección. Si quieres te lo paso y le echas un vistazo!

      Wiiiichh!! Wiiiichh!! Wiiiichh!! Pasiiitooo!! jajajaja

      Eliminar
  2. Germán hazme un hijoooo!!!!

    ResponderEliminar
  3. bro en enlace de descargar el programa de Avfucker , el ollydbg ya lo tengo ..responde thanks

    ResponderEliminar
  4. gran post ;) tengo que leerlo mas detenidamente, el pu.o avira siempre tan mamon :P cuidado con los "informes automáticos" a ver si te lo van a firmar, pero viendo como lo has evadido supongo que eso ya lo tendrás controlado ;)
    Saludos fiera!

    ResponderEliminar
    Respuestas
    1. Muchas gracias anónimo! me alegra que te gustase la entrada =D

      Eliminar