Un cortafuegos es una herramienta adicional de seguridad que adquiere creciente importancia a medida que se acelera el desarrollo de nuevos programas maliciosos. El cortafuegos bloquea él tráfico no deseado en redes, tanto entrante como saliente. Las pruebas de fugas, tema del presente artículo, evalúan la fiabilidad del cortafuegos en cuanto al control del tráfico saliente y a la protección contra fugas de datos.
¿Qué es un cortafuegos?
Una de las funciones de los modernos sistemas integrados de seguridad es permitir que el usuario controle el tráfico en la red, es decir, los datos enviados y recibidos a través de la red por aplicaciones ejecutadas en el ordenador del usuario. El componente que posibilita este control se llama cortafuegos (firewall). Hay cortafuegos de software y de hardware (http://en.wikipedia.org/wiki/Personal_firewall). Este artículo sólo abarca los cortafuegos de software.
Existen muchos cortafuegos de software, tanto comerciales como gratuitos. Un cortafuegos instalado en un gateway (un servidor que transfiere el tráfico entre diferentes redes) se conoce como un cortafuegos de servidor o de nivel de red. Un cortafuegos instalado en el ordenador del usuario se conoce como un cortafuegos personal, ya que en este caso se limita a proteger sólo el ordenador donde está instalado. Los modernos cortafuegos personales suelen venir integrados en sistemas de seguridad para ordenadores personales. Un ejemplo es el cortafuegos personal incorporado en Kaspersky Internet Security 7.0.
Figura 1. Componente incorporado en Kaspersky Internet Security 7.0
Para realizar su principal tarea, es decir, el control de las actividades en una red, los cortafuegos utilizan una lista de reglas que permiten o prohíben dichas actividades para diferentes aplicaciones. Una regla puede incluir varios parámetros, tales como la dirección en la que se transfieren los datos, protocolos de transferencia de datos (IP, TCP, UDP, ICMP, etc.), direcciones IP y puertos para ordenadores locales y remotos que intercambian datos.
Una regla para controlar las actividades en la red puede emplearse para todas las aplicaciones en el sistema. En este caso, se la conoce como regla de paquete.
Figura 2. Ejemplos de reglas para Microsoft Outlook en Kaspersky Internet Security 7.0
Los modernos cortafuegos pueden operar en dos modos distintos: interactivo, cuando se consulta al usuario los pasos a seguir, y no-interactivo. En el modo no-interactivo, el cortafuegos puede:
- permitir cualquier actividad que no esté prohibida por las reglas;
- bloquear cualquier actividad que no esté permitida por las reglas; o
- bloquear toda actividad en la red.
El principal modo operativo del cortafuegos es el interactivo, que también se conoce como modo de entrenamiento. En este modo, cuando el cortafuegos detecta alguna actividad en la red que no esté sujeta a ninguna regla predefinida, despliega una ventana de diálogo solicitando al usuario que permita o bloquee por una sola vez dicha actividad, o que cree una regla para ese tipo de actividad en la red.
Figura 3. Ventana de diálogo desplegada en el modo de entrenamiento del cortafuegos de Kaspersky Internet Security 7.0
Puesto que existen decenas de aplicaciones en el ordenador de un usuario regular, que generan diferentes tipos de actividades en la red mientras operan, el crear una lista de reglas que describan la actividad en la red de cada aplicación se convierte en una tarea difícil y morosa. Debido a esto, los desarrolladores de cortafuegos incluyen en sus productos bases de datos de reglas preinstaladas para aplicaciones conocidas de redes, tales como Internet Explorer, Microsoft Outlook, Generic Process for Win32 Services (svchost.exe), Microsoft Application Error Reporting (dwwin.exe) y muchas otras aplicaciones.
Figura 4. Lista de reglas preinstaladas de aplicaciones para el cortafuegos de Kaspersky Internet Security 7.0
El siguiente diagrama ilustra la idea fundamental de la operación de un cortafuegos en cuanto al monitoreo de datos salientes y a la protección contra fugas de datos desde el ordenador:
Figura 5. La idea fundamental de la operación de un cortafuegos
Un cortafuegos interpone una “pared” que separa las aplicaciones en el ordenador del usuario de otros ordenadores en la red local y en Internet. Para aplicaciones conocidas o fiables (en verde en la figura 5), existen reglas que permiten (“huecos” en la “pared”) que estas aplicaciones transfieran datos al exterior a través del cortafuegos. Cuando otra aplicación trata de establecer actividades en la red, estas se bloquean (“se estrellan contra la pared”) y no puede transmitir datos al exterior, ni recibir datos del otro lado de la pared. Asimismo, el usuario pueden crear nuevas reglas que permitan (nuevos “agujeros” en la “pared”) que las aplicaciones intercambien datos en la red.
Debe notarse que algunos cortafuegos también incluyen un componente de protección contra ataques de intrusos. Dicho componente analiza el tráfico saliente de la red en busca de paquetes de red que coincidan con muestras conocidas en la base de datos de ataques a redes. Este componente será objeto de un análisis detallado en futuros artículos.
¿Cómo mejora la seguridad un cortafuegos?
Un cortafuegos brinda una “capa” adicional de protección para bloquear programas maliciosos que no hubiesen sido detectados por el componente antivirus del sistema integrado de seguridad. Esta situación puede presentarse si la descripción de un programa malicioso aún no ha sido añadida a la base de datos antivirus (por lo que la protección tradicional en base a signaturas no funcionará), mientras que el programa no demuestre de manera inequívoca un comportamiento hostil o incluso sospechoso (y por lo tanto el analizador de comportamiento tampoco lo detectará).
¿Contra qué tipo de programas maliciosos puede proteger un cortafuegos? En realidad, contra cualquier programa malicioso en vigencia. Esto puede sonar demasiado audaz, pero es verdad: llla operación de la mayoría de los modernos programas maliciosos se basa en actividades en la red y por lo tanto el cortafuegos puede neutralizarlos.
Los gusanos de red distribuyen copias de sus códigos en redes locales y/o globales.
Los troyanos, que actualmente constituyen el 91.4% de todos los programas maliciosos, también intercambian datos en la red como parte de sus “funciones vitales”. Los programas troyanos incluyen:
- Puertas traseras (backdoors) – utilidades para la administración remota de ordenadores de la red. Las puertas traseras se controlan de modo remoto y un cortafuegos puede neutralizar con facilidad la funcionalidad de estos programas maliciosos.
- Troyanos PSW – son programas que “roban” todo tipo de información desde los ordenadores infectados. Tras robar los datos confidenciales, un troyano necesita un medio para hacer llegar esos datos al delincuente cibernético, y es en esta etapa que un cortafuegos puede bloquear todo intento por enviar dichos datos, logrando así proteger la información del usuario.
- Troyanos Downloaders – son programas que descargan nuevas versiones de programas maliciosos e instalan troyanos y programas publicitarios (adware) en el ordenador infectado. Toda operación de programas en esta categoría se basa en el intercambio de datos en la red, el cual un cortafuegos puede bloquear con facilidad.
- Troyanos Proxies – son programas que logran acceso invisible y anónimo a varios recursos de Internet. Estos programas se usan por lo general para enviar correo no deseado (spam). Así como sucede con los Troyanos Downloaders, un cortafuegos puede neutralizar con facilidad la actividad en la red que los Troyanos Proxies requieren para su operación.
- Troyanos Espía – son programas que realizan espionaje electrónico en ordenadores infectados. Los datos, incluyendo la información ingresada por medio del teclado, imágenes de pantalla capturadas, listas de de aplicaciones activas y acciones de los usuarios respecto a estas aplicaciones, se guardan en un archivo en el disco duro y se envían regularmente al delincuente cibernético. En esta etapa, el cortafuegos puede neutralizar todo intento de un programa desconocido para enviar datos. Esto previene que la información del usuario que el troyano robó llegue al autor del programa malicioso.
Debe notarse que los cortafuegos no pueden usarse para combatir virus informáticos clásicos porque a diferencia de los gusanos, los virus no recurren a recursos de la red para penetrar otros ordenadores y, a diferencia de los troyanos, no necesitan enviar datos o recibir instrucciones.
Un cortafuegos es un sistema de seguridad difícil de sortear. Para evadir la protección antivirus y el bloqueador de comportamiento, los autores de programas maliciosos pueden poner a prueba sus nuevos productos realizando todos los cambios necesarios hasta que ambos componentes de seguridad fallen en la detección del código malicioso. Resulta muy difícil superar un cortafuegos con dicho método. Si un programa requiere de cierto tipo de actividad en la red, resulta muy difícil ocultar esta actividad al cortafuegos. La única manera de hacerlo es a través de fugas.
¿Qué son fugas y qué son las pruebas de fugas?
Una fuga es una tecnología para burlar los mecanismos de control de actividades en la red que posee un cortafuegos; dicha tecnología permite que las aplicaciones que no estén sujetas a ninguna restricción en la lista de reglas del cortafuegos logren enviar datos fuera de la red. El cortafuegos no puede impedir que estos datos se envíen y, en el modo de entrenamiento, tampoco informa al usuario sobre esta actividad en la red.
Un cortafuegos bien diseñado no debería permitir ninguna fuga. Debería ser capaz de identificar todo intento de actividad entrante y saliente en la red. Por esta razón se utilizan dos criterios para analizar la calidad de la protección brindada por un cortafuegos: La calidad de la protección entrante, es decir, protección contra penetraciones provenientes del exterior de la red, y la calidad de la protección saliente, es decir, protección contra fugas de información desde el ordenador.
Se realizan varios análisis de puertos abiertos (por ejemplo, ShieldsUP!, http://www.grc.com/default.htm, Quick test http://www.pcflank.com/test.htm, etc.) para comprobar la protección del cortafuegos contra penetraciones del exterior.
El análisis de la efectividad de la protección del cortafuegos contra fugas de datos se realiza mediante pruebas de fugas – pequeños e inofensivos programas que implementan una o más fugas. Tales programas los desarrollan, por lo general, investigadores y expertos en seguridad.
Resulta evidente que la única manera para implementar una fuga es utilizando los “huecos” existentes (reglas de permisos) para aplicaciones conocidas. Sin embargo, hay que “persuadir” al cortafuegos de que es una aplicación fiable la que inicia la actividad en la red. Existen varios métodos que se pueden usar para ello. Antes de abordar estos métodos, veamos los principios básicos en los que se basa la ejecución de aplicaciones en los modernos sistemas operativos.
Figura 6. Cómo funciona una fuga
Principios de la ejecución de aplicaciones en los modernos sistemas operativos
La CPU de un ordenador personal puede ejecutar varios juegos de instrucciones que se almacenan en la memoria RAM del ordenador. Los juegos de instrucciones se agrupan en hilos de ejecución que pertenecen a procesos que se ejecutan en la memoria RAM.
Los archivos ejecutables incluyen juegos de instrucciones para la CPU y cuando se lanza un archivo ejecutable, un nuevo proceso aparece en el sistema. Un proceso también puede crear otro proceso. El sistema operativo mantiene un árbol de procesos en la memoria RAM.
Debe notarse que el espacio para direcciones en la mayoría de los procesos del sistema incluye no sólo el código del archivo ejecutable de la aplicación, sino también el código de varias bibliotecas DLL (dynamic-link libraries). Las bibliotecas DLLs se usan para almacenar ciertas funciones compartidas que varias aplicaciones utilizan. Esto permite que los autores eviten la duplicación del mismo código de programa en diferentes archivos ejecutables. Se puede cargar la misma biblioteca en el espacio para direcciones de diferentes procesos.
Figura 7. El fundamento de la ejecución de una aplicación
Clasificación de las tecnologías de fugas
Ideas fundamentales en la implementación de fugas
En esta sección analizaremos las tecnologías que una aplicación maliciosa puede utilizar para “burlar” un cortafuegos. La situación inicial aparece ilustrada en la figura 8; se muestran también procesos de aplicaciones fiables en la memoria RAM reconocidas por el cortafuegos, así como el proceso de una aplicación desconocida (maliciosa).
Figura 8. Situación inicial para la implementación de una fuga
El cortafuegos bloqueará todo intento de una aplicación desconocida para iniciar por sí misma actividades en la red, o bien desplegará una ventana de diálogo consultando al usuario sobre las acciones a seguir.
Hay tres ideas principales que posibilitan evadir la protección del cortafuegos:
- Engañar al cortafuegos, es decir, persuadirlo de que es una aplicación confiable la que inicia actividades en la red, sustituyendo el código ejecutable de una aplicación confiable en el disco duro o sustituyendo los datos de un proceso fiable en la memoria RAM con los datos del procesos desconocido.
- Ejecutar un código en nombre de la aplicación confiable mediante la inyección de una DLL o de una pequeña porción del código de la aplicación desconocida en el espacio para direcciones de una aplicación confiable. El cortafuegos no podrá distinguir entre la actividad en la red de tales elementos inyectados y la actividad normal en la red de la aplicación confiable.
- Uso de interfaces documentadas provistas por aplicaciones confiables. Al usar dichas interfaces, una aplicación confiable iniciará la actividad en la red, pero estará bajo el control de la aplicación maliciosa que logrará transferir datos a través de estas interfaces a destinatarios externos sin llegar a activar las alarmas del cortafuegos.
Existen seis tecnologías de fugas que implementan las tres ideas arriba mencionadas:
№№ | (engaño) | (ejecución de códigos a nombre de una aplicación confiable) | (uso de interfaces documentadas) |
1 | Sustitución | ||
2 | Lanzamiento | ||
3 | Inyección DLL | ||
4 | Inyección de códigos | ||
5 | Servicios del navegador | ||
6 | Servicios del sistema |
A continuación aparecen descripciones más detalladas de estas tecnologías y sus posibles implementaciones.
Tecnologías de fugas
Sustitución
Sustitución del código ejecutable de una de las aplicaciones confiables en el disco duro o sustitución de los datos de un proceso confiable en la memoria RAM por datos de un proceso desconocido. La idea en este método es “persuadir” al cortafuegos de que es un proceso confiable el que inicia la actividad en la red.
Se pueden identificar tres métodos de sustitución:
- sustitución del archivo ejecutable de uno de los procesos confiables en el disco duro (implementado en la prueba de fugas Runner, referirse a la sección Pruebas de fugas);
- sustitución del nombre del archivo de la aplicación desconocida por el nombre del archivo de una aplicación confiable (Leaktest);
- sustitución de los datos de un proceso confiable por los datos del proceso desconocido en una imagen de proceso cargada en la memoria RAM (Coat).
El siguiente gráfico ilustra la primera variante de sustitución:
Figura 9. Método basado en la sustitución del archivo de un proceso confiable en el disco duro
Lanzamiento
Lanzamiento de una aplicación confiable con parámetros de línea de órdenes. La idea en este método se basa en el hecho de que la mayoría de los navegadores pueden aceptar la dirección de un sitio web para abrirlo como un parámetro de línea de órdenes. Si la página web incluye una rutina (script) en el servidor de Internet (por ejemplo, cgi), el espacio de direcciones también puede incluir parámetros que la rutina utilizará como insumo. Estos parámetros pueden incluir información confidencial, por ejemplo, datos robados por un programa espía. Es importante notar que el navegador ejecuta las actividades en la red con toda normalidad, de manera que las reglas del cortafuegos siempre lo permitirán.
Para evitar que el usuario note la ventana del navegador, por lo general éste se lanza en modo oculto (Ghost, TooLeaky, Wallbreaker [1]).
Los códigos maliciosos también pueden activar el navegador mediante otros procesos en vez de hacerlo de manera directa. Por ejemplo:
- lanzar el navegador utilizando el proceso Windows Explorer.exe (Wallbreaker [2]);
- lanzar el navegador utilizando el proceso Windows Explorer.exe que se activa mediante la instrucción intérprete cmd.exe (Wallbreaker [3]);
- lanzar el navegador utilizando el mecanismo de programación de tareas de Windows (Wallbreaker [4]); En este caso, la secuencia en la que se lanza el proceso es como sigue: AT.exe -> Svchost.exe-> Cmd.exe->Explorer.exe-> IExplore.exe.
El gráfico a continuación ilustra este método:
Figura 10. Método basado en el lanzamiento de una aplicación confiable con parámetros de línea de órdenes
Inyección DLL
Inyección de una biblioteca DLL en el espacio de direcciones de un proceso confiable. Este método consiste en introducir la DLL de un programa malicioso en el espacio de direcciones de un proceso confiable. Existen varias formas de lograr esto, pero los principales métodos son:
- instalación de un interceptor global cuyo código se encuentre en la biblioteca DLL (CPILSuite [2,3], FireHole, pcAudit, pcAudit2);
introducción del valor de registro de un sistema para añadir una biblioteca DLL a la lista de DLLs que el sistema carga automáticamente en cada nuevo proceso: la llave AppInit_DLLs (Jumper).
Debe notarse que ambos métodos son legítimos y documentados.
El siguiente gráfico ilustra este método de fugas:
Figura 11. Método basado en la inyección de una DDL en un proceso confiable.
Inyección de códigos
Inyección de un código en el espacio de direcciones de un proceso confiable sin utilizar una DLL. Este método consiste en inyectar un código ejecutable en el espacio de direcciones de un proceso confiable. Tras la inyección, este código puede dar inicio a cualquier actividad en la red, ya que el cortafuegos lo considerará como la actividad de una aplicación confiable. A diferencia del método de inyección de DLL, no es evidente que esta sea una operación legítima, aunque sí existen métodos documentados para la inyección de códigos en otros procesos de aplicaciones. Programas legítimos, como por ejemplo los debuggers, a veces utilizan esta inyección de códigos, pero en general son los programas maliciosos los que más se valen de ellos.
Existen varios métodos para inyectar códigos en procesos de otras aplicaciones. A continuación se brinda algunos ejemplos:
- cargar un proceso confiable en la memoria RAM y parchar la memoria del proceso (AWFT [1], CPIL, DNStest). Puede estar precedido por un intento de evitar que el cortafuegos detecte esta operación mediante la desactivación de los interceptores del cortafuegos (CPILSuite[1]);
- encontrar un proceso confiable en la memoria RAM e inyectarle un código (Thermite);
- cargar un proceso confiable en la memoria RAM y crearle una línea de ejecución remota (AWFT [2,3]);
- cargar un proceso confiable en la memoria RAM, crearle una línea de ejecución remota, cargar otro proceso confiable desde esta línea de ejecución y parchar su memoria antes de ejecutarlo (AWFT [4,5,6]);
- usar la función SetThreadContext para controlar una línea de ejecución en un proceso confiable (CopyCat).
Los procesos atacados casi siempre son los de los navegadores de Internet (Internet Explorer, etc., pruebas AWFT [1,2,4], CopyCat y Thermite), la interfaz de usuario del sistema operativo (explorer.exe – AWFT [3,4], CPIL y CPILSuite [1]) y del proceso svchost.exe, que es el principal proceso para los servicios de Windows cargados desde DLLs (prueba DNStest).
El siguiente gráfico ilustra este método de fugas:
Figura 12. Método basado en la inyección de códigos maliciosos en un proceso confiable
Servicios del navegador
Uso de interfaces de programa para controlar el navegador de Internet. Este método consiste en aprovechar los diversos mecanismos disponibles en Windows para la interacción entre los procesos de diferentes componentes/aplicaciones. Estos mecanismos incluyen:
- envío de mensajes de Windows a la ventana del navegador de Internet, cambiando el valor en el espacio de direcciones del navegador; la activación del botón GO desvía el navegador hacia la dirección recién insertada (Breakout);
- uso de la interfaz DDE (Intercambio Dinámico de Datos o Dynamic Data Exchange) del navegador (http://en.wikipedia.org/wiki/Dynamic_Data_Exchange). La biblioteca DDE se desarrolló para expandir las capacidades del sistema de mensajes de Windows, permitiendo que dos aplicaciones realicen un intercambio dinámico de datos durante su ejecución (la compatibilidad de DDE con diferentes versiones de Internet Explorer se encuentra descrita en el artículo http://support.microsoft.com/kb/q160957) (Surfer, ZAbypass, WB [1,3,4]; CPILSuite [3]);
- uso del navegador como servidor de automatización (el mecanismo OLE de automatización se basa en el modelo COM, http://en.wikipedia.org/wiki/Object_Linking_and_Embedding, http://en.wikipedia.org/wiki/Component_object_model). La automatización OLE es una extensión de la tecnología DDE. Todos los modernos navegadores llevan incluida la interfaz COM (http://en.wikipedia.org/wiki/Component_object_model) que otros programas pueden usar como servidor de automatización. Existen dos componentes COM de Microsoft Internet Explorer en aplicaciones externas (http://msdn2.microsoft.com/en-us/library/aa741313.aspx):
- WebBrowser Control, implementado en el archivo shdocvw.dll (OSfwbypass),
- La interfaz MSHTML implementada en mshtml.dll (PCFlank).
El siguiente gráfico ilustra este método de fugas:
Figura 13. Método basado en el uso de interfaces de programa para controlar el navegador
Servicios del sistema
Uso de interfaces de programa provistos por los servicios del sistema. Este método es similar al método de los servicios del navegador arriba mencionado. La diferencia radica en que las interfaces de programa utilizadas son provistas por los componentes del sistema operativo y no por el navegador de Internet. Windows XP y Windows Vista tienen al menos tres interfaces:
- BITS (Background Intelligent Transfer Service, http://msdn2.microsoft.com/en-us/library/Aa362827.aspx) es un servicio inteligente de descarga de archivos utilizado por Windows Update y Windows Server Update Services. Permite la descarga de parches y actualizaciones en segundo plano, sin sobrecargar los canales de comunicación. También reinicia de manera automática las descargas si se pierde la conexión (BITSTester);
- Las funciones de Windows DNS API (http://msdn2.microsoft.com/en-us/library/ms682100.aspx) pueden usarse para realizar solicitudes DNS recursivas a un servidor de nombres de Internet. Se puede enviar datos adicionales, incluyendo la información confidencial del usuario, como parte del paquete DNS. Un delincuente cibernético que controle un servidor de nombres que procese solicitudes DNS puede obtener esta información procesando este paquete DNS especialmente conformado (DNStester);
- La interfaz para el manejo de los elementos del escritorio de Windows y los fondos de pantalla (IActiveDesktop, http://msdn2.microsoft.com/en-us/library/ms647199.aspx) pueden usarse para establecer una página HTML como fondo de pantalla del escritorio de Windows tras la activación de Windows Active Desktop. Esta página HTML puede incluir elementos que vinculen a recursos externos, propiciando que estos recursos se carguen al activarse un nuevo protector de pantalla para el escritorio (Breakout2).
Diferencias entre las actuales clasificaciones de fugas
Debe notarse que la clasificación arriba descrita casi no se diferencia de las clasificaciones de tecnologías de fugas publicadas en sitios web dedicados al análisis de fugas.
Hasta donde sabemos, el primer sitio web en publicar una investigación sistemática de fugas fue http://www.firewallleaktester.com. En http://www.firewallleaktester.com/categories.htm pueden verse clasificaciones de fugas.
En 2006, otro sitio web hizo su aparición: http://www.matousec.com. Uno de sus principales proyectos es Windows Personal Firewall Analysis (http://www.matousec.com/projects/windows-personal-firewall-analysis/introduction-firewall-leak-testing.php). La clasificación de fugas usada en esta investigación es similar a la utilizada en http://www.firewallleaktester.com, pero existen algunas diferencias.
A continuación se explican las diferencias entre ambas clasificaciones. Nuestra clasificación no considera estos métodos:
№№ | Método según www.firewallleaktester.com |
Método según www.matousec.com |
1 | Hidden rules (Reglas ocultas) | Default Rules (Reglas por defecto) |
2 | Direct network interface use (Uso directo del interfaz de red) | Own Protocol Driver (Controlador del propio protocolo) |
3 | Timing attack (Ataque temporizado) | |
4 | Recursive requests (Solicitudes recursivas) | |
5 | Registry injection (Inyección de registros) | |
6 | Un juego de métodos: Windows Messaging + OLE | Mensajes de Windows y Automatización, DDE |
7 | Cese de la intercepción (unhooking) |
Estos métodos no se consideran en nuestra clasificación por las siguientes razones:
- El método de las reglas ocultas no constituye en sí una fuga (ver más arriba la definición de fuga) ya que no implementa ninguna tecnología para evitar el mecanismo de control de actividades en la red del cortafuegos. Verifica el juego de reglas de paquete (aplicadas a todas las aplicaciones en el sistema) que el cortafuegos utiliza por defecto. Si uno de los puertos de red se encuentra abierto para todas las aplicaciones, las aplicaciones maliciosas también podrán utilizarlo para enviar datos a destinatarios fuera de la red.
- El método del uso directo de la interfaz de red vulnera los mecanismos de filtrado de tráfico en la red en el nivel “bajo”. El método consiste en escribir una pila alternativa de controladores de red que procesen paquetes provenientes del adaptador de red en paralelo con las pilas del sistema (TCP/IP, etc.). Este método no está considerado en nuestra clasificación porque actualmente no hay implementaciones (pruebas de fugas) que logren ejecutarse bajo los modernos sistemas operativos, como Windows XP / Vista. Además, es improbable que aparezcan en el futuro nuevas pruebas de fugas (o programas maliciosos) que utilicen este método, ya que es mucho más complicado que cualquier otro método para la implementación de ataques de fugas. Sin embargo, debe notarse que hay tres pruebas de fugas que funcionan bajo el ahora obsoleto Windows 9x y que utilizan este método de fugas:
- MbTest (autor: “mbcx8nlp”, 2003), usa la biblioteca Winpcap,
- Outbound (autor: HackBusters, 2001),
- YALTA [2] (autor: Soft4ever, 2001).
- El método de ataques temporizados no se considera en nuestra clasificación como un método separado ya que actualmente ningún cortafuegos puede ser vulnerado mediante la tecnología en la que se basa (reinicio de sus propios procesos para cambiar el PID, es decir, el identificador de procesos).
- En nuestra clasificación, el método de solicitudes recursivas está incluido en el grupo Servicios del Sistema.
- En nuestra clasificación, el método de inyección de registro se clasifica como una variante del método de inyección de DLL, ya que la esencia de este método no radica en la modificación del registro, sino en la inyección de una DLL en procesos confiables. Es evidente que uno de los métodos para lograr esto es mediante el uso una llave especial de registro.
- En nuestra clasificación, los métodos agrupados bajo el título Windows Messaging + OLE están incluidos en los grupos Servicios del Navegador y Servicios del Sistema. Creemos que esto es más lógico puesto que en vez de corresponder a los métodos técnicos de implementación (envío de mensajes, etc.), refleja más bien la esencia de la tecnología de fugas a un nivel superior: mediante el uso de interfaces de programa para controlar el navegador o mediante el uso de los servicios de red del sistema.
- Cese de la intercepción (unhooking) Este método se basa en la siguiente idea: Para asegurar la protección contra algunas tecnologías de fugas, los cortafuegos usan los interceptores de funciones del sistema. Si estos interceptores se desactivan (“unhooked”), el cortafuegos no podrá evitar las fugas. Se desprende de esta descripción que este método no es una fuga en sí, y por lo tanto no figura en nuestra clasificación de fugas. Sin embargo, cuando se usa en combinación con cualquier otro método real de fugas, ayuda a verificar la efectividad de la protección del cortafuegos contra ese método de fugas bajo las más duras condiciones, imitando una situación en la cual un código malicioso bloquea activamente la funcionalidad del cortafuegos.
El uso de fugas en programas maliciosos
Hace pocos años, los cortafuegos apenas se utilizaban en la protección de ordenadores personales. Por esta razón, sólo un reducido número de programas maliciosos usaba las fugas para vulnerar la protección del cortafuegos. Sin embargo, los autores de programas maliciosos recientemente han estado adoptando herramientas de automatización para crear con rapidez nuevas variantes de sus programas maliciosos, y el número de programas maliciosos se ha ido incrementado de manera sostenida. Debido a ello, las herramientas que brindan seguridad personal a los ordenadores personales han adquirido mayor importancia, lo que ha popularizado los cortafuegos.
En vista de esta alza en popularidad de los cortafuegos, los autores de programas maliciosos están recurriendo activamente a las fugas para vulnerar su protección. A continuación, ofrecemos algunos ejemplos de programas maliciosos reales que utilizan cada uno de los seis principales métodos de fugas.
№№ | Método | Programa malicioso | Fecha de detección | Descripción |
1 | Sustitución | Backdoor.Win32.Bifrose.ae | 26 de marzo de 2007 | Reemplaza a MSN Messenger (C:Program FilesMSN Messengermsnmsgr.exe) con una copia de sí mismo |
2 | Lanzamiento con parámetros de líneas de ejecución | Trojan-Spy.Win32.Agent.se | 26 de julio de 2007 | Lanza Internet Explorer en una ventana oculta con el enlace a un archivo HTML en la línea de ejecución |
3 | Inyección DLL | Trojan-Spy.Win32.Goldun.pq | 11 de junio de 2007 | Registra una DLL en la llave de registro AppInit_DLLs y la utiliza para interceptar el tráfico en Internet |
4 | Inyección de códigos en un proceso confiable | Trojan-Spy.Win32.Delf.uc | 19 de enero de 2007 | Crea un hilo en el proceso winlogon.exe y lo utiliza para enviar datos a través de Internet |
5 | Servicios del navegador | Trojan-PSW.Win32.LdPinch.bix | 4 de enero de 2007 | Usa la interfaz IWebBrowser2 COM para enviar la información recogida |
6 | Servicios del navegado | Trojan-Downloader.Win32.Nurech.br | 4 de enero de 2007 | Usa la interfaz IWebBrowser2 COM para enviar la información recogida |
Debe notarse que varios tipos de fugas sirven a diferentes propósitos y se usan en programas maliciosos para lograr variados objetivos. De manera específica:
- Los parámetros de líneas de ejecución del navegador sólo permiten enviar un número limitado de datos, mientras que un programa malicioso puede usar la tecnología BITS para enviar archivos muy grandes desde el ordenador del usuario.
- Los métodos basados en la inyección de DLL o de códigos en procesos confiables también se emplean para otros propósitos distintos a vulnerar cortafuegos; pueden usarse no sólo para enviar datos en nombre de procesos confiables sin el conocimiento del usuario, sino también para realizar una variedad de operaciones.
- Las interfaces de control del navegador (por ejemplo, WebBrowser control) se pueden usar no sólo para enviar datos en nombre de Internet Explorer, sino también para controlar la copia en ejecución del navegador (por ejemplo, cerrar todas las ventanas en las cuales la dirección de la página no satisfaga ciertas condiciones), para modificar el documento cargado en el navegador, para desplegar ventanas de mensajes en el navegador, etc.
Pruebas de fugas (Leak tests)
La tabla a continuación muestra una lista de pruebas de fugas conocidas actualmente y los métodos de fugas que someten a prueba. La mayoría de las pruebas en esta lista se pueden descargar desde http://www.matousec.com/projects/windows-personal-firewall-analysis/introduction-firewall-leak-testing.php o http://www.firewallleaktester.com.
№№ | Nombre | Autor | Método | Año |
1 | AWFT [6] | José Pascoa | Inyección de códigos | 2005 |
2 | BITSTester | Tim Fish | Servicios del sistema | 2006 |
3 | Breakout | Volker Birk | Servicios del navegador | Datos no disponibles |
4 | Breakout2 | Volker Birk | Servicios del sistema | Datos no disponibles |
5 | Coat | David Matousec | Sustitución | 2006 |
6 | CopyCat | «Bugsbunny» | Inyección de códigos | Datos no disponibles |
7 | CPIL | Comodo | Inyección de códigos | 2006 |
8.1 | CPILSuite [1] | Comodo | Inyección de códigos + Lanzamiento | 2006 |
8.2 | CPILSuite [2] | Comodo | Inyección DLL + Lanzamiento | 2006 |
8.3 | CPILSuite [3] | Comodo | Inyección DLL + Servicios del navegador | 2006 |
9 | DNStest | Jarkko Turkulainen | Inyección de códigos | 2004 |
10 | DNStest | Jarkko Turkulainen | Servicios del sistema | 2004 |
11 | FireHole | Robin Keir | Inyección DLL | 2002 |
12 | FPR (38) | David Matousec | Cese de la intercepción (unhooking) | keine Angabe |
13 | Ghost | Guillaume Kaddouch | Lanzamiento | keine Angabe |
14 | Jumper | Guillaume Kaddouch | Inyección DLL | 2006 |
15 | LeakTest | Steve Gibson | Sustitución | 2002 |
16 | OSfwbypass | Debasis Mohanty | Servicios del navegador | 2005 |
17 | pcAudit | Internet Security Alliance | Inyección DLL | 2002 |
18 | pcAudit2 | Internet Security Alliance | Inyección DLL | Datos no disponibles |
19 | PCFlank | www.pcflank.com | Servicios del navegador | 2006 |
20 | Runner | David Matousec | Sustitución | 2006 |
21 | Surfer | Jarkko Turkulainen | Servicios del navegador | 2004 |
22 | Thermite | Oliver Lavery | Inyección de códigos | 2003 |
23 | TooLeaky | Bob Sundling | Lanzamiento | 2001 |
24 | Wallbreaker [4] | Guillaume Kaddouch | Lanzamiento | 2004 |
25 | YALTA | Soft4ever | Reglas por defecto | 2001 |
26 | ZAbypass | Debasis Mohanty | Servicios del navegador | 2005 |
En la siguiente tabla se muestran las categorías de pruebas de fugas según nuestra clasificación:
№№ | Tecnología | Pruebas de fugas |
1 | Sustitución | Coat, LeakTest, Runner |
2 | Lanzamiento | Ghost, TooLeaky, Wallbreaker |
3 | Inyección DLL | CPILSuite [2, 3], FireHole, Jumper, pcAudit, pcAudit2 |
4 | Inyección de códigos | AWFT, CopyCat, CPIL, CPILSuite [1], DNStest, Thermite |
5 | Servicios del navegador | Breakout, OSfwbypass, PCFlank, Surfer, ZAbypass |
6 | Servicios del sistema | BITSTester, Breakout2, DNStester |
Interpretación de los resultados de las pruebas de fugas
¿Qué beneficios ofrecen las pruebas de fugas en las pruebas comparativas de cortafuegos que las usan? Ante todo, estas pruebas ayudan a determinar la calidad integral de la protección y facilitan la elección de un sistema integrado para la protección del ordenador del usuario.
Al escoger un sistema de protección para su ordenador personal, el usuario a menudo se fija sólo en características como el nivel de detección del producto y el tiempo de respuesta a nuevas amenazas (por ejemplo, en base a los resultados de las pruebas que conducen http://www.av-comparatives.org y http://www.av-test.de). Sin embargo, esto no es suficiente para determinar la calidad de los modernos sistemas de protección. La calidad del componente proactivo incluido en las soluciones antivirus, la efectividad con la que se tratan los ordenadores infectados, la habilidad para combatir rootkits activos, y la calidad de autoprotección garantizadas por cada producto son otras características que revisten igual importancia, pero a las que los autores de pruebas comparativas no les dan la atención que se merecen. Al seleccionar un producto de seguridad integrada, también se debería analizar otros componentes adicionales como un sistema antispam y un cortafuegos.
Tal como se dijo líneas arriba, hay dos criterios para juzgar la calidad de la protección brindada por un cortafuegos: el control de los datos entrantes y el control de los datos salientes. Un buen rendimiento en las pruebas de control de datos salientes significa que el cortafuegos no es un mero componente de relleno en un producto antivirus, sino que brinda un nivel adicional de protección capaz de prevenir que los datos confidenciales del usuario sean enviados a delincuentes cibernéticos, incluso si los componentes antivirus fracasan al neutralizar un programa troyano.
Creemos que los productos que recibieron las calificaciones de Muy Bueno y Excelente en las pruebas de fugas conducidas por http://www.matousec.com/projects/windows-personal-firewall-analysis/leak-tests-results.php brindan adecuada protección al usuario. Si la protección brindada por un producto recibió la calificación Bueno, o peor aún, Pobre o Muy Pobre, significa que los autores de programas maliciosos pueden vulnerar, mediante cualquier método, el cortafuegos incluido en el producto.
Conclusiones
Hoy en día, un cortafuegos es un componente indispensable en los sistemas integrados de seguridad informática. Aun los más modernos sistemas operativos, como Windows Vista, no pueden bloquear por sí mismos todos los tipos de fugas (aunque desde Windows XP SP2, Windows ha venido introduciendo un cortafuegos cuya funcionalidad se ha incrementado de manera significativa en Windows Vista).
Según los resultados de una prueba que Guillaume Kaddouch condujo en marzo de 2007 (http://www.firewallleaktester.com/articles/vista_and_leaktests.html), Windows Vista Ultimate 64-bit bloqueó sólo 9 pruebas de fugas con su configuración predeterminada (las pruebas de fugas bloqueadas aparecen en verde en la tabla de resultados).
№№ | Nombre | Notas |
1 | Sustitución | Coat, LeakTest, Runner |
2 | Lanzamiento | Ghost, TooLeaky, Wallbreaker |
3 | Inyección DLL | CPILSuite [2, 3], FireHole, Jumper, pcAudit, pcAudit2 |
4 | Inyección de códigos | AWFT, CopyCat, CPIL, CPILSuite [1], DNStest, Thermite |
5 | Servicios del navegador | Breakout, OSfwbypass, PCFlank, Surfer, ZAbypass |
6 | Servicios del sistema | BITSTester, Breakout2, DNStester |
El nuevo sistema operativo está a todas luces mejor protegido gracias a numerosas mejoras, incluyendo UAC, IE modo protegido, Service hardening y Kernel Patch protection (Vista x64). Sin embargo, incluso Windows Vista necesita protección de terceras partes para lograr el nivel necesario de protección contra fugas.
En el futuro, los programas maliciosos recurrirán a nuevos métodos para vulnerar los mecanismos de protección del nuevo sistema operativo y los mecanismos de protección existentes. Esta es la razón por la que la función del cortafuegos como un nivel adicional de protección continuará cobrando importancia. Resulta evidente que los autores de programas maliciosos no cesarán en el uso de tecnologías de fugas para vulnerar los cortafuegos. Esto significa que las pruebas de fugas se convertirán en un método crucial para comprobar la confiabilidad de la protección de un ordenador.
Las pruebas de fugas como método para evaluar la efectividad de un cortafuegos