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:
- Buscar a través de una palabra clave y un lenguaje concreto en Github.
- Descargar repositorios encontrados en función de la palabra clave.
- Transformar en binario y dejar una copia de los ficheros fuente para su evaluación.
- Subida de los ficheros a evaluar a VT.
- 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.