Presentamos nuestra tecnología JAWS: controla el JavaScript malicioso a través de un plugin con inteligencia colaborativa

lunes, 17 de diciembre de 2018

El navegador es la gran puerta de entrada de muchas amenazas. En los últimos años, a través de JavaScript, hemos asistido a la moda de la minería no autorizada, de los skimmers virtuales para robar tarjetas de crédito… JavaScript además es la base de muchos otros tipos de ataques. Pero sin él, la experiencia web sería muy diferente. Para colmo, la detección por parte de los antivirus de código JavaScript es pobre por definición, puesto que no es su campo especializado de acción, pocas veces toca disco, y además por su naturaleza el propio código permite pasar bastante desapercibido. Hemos desarrollado una tecnología que permite una aproximación diferente para intentar solucionar este problema.



JAWS proporciona al usuario protección a través de un sistema poco intrusivo para la detección de actividades maliciosas o alteraciones no previstas en el código fuente de las páginas web, un indicio que a priori levantaría sospechas sobre su funcionalidad. Esto suma a la contribución de la comunidad para generar reglas Yara y mejorar la precisión. En resumen, monitorizar el JavaScript del navegador en tiempo real buscando modificaciones, o indicadores contra un servidor colaborativo.

Detectar de forma anticipada elementos maliciosos que afecten a los usuarios durante la navegación y sus actividades online cotidianas, siempre ha sido un reto. En concreto el JavaScript que ejecuta del lado del cliente supone un problema para los métodos tradicionales. Por ejemplo, podemos comprobar que los resultados que arrojan los motores de detección tradicionales ante muestras muy comunes, no supone una protección eficiente. En concreto, ponemos dos ejemplos muy populares:
  • hook.js: fichero JavaScript que inyecta el Framework BeEF para infectar al navegador. Es una de las herramientas más conocidas para la explotación de vulnerabilidades en el navegador.
  • CoinHive.js: fichero JavaScript que se utiliza para minar criptomonedas utilizando los recursos del usuario a través del navegador.
En ambos casos los resultados comprobando el código contra motores estáticos son muy pobres. Las librerías JavaScript no han sido foco prioritario de detección durante mucho tiempo, hasta que la proliferación de malware en este lenguaje ha demostrado que llevamos bastante tiempo de retraso al respecto. Para combatir estas carencias, el proyecto JAWS proporciona una solución simple y no intrusiva que puede alertar y prevenir buena parte de las amenazas de ciberseguridad, basadas en código JavaScript utilizando y desarrollando técnicas avanzadas de detección que pueden proteger a los sistemas de ataques aún no conocidos como amenazas de día 0 (0-days). Estas capacidades pueden proteger ataques como el típico phishing, XSS, CRSF hasta los actuales cryptojacking y skimming.

Este proyecto fue seleccionado como uno de los tres ganadores de la segunda edición del University Challenge, los retos de Big Data y Ciberseguridad del CDO de Telefónica, y fue presentado en el Security Innovation Day de este año. Donde la unidad de ciberseguridad de Telefónica, ElevenPaths, ha supervisado, tutorizado y orientado el desarrollo de este proyecto para alinearlo con las necesidades de mercado que más demanda el panorama actual de ciberseguridad.


JAWS es capaz de realizar en tiempo real una comparativa entre las librerías y ficheros JavaScript ubicados en la web y los registrados previamente en el último acceso. Es decir, compara las fuentes a nivel de código JavaScript en cada visita, alertando de las colisiones encontradas, localizando diferencias y anomalías. Adicionalmente,i es capaz de realizar una batería de pruebas de detección de malware gracias al conjunto de reglas Yara creada por la comunidad. Esto permite además identificar si las diferencias o anomalías detectadas en el código corresponden a código malicioso que se haya inyectado directamente en la librería o en el DOM de la página web. Gracias a esto es capaz de detectar y alertar de amenazas de ciberseguridad incluyendo ataques 0-day aún no descubiertos o incluso nuevos elementos para los que ni siquiera se hayan generado indicadores ni alertas todavía.

JAWS por tanto realiza una monitorización y supervisión constante de la importación, carga y ejecución de librerías JavaScript. Su capacidad depende directamente del conjunto de reglas generadas, pero aun no existiendo una que sea capaz de detectar el malware a través de reglas identificativas, el motor de diferencias detectará que hay un elemento diferencial en el código, alertando, aislando e incluso bloqueando su carga si así se ha establecido.

Para proporcionar estas capacidades de seguridad JAWS establece una arquitectura de tres niveles descritos a continuación:

Capas de usuario
Se compone de la extensión en el navegador que realiza el envío de los ficheros JavaScript ejecutados por el navegador. El trabajo de este complemento es transparente, salvo que detecte alguna anomalía. Ante cualquier alerta, aviso e incluso para usuarios avanzados que quieran investigar qué anomalía se ha detectado, la extensión se proporciona una interfaz adecuada para conseguirlo.

Jaws: Capas de usuario imagen

Capas de servidor
JAWS incorpora un backend escalable que asimila la recepción constante de ficheros JavaScript que indexa y gestiona de forma muy jerarquizada. Almacenapropiedades como el origen de los datos para conocer con precisión dónde se descargaron y el contenido de cada uno de ellos, tratando de estructurar un compendio de información relevante como el referrer, dominio, tipo de JavaScript, fecha de detección, fecha del último acceso, etc. Esta capa adquirirá en el futuro capacidades de Big Data y sobre la que se realizarán distintos procesos de rastreo, correlación y localización de IOCs.

Jaws: Capas de servidor imagen

La detección de modificaciones de código se realiza mediante una comparativa del JavaScript recibido con el último acceso registrado. Utilizando inicialmente un valor hash a nivel de fichero para detectar si es una librería JavaScript ha sido almacenada previamente, gracias a este enfoque mediante hashes se consigue optimizar el rendimiento global de análisis sin que repercuta en el usuario. Finalmente, los nuevos ficheros JavaScript que suben al backend son analizados utilizando un módulo Yara mediante reglas pregeneradas por la comunidad (el acceso y generación será libre).

Tanto si se ha detectado una anomalía por diferencias entre librerías o si una regla Yara ha detectado malware en el fichero, el interfaz de usuario recibirá del servidor un diff entre ambos ficheros, y avisará al usuario del tipo de detección encontrada. El servidor servidor proporcionará toda la información pertinente para el usuario.

Jaws: ficheros imagen

Capas de comunidad
Este nivel permitirá generar una comunidad de usuarios que no solo utilicen JAWS para protegerse sino que generarán reglas de detección de contenido malicioso (YARA), lo que incrementa las capacidades de detección del sistema. Gracias a este enfoque social, los usuarios se verán beneficiados de una protección potenciada y actualizada gracias a las capacidades de otros colaboradores que contribuyen con JAWS.

Gracias a esta aproximación no solo se puede detectar malware ya conocido, sino que además el potencial semántico de las reglas YARA hace posible detectar familias de malware modificado o evolucionado, incluso desconocido, utilizando para ello reglas basadas en políticas de comportamiento que se traducen en cadenas de texto o cadenas binarias.

La siguiente figura muestra una simplificación del proceso global de JAWS y muestra de forma global el funcionamiento y la operativa que desempeña la plataforma.

Jaws: Capas de comunidad imagen

Al utilizar un sistema centralizado donde se genera una gran cantidad de datos, toda esta información se puede utilizar para posteriormente generar sistemas inteligentes de detección, utilizando para ello Big Data y correladores de Machine Learning. Esto, a su vez, permite un amplio abanico de posibilidades y aumenta significativamente el potencial de la plataforma.

Con este enfoque JAWS no solo se presenta como una solución de alto potencial, sino que además establece varios frentes de mejora en sus capacidades, permitiendo establecer un balance de carga, capacidad de procesado y del número de reglas a comprobar en el conjunto de librerías JavaScript encontradas. Esta escalabilidad y adaptabilidad es fundamental para los objetivos de JAWS.

A continuación, se muestra la presentación del proyecto y su funcionamiento a través de una prueba de concepto que simula la inyección de un skimming en la página de Nevele Bank. Simulación muy parecida al ataque sufrido por British Airways donde un atacante fue capaz de inyectar un skimming que extraía los datos de las tarjetas bancarias de los clientes de la compañía.


Desde la Unidad de Ciberseguridad de Telefónica, ElevenPaths, se ha realizado un seguimiento y tutorización muy cercano a este desarrollo de cara a ser incorporado como nuevo prototipo en el área de Innovación y Laboratorio, donde se dará continuidad al proyecto.

Enrique Andrade González 
Con la colaboración de Innovación y Laboratorio de ElevenPaths.

No hay comentarios:

Publicar un comentario