30 mayo 2012

Todo sobre Flame (Qué es y como detectarlo)

En el día de ayer pudimos ver incontables noticias y artículos acerca de un nuevo malware, llamado Flame/Flamer/SkyWiper, con una sofisticación técnica que incluso supera a Stuxnet o DuQu y que, igualmente, había afectado a países de oriente medio.

Aparentemente, el troyano tiene como misión labores de inteligencia, y parece que está orientado a países de oriente medio.

Con este post simplemente quiero hacer una recopilación de todos los datos que se han ido dando (muchos de ellos sin confirmar) para poder tener una visión más completa del asunto.

El troyano es bastante complejo (se han detectado hasta cinco tipos de cifrado, unos más robustos que otros, p.e boot32drv.sys hace un XOR con 0xFF) y si a eso añadimos la ofuscación del código, se estima que el estudio y comprensión de Flame les va a llevar años a las casas de antivirus.

Como ya he comentado anteriormente, se trata de un malware de una sofisticación técnica comparable a la encontrada en Stuxnet y DuQu (forma de propagación, objetivos concretos evitando un ataque masivo, posible uso de vulnerabilidades de tipo 0day, etc).

A pesar de que el concepto de Flame es diferente frente a los otros dos (se puede caracterizar como una toolkit configurable para cada objetivo), se cree que puede tratarse de un proyecto paralelo del mismo contratista detrás de ellos.

Para darle credibilidad a esta postura, se hace hincapié en que utiliza las mismas vulnerabilidades para su propagación (usb, vulnerabilidades en impresoras print_spooler - MS10-061) y por tanto, que tuvieran ambos equipos de desarrollo acceso al mismo "kit de exploits".

Aun así, en el caso de Flame estos mecanismos de propagación están deshabilitados por defecto para evitar una infección masiva y que pudiese ser detectado (aunque no se descarta que en las primeras versiones estuviera habilitado y a raíz de que se parchearan, se deshabilitaran para evitar ser detectado por los antivirus actualizados). Flame es capaz de infectar equipos Windows 7 up2date, por lo que es posible que incorpore también exploits de tipo 0day (como en el caso de Stuxnet). También se maneja la posibilidad de que se aproveche de un grupo de vulnerabilidades críticas (MS10-033) en la descompresión de medios.

Si atendemos al timeline del descubrimiento del malware, podemos observar como se descubrió hace solamente dos semanas, cuando Kaspersky estudio los reportes de abril sobre un malware en Irán que estaba atacando empresas energéticas del país. Aun así, como comenta Sergio de los Santos en su análisis en Una al día, la primera muestra en VirusTotal data del 15 de mayo de 2011.

Con respecto a las muestras de Irán y Líbano, nos encontraríamos con fechas del 2010. Además, se han descubierto en foros muestras del fichero wavesup3.drv que datan del 2007. A pesar de las fechas que ha estado manejando Kaspersky, ya a principios de mayo MAHER (el CERT nacional iraní) ya compartió con algunas empresas e instituciones una aplicación para detectar si el sistema estaba infectado con este malware. Según comentaron ayer, están a la espera de publicar una herramienta que permita la eliminación de Flame en un sistema infectado.

Con respecto a la infección, Kaspersky maneja cifras en torno al millar de equipos infectados (se trata de una estimación en base al número de sus clientes que ha sido infectado y extrapolando dicho dato a las cifras de los clientes de otras casas de antivirus), y como ya se ha comentado, prácticamente localizados en países de oriente medio. A pesar de esta focalización de los sistemas infectados, no parece que haya ningún objetivo como en el caso de Stuxnet 




Como ya se ha dicho anteriormente, se trata de un malware muy pesado (en torno a los 20mb, frente a los 500kb de Stuxnet), y esto es debido a la cantidad de módulos que puede incorporar a la instalación base y que lo hace configurable para cada objetivo. Realmente, el core del malware pesa 6mb que incluye una media docena de módulos que descomprime, descifra y, una vez cargados, queda a la espera de las ordenes de los servidores de comando y control (aunque mientras, ejecuta las tareas de esos módulos como se comentará más adelante).

Se ha encontrado otra variante de Flame que pesa únicamente 900kb y que, al cargarse, intenta descargar los módulos. Por lo tanto, queda claro que deja abierto un backdoor en el sistema infectado a través del cual se comunica con el servidor, (siempre a través de protocolos cifrados), descarga e instala nuevos módulos y envía la información obtenida.

A pesar de no tener hardcodeado un 'time-to-death', si que dispone de un modulo de 'auto-eliminación' encargado de borrar todo el rastro del malware, ya sean sus binarios o toda la información que haya ido recopilando (capturas de pantalla, grabaciones, tráfico).

Este troyano tiene varios puntos que llaman bastante la atención: 
  • Hay muchas partes escritas en LUA (exótico lenguaje de programación)
  • Emplea el bluetooth del sistema para identificar otros dispositivos
  • Tiene capacidad para grabar conversaciones empleando el micrófono del sistema
  • Permite tomar capturas de pantalla en función de que aplicaciones estén en uso (entre ellas, aplicaciones de mensajería instantánea)
En base a toda la información que ha sido publicada hasta el momento, he realizado un pequeño script que comprueba si tu sistema está o no infectado con Flame.

La aplicación comprueba concretamente la existencia de una serie de ficheros tanto en el directorio windows/system32 como en el windows/temp, la existencia de unas carpetas específicas en "Common Files\Microsoft Shared" y si ha modificado entradas en el registro (concretamente la clave Authentication Packages en "SYSTEM\CurrentControlSet\Control\Lsa\"




La herramienta se puede descargar desde aquí

Las fuentes consultadas para realizar este recopilatorio han sido:

[1] Una al dia
[2] MAHER, Iranian National CERT
[3] Wired
[4] Crysys
[5] Securelist I / Securelist II

Artículo cortesía de Luis Delgado

    18 comments :

    Juan dijo...

    Hola Luis,
    Una preguntilla, referente al script que has creado miras en el registro de windows y buscas la clave Authentication Packages pero exactamente que verificas en este punto?
    Muchas gracias de antemano.

    Un saludete,

    Luis Delgado dijo...

    Hola Juan,

    Lo que se hace es comprobar si esa clave del registro ha sido modificada y su valor contiene 'mssecmgr.ocx' o 'authpack.ocx' lo cual implicaría que el sistema está infectado por Flame.

    Un saludo.

    As dijo...

    Habiendo 1000 equipos infectados en todo el mundo no tiene mucho sentido el script, pero oye ahí queda.

    silverhack dijo...

    #ara As
    Con que sólo uno de los dueños de esos 1000 equipos lea este blog (Que lo lee mucha gente) ya está sobradamente justificado la creación del script, del post, y del curro que le habrá llevado a Luis el plasmarlo todo...
    Además, sólo por el hecho de investigar, ya merece la pena pegarle un vistazo al script, que, de momento, con sólo leerlo te haces una idea de lo que te puede meter en un equipo...

    Luis Delgado dijo...

    El script se ha hecho para que cualquiera cómodamente pueda comprobar si en su equipo hay alguno de los ficheros que les investigadores están asociando con sistemas infectados con Flame.

    Si bien la propagación ha sido bastante controlada (sin llegar a los extremos de DuQu), creimos oportuno adjuntarlo al post como valor añadido del mismo.

    Luis Delgado dijo...

    Perfectamente explicado, gracias crack!

    Juan dijo...

    Gracias :)

    Lorenzo_Martinez dijo...

    Absolutamente de acuerdo contigo Silverhack... (aunque esté hecho en Python ;D)

    silverhack dijo...

    #Luis eres un máquina!
    #Lorenzo no me piques que sabes que soy capaz de "portar" lo hecho por Luis en Batch... :P

    Como lectura adicional, recomiendo leer el post de Jaime Blasco sobre la "edad" del mencionado Malware. Lectura muy interesante...
    http://labs.alienvault.com/labs/index.php/2012/how-old-is-flame/?utm_source=rss&utm_medium=rss&utm_campaign=how-old-is-flame

    Notengo dijo...

    Este script detecta en sistemas de 64 bits?

    Luis Delgado dijo...

    El problema con sistemas 64bits seria la carpeta System32 y Program_Files, por lo que estoy a la espera de que confirmen si se almacena en "el directorio x86" o no, y en base a eso utilizar unas variables de entorno.

    En definitiva, funciona en 32bits y en 64bits no está confirmado porque no están confirmados los directorios en los que se almacenan los ficheros.

    @leXandro dijo...

    ...disculpen
    como ejecuto este script  la verdd  ...no se nada de Phyton
    ni naaaaa
    soy  nuevecito

    Cheli dijo...

    Hola,
    Gracias por el script, pero no logro descargarla (en windows 7). Al pinchar en el nombre del archivo se me abre en el navegador (chrome), y al hacer botón derecho y guardar enlace como, me pone que 'interrumpido'. ¿Cómo puedo descargarlo?
    Graciaaaaaas !

    Luis Delgado dijo...

    He puesto que se fuerze la descarga, ahora ya no te debería dar problemas

    Cheli dijo...

    Mil gracias majo !

    pez dijo...

     Hola Luis,
    Muchas gracias por investigar, y por compartir ;-)
    La verdad es que no piloto python, por eso te quería comentar que tras ejecutar el script visualizo lo que te copio abajo. ¿Qué puedo hacer?.
    Muchas gracias


    C:\>python flame_detector.py --help
      File "flame_detector.py", line 63
        print "You are infected!"
                                ^
    SyntaxError: invalid syntax

    C:\>python flame_detector.py --check
      File "flame_detector.py", line 63
        print "You are infected!"
                                ^
    SyntaxError: invalid syntax

    Dea dijo...

    http://www.diarioti.com/noticia/Bitdefender_lanza_una_herramienta_gratuita_para_la_eliminacion_de_Flamer/32031

    Dea dijo...

    Bitdefender lanza una herramienta gratuita para la eliminación de Flamer

    http://www.diarioti.com/noticia/Bitdefender_lanza_una_herramienta_gratuita_para_la_eliminacion_de_Flamer/32031