¿La raíz de todos los males? - Rootkits revelados
¿Son los rootkits la raíz de todos los males, o sólo otra rama del árbol de amenazas? Todo lo que necesita saber acerca de los rootkits lo encontrará en este documento.
En los últimos años, se ha incrementado la toma de conciencia pública acerca de los rootkits, pero así como con los gusanos, virus y otros códigos maliciosos, el término rootkit es aplicado indistintamente a un amplio rango de tecnologías y ha traído un número de definiciones poco apropiadas.
Mientras que varias de estas tecnologías y definiciones son explicadas en el presente trabajo, nuestra intención es clarificar usos comunes, y no suministrar una única definición final. No obstante, hay algunas explicaciones breves en el glosario al final del presente.
Los rootkits se encuentran en peligro de convertirse en lo último de una larga línea de amenazas pobremente entendidas y ser falsamente promocionados como “el fin de la computación tal y como la conocemos”.
Al haber recibido descripciones [1] tales como “el ataque más pernicioso y sofisticado que actualmente puede efectuarse contra el sistema Windows”, han adquirido algunas de las temerosas supersticiones que anteriormente inspiraron términos como stealth y polimórfico en la historia de los códigos maliciosos.
Sin duda, los conceptos de rootkit y stealth (o aquello a lo que actualmente se lo conoce como “stealthware”) se encuentran estrechamente relacionados y superpuestos, si es que no son sinónimos.
Este artículo intenta evaluar la realidad de la amenaza Rootkit y también examinar el estado de las soluciones disponibles. Es sencillo comprender los motivos sobre la preocupación ante esta amenaza, ya que las aplicaciones que utilizan técnicas de ocultamiento están diseñadas para que los antivirus no detecten su presencia, ni tampoco lo hagan otros programas de seguridad, el sistema operativo y el sistema de archivos.
Los rootkits eran, hasta hace poco, una preocupación para los especialistas de seguridad, principalmente en las comunidades UNIX/Linux, en cambio, la utilización del modo oculto no es ninguna novedad para la industria antivirus.
* ¿Tiene root?
En un sistema basado en Unix, el usuario más privilegiado tiene el nombre de root, posee el máximo control sobre el sistema, y es por ello el más deseado por un atacante.
El root o directorio raíz también se refiere al primer directorio en la estructura del sistema de archivos de Unix: el directorio único de primer nivel en el árbol de directorios convencionales. (¿Por qué el árbol de directorios crece hacia abajo?, es lo que uno se pregunta).
El directorio root, frecuentemente referido por medio de la barra “/” (casi equivalente al “C:\” en DOS o Windows) es el que permite el acceso a todos los restantes.
Comúnmente, los usuarios no privilegiados del sistema deberían ser incapaces de alterar los archivos de este directorio o bien, aquellos que no corresponden a su propio entorno. De modo que “rootear” un sistema significa comprometer la cuenta root, logrando así, el acceso root al sistema y a todos los archivos y directorios del mismo.
* Rootkits y Stealth
En los inicios de la detección de códigos maliciosos, la tecnología stealth (oculto) fue definida según los siguientes lineamientos:
- Modo oculto negativo (nivel -1): los daños provocados por la infección afectan el funcionamiento del objeto atacado de manera tan evidente, que hacen inevitable su detección.
- Sin modo oculto (nivel 0): No se toman medidas específicas para disimular la presencia de la infección.
- Modo oculto elemental (nivel 1): No aparecen características que llamen la atención. Se toman recaudos básicos para no ser detectados, por ejemplo preservar los registros de fecha y hora.
- Modo oculto intermedio (nivel 2): Se mantiene una imagen parcial o total del objeto en el estado anterior a la infección para mostrarle al sistema, con el fin de ocultar las huellas del virus.
- Modo oculto avanzado (nivel 3): Los métodos de invisibilidad se utilizan específicamente para ocultar la infección ante las aplicaciones de seguridad.
Actualmente, esta clasificación no se utiliza mucho fuera de la comunidad antivirus. Sin embargo, es válida, no sólo en el contexto de los virus, sino también al referirse a otros códigos maliciosos que utilizan modo oculto, incluyendo rootkits.
Si consideramos que tales mecanismos fueron conocidos y tratados con perfecta adecuación por el software antivirus durante muchos años, uno se puede quedar tranquilo frente a las afirmaciones de que la tecnología rootkit se haya actualmente tan avanzada que sólo puede ser detectada por herramientas especiales y que la única manera de lidiar con ella es formateando el disco infectado y reinstalando el sistema operativo.
El software antivirus puede detectar con igual facilidad tanto a rootkits como cualquier otro programa dañino, antes de que el mismo tenga la oportunidad de instalarse, pero también en muchas circunstancias, luego de la instalación.
Por supuesto, esto no implica que no haya problemas de rootkit. Tampoco significa que todos los programas antivirus lidien con el problema en un mismo nivel de efectividad, o bien que trabajen con todos los tipos de rootkits con igual éxito. Sin embargo, el problema es controlable: el cielo no se está cayendo.
* Definiciones de Rootkit
Según Hoglund [4], un rootkit es “un conjunto de programas y código que permite una presencia permanente o consistente, no detectable en un ordenador”.
Esta es una definición de alto nivel, razonable, pero no disminuye la confusión existente entre la antigua técnica de modo oculto (Stealthing), los nuevos conjuntos de herramientas para modo oculto (Stealthkits), y los rootkits.
Consideremos entonces, una definición básica [5] de un conjunto de herramientas maliciosas: “Un paquete que contiene instrucciones, programas, o agentes autónomos que se aprovechan de las vulnerabilidades existentes”.
Un rootkit es un conjunto de herramientas usualmente asociado con el intento de obtener o mantener acceso privilegiado, manteniendo oculto el hecho de que el sistema ha sido comprometido.
Podría entonces definirse como un grupo de herramientas informáticas maliciosas, que permiten que un intruso, que logró acceder y permanecer en el sistema, oculte esta situación.
En realidad, el hecho es un poco más complicado, pero antes de avanzar en ese sentido, necesitamos comprender ciertos conceptos acerca de la administración de las cuentas de usuario y sus privilegios. Después de aclarar esto, podremos considerar conjuntos de herramientas específicos, en determinados entornos.
Por el momento, una definición práctica de un rootkit sería una clase de conjunto de herramientas instalado en un sistema con privilegios de usuario con el fin de:
- Mantener acceso y control privilegiado.
- Permitir al individuo y/o software hacer uso de dicho acceso del modo que prefiera.
- Ocultar o restringir el acceso a objetos tales como:
Procesos
Hilos de ejecución (threads)
Archivos
Carpetas / Directorios / Subdirectorios
Entradas de registro
Puertos abiertos
Controladores
Debemos tener en cuenta que estas definiciones no presuponen:
- Intrusión, es decir acceso no autorizado.
- Acciones o intentos maliciosos.
- “Rooting” o administración del directorio raíz (ganando un nivel de acceso y privilegio inapropiado y no autorizado). Analizaremos este concepto más adelante.
La mayoría de los sistemas operativos multiusuarios aplican alguna forma de ocultamiento y/o acceso restringido a los datos sensibles y a los sistemas de archivos críticos, sobre todo a los usuarios no privilegiados.
Esto se hace enteramente, por razones legítimas de seguridad: por ejemplo, para restringir a los usuarios finales el acceso a datos que no les corresponden, o para prevenir que borren o modifiquen archivos y programas que dañen al sistema o a la integridad de los datos.
En este sentido, la seguridad no presupone malicia en la parte del usuario final y podría fácilmente caer dentro de una versión ligeramente modificada del modelo de clasificación de stealth, citado anteriormente. Sin embargo, esta definición cubre el uso de técnicas stealth/rootkit más avanzadas, también debido a razones legítimas (leerá más adelante acerca del rootkit de Sony).
* Guía de 60 segundos para el manejo de cuentas
Incluso la PC contemporánea más humilde, posee recursos y poder de procesamiento equivalente o superior a muchas de las mini-computadoras de antaño. Lo que parece menos obvio es que hoy en día las computadoras personales han evolucionado desde sistemas autónomos de único usuario cuyas capacidades de trabajar en red son apenas equivalentes a aquellas de terminales “tontas”, a máquinas de clase de servidores.
Las PC y sistemas operativos modernos son capaces de soportar no sólo múltiples procesamientos y áreas de usuarios sino también procesamientos múltiples de usuarios concurrentes, a pesar de que la mayoría de los escritorios y PC portátiles son generalmente utilizadas por una única persona y, consecuentemente, por una sola cuenta por vez, a no ser que sean utilizadas para proveer un servicio en línea a usuarios remotos (literalmente, para actuar como servidor al mismo tiempo en que está siendo utilizada como una estación de trabajo).
Una cuenta de usuario no sólo permite acceso al sistema sino que además define lo que puede hacer un usuario en el sistema. La mayoría de los usuarios posee administración limitada, así como derechos o privilegios de acceso diferentes.
Los privilegios pueden ser destinados o bien quitados a los usuarios según su perfil y las tareas individuales que les corresponda, pero también en función de su membresía a grupos particulares. Los grupos pueden definirse según intereses o tareas compartidas, según la ubicación geográfica, o bien según la distribución de redes o subredes de trabajo.
Generalmente, los administradores tienen acceso a instalar o modificar programas, acceder a las cuentas de otros usuarios y otros derechos que los usuarios estándares no tienen. Asimismo sus derechos pueden ser obligatorios según la jerarquía: por ejemplo, un administrador puede tener privilegios totales en algunos servidores o dominios pero no en otros.
Normalmente, la cuenta “root” posee todos los privilegios del administrador (superusuario) en Unix/Linux y Sistemas no-Unix.
La cuenta del administrador en los sistemas Windows es más o menos equivalente a la cuenta root de Unix. Mientras que los sistemas OS X de Macintosh, basado en BSD Unix, el sistema de cuenta al cual se accede por medio de la interfase gráfica es algo diferente al Unix estándar. Sin embargo, el principio es el mismo.
* Privilegios del Usuario y Rooting
“Rooting” es un término aplicado a ganar acceso root y, consecuentemente, un control total sobre el sistema Unix (o Linux). Esto puede hacerse mediante el escalamiento de privilegios directos: esto es, explotación de las vulnerabilidades del sistema para lograr un nivel más elevado de privilegios.
Sin embargo, esto también puede hacerse por medio de la acción de virus, tal y como lo reportó Cohen [6] a principios de la investigación sobre códigos maliciosos.
El uso del término “root” suena extraño en el contexto de PC/Windows, donde el nombre de la cuenta root no tiene una significación particular. Aún así puede utilizarse como término genérico para lo que es ganar acceso privilegiado tanto a Unix/Linux como a sistemas no-Unix.
* Objetivos de los rootkits
El objetivo principal de un rootkit no es necesariamente acceder al directorio raíz del sistema anfitrión, si bien pueden incluir programas diseñados para obtener ese tipo de acceso administrativo. Preferentemente, su objetivo es habilitar al intruso para mantener y aprovechar un punto débil no detectado en el sistema.
Sin embargo, algunos autores hacen una distinción entre rootkits y conjuntos de herramientas para modo oculto (Stealthkits). Según ellos, un rootkit podría definirse como un conjunto de herramientas con funcionalidades que incluyen instrumentos para administrar el directorio principal del sistema [7].
Sin embargo, este trabajo se dirige a un determinado número de componentes y tipos de rootkits, en vez de aferrarse a una única y pura mirada de lo que es y no es un rootkit. Este acercamiento está basado no sólo en mantener claridad sino también las realidades y multiplicidades de las amenazas vistas en el mundo real.
Los objetivos secundarios de un rootkit pueden ser:
- Ocultar los rastros de un intruso en una computadora “rooteada” (comprometida).
- Ocultar la presencia de procesos o aplicaciones maliciosas.
- Cubrir las actividades dañinas como si fueran realizadas por programas legítimos.
- Ocultar la presencia de exploits, backdoors/trapdoors.
- Recolección de información a la que un intruso no podría tener acceso o acceso total de otra manera. Esto podría incluir datos acerca del sistema comprometido, del tráfico de la red y cualquier otro.
- Utilizar al sistema comprometido como intermediario para llevar a cabo otras intrusiones y/o ataques maliciosos.
- Guardar otras aplicaciones maliciosas y actuar como un servidor para armar botnets.
* Componentes tradicionales de los Rootkits de Unix
Los programas de utilidades troyanizadas son utilidades legítimas del sistema sustituidas de modo que esconden la presencia o huellas del intruso, permiten que el intruso acceda al sistema como guste, o bien reúnen información a la que el intruso no debería poder acceder.
En un ambiente Unix, las utilidades como “top”, “ps”, “login” y “passwd” son blancos comunes para esta sustitución [8], pero cualquier programa que pueda explotarse para lograr una root shell (ver “shell” en el glosario) es un blanco para un rootkit, ya que esto colabora con el intruso a que logre acceder al sistema comprometido o bien, a que mantenga un acceso privilegiado.
Estos no son, necesariamente, los medios utilizados para acceder al sistema comprometido, pero pueden tener una serie de otros usos posibles incluyendo el de comprometer otras cuentas y sistemas o bien, retomar el acceso privilegiado a pesar de los intentos por reparar una intrusión conocida.
Los programas que pueden ayudar al administrador a detectar la presencia de un intruso (por ejemplo, “last”, “ls”, “netstat” e “ifconfig”) [9] son, asimismo, el blanco para una sustitución. Los daemons o demonios (programas como “inetd.”, “rshd” y “syslogd”, que se ejecutan como servidores o como procesos del sistema -véase el glosario- en vez de ser llamados directamente por el usuario final) también pueden ser blancos, tanto para el ocultamiento como para los propósitos de recolección de información.
Las utilidades de borrado de registros (logs) y otras herramientas similares cubren las huellas del intruso, por ejemplo, borrando las entradas relacionadas con una intrusión desde el sistema de archivos log.
Otras formas de troyanos también pueden encontrarse en los rootkits clásicos, tales como aquellos utilizados para la recolección de información, como los capturadores de teclado (keyloggers) y de paquetes (packet sniffers) y aquellos que permiten un acceso futuro a voluntad (backdoors).
Un rootkit típico de Unix o Linux probablemente posea utilidades de sustitución tales como daemons de puerto/de shell, utilidades para escalar privilegios del usuario, utilidades para controlar programas de monitoreo (para ocultar archivos), packet sniffers para monitorear el tráfico de la red y utilidades troyanizadas para ocultar procesos, logs y conexiones.
* Rootkits de Windows
El término “Windows rootkit” es popularmente usado para describir programas que esconden procesos, archivos o claves de registro del sistema operativo. De hecho, los Windows rootkits pueden tener una funcionalidad muy similar a los Unix tradicionales, pero con los mecanismos correspondientes a la plataforma afectada.
Las versiones derivadas de Windows NT, tales como XP, utilizan un modelo de seguridad para múltiples cuentas muy similar a los sistemas anteriores como VMS y UNIX, aunque la terminología y mecanismos exactos sean muy diferentes. Las versiones anteriores de Windows resultan muy dependientes de las aplicaciones de terceras partes para su seguridad.
Así como los sistemas Unix, las versiones derivadas de Windows NT poseen grados de acceso privilegiado. Esto no sólo es una cuestión de acceso del usuario a las áreas de datos, sino también de acceso a los procesos del kernel. Las plataformas de NT derivadas soportan dos modos de ejecución (o niveles de privilegio): modo usuario y modo kernel.
Los procesadores modernos x86 soportan cuatro anillos de privilegio, pero Windows sólo soporta dos, ya que NT fue diseñado con la intención de ser portable a procesadores que no son de Intel. Los anillos de privilegios están pensados para proteger al kernel (anillo 0) de modo que los datos del sistema no puedan ser modificados o sobrescritos mediante un proceso sin privilegios. Las aplicaciones normales en un sistema de tipo NT corren en el anillo 3, que es el proceso con menor privilegio.
* Modo Usuario vs. Modo Kernel
Mientras que la distinción entre usuarios privilegiados y administradores no equivale a la distinción entre el modo Kernel (nivel 0) y el modo Usuario, existe una estrecha relación entre ambos.
El kernel puede describirse como el núcleo literal del sistema operativo [10]: los servicios del sistema corren en modo kernel, de modo que un usuario sin privilegios no pueda introducir modificaciones inapropiadas tales como remover o agregar drivers, mecanismos y programas sin autorización previa.
Generalmente, las aplicaciones del usuario se encuentran disponibles para todos los usuarios, y corren en modo Usuario, restringiendo la capacidad de una aplicación para causar un daño mediante modificaciones inapropiadas o inadvertidas a los procesos del sistema.
Los componentes rootkit del modo usuario corren como o dentro de las aplicaciones del usuario, modificando las llamadas a las APIs (Interfase de Programación de Aplicaciones) de los procesos de Windows y de sus aplicaciones.
Cada aplicación del usuario se ejecuta dentro de su propio espacio de memoria, de modo que un rootkit del modo usuario debe modificar el espacio de memoria de cada aplicación que está ejecutándose para poder infiltrarse en cada “vista” de la aplicación y de lo que está sucediendo en el interior del sistema operativo.
Para lograr esto, debe monitorear al sistema para poder modificar el espacio de memoria antes de que una aplicación recientemente abierta esté completamente lanzada. Uno de los medios comunes para lograr este objetivo es modificar las DLLs (Dynamic Link Libraries) del sistema en el momento en que se encuentran en ejecución.
El modo kernel permite acceso privilegiado al sistema de memoria y al conjunto completo de instrucción de la CPU, y un rootkit del modo kernel intercepta al modo kernel de APIs.
Así entonces, procesos, archivos y claves de registro resultan ocultos. Cuando una aplicación del modo usuario realiza un pedido de información, la información que es devuelta es filtrada para ocultar la evidencia.
Un rootkit del modo kernel posee un potencial casi irrestricto para dañar o manipular al sistema, en comparación con un rootkit del modo usuario, sin embargo, debido a su complejidad inherente, es más difícil de crear, instalar y de mantener.
Engancharse dentro del espacio kernel es más confiable y es más fácil procesar dentro de él ya que todos los procesos de núcleo comparten la misma dirección de espacio, pero debe hacerse por un usuario privilegiado (no necesariamente con su conocimiento).
Nótese que “hooking” (ver glosario) no es el único método que puede utilizar un rootkit para ocultar objetos. La Manipulación Directa de Objetos del Kernel (DKOM), en vez de filtrar la información retornada por el kernel, modifica directamente los “objetos ejecutivos”, creados por el sistema operativo para propósitos de auditoria, ocultando, de este modo, procesos y drivers.
Un rootkit que utiliza este método de ocultamiento puede esconder un proceso desvinculando al objeto asociado con el proceso [11] de modo que dificulte la detección de su presencia por parte de los software de seguridad.
* Rootkits persistentes vs. Rootkits no-persistentes
Muchos rootkits son persistentes: esto es, son guardados en el disco y se enganchan en la secuencia de arranque del sistema, de modo que sobreviven cuando se reinicia el sistema.
Los rootkits no-persistentes o “en memoria” no hacen esto: instalan su código directamente en la memoria, y no sobreviven al reiniciarse el sistema.
Esto dificulta su detección al no dejar huellas en el sistema que puedan ser detectadas mediante la exploración realizada al iniciar. Sin embargo, su funcionalidad se encuentra restringida por el tiempo limitado en que el sistema infectado se mantiene en línea (ya que si el sistema se reinicia, desaparece el rootkit): esto es una cuestión menor para aquellos sistemas que normalmente no son reiniciados (por ejemplo, servidores).
Aparentemente existe una tendencia hacia la no persistencia entre los buscadores de vulnerabilidades y aquellos que publican PoC (pruebas de concepto), probablemente atraídos por las ventajas del ocultamiento del malware, que no realizan cambios permanentes en el sistema de archivos.
Algunos troyanos han utilizado estos rootkits no-persistentes (por ejemplo, el rootkit FU) que cargan en la memoria una vez que ellos se encuentran instalados. Así entonces, el rootkit es utilizado para ocultar los procesos y archivos troyanos.
* Rootkits de Macintosh
Existen algunas PoC de rootkits para OS X de Apple. Su impacto ha sido bajo y su significación tiende a ser subestimada por la comunidad Apple ya que requieren de acceso root para instalarse -esto es, no pueden incrementar sus privilegios.
Comúnmente, se tiene la misma actitud en cuanto a los pocos ejemplos de malware Mac conocidos actualmente -sin duda, los usuarios Mac suelen negar la existencia de virus para OS X porque aquellos que existen requieren de la acción del usuario para infectar y reproducirse (sin embargo, esto también es cierto para muchos de los virus para Windows).
Si bien es más difícil que un usuario Mac trabaje como usuario privilegiado (a menos que realmente quieran) sería inocente pensar que no hay usuarios de Mac capaces de ser engañados y lograr que ejecuten un root temporalmente, y permitir entonces que se instale un rootkit.
Mientras los usuarios Mac sobreestiman la “superioridad” de Mac en el manejo privilegiado, no resulta particularmente común para los rootkits de Windows acceder al root -mejor dicho, auto-escalar a la categoría de administrador, sin la asistencia de la víctima (psicológicamente manipulada).
Sin embargo, en Windows es más habitual permitir al usuario de Windows ejecutar procesos con privilegios de administrador por defecto.
* Buenas intenciones y la experiencia del Rootkit de Sony
El uso de tecnología stealth o de tecnología similar a rootkit no se haya reducido a aquellos que irrumpen en los sistemas con propósitos de “hackeo”. Es claro que estas tecnologías pueden ser utilizadas por otras formas de malware, incluyendo virus, gusanos y troyanos como medios para ocultar la presencia de dicho malware.
“Greyware” (software que se encuentra en algún lugar entre el software legítimo y el malware) tales como adware, algunos tipos de spyware, “trackware”, etc., es cautelosamente referido por algunos de los proveedores de antivirus como algo similar a “programas potencialmente indeseados”.
Esto es para evitar posibles contiendas legales en las que puede discutirse (por el fabricante) que dicho software es legítimo. En algunos casos, hasta puede incluso, ser legítimo aquel software capaz de ser o bien que ha sido, convertido para llevar a cabo propósitos maliciosos. También esto depende, generalmente, de un determinado grado de ocultamiento.
Mientras que su presencia resulta a veces muy obvia, debido a la aparición de ventanas emergentes (pop-ups), redirección de URLs inesperados, etc., debe prestarse una considerable atención a detectar y/o eliminar archivos de esos programas.
Algunos personas del campo [4] se entusiasman en señalar que la tecnología rootkit (o semejante a la de rootkit) puede utilizarse para propósitos legítimos, y ciertamente debe ser para superar las deficiencias del sistema operativo cuando se trata de ocultamiento de datos. Algunas de las áreas a veces citadas son:
- Gestión de Derechos de Propiedad Intelectual
- Protección de programas ante la ingeniería inversa
- Calcular la amenaza de personas internas
- Rastreado de intrusiones
- Monitoreo del empleado
- Gestión de Derechos digitales
- Protección del software de seguridad de malware o de interferencias de usuarios inapropiados
- Backup de software y de datos
- Software de recuperación del sistema
- Codificación de datos y ocultamiento en sistemas de múltiples usuarios.
No todos están cómodos con la aplicación de la terminología vinculada al rootkit para dichas cuestiones, porque de alguna manera ensucia las definiciones. Después de todo, Windows emplea por si mismo y efectivamente, dichas técnicas por defecto para ocultar archivos importantes.
Sin embargo, algunos proveedores se hayan claramente cómodos tanto con los términos como con los conceptos. En octubre del 2005, Mark Russinovich anunció en su blog Sysinternals [12] el descubrimiento de lo que parecía ser un rootkit en su sistema.
Esto resultó ser el notorio rootkit de Sony, lo cual devino en una seria confusión para la opinión pública entre lo que es la Gestión de Derechos Digitales (DRM) y las tecnologías stealth/rootkit.
DRM puede definirse como la tecnología utilizada para controlar el acceso a datos y hardware de modo que se mantengan los derechos de editores/dueños del copyright.
Sony utilizó tecnología XCP (Extended Copy Protection) de First 4 Internet Ltd para el control de acceso de varios CDs de música.
Los discos protegidos por XCP restringieron el número de copias de CDs o DVDs que podían hacerse y también controlaron el “rippeado” de música a formato digital ajustable para guardarse o reproducirse en computadoras o reproductores de música portátiles, tales como el MPEG player.
Así, no fue posible reproducir un CD en una PC sin instalar previamente un software que luego esconde archivos, procesos y registros de llaves/valores modificando el camino de ejecución de las funciones API. Hizo esto utilizando la técnica común de rootkits de emparchar la Tabla de Servicios del Sistema (SST).
El derecho de Sony de restringir la distribución ilícita de sus productos no esta en duda, y no sería apropiado considerar su similitud a un rootkit en un sentido malicioso.
Sin embargo, muchos se sienten incómodos con el hecho de que modificaron su sistema de usuario final sin dejar en claro qué fue lo que estaban haciendo o bien, sin aportar un medio para la desinstalación. O peor aún, su solución no fue del todo concebida o codificada correctamente y creó una vulnerabilidad que fue aprovechada para ocultar otro malware.
El problema real fue que el “rootkit” fue aprovechado para ocultar un troyano que no tenía nada que ver con Sony ni con el software de protección de copiado.
Esto demuestra una sutil diferencia entre los intentos maliciosos y las vulnerabilidades inadvertidas: ciertamente, Sony y First 4 no tenían intenciones ni esperaban que su esquema DRM pudiese abrir un agujero que permitiese ser aprovechado por malware.
Tampoco Sony supo lidiar correctamente con la publicidad que surgió consecuentemente y su primer intento por corregir el problema resultó inadecuado. La desinstalación sólo estuvo disponible para aquellos que completaron un formulario, a quienes se les ofreció la elección de desinstalar software sin la posibilidad de seguir utilizando los CDs protegidos por XCP o bien, deshabilitar la función de ocultamiento.
El parche inicial fue pobremente testeado y tenia una funcionalidad de “llamado a casa” que no fue mencionada explícitamente [13] en el Acuerdo de Licencia de Usuario Final (EULA - End User License Agreement).
La tecnología XCP no ha impresionado a la comunidad rootkit en demasía (aquellos que poseen un profundo interés técnico en el no necesariamente ilegítimo uso de tecnología stealth o similar a rootkit) aunque sí enfocó las mentes de algunos creadores de malware en modos de hacer uso de vulnerabilidades. Sin embargo, posee una serie de implicaciones para la industria.
No es improbable que se realicen intentos por resolver el problema rootkit en términos legales [10]. Esto puede tomar la forma de una legislación específica contra ciertos tipos de rootkit maliciosos.
Si esto llegase a suceder, cualquier aplicación que utilice cualquier tipo de stealth para proteger código o datos propios o ajenos podría estar bajo riesgos legales. Esto tendría serias repercusiones en la Gestión de Derechos Digitales, que generalmente dependen de ciertos accesos ocultos o restringidos.
Aún si esas medidas no son llevadas a cabo, existen cuestiones referidas a cómo los productos son vistos por los usuarios potenciales.
Tome el ejemplo de la Papelera de Reciclaje protegida de Symantec (una papelera de reciclaje segura que permite la recuperación total de los archivos eliminados que podrían no ser recuperables por la papelera de reciclaje de Windows) que es una aplicación legítima, documentada y potencialmente útil. No obstante esta aplicación fue fuertemente criticada luego de los titulares acerca del “Symantec Rootkit”.
Esto tiene incidencias sobre otros tipos de software de seguridad, algunos de los cuales deben engancharse para controlar, por ejemplo, el monitoreo de ciertos archivos, utilizando técnicas de enganche a API similares a las rootkit aunque para propósitos de detección más que de ocultamiento.
Otra funcionalidad oculta es utilizada por programas de seguridad y otros software (por ejemplo, para evitar la ingeniería inversa).
* Metodología de detección de rootkit
Cada tanto alguien descubre que la detección de malware basada en firmas es defectuosa en tanto “no puede detectar nuevos virus”. Afortunadamente, por muchos años, los antivirus no se han confiado, únicamente, en la detección de virus conocidos.
Gran cantidad de tecnologías suplementarias (análisis heurístico, drivers genéricos, monitoreo de comportamientos, etc.) ya son utilizados para ampliar la detección de nuevas amenazas y variantes.
Así como con los virus stealth, el problema con los rootkits es el de “¿quién toca primero?”. Resulta difícil para un escáner detectar lo que ya está instalado y ocultando la evidencia de una infección.
Sin embargo, los proveedores de AV poseen muchos años de experiencia en encontrar los modos de sortear los mecanismos novelísticos de la parodia, una vez que el malware ha sido analizado.
Generalmente, los rootkits pueden ser detectados por escaneado del sistema de archivos y de la memoria, mediante lo que se conoce como análisis de firmas.
Una aplicación característica de las tecnologías suplementarias para detectar heurísticamente las actividades posibles de rootkit, depende en gran medida, de chequear disparidades entre una vista del sistema confiable (y relativamente precisa) y la vista modificada que presenta el sistema cuando es filtrada a través de la tecnología rootkit.
Clásicamente, los sistemas operativos Unix y similares han sido debidamente protegidos por lo que se conoce como tripwire o lo que la industria de antivirus denomina chequeo de integridad.
Aún puede utilizarse dentro del contexto de Windows, pero tiende a tener un alto grado de mantenimiento, ya que hay muchas instancias en las que los cambio de ambiente (ejecutables, ajustes de registro, archivos de configuración) pasan a ser rutina.
El crecimiento de los rootkits no-persistentes refuerza la necesidad del análisis de memoria y de la detección de los procesos de ocultamiento, en vez de confiarse en los cambios del sistema de archivos como indicadores de la infección.
También resulta deseable un acercamiento a una detección más proactiva. Cuanto más “inteligente” sea un producto para discriminar entre enganches maliciosos, ajustes del registro, etc. y los homólogos legítimos, más efectivo será en cuanto a su heurística.
En los últimos años, los antivirus se han convertido, relativamente, en adeptos a la exploración heurística de virus [16]. No obstante, se mantienen las dificultades de esta tecnología, ya que no es posible la identificación precisa del virus, y más aún cuando se trata de malware que no es virus.
Resulta exagerado afirmar que un rootkit puede ser removido mediante la reinstalación completa de los sistemas, ya que podría ser más efectivo descargar las imágenes de ciertos archivos, particularmente en casos donde estos ejecutables han sido emparchados o bien, alterados.
Para poder hacer esto sin dañar los datos y afectar la productividad se requiere de una cuidadosa política de backup (de datos, del sistema y de las aplicaciones de usuarios).
* Medidas preventivas
Existen contramedidas que tienen sentido para cualquier plataforma. La buena práctica de backup es una defensa vital contra amenazas y desastres no planeados y debería ser el fundamento de toda política integral de datos.
Los administradores no deberían correr como root/administradores a menos que estén ejecutando un sistema o aplicación que necesite de un acceso privilegiado para realizar el trabajo.
De ser posible, es fundamental utilizar una cuenta no privilegiada para el trabajo de rutina. Todas las plataformas comunes, modernas, permiten alguna forma de cambio de cuentas sin necesidad de reiniciar cuando se cambia de usuario y de privilegios.
Puede ser peligroso confiarse en el software de seguridad de fuente abierta. Muchos trabajos comunitarios han hecho un excelente trabajo, pero a veces es difícil valorar la competencia (y a veces las buenas intenciones) de todos los involucrados en dicho proyecto.
Ciertamente, resulta inapropiado para una organización del sector comercial o público, confiar su seguridad a un producto donde no se evidencian las garantías o responsabilidades de sus programadores.
Los usuarios hogareños o de PyMEs pueden estar menos preocupados por estas cuestiones pero tampoco van a desear quedar tambaleando por un software de prueba, o bien, inadecuado para su propósito.
También es importante la necesidad de conducir pruebas de vulnerabilidad, mantener políticas de actualizaciones de seguridad y evitar los engaños de la ingeniería social.
* Conclusión
A no entrar en pánico. El cielo no se está cayendo, ¿o si?
La tecnología “Blue Pill” de Joanna Rutkowska permite la creación del “100% de malware indetectable, lo cual no se basa en la oscuridad del concepto” [17] explotando la tecnología de virtualización de AMD SVP/Pacifica. A la fecha, no se ha publicado un detalle suficiente en lo que concierne a este descubrimiento y esto no es suficiente para evaluar correctamente los hechos. Aparentemente se basa en ejecutar un rootkit no-persistente dentro de una máquina virtual.
El rootkit SubVirt [18] también utiliza virtualización, pero es persistente (sobrevive al reiniciado). Es una prueba de concepto interesante, pero en ninguna medida es indetectable. Será interesante ver si “Blue Pill” es realmente “superior” en este aspecto.
No obstante, resulta seguro admitir que la carrera donde la ventaja suele pasar de las manos de los chicos malos a la de los chicos buenos y de nuevo a su inicio, continuará por un largo tiempo. Ni el pánico ni la autocomplacencia resultan apropiados, la vigilancia sí.
Muchos de los autores actuales de malware están utilizando la tecnología rootkit para ocultar sus creaciones, pero la prevalencia de dichos objetos es aún relativamente baja y la naturaleza esencial del malware tiende a prestarla a la detección con mayor facilidad debido a sus acciones.
Los reportes que alegan la muerte de los antivirus son muy exagerados: sin duda, el término “antivirus” genera, de alguna manera, confusiones cuando se habla acerca de las soluciones de seguridad actuales.
Hace tiempo que se acabaron los días de programas de antivirus que sólo detectan virus ignorando cualquier otra cosa.
Ahora, muchos productos son capaces de detectar una gran variedad de amenazas modernas de malware. Así como han evolucionado las amenazas, la industria antivirus no se ha quedado quieta, y algunos proveedores de AV han tenido un éxito significante en la detección de rootkits.
No obstante, no es seguro cerrar los ojos y esperar que alguien se haga cargo de todo por usted.
Los antivirus basados puramente en firmas no pueden proteger contra nuevas amenazas que son substancialmente diferentes de las amenazas conocidas, aún asumiendo que sean actualizados con regularidad.
Los usuarios finales deben utilizar productos que tengan un largo camino recorrido y probado usando heurística avanzada y otros métodos genéricos de detección proactiva y estar alerta en sus evaluaciones de tecnología contra amenazas y de las capacidades del producto.
* Acerca de los Autores
(*) David Harley ha investigado y escrito sobre código malicioso y otros temas de seguridad desde fines de los ochenta.
A partir del año 2001, trabajó en el Servicio Nacional de Salud del Reino Unido, como Gerente de infraestructura de seguridad nacional. Allí se especializó en la administración de aplicaciones maliciosas y todas las variantes de abuso de correo electrónico, además de dirigir el Threat Assessment Centre (Centro de Evaluación de Amenazas).
Desde abril de 2006 ha trabajado como autor y consultor independiente. Fue coautor de “Virus Revealed”, y colaboró en capítulos de varios libros de seguridad y educación para grandes editoriales. También ha redactado una gran cantidad de artículos y discursos para conferencias.
(*) Andrew Lee, posee certificación CISSP (Certified Information Systems Security Professional, Profesional en seguridad de sistemas certificado), y es Director técnico de investigación en Eset LLC.
Fue miembro fundador de la Red de intercambio de información antivirus (AVIEN, Anti-Virus Information Exchange Network), y su organización hermana AVIEWS (una comunidad virtual en línea para compartir esfuerzos y reducir el impacto de la difusión de código malicioso).
También es miembro de la Asociación de Investigadores de Antivirus de Asia (AVAR, Association of anti Virus Asia Researchers), y periodista de la organización WildList.
Previamente trabajó en el área de mayor exigencia en defensa contra programas maliciosos, como administrador de seguridad en una gran organización gubernamental.
Andrew Lee es autor de varios artículos acerca de aplicaciones maliciosas, y es un orador frecuente en conferencias y eventos, incluyendo AVAR, Virus Bulletin y EICAR (European Institute for Computer Antivirus Research, Instituto Europeo para la Investigación de Antivirus Informáticos).
* Referencias
1. University of Minnesota ResNet FAQ:
http://www.resnet.umn.edu/html/rn_security.html
2. “Viruses Revealed”. David Harley, Robert Slade, and Urs Gattiker (Osborne).
3. “Dr. Solomon’s Virus Encyclopaedia”. Dr. Alan Solomon and Dmitry Gryaznov. (S&S International).
4. “Rootkits are not Malware”. Greg Hoglund.
http://www.rootkit.com/newsread.php?newsid=504;
http://www.sysinternals.com/Forum/forum_posts.asp?TID=5798
5. “Using a ‘common language’ for computer security incident information”. By John D. Howard & Pascal Meunier, in Computer Security Handbook (4th Edition) ed. Seymour Bosworth & M.E. Kabay (Wiley).
6. “A Short Course on Computer Viruses” 2nd Edition. Dr. Frederick B. Cohen, Wiley;
“Models of Practical Defenses Against Computer Viruses”. Dr. Frederick B. Cohen:
http://all.net/books/integ/vmodels.html
7. http://blogs.securiteam.com/index.php/archives/382
8. Chey Cobb, Stephen Cobb, M.E. Kabay: “Penetrating Computer Systems and Networks”. In “Computer Security Handbook 4th Edition”, ed. Bosworth & Kabay (Wiley).
9. “Trojans” David Harley. In “Maximum Security” (SAMS).
10. “Rootkit Threats Explained”. Andrew Lee. Eset, 2006.
http://www.eset.com/joomla/index.php?option=com_content&task=view&id=1401&Itemid=5
11. “Windows Rootkits of 2005″ Parts 1-3. James Butler and Sherri Sparks.
http://www.securityfocus.com/infocus/
12. “Sony, Rootkits and Digital Rights Management Gone Too Far”. Mark Russinovich.
http://www.sysinternals.com/blog/2005/10/sony-rootkits-and-digital-rights.html;
The Root of All Evil? - Rootkits Revealed
15 “More on Sony: Dangerous Decloaking Patch, EULAs and Phoning Home”. Mark Russinovich. http://www.sysinternals.com/blog/2005/11/more-on-sony-dangerousdecloaking.html
13. http://cp.sonybmg.com/xcp/english/updates.html;
http://cp.sonybmg.com/xcp/english/form14.html
14. http://securityresponse.symantec.com/avcenter/security/Content/2006.01.10.html
15. “Hide ‘n Seek Revisited - Full Stealth is Back”. Kimmo Kasslin, Mika Stahlberg,
Samuli Larvala and Antti Tikkanen. In Proceedings of the 15th Virus Bulletin International Conference, 2005.
16. “The Art of Computer Virus Research and Defense”. Peter Szor (Addison-Wesley)
17. “Subverting Vista Kernel for Fun and Profit” Joanna Rutkowska.
http://theinvisiblethings.blogspot.com/.
18. “SubVirt: Implementing malware with virtual machines”. Samuel T. King, Peter M.
Chen, Yi-Min Wang, Chad Verbowski, Helen J. Wang, Jacob R. Lorch.
http://www.eecs.umich.edu/virtual/papers/king06.pdf
* Glosario
API hooking - En el contexto de los rootkits el hooking (enganche) describe a los siguientes procesos. Cuando se hace un pedido al sistema de información, se llama a la función API que llama al kernel y devuelve la información requerida a la aplicación a través del mismo “camino de ejecución”. El enganche describe el proceso de ocultamiento de datos desviando el camino de ejecución a través de un filtro que modifica los datos devueltos.
AV - Antivirus
Backdoor-Ali (AKA ierk o slanret) - Un troyano backdoor, generalmente considerado rootkit.
Daemon (demonio) - En Unix, es un servidor o proceso del sistema que funciona en el fondo, en oposición a ser ejecutado por el usuario. Por ejemplo, el programa ftpd es un daemon, un servicio del sistema que corre permanentemente. El programa ftp es un programa cliente, llamado por el usuario final, que utiliza los servicios de ftpd.
Deepdoor - Prueba de Concepto rootkit de Joanne Rutkowska.
Driver genérico o detección genérica - En antivirus, un término conveniente pero no usado universalmente para describir la firma de un virus o la definición generalizada para detectar una familia de virus o variantes, en vez de detectar una única variante singular. Esto es similar, pero no lo mismo, que la distinción entre identificación exacta y casi exacta, ya que esta última es generalmente asociada con la desinfección genérica. La discusión en profundidad acerca de estos conceptos, se encuentra más allá del contenido de este trabajo. Una buena fuente para más información es el trabajo de Peter Szor: “The Art of a Computer Virus Research and Defense”.
Governance (Información de gobernabilidad) - Marco de trabajo del manejo de información, particularmente en consideración de las cuestiones de política y conformidad.
Grayware, Greyware - Una clase de software de alguna manera difusa que puede incluir adware, spyware, programas de acceso remoto, etc. Tiende a incluir una funcionalidad de presunto ocultamiento.
Hacker Defender - Un Rootkit ampliamente encontrado.
Hacktool - Windows rootkit.
Heurística - Un término aplicado a una variedad de técnicas para detectar malware y variantes corrientemente desconocidas.
Keylogger - Software que usualmente monitorea el teclado (pero no necesariamente) para propósitos maliciosos (por ejemplo, robo de contraseñas).
LRK - Un Linux rootkit muy bien conocido y muy bien establecido. Descripto en: http://staff.washington.edu/dittrich/misc/faqs/lrk4.faq
Opener (AKA Renepo) - Malware de Macintosh a veces considerado como rootkit.
OS X - El sistema operativo actual de Macintosh, basado en BSD Unix pero con una interfase amigable de usuario típica de Mac así como el acceso al comando de línea Unix convencional.
OSXrk - Rootkit del OS X de Macintosh.
Shadow Walker - Rootkit PoC de James Butler y Sherri Sparks, parcialmente basado en el rootkit FU de Butler.
Shell - Procesador de comandos que interpreta los comandos tipeados en una terminal. Sin embargo, el término también se utiliza para describir un proceso o cadena de procesos lanzados por el procesador de comando. Esto también puede estar referido como “spawning un shell” o “shelling out”. Un proceso que hace uso de los privilegios root puede considerarse como un root shell. No siempre es necesario que un usuario corra como root por sí mismo: algunos programas pueden correr como root sin extender los privilegios root al usuario. Sin embargo este mecanismo puede ser usado por un intruso o programa malicioso para lograr root, en donde existen vulnerabilidades tales como overflows (desbordamientos). Si bien la terminología aquí utilizada es específica de Unix, existen procesos análogos en otros sistemas operativos.
Exploración por firmas - Estrictamente, es buscar la presencia de un virus mediante el chequeo de una secuencia de bytes relativamente estática. De hecho, aún el escaneado básico de AV utiliza, hoy en día, técnicas más complejas y efectivas, usando acercamiento algorítmicos, wildcards (comodines) y sucesivos. El término firma es generalmente devaluado en la investigación de antivirus debido a esta ambigüedad, si bien probablemente sea muy tarde para erradicarlo del uso y mal uso popular y promedio. Sin embargo, es utilizado rutinariamente en la detección de intrusiones.
Stealth - Adjetivo: usualmente utilizado en seguridad como una alternativa de “stealthy” (sigiloso), por analogía a “stealthy aircraft” (nave aérea sigilosa) y otro tipo de terminología militar relacionada con las estrategias de ocultamiento.
Stealthware - Software (generalmente malware) que utiliza técnicas stealth para ocultarse.
Trackware - Software que da cuenta de las pistas de información y uso del sistema.
WeaponX - Rootkit basado en Kernel para OS X.
Autores: David Harley y Andrew Lee (*)
(c) Video Soft - http://www.videosoft.net.uy
(c) VSAntivirus - http://www.vsantivirus.com