Hace un tiempo cree una honeypot para imitar un dispositivo de IoT con un OS de GNU Linux. La idea era investigar por mi cuenta y por diversión los ataques dirigidos a Linux, puesto que tiene tangencialmente que ver con mi trabajo pero quería hacerlo a mi manera. Los detalles técnicos de cómo la he montado están en este repositorio, pero el resumen es que he copiado el filesystem de OpenWRT con docker, lo he integrado en mi honeypot y he añadido detalles que sabía que solían formar parte del interés de un atacante en estos casos (documentos de configuración, claves SSH, librerias concretas, etc). Pero esta entrada no va de eso, va de una de las campañas que he investigado.
Cuando tienes una de estas honeypot, es posible que recibas muchos ataques, desde diferentes sitios, la mayoría automáticos. En mi caso me dedique a revisar tranquilamente los logs de la honeypot para ver qué había sucedido, por lo general hay algunos detalels que suelen llamar mi atención, para empezar las lineas de comando. La honeypot guarda cualquier comando que se haya intentado ejecutar, de modo que se puede comprobar con un simple grep CMD a través de los logs qué días se han detectado comandos y por parte de qué sesión, cuándo y desde qué dirección IP. Las direcciones IP por si solas dicen más bien poco y no son fiables a largo tiempo como método de detección, pero pueden ayudar a identificar un mismo ataque en un periodo corto de tiempo en una misma máquina. En mi caso cuando estuve revisando líneas de comando descubrí un comando que formaba parte de un ataque automático que resultaba interesante. El ataque descargaba y ejecutaba en segundo plano un script de perl, que tras analizarlo es para un DdoS muy característico, porque utiliza una botnet basada en IRC. Como hay muchos palabros hasta ahora, voy a hacer un inciso para explicar conceptos, puedes saltártelo si ya los conoces:
- DDoS es literalmente “distributed denial-of-service” que es un tipo de ataque relativamente fácil d eprevenir, antiguo en términos de internet, pero que sigue existiendo. Se basa en usar tantas peticiones por unidades pequeñas de tiempo que provoque una sobrecarga de recursos de un servicio. Hemos visto ese ataque, por ejemplo, contra el salto.
- Perl es un lenguaje de programación que suele venir por defecto configurado en los sistemas basados en unix. Interpretado, dinámico y flexible, suele ser utilizado para “one liners” es decir, comandos de una sola línea que hacen cosas útiles y eficientes. Perl6 pasó a llamarse Raku y es un lenguaje diferente.
- Script es un programa pequeño normalmente con una función muy específica. En Linux es habitual usar lenguaje Perl o Bash para esto, pero también puede usarse Python y otros.
- Botnet es una colección de dispositivos normalmente secuestrados que forman parte de una red activa o dormida para realizar a taques como el de DDoS. Los atacantes lo usan mucho para esconder sus huellas.
- IRC, literalmente Internet Relay Chat es un sistema de mensajería bastante antiguo (se creó en 1988). Sin embargo se ha reutilizado para hacer un sistema que utiliza una Botnet para mandar comandos maliciosos y realizar ataques de denegación de servicio, entre otras cosas.
Pues bien, existe una de esas Botnet basada en IRC que está hecha en perl, y es característica de un grupo en particular: Outlaw. Los investigadores ponen nombres mega chulos a todos los atacantes, por algún motivo, no preguntéis. Tenía claro que lo que estaba viendo era un ataque automático de outlaw, pero no estaba segura cuántas de las cosas sospechosas de mi honeypot eran de la misma campaña. Outlaw ya atacó a diversos dispositivos de IoT y Linux hace unos años y a mediados de este año volvieron a llamar la atención, así que cuadraba que estuvieran de nuevo al ataque. Me interesaba averiguar si habían cambiado algo, si había algo nuevo.
Me llama la atención los users por defecto del script. No los pondré públicos por si son diferentes para cada grupo de víctimas, pero son bastante particulares. Si diré que la IP no está en virustotal. También os diré que el que lo ha configurado es un tío. ¿Que como lo se? No diré el nombré del canal que usan porque he visto que cada campaña cambia, pero tiene que ver con penes.
Que obsesión.
Y bueno, una confirmación de que es Outlaw, se les conoce como un grupo de habla rumana. Es más en otra versión del script que no es la que tengo dicen “La educación es como una erección, si la tienes, la ves”, en rumano. Puede ser cierto o una especie de carta para confundir, a mi me da igual, no me dedico a rastrear quiénes son en la vida real, sólo cómo hacen lo que hacen.
En el código puedo ver que utiliza recursos externos para intentar una vulnerabilidad de MD5 collision, con la intención de romper y descifrar hashes, es otra cosa que me llamó la atención. Es parte de los comandos que pueden usarse en la Botnet.
Otro de los ataques automáticos implicaba el uso de una sintaxis propia de perl. Sin embargo las IPs y los días no coincidían. Esto no quiere decir nada por si solo porque hay campañas con días de distancia entre un paso y el siguiente, además de que el uso de una Botnet complica el seguimiento por Ips. Estaba casi segura de que tenía relación pero necesitaba buscar algo más. Después de darle unas vueltas, caí en la cuenta de que los intentos de fuerza bruta contra la honeypot (había intentos de conexión con varias credenciales) parecían hechos con algún tipo de programa de shuffle con una lista de palabras. Me di cuenta de que algunas eran muy específicas, probablemente hechas con un generador automático, y no encontré esas listas en ningún lado (repositorios, pastebin, foros…) de modo que se me ocurrió que podía buscar coincidencias de credenciales especialmente particulares entre las de las sesiones que tenían que ver con el ataque sospechoso. Efectivamente, aunque las Ips variaban, las credenciales particulares se repetían (no exactamente iguales, pero si con combinaciones similares) en las sesiones del ataque sospechoso por una sintaxis de Perl.
Una vez hecha esa relación, la red del ataque era más amplia, y seguí investigando. A través de comandos usados en esas mismas sesiones o por esas mismas Ips, llegué a la conclusión de que estaban intentando explotar CVE-2017-9841, una vulnerabilidad de Linux que tuvo un impacto importante en su momento y sigue sin estar del todo parcheado en muchos contextos. Pero, si eso fuese así, para confirmarlo (siempre procuro confirmar una teoría con al menos dos pruebas) tendría que ver evidencias de que se ha intentado usar una shell en PHP, puesto que es la entrada más común de esa vulnerabilidad. Miré los detalles de red de las conexiones y vi como se intentaba hacer llamadas que implicaban shells de PHP de manual: ¡confirmado! Otro inciso técnico:
- PHP es un lenguaje de scripting especialmente pensado para uso en aplicaciones y páginas web. Personalmente lo odio con todas mis fuerzas. No sólo incita a ser desordenado (puedes añadirlo por ejemplo a cachos en cualquier html) si no que suele ser el origen de múltiples vulnerabilidades. Pero gustos colores, que dicen.
- Una shell es una terminal, desde la cual ejecutar comandos. Hay ataques (al que me refiero) que implican forzar al usuario sin saberlo a interactuar con una web para provocar las condiciones de una vulnerabilidad. Cuando se accede a una terminal, puedes intentar realizar ataques contra base de datos, servicios, etc.
Hasta aquí había conseguido: el script original del ataque, el conocimiento de que Outlaw estaba usando MAYDAY (el tipo de malware que aprovecha la vulnerabilidad mencionada, o al menos uno muy similar a ese) y más adelante un intento de sobrescribir claves ssh (¿recordáis lo que os dije de que las claves ssh tienen interés? Con frecuencia es para intentar extender el ataque a las claves ssh conocidas por la máquina afectada, pero en general dan credibilidad a un sistema de mentirijilla). Al investigar los ataques, también utilizaban binarios maliciosos, que se han guardado en mis logs, y he podido comprobar que coinciden con XMRig, usado como criptominero (y el objetivo de mi búsqueda, el por qué del filesystem que elegí para la honeypot). XMRig en si es un minero legítimo, pero se usa forzadamente en máquinas, en forma de malware, para aprovechar recursos para minar crypto (este es, con diferencia, el ataque más visto en Linux). Así que en conclusión en esta campaña:
- He visto que siguen usando el Botnet IRC de Perl
- He visto que usan XMRig (algo que ya usaban)
- Aprovechan CVE-2017-9841, en forma del malware MAYDAY
- Utilizan algún sistema para fuerza bruta con una lista personalizada, probablemente generada automáticamente con patrones que mezclen listas de contraseñas por defecto en sistemas y apps y contraseñas posibles.
- En una versión más avanzada, procuran sobrescribir ssh, esta parte tiene relación con XMRig.
En realidad todo está basado en análisis de los logs durante un par de meses, quizás el tiempo permita ver más detalles, o quizás la campaña acabará antes de eso. El mundo de cyber es un poco como el de la moda textil, a veces vuelven cosas que se creían pasadas ya a la historia. Gracias a este pequeño proyecto, poco a poco, tengo algunos hashes, un script, comandos y TTPs, y espero poder hablar en más detalle (cómo mirar y parsear rápidamente estos logs, qué añadir a las honeypot para tunearlas, etc) de esto y otros que he visto si se me da la oportunidad en alguna charlilla el año que viene.
Jo que envidia, en tu honey vienen de visita gentuzilla interesante en el que yo tenía siempre caían los mismos zánganos de siempre :(
Gracias por el curro, buena info :)