Si los atacantes obtienen acceso a un servidor utilizando algún otro método (por ejemplo, SSH) y ese servidor ejecuta una instancia de Redis en modo protegido, pueden conectarse localmente para desactivar la protección y luego poder enviar otros comandos a través de Internet.
Otro comando deshabilita la opción de configuración de réplica de solo lectura. Esta es otra característica de protección que configura una instancia de Redis como una réplica para rechazar todos los comandos de escritura entrantes. Redis admite la replicación donde una instancia puede actuar como maestra y otras como réplicas de esa maestra, pero dado que la replicación solo ocurre de maestra a réplica, enviar comandos de escritura directamente a una réplica puede hacer que no esté sincronizada. Por otro lado, los atacantes querrían desactivar esta función para poder ejecutar sus comandos en la instancia de Redis.
Otros dos comandos desactivan las configuraciones aof-rewrite-incremental-fsync y rdb-save-incremental-fsync. Estas opciones hacen que el contenido de Redis sea persistente durante los reinicios en lugar de volátil como todos los datos almacenados en la RAM. El primero guardará un registro de todas las operaciones de escritura y las ejecutará nuevamente cuando la instancia comience a reconstruir el almacén de datos, y el segundo creará instantáneas del conjunto de datos a intervalos específicos.
Es probable que los atacantes desactiven estas funciones para ocultar sus rastros porque luego siguen con dos comandos establecidos que escriben una clave SSH controlada por el atacante y un trabajo cron para descargar y ejecutar el binario Migo. «Los atacantes luego seguirán con una serie de comandos para cambiar el directorio de trabajo de Redis, antes de guardar el contenido de la base de datos», dijeron los investigadores. “Si el directorio de trabajo es uno de los directorios Cron, crond analizará el archivo y lo ejecutará como un trabajo Cron normal. Este es un patrón de ataque común contra servidores Redis y ha sido documentado previamente por Cado y otros”.
Malware Migo escrito en Go
El binario Migo se guarda en el disco como /tmp/.migo y se escribe y compila como un ejecutable con Go, un lenguaje de programación multiplataforma. El malware está empaquetado y tiene sus símbolos ofuscados para evitar que aparezcan en los seguimientos de la pila o que los analistas los recuperen fácilmente. Luego, el malware crea un archivo que sirve como marcador para los atacantes en el futuro de que el sistema ya ha sido comprometido y luego procederá a descargar el minero de código abierto XMRig desde GitHub.
El binario XMRig se guarda como .migo_worker y se crea un mecanismo de persistencia creando un temporizador systemd llamado system-kernel.timer. El cargador de malware también realiza otras acciones en el sistema: configura los límites de recursos para XMRig en función de cuántos usuarios tiene el sistema, desactiva el mecanismo de defensa SELinux, intenta desinstalar agentes de monitoreo comunes de los proveedores de la nube, usa iptables para configurar el firewall local para bloquear conexiones salientes a ciertas direcciones IP y busca y mata a los mineros competidores si el sistema ha sido infectado por otros grupos. El malware también edita el archivo /etc/hosts para bloquear la resolución de dominios asociados con ciertos proveedores de nube para evitar actualizaciones de ellos.
Ocultación de procesos y archivos
El cargador Migo también coloca un archivo llamado libsystemd.so, que es un rootkit en modo usuario basado en el proyecto de código abierto libprocesshider. Esta herramienta se usa comúnmente en campañas de criptojacking para ocultar ciertos archivos de comandos de lista de archivos y procesos como ls, ps o top. En este caso, la herramienta se utiliza para ocultar menciones de /tmp/.migo_worker y /tmp/.migo de las salidas de comandos.
«El malware actualiza /etc/ld.so.preload para apuntar a un archivo de objeto compartido de Linux ubicado en /usr/local/lib/libsystemd.so, realizando efectivamente el secuestro del Dynamic Linker en el host de Redis», dijeron los investigadores. «Este objeto compartido está integrado en la carga útil principal de Migo y se extrae en tiempo de ejecución».