23 oct 2017

Anatomy of a modern malware: How easy bad guys can f*** the world?


En la pasada Rooted CON de Valencia y Navaja Negra, tanto Fran Ramírez como yo, tuvimos la suerte de llevar a cabo una charla en la que hablábamos de dos cosas que estaban relacionadas. El título de la charla lo dice todo, haríamos una anatomía de técnicas utilizadas por el malware moderno y que en el último año habían tenido uso real en campañas de malware, mientras que por otro lado queríamos relacionar lo sencillo que es hoy en día para cualquier acceder a la información de últimos exploits, técnicas de escalada de privilegio, incluso, ¿Por qué no? Código de keyloggers, ransomware o spyware.

En Rooted CON Valencia la charla tuvo un enfoque más orientado a ejemplificar lo fácil que es para cualquier hoy en día encontrar trozos de código con funcionalidades de malware, juntarlos y que puedan obtener un malware modular, a cuyo concepto se le denominó “Frankenware” y potencialmente, o tras su análisis estático, poco detectable. Lógicamente, nosotros no hacemos malware, por lo que era todo conceptual. Los compañeros de Security Art Work hicieron un resumen sobre las diferentes charlas que os dejamos por aquí.

Para Navaja Negra, quisimos cambiar algún enfoque y se hizo un mayor hincapié en las técnicas utilizadas en el último año por diferentes malware para lograr infectar un equipo, propagarse y escalar privilegios en la máquina. Además, para relacionar el concepto de lo fácil que es encontrar trozos de código de funcionalidades de malware, incluyendo repositorios de código dónde encontramos exploits como Eternal Blue o el CVE-2017-0199 que afectaba a Microsoft Word, técnicas de Bypass UAC implementadas en el lenguaje que se quisiera, etcétera, hicimos una pequeña herramienta para realizar búsquedas en Github y poder automatizar su evaluación estática por parte de Virus Total. Esto ejemplificaría lo fácil que es hoy en día.

Mi compañero Fran dejó bien claro que en 22 años las cosas han cambiado a la hora de construir malware, así como la complejidad. Cuando hablamos de complejidad nos referimos a lo difícil que era hace 22 años construir algo que fuera un keylogger y lo fácil que lo tienen hoy en día los malos. Si alguien quiere saber más sobre el ejemplo, debe consultar con Fran :O

Anatomía

En esta parte de la charla queríamos enseñar cómo el malware, en el último año, se había aprovechado de técnicas, tricks, exploits, engaños y otras vías para lograr sus objetivos. Para hacer esta ejemplificación tomamos 3 claros ejemplos de propagación, escalada e infección.
  • La vulnerabilidad CVE-2017-0199 es una de las vulnerabilidades del año. Quizá no sea tan famosa con EternalBlue, pero tiene una gran potencia. Es una vulnerabilidad que afectaba a versiones de Office 2007 SP3, 2010 SP2, 2013 SP1 y Office 2016, solucionada por Microsoft en abril de 2017. Para explotarla, se utilizan enlaces incrustados tipo OLE2 dentro de ficheros Office. El formato más utilizado para realizar algún tipo de ataque aprovechando esta vulnerabilidad son los RTF. Dentro de estos ficheros se inserta el objeto OLE2 el cual a su vez se ejecuta de forma automática (simplemente abriendo el fichero adjunto) conectando con un sitio remoto desde el cual podríamos realizar la ejecución de código remoto (RCE). Uno de los ataques más comunes consiste en utilizar una combinación de un fichero con formato HTA el cual lleva incrustado a su vez el payload (generado por ejemplo con msfvenom de Metasploit) el cual se combina con otro fichero RTF para obtener finalmente un documento Office. Este fichero, generado con la unión de un HTA y un RTF será (ubicado en un servidor externo) será ejecutado cuando el usuario abra el fichero RTF que contenía el objeto OLE2 incrustado. Fue utlizada en una campaña de malware para la propagación del “bicho”.
  • La técnica Fileless para hacer un bypass de UAC. Ya hemos hablado mucho sobre los bypasses de UAC en este blog, pero la técnica conocida como Fileless fue utilizada en una campaña de malware para lograr ejecutar el malware con el máximo privilegio. El método de propagación fue el envío de un email con un Excel adjunto, el cual utilizaba la ejecución de una macro como medio de infección. Eso sí, se necesita la participación del usuario en el proceso, ya que se necesita que habilite las macros.
  • Por último, se comentó el caso de ZLoader, un troyano bancario que afectó a diversos bancos. En este caso el código se encuentra ofuscado en una macro insertada en un documento Microsoft Office (el caso más común son ficheros Excel) la cual realiza una conexión a un servidor externo (un C&C), para llevar a cabo la ejecución de código malicioso, payload. Una de las características más llamativas es que no funciona si las macros no están activadas en Office. Por lo que simplemente, solicita la activación al usuario través de un mensaje de texto en pantalla. A continuación, os dejamos un esquema de funcionamiento:

Relacionando conceptos


Al final, tenemos una serie de características que abundan hoy en día en el malware y otras que dependen del instante y momento en el que nos encontremos, por ejemplo, las técnicas de bypass de UAC que pueden ayudar a escalar privilegio o, incluso, lograr persistencia de tipo fileless, o la utilización de exploits potentes, cuyo código se encuentra disponible y que está al alcance de cualquiera. Si miramos la siguiente imagen, observamos que el concepto de Frankenware existe y si se analiza malware de hoy en día es posible encontrar el concepto en ello.



Pero, la pregunta que queríamos responder es, ¿Cómo de fácil pueden j****** el mundo? Para poder responder quisimos hacer un pequeño estudio sobre dónde conseguir código potencialmente malicioso, cómo poder tratarlo y dónde poder realizar un análisis estático. Sabemos que lo ideal sería un análisis dinámico para complementar el estudio, pero esto tendrá que esperar. Nos hicimos una receta:
  1. Buscar a través de una palabra clave y un lenguaje concreto en Github.
  2. Descargar repositorios encontrados en función de la palabra clave.
  3. Transformar en binario y dejar una copia de los ficheros fuente para su evaluación.
  4. Subida de los ficheros a evaluar a VT.
  5. Obtener conclusiones de los resultados.
Esta parte me recordó, en parte, al estudio sobre los repositorios de código fuente de los entornos GNU/Linux u OSB-Rastreator. En primer lugar, creamos una serie de scripts para automatizar las búsquedas sobre Github y obtener la descarga de los diferentes repositorios.


Posteriormente, una vez se descargan los repositorios se utiliza otro script que permite generar binarios para su evaluación estática. Aunque, hay que recordar, que no solo se evaluarán binarios, sino que también se evaluará el código fuente, por ejemplo, scripts de Python o Ruby.

Un tercer script es ejecutado para subir los binarios y ficheros fuente a VT, tal y como se puede ver en la imagen. Los resultados son almacenados y podemos decir que esperábamos un mayor nivel de detección, pero eso es subjetivo, claro.


Para poder mostrar todo el proceso de forma más cómoda, pedimos a nuestro compañero Santiago Hernández que hiciera una GUI en Python para mostrar este proceso de forma más cómoda o vistosa. El resultado fue este:


Como se puede ver, al menos de forma intuitiva, ganamos mucho. Además, Santiago mejoró los scripts y Franken tomó vida, así es como se llamó a la herramienta. Decidimos analizar una serie de palabras clave, relacionando funcionalidades típicas del malware con técnicas o exploits modernos. Los resultados son los siguientes:



Fue un honor estar en Rooted Valencia y Navaja Negra 2017. Sin más, os dejamos con este artículo.