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! ;)
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...
ResponderEliminarMuy chulo el articulo
<¡¡IIICHH ICHCHH PASIIITO!!>
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!
EliminarWiiiichh!! Wiiiichh!! Wiiiichh!! Pasiiitooo!! jajajaja
Germán hazme un hijoooo!!!!
ResponderEliminarDos :)
Eliminarbro en enlace de descargar el programa de Avfucker , el ollydbg ya lo tengo ..responde thanks
ResponderEliminargran 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 ;)
ResponderEliminarSaludos fiera!
Muchas gracias anónimo! me alegra que te gustase la entrada =D
Eliminar