jueves, 11 de junio de 2015

Troleando a VirusTotal

VirusTotal

Cualquier profesional o aficionado a la seguridad informática conoce qué es VirusTotal. Actualmente dentro del grupo Google, esta empresa tiene un germen español, y más concretamente malagueño. Lanzado en 2004 como un servicio por la empresa malagueña de seguridad informática Hispasec Sistemas, fue finalmente adquirido por Google en 2012. A pesar de ello, han mantenido su sede en Málaga.

Logo de VirusTotal
Actualmente es un servicio gratuito que permite verificar la existencia de virus y malware en ficheros y enlaces web, utilizando para ellos los motores de búsqueda de una gran cantidad de antivirus. Cada vez que subimos un fichero, o un enlace, VirusTotal busca en su base de datos si dicho archivo o enlace ha sido escaneado anteriormente, ofreciéndonos la posibilidad de ver los resultados del escaneo anterior o bien volver a lanzar los motores de búsqueda sobre el archivo o enlace objetivo.

El resultado del escaneo es un listado de los motores antivirus utilizados, junto con el resultado que han dado cada uno de ellos. Un servicio que ofrece a cualquier usuario normal escanear un fichero con decenas de antivirus a solo un par de clicks, y sin necesidad de tener instalado localmente ningún antivirus. Aunque también lo pueden usar los "chicos malos" para verificar si sus creaciones serían detectadas o no por las versiones actuales de los motores antivirus, o para descubrir a partir de que momento empiezan a ser detectadas.

Poco a poco VirusTotal ha ido creciendo, y aunque de cara al usuario normal el servicio prácticamente no ha cambiado, para la comunidad de investigadores de seguridad informática ha ido incorporando poco a poco funciones adicionales, e incluso una API para facilitar el acceso de manera automatizada tanto al servicio como a la información que VirusTotal almacena en su cada vez más grande base de datos. No hay más que ver las estadísticas que ofrece para imaginar el tamaño del asunto.

Así, de la misma manera que los "chicos malos" pueden usar el servicio para ir refinando poco a poco sus creaciones y disminuyendo las detecciones, la industria antivirus vigila las muestras subidas a VirusTotal para pulir a su vez su motores antivirus y actualizar sus ficheros de firmas. En cierta medida, VirusTotal se ha convertido en un escenario virtual en el que creadores de virus y de antivirus juegan al gato y al ratón.

Escaneando muestras

El punto de entrada al servicio es mediante un fichero que tenemos en nuestra máquina y que subimos al servicio de escaneo, o bien mediante un enlace que facilitamos al servicio, y son los propios servidores de VirusTotal los que acceden a dicho enlace para escanear los contenidos que devuelve. Ambas formas de entrada están disponibles tanto desde la interfaz de la página web como desde la propia API del servicio.

Interfaz web de VirusTotal
Si se trata de verificar algún contenido con presencia online, enviar el enlace es una opción mucho más cómoda y sin tener que descargar previamente a nuestra máquina el contenido sospechoso, tanto si hacemos el proceso manualmente como si se realiza automatizadamente por una aplicación que interactúe con VirusTotal a través de su API.

Para nuestras pruebas, en lugar de jugar con fuego y usar una muestra de un "bicho" real, vamos a usar un vector de test que está ampliamente admitido en la industria antivirus para comprobar el funcionamiento de sus productos, y que se conoce como archivo EICAR. Es una cadena ASCII de 68 caracteres que debería hacer saltar las alarmas de cualquier antivirus que se precie, y que nos mostrará una amenaza del tipo 'EICAR test' o similar. Y si no lo hace indica que hay algún problema con la configuración del antivirus, o que quizás deberíamos cambiar de producto antivirus.

Como no podía ser de otra forma, dicho archivo ya se encuentra en la base de datos de VirusTotal, que nos muestra qué motores antivirus lo detectan y qué amenaza muestran.

Objetivo

Suponemos que somos unos "chicos malos", y queremos desplegar un sitio web desde el que queremos distribuir una aplicación con malas intenciones. Mucha gente, e incluso puede que algunas herramientas automatizadas de seguridad, lanzarán contra VirusTotal el enlace de descarga de la aplicación para verificar si es una amenaza o no. Muchos lo hemos hecho en alguna ocasión cuando en una máquina en la que no disponíamos de antivirus, o al menos de antivirus actualizado, necesitábamos comprobar algún archivo descargado antes de utilizarlo.

¿Podrían los "chicos malos" detectar si el que accede a descargar la aplicación es uno de los servidores de VirusTotal para analizarlo? Si esa detección es posible, se podría cambiar dinámicamente el contenido de la descarga por algún otro archivo inocuo cuando se detecte el acceso por parte de un servidor de VirusTotal, y evitar así que los análisis realizados por VirusTotal mediante enlace levanten sospechas.

Este esquema de descarga selectiva de malware tampoco es una novedad. En casos de ataques selectivos donde solo se desea atacar equipos muy determinados, es una manera de mantener un perfil de exposición bajo para tratar de no llamar la atención. Solo los equipos que accedan desde determinadas direcciones IP descargarán el archivo malicioso, por lo que las posibilidades de que el servidor sea "cazado" y listado en las listas de sitios de distribución de malware disminuye, ya que de cara al mundo en ese servidor no hay malware.

El procedimiento a seguir no tiene mucha historia. Desplegamos un servidor web que grabe todos los parámetros de la conexión cuando se accede al enlace de descarga. Accedemos a VirusTotal en donde introducimos nuestro enlace y esperamos a que el servidor de VirusTotal acceda al nuestro para descargar la muestra a escanear. Tras esto, en nuestro servidor tendremos almacenados los datos de los accesos que se hayan realizado desde los servidores de VirusTotal para realizar el escaneo solicitado. Solo queda examinar los datos del acceso (principalmente cabeceras HTTP y direcciones IP) y descubrir algún patrón que permita diferenciar el servidor o servidores de VirusTotal.

Una vez definido un patrón que permita realizar esta distinción, solo queda codificar un par de líneas en nuestro servidor para que a las peticiones realizadas desde VirusTotal se devuelva un archivo inocuo, y para el resto de peticiones el archivo "malicioso", aunque en nuestro caso será el inofensivo archivo EICAR antes mencionado.

Desplegando el tema

Para las pruebas se ha creado una cuenta gratuita en servicio de hosting, con un subdominio gratuito suministrado por el propio hosting. Con esto conseguimos que ningún otro servidor acceda a nuestro equipo de pruebas y nos contamine los datos que vamos a recolectar, ya que es un nombre de dominio que acabamos de crear, y que nadie tendrá y los que aún no ha sido listado por los robots de los buscadores.

El servidor web tiene un punto de entrada, "/testbadfile.php?filename=xxx.yy". Este punto devuelve el fichero EICAR en forma de fichero de texto comprimido con ZIP, y con el nombre definido en el parámetro "filename". Además devolver el fichero EICAR, grabará en una base de datos todos los parámetros de acceso de las peticiones web que se reciban. Usamos como nombre de fichero "p1.zip" y pasamos el enlace a VirusTotal. El servicio realiza un escaneo de la propia dirección web frente a diversos servicios dedicados a recopilar y clasificar sitios web maliciosos. Puesto que el enlace descarga un archivo, el archivo es escaneado frente a los motores antivirus que VirusTotal soporta.

Aunque no es el objetivo de esta entrada, dos analizadores clasifican el enlace (tras un par de días han pasado a ser cuatro) como perteneciente a un sitio malicioso, lo cual, teniendo en cuenta que el sitio y el dominio están recién creados, no debería ser así. Imagino que al ser un subdominio de un hosting gratuito, los dominios padre en ocasiones han debido ser utilizados con finalidades más bien dudosas, y esto ha debido provocar que esos dos analizadores consideren todos los subdominios de esos dominios "dudosos" como maliciosos. Lo cual tampoco me parece una política acertada...

Resultados análisis url '/testbadfile.php?filename=p2.zip'
Al pinchar el enlace con los resultados del análisis del archivo descargado, como era de esperar, prácticamente la totalidad de los motores antivirus detectan correctamente el vector de test EICAR.

Resultados análisis archivo '/testbadfile.php?filename=p2.zip'
Veamos qué datos hemos recopilado en nuestra base de datos. Aunque el análisis de URL de VirusTotal puede implicar la descarga de la muestra desde dos o tres servidores distintos, el que nos interesa, el que ataca la muestra con los motores antivirus es uno. Tal y como contaron en su propio blog, VirusTotal se mudó, poco antes de su adquisición por parte de Google, a la plataforma de aplicaciones en la nube de la célebre marca del buscador.

Uno de los accesos corresponde a una dirección IP que efectivamente corresponde al bloque asignado a Google Cloud. Esto podría ser suficiente para definir nuestro criterio, aunque dejaríamos fuera del objetivo de nuestra aplicación "maliciosa" a todas aquellas máquinas (virtuales o no) albergadas en la nube de Google.

Afortunadamente la cabecera HTTP_USER_AGENT del servidor de VirusTotal es bastante descriptiva, con lo que la identificación del servidor al que debemos "engañar" es inequívoca:
Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US) AppEngine-Google; (+http://code.google.com/appengine; appid: s~virustotalcloud)

Troleando...

En el mismo servidor creamos una copia del punto de entrada 'testbadfile.php' con el nombre 'testtrollfile.php'. Cambiando una par de líneas del PHP, examinamos la cabecera HTTP_USER_AGENT de la petición entrante. Si se identifica el servidor de VirusTotal, el código PHP devuelve como contenido del fichero a descargar un archivo .zip con un archivo de texto inocente, y en caso contrario el archivo .zip contendrá el archivo EICAR.

El análisis de la nueva url presenta los mismos resultados que el caso anterior.

Análisis url '/testtrollfile.php?filename=p1.zip'
La diferencia está en el análisis del archivo descargado, que en este caso aparece inmaculado como una patena.

Análisis fichero '/testtrollfile.php?filename=p1.zip'
Si desde cualquier otro ordenador se accede al mismo enlace que para VirusTotal está limpio, el antivirus instalado localmente debería cantarnos la presencia del vector de test EICAR. Y lo mismo ocurriría, y ahí está el peligro, si en lugar de jugar con el test EICAR jugáramos con un malware real.

Como prueba de concepto se ha dejado un servidor activo con dos enlaces:
  1. 'show_eicar.php' siempre va a suministrar el archivo EICAR comprimido en un zip, independiente del equipo desde el que se acceda. Permite comprobar que tanto VirusTotal como el antivirus de nuestra máquina detectan el patrón EICAR.
  2. 'hide_eicar.php' analizará las cabeceras de la petición HTTP. En caso de detectar el servidor de VirusTotal suministrará un archivo de texto inofensivo dentro del archivo zip. Y en caso contrario la petición descargará el mismo archivo zip que 'show_eicar.php', con el vector EICAR.

Conclusiones

Lo que se ha presentado no es un fallo en el servicio VirusTotal. De hecho, un usuario avezado puede distinguir que la firma SHA256 que ha calculado VirusTotal para la muestra que ha descargado y analizado es distinta de la firma del archivo que podemos descargar nosotros mismos usando el mismo enlace. La única salvedad podría ser que los "chicos malos" sean capaces de generar un archivo inocuo con la misma firma SHA256 que su muestra de malware, pero el cálculo de colisiones SHA256 parece ser un problema irresoluble, y al menos actualmente intratable por fuerza bruta.

VirusTotal podría complicar mucho más la identificación de su servidor, eso es cierto. No solo usar cabeceras HTTP_USER_AGENT menos explícitas, sino acceder al enlace con la muestra a descargar desde un conjunto de proxies que fueran cambiando periódicamente a fin de dificultar la identificación por dirección IP.

Es más, permitir al usuario de VirusTotal que solicita un análisis poder configurar la cabecera HTTP_USER_AGENT con distintos valores predefinidos podría ser una funcionalidad deseable. Enlaces maliciosos pueden actuar de distinta manera, y suministrar distintas versiones de malware según la información de dicha cabecera, que entre otras cosas permite identificar el navegador web utilizado y su versión, además del sistema operativo en el que se está ejecutando el navegador web.

Mas que presentar una posible mejora que VirusTotal podría introducir, lo importante es dar un pequeño toque de atención a cualquier usuario del servicio de VirusTotal, o servicios similares que permitan introducir una URL desde la que se descarga la muestra que se desea analizar... si es posible, aunque es más incómodo, es mejor descargar localmente el archivo sospechoso y posteriormente subirlo al servicio web de análisis de malware, no nos la vayan a dar con queso...

Anexo

La API de VirusTotal permite a usuarios de pago acceder a otras funcionalidades como es la base de datos de muestras. Es de dominio general que numeras empresas de seguridad informática y aplicaciones antivirus se alimenta de bases de datos como la de VirusTotal y similares.

En la realización de está entrada, no solo se han registrado los accesos de los servidores de VirusTotal, sino también los accesos de los clientes de VirusTotal interesados en acceder a la muestras que la gente sube a VirusTotal, y que comienzan a llegar escasos minutos después de que VirusTotal realiza el primer acceso.

Lo reseñable es el distinto interés con el que los robots (o puede que analista humanos manualmente) de la empresas abonadas a este servicio de VirusTotal han tratado los dos enlaces subidos al servicio de VirusTotal.

Por un lado el enlace que suministra selectivamente el patrón EICAR a todos menos al servidor de VirusTotal, y que el VirusTotal ha clasificado como "limpio", tan solo ha recibido 6 impactos posteriores desde 6 direcciones IP distintas (dos de ellas de equipos en Japón de la empresa Trend Micro).

El otro enlace que suministra el patrón EICAR a todos, y que así ha sido detectado correctamente por VirusTotal, ha alcanzado 50 impactos desde 27 direcciones IP distintas. Entre las empresas interesadas en la muestra en la que VirusTotal detectó el patrón EICAR se puede identificar a Mcafee desde equipos en India y EEUU, Trend Micro desde Japón, Avirasoft desde Rumanía, Microsoft SmartScreen desde Canadá, Secure Computing (adquiridos hace tiempo por Mcafee) desde EEUU e Ikarus Security Software desde Austria. Además hay muchas otras direcciones IP menos identificables desde Israel, China, Rusia, Alemania, Finlandia, Noruega y México.

En resumen, el enlace "troll" que estaba limpio solo para el servidor VirusTotal apenas ha registrado descargas, mientras que el otro, en el que VirusTotal identificó el patrón EICAR, ha tenido numerosos "seguidores". De lo anterior se puede aventurar que para muchas empresas abonadas al servicio de VirusTotal, lo importante que les brinda VirusTotal es obtener muestras en las que otros motores antivirus detectan malware, lo que permite actualizar los archivos de firmas de sus propias herramientas para no quedarse atrás respecto a la competencia.

No hay comentarios:

Publicar un comentario