Hace unos días, apareció un malware muy interesante en la lista de distribución de correos Full Disclosure. Es un ejemplar llamativo porque, además de que ataca plataformas de 64 bits de Linux y utiliza técnicas avanzadas para esconderse, tiene una rara funcionalidad que le permite infectar sitios web alojados en los servidores HTTP que ataca, por lo que también participa en descargas drive-by.
El módulo del malware está diseñado especialmente para la versión de kernel 2.6.32-5amd64, que es el último kernel usado en Debian Squeezy de 64 bits. El binario pesa más de 500 k porque no se ha ejecutado un “strip” (es decir, que se compiló con la información de depuración). Quizás esté aún en fase de desarrollo, porque parece que algunas de las funciones no hacen lo que deberían o no se las ha terminado de implementar.
Para asegurarsu inicio, el malware agrega una entrada en el script /etc/rc.local:
insmod /lib/modules/2.6.32-5-amd64/kernel/sound/module_init.ko
Después de cargarse en la memoria, el rootkit utiliza uno de estos dos métodos para recuperar los símbolos del kernel y escribirlos en el archivo /.kallsyms_tmp:
/bin/bash -c cat /proc/kallsyms > /.kallsyms_tmp
/bin/bash -c cat /boot/System.map-uname -r
> /.kallsyms_tmp
Después extrae las direcciones de la memoria de varias funciones y variables del kernel y las guarda en la memoria para usarlas más tarde.
El archivo temporal se elimina de inmediato:
rm /.kallsyms_tmp -f
Para esconder los archivos y la entrada de inicio, el rootkit engancha las siguientes funciones del kernel mediante “inline hooking” o reemplazando sus direcciones en la memoria con indicadores que dirijan a sus propias funciones maliciosas:
vfs_readdir
vfs_read
filldir64
filldir
El malware trata de esconder su propio módulo y los siguientes archivos y cadenas de caracteres:
zzzzzz_command_http_inject_for_module_init
zzzzzz_write_command_in_file
module_init.ko
sysctl.conf
/usr/local/hide/first_hide_file/*
/ah34df94987sdfgDR6JH51J9a9rh191jq97811/*
backconnect_command_thread_name
new_backconnect_command_thread_name
read_command_http_inject_thread_name
write_startup_command_thread_name
write_se_linux_command_thread_name
get_http_inj_from_server_thread_name
El mecanismo de inyección de iFrames es bastante interesante: el malware substituye la función del sistema tcp_sendmsg, responsable de la construcción de paquetes TCP, con su propia función, para que los iFrames maliciosos se inyecten en el tráfico HTTP mediante la modificación directa de los paquetes TCP que salen.
El malware se conecta al servidor de C&C con una contraseña codificada que lo autentifica para conseguir la carga explosiva de la inyección.
No pudimos conectarnos al C&C desde el puerto que usa el malware, pero el servidor malicioso sigue activo y aloja otras herramientas *NIX, como limpiadores de registro (muchas gracias a mi colega David Jacoby por esta información).
Hasta ahora, la mayoría de las descargas drive-by implementan un mecanismo de inyección automatizado como un simple script PHP. Pero este caso es mucho más sofisticado: tiene un componente binario de modo kernel que utiliza técnicas de “hooking” avanzadas para asegurarse de que el proceso de inyección sea más transparente y de bajo nivel que nunca. Aunque este rootkit sigue en su etapa de desarrollo, muestra un nuevo enfoque hacia la forma de realizar descargas drive-by y, sin duda, veremos más malware de este tipo en el futuro.
El blog de CrowdStrike publicó un excelente análisis detallado sobre este rootkit.
Kaspersky Lab detecta el rootkit como:
Rootkit.Linux.Snakso.a
.
Nuevo rootkit para Linux de 64 bits ataca con inyecciones de iFrame