Análisis de malware
Tipos de rootkits
agosto 26, por Preetam Kaushik
Un rootkit es simplemente un conjunto de herramientas que pueden mantener el acceso privilegiado de root a un sistema operativo. Un rootkit de malware normalmente lleva un código/software malicioso que se implementa en secreto en el sistema de destino.
Para mantener el acceso de puerta trasera para el malware, los rootkits pueden explotar los procesos del sistema en segundo plano en varios niveles de privilegios. En un sistema Windows, esto generalmente significa atacar en modo usuario o en modo kernel.
La importancia de comprender el vector de ataque
Contrariamente a la percepción popular, un rootkit por sí solo no compromete la seguridad del sistema. La penetración de las defensas de un sistema operativo se maneja mediante el método empleado para infectar el sistema. Hay muchas maneras de lograr esto hoy:
- Envío de un archivo infectado/troyanos como archivos adjuntos de correo electrónico
- Crear aplicaciones de malware haciéndose pasar por pancartas/ventanas emergentes inofensivas en sitios web
- El uso de ataques de phishing y otros programas maliciosos, como registradores de pulsaciones de pulsaciones, otorga a los piratas informáticos acceso de root, que luego puede utilizarse para inyectar el rootkit.
Un rootkit comienza su trabajo sucio una vez que el vector ha comprometido con éxito el sistema, dándole la oportunidad de acceder a modos privilegiados de root dentro del sistema operativo. Una vez que obtiene acceso, dependiendo del lugar de su ataque, un rootkit puede cambiar el software instalado o incluso partes del propio sistema operativo. Esto puede hacer que una infección de rootkit sea difícil de detectar o incluso prácticamente invisible.
Comprender la posición de un rootkit en el sistema operativo
Windows tiene dos modos para ejecutar código: modo de usuario y modo kernel. De estos, el modo kernel es el más importante, ya que actúa como vínculo directo entre el código de hardware y software. Este es el modo con mayor privilegio , o «root» en un sistema Windows.
Pero no todos los programas y procesos requieren acceso a toda la gama de potencia de procesamiento y hardware del sistema. Estas funciones de nivel inferior se manejan en un modo con privilegios más bajos: el modo de usuario.
En modo kernel, el sistema operativo ejecuta códigos directamente para ejecutar todas las tareas de alto nivel de administración del sistema. Por el contrario, el modo de usuario utiliza una interfaz de programación de aplicaciones (API) para ejecutar códigos indirectamente. Durante el funcionamiento normal del sistema, la API realiza llamadas a funciones del kernel y recibe información a cambio.
Un rootkit normalmente secuestra estas llamadas a funciones, ya sea en modo usuario o en modo kernel, dependiendo de su diseño.
Rootkits en modo usuario e inyección de DLL
En Windows, el enlace de API es una técnica que se emplea comúnmente para modificar o cambiar el flujo de llamadas de API. Un rootkit en modo usuario aprovecha esta técnica para inyectar código malicioso en la memoria de un programa mientras permanece oculto.
Para que esto funcione, el rootkit debe insertar su código en un proceso comúnmente llamado. En Windows, las bibliotecas de enlaces dinámicos (DLL) son perfectas para esto, ya que son invocadas por muchos programas diferentes instalados en el sistema operativo.
La inyección de DLL es el método utilizado por el usuario de rootkit (hacker) para insertar código malicioso en varios programas que realizan llamadas API en el sistema operativo. Hay varias maneras de lograr esto:
- Modificar los valores del registro para agregar una nueva DLL maliciosa al sistema Windows
- Uso del enlace global en Windows para afectar todas las llamadas a la API del programa
- Creando un hilo remoto para que el proceso de destino le agregue una DLL infectada
Enganche IAT versus enganche en línea
La principal debilidad de un rootkit a nivel de usuario es que carece de acceso directo al kernel del sistema operativo. Entonces usan API para conectar un exploit. Aquí se emplean a menudo dos técnicas diferentes: el enganche IAT y el enganche en línea.
En Windows, se utiliza una tabla de direcciones de importación (IAT) para optimizar el acceso a las DLL con sus direcciones de funciones variables. El IAT aloja los punteros de función de las DLL a medida que el cargador de Windows los carga durante una llamada API.
Al utilizar el enlace IAT, un rootkit puede realizar cambios en la lista de llamadas a funciones DLL, reemplazando funciones existentes con su propia dirección. Cuando una aplicación realiza una llamada API para esa función, el código del rootkit se carga en el espacio de memoria del programa víctima.
Por el contrario, el enlace en línea realiza modificaciones directamente en los códigos de función de programas específicos. Este es un enfoque más específico y limitado que el enganche IAT. Pero al igual que el enlace IAT, el objetivo aquí es hacer que las llamadas API del programa carguen el código malicioso desde la dirección del rootkit.
Rootkits en modo kernel y técnicas de enlace
El uso de la inyección de DLL hace que sea relativamente más fácil detectar una infección de rootkit en modo usuario. Pero los rootkits en modo kernel son una bestia completamente diferente. Se encuentra al mismo nivel que la mayoría del software de detección de malware y puede evadir la detección alterando partes del código del núcleo.
Un rootkit en modo kernel puede realizar cambios en el sistema utilizando varias técnicas de enlace diferentes. Éstas incluyen:
Enganche SSDT
En Windows, las llamadas del sistema al kernel se administran según la tabla de envío de servicios del sistema o SSDT. Esta tabla contiene las direcciones de memoria importantes de las funciones principales que se llaman. Si un rootkit obtiene acceso al kernel, puede realizar cambios en el SSDT, con resultados similares a los del enlace IAT.
Enganche IDT
El modo kernel de Windows también contiene una tabla de descriptores de interrupciones (IDT) para manejar cualquier interrupción causada por un software o hardware. Un ejemplo sencillo sería una interrupción de hardware provocada por el teclado. Un rootkit puede utilizar el enlace IDT para recopilar información importante, incluidos datos del teclado.
Enganche de función en línea
Los rootkits del kernel también pueden utilizar enlaces no relacionados con las tablas del sistema. En el enlace en línea, el código malicioso ataca partes específicas de una función de destino en el kernel, obligándola a saltar a un área específica en la memoria del sistema que contiene el código del rootkit.
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
Conclusiones clave
- Los rootkits utilizan muchos vectores y técnicas de ataque diferentes para comprometer la seguridad de un sistema e infectarlo.
- Los rootkits funcionan secuestrando o conectando llamadas a funciones API en un sistema operativo
- En Windows, pueden hacerlo en Ring-3 (nivel de usuario) y Ring-0 (nivel de kernel)
- Los rootkits a nivel de usuario suelen utilizar la inyección de DLL para agregar código malicioso a las aplicaciones.
- A nivel de kernel, abusan de las llamadas a funciones SSDT e IDT para realizar cambios
Fuentes
- Rootkits , ENISA
- Sungkwan Kim, Junyoung Park, Kyungroul Lee, Ilsun You, Kangbin Yim, Una breve encuesta sobre técnicas de rootkit en códigos maliciosos