LAS MAQUINAS ZOMBIES EN LOS ATAQUES DDoS. por FERRADAL, Gustavo Andrés F-1675/6 IGLESIAS, Natalia Celeste I-0306/9 MICHELINO, Juan Pablo M-3623/4 Monografía propuesta para la asignatura Sistemas Distribuidos. Carrera Ing. Electrónica. FCEIA. U.N.R 2006 Universidad Nacional de Rosario Resumen MAQUINAS ZOMBIES EN LOS ATAQUES DDOS Por Gustavo Ferradal, Natalia Iglesias y Juan Pablo Michelino Asignatura Optativa: Sistemas Distribuidos Departamento de Sistemas e Informática Imagine un ejército compuesto por cientos de miles de robots a la espera de las maquiavélicas órdenes de un criminal; peor aun, imagine que estos robots luzcan absolutamente inofensivos o que ni siquiera sepan que forman parte del ejército malhechor, hasta que el “líder invisible” dé la orden, activando una programación latente que los obligue a llevar a cabo órdenes de destrucción contra objetivos públicos. Esto, que pareciera el argumento de una película hollywoodense, es una realidad que ya se encuentra entre nosotros. Extraído de: “Una invasión de robots amenaza la red”. pc-news.com i TABLA DE CONTENIDO Estrategia de ataque de DDoS............................................................ 9 Clasificación según la vulnerabilidad explotada.............................. 12 Calificación según la taza dinámica de ataque.................................13 Capitulo 4.....................................................................................15 Conclusión....................................................................................30 Introducción Como dice un famoso refrán: "la unión hace la fuerza". Esta frase tan sabia nos explica de la importancia que tiene el trabajar unidos. Si muchas personas se unen con un fin benéfico, probablemente concretarán sus deseos. Una situación opuesta es la que se ve en una Botnet: El trabajo conjunto de muchas máquinas se utiliza para un fin dañino y, agravando la situación, las mismas máquinas que participan de éste ataque también son víctimas de algún atacante. A estas víctimas que son usadas, es a las que llamamos "máquinas zombis". En la presente monografía intentamos explicar como organizar un conjunto de máquinas zombis para llevar a cabo un ataque. Explicaremos como un atacante puede armar una red de máquinas esclavas, como es la comunicación entre ellas y como se mantiene escondida toda la Botnet. Si bien, una Botnet puede usarse para diversos fines maléficos, centramos nuestra atención en un ataque de Denegación de Servicio Distribuido (DDoS por sus siglas en inglés) Capitulo 1 ¿QUÉ ES UNA MAQUINA ZOMBIE? Las maquinas zombies son computadoras infectadas por algún tipo de malware, al servicio de terceras personas para ejecutar actividades hostiles con total desconocimiento del propietario o administrador del equipo. El nombre procede de los zombies o muertos vivos esclavizados, figuras legendarias surgidas de los cultos vudú. Grupos organizados pueden controlar redes de miles de decenas de computadoras infectadas, zombie, que pueden utilizarse para: • Generar envío de SPAM, a través de una sofisticada estructura de envío de correo basura. • Servidores de pornografía • Gestión de servicios y recursos destinados al fraude como puede ser el phishing • Distribución de malware • Generación de gran cantidad de trafico proveniente de múltiples direcciones de Internet, dirigidos todos a una sola red o servidor. Esto genera lo que se conoce como Distributed Denial of Service o DdoS y se usa para chantajear, haciendo que las victimas deban pagar para asegurarse tener activa la red. 2 Las maquinas zombies se siguen comportando mas o menos de la misma forma que lo hacen comúnmente para no despertar ninguna sospecha a sus usuarios y así seguir buscando victimas, infectarlas y continuar con este proceso de forma exponencial de infección. Los equipos que actúan como maquinas zombies se encuentran dentro de una red de bot conocida como bonets. 3 Capitulo 2 BotNet ¿Qué es una botnet? La palabra Botnet hace referencia a la unión de dos palabras del idioma americano: “Bot”, versión abreviada de la palabra Robot, y “Net”, que significa red. Por lo tanto, una Botnet es una red compuesta por robots. Computadores que han sido comprometidos por un código malicioso que ha sido instalado, y son todos controlados, como robots, de forma remota con fines maliciosos. Estas redes constituyen la mayor amenaza actual en Internet, debido a que pueden atacar coordinadamente cualquier dirección IP y hacerla colapsar con ataques distribuidos de negación de servicio (DdoS). Además, pueden servir para difundir correo spam, e incluso pueden ser usados como centros de distribución de malware. Una vez que son ejecutados, estos ataques pueden ser devastadores. Un botnet es parecidos a un troyano en el sentido que se hacen pasar por programas válidos para que sean instalados en equipos víctimas, y pueden permitir que el atacante tenga absoluto control sobre el equipo. No es necesario tener un amplio conocimiento informático para poder desarrollar y controlar uno de estos “ejércitos”: con conocimientos rudimentarios y los kits disponibles en Internet, se puede desarrollar uno. El objetivo inicial de los Bots, era el de preservar nombres de usuario favoritos en los canales de chat IRC, al finalizar la sesión uno activaba el Bot, el cual tomaría el nombre y permanecería conectado al IRC, preservando el nombre 4 favorito y evitando que cualquier otro usuario pudiera tomarlo mientras uno permanecía desconectado. Actualmente, los Bots son amenazas múltiples, que combinan aspectos del spyware, spam, malware y DDoS, y son distribuidos por virus y gusanos. Miles de computadores pueden ser rápidamente infectados, formando redes de Bots (Botnets). La misión de los botnet es la de gestionar las maquinas zombies creando una infraestructura común de mando y control. ¿Cómo se crea una botnet? Normalmente se utilizan lenguajes Orientados a Objetos para construir estas botnet ya que resultan mucho más cómodos. Para la plataforma Windows, es fácil que las personas se bajen programas desde Internet sin saber exactamente qué es lo que hace el programa. Este software contiene un bot, una vez que el programa se ejecuta, puede escanear la red de área local, disco duro, puede intentar propagarse usando vulnerabilidades conocidas de Windows, etc. En entornos más serios como UNIX, GNU/Linux o BSD la forma más clásica de ataque a servidores para construir y expandir una Botnet es por telnet o SSH (puertos 23 y 22 respectivamente) por medio del sistema prueba-error, probando usuarios comunes y contraseñas al azar contra todas las IPs que se pueda de forma sistemática o bien mediante ataques a bugs muy conocidos dado que los administradores descuidados dejan sin parchear o corregir vulnerabilidades en sus servidores causando un gran perjuicio para ellos (consumo de ancho de banda, tiempo de CPU, pérdida de prestigio, repercusiones legales...) y para el resto de Internet (spam, dDOS...). Las compañías deben estar alertas, ya que sus activos se ven amenazados en dos frentes: 1) los atacantes intentan tomar control de los computadores de la red para utilizarlos como parte de ataques coordinados; o 2) los activos de la 5 organización pueden ser el objetivo de un ataque coordinado de DDoS. En la mayoría de los casos, los Bots implantados se aprovechan de vulnerabilidades en los sistemas operativos para distribuirse. Incluso se han detectado casos donde el Bot aprovecha una vulnerabilidad en el sistema, se instala, y después aplica las actualizaciones necesarias para corregir dicha vulnerabilidad, para que el computador parezca que no es vulnerable al Bot. Una vez infectado, lo primero que debe hacer un computador es reportarse con el hacker creador. Debido a que los Bots utilizan IRC para comunicarse, dado que de esta forma pueden expandirse mas rápidamente y pasar desapercibidos puesto que el atacante actúa como un usuario mas del canal. Generalmente se establece un enlace de comunicaciones TCP por el puerto 6667, el puerto IRC por defecto. Esta comunicación es necesaria ya que por esta vía el hacker ejecutará las instrucciones necesarias para llevar a cabo su ataque. Cuando se ha establecido la comunicación con el hacker, el computador permanecerá inactivo hasta que el hacker ejecute las instrucciones necesarias. El resultado de estas instrucciones variará enormemente dependiendo del tipo de ataque que el hacker tenga en mente: pudiera ser un DDoS, haciendo peticiones legítimas contra un objetivo determinado, y eventualmente colapsándolo. Como se ha mencionado, las Botnets pudieran ser utilizados como medio de distribución de malware, y se dice que son ideales para esta función, ya que permiten que un malware, tal como un virus, pueda ser distribuido simultáneamente por miles de equipos, dándole una ventana de acción muy corta a las compañías antivirus para liberar actualizaciones. Finalmente, podría ser utilizado para distribuir correos SPAM y de phishing. Esto hace casi imposible la detección del atacante original, ya que el mismo no forma parte de la Botnet. Actualmente, más del 70% de todo el correo SPAM es originado por Botnets. 6 Existen paginas en Internet donde se pueden encontrar foros y tutoriales con información de cómo montar una bonet en forma practica. Para mayor información consultar la bibliografía. 7 Capitulo 3 Taxonomía de mecanismos de ataques DdoS Información General de un ataque DDoS. Para denegar el servicio, el atacante envía un stream de paquetes que logra consumir recursos claves de la víctima, así logra que para ésta sea muy difícil legitimar a los clientes, o provee al atacante de acceso ilimitado a la máquina víctima y así poder infligir daños arbitrariamente. Arquitectura de Internet. Internet fué diseñado teniendo en mente una red funcional y no una red segura. Su diseño sigue un paradigma extremo a extremo: Los host extremos que se están comunicando despliegan complejas funciones para acceder a ciertos servicios, mientras que la red subyacente intenta hacer el mejor esfuerzo para lograr una comunicación entre los extremos. Internet es administrado de una forma distribuida y es por ello que no es posible establecer una política de seguridad pareja entre sus miembros. Existen varios puntos que abren la posibilidad de un ataque de DDoS: a) La seguridad en Internet es altamente interdependiente: Sin importar que tan seguro sea el sistema de la víctima, el éxito de un ataque depende del estado de seguridad del resto de Internet. 8 b) Los recursos en Internet son limitados: Cada host de la red tiene un número limitado de recursos que pueden ser consumidos por un número lo suficientemente grande de usuarios. c) El poder de muchos es mayor que el poder de pocos: Una acción coordinada y simultánea de muchos participantes hacia una víctima puede ser demoledor. d) Inteligencia y recursos no van de la mano: El paradigma de comunicación extremo a extremo hace que todo el esfuerzo intelectual sea colocado en los host a fin de garantizar el servicio deseado. Así mismo, la necesidad de una gran taza lleva al diseño de una red con un gran ancho de banda. Con esto, clientes maliciosos pueden hacer mal uso de la abundancia de recursos de una red mal diseñada para realizar un bombardeo de paquetes hacia su víctima. Estrategia de ataque de DDoS Para realizar un DDoS, el atacante necesita “entrenar” a un gran número de “máquinas agentes” (slave). Éste proceso generalmente se hace en forma automática a través de un escaneo remoto para encontrar algún “hueco” en su seguridad. Es entonces cuando la máquina vulnerable es “explotada” usando su talón de Aquiles para ganar acceso a ella y lograr infectarla con el código malicioso. La fase de explotación/infección es realizada en forma automática y ésta máquina puede ser utilizada para entrenar futuros agentes. Es el agente el que realiza el ataque hacia la víctima. El atacante usualmente esconde la identidad del agente por medio de un “spoofing” (engaño) en el campo “source address” de los paquetes. Taxonomía de un ataque DDoS. Para poder realizar una taxonomía de un ataque de Denegación de Servicio Distribuido, se ha tenido en cuenta: 9 a) Los medios utilizados para preparar y concretar el ataque. b) La característica del ataque c) Efecto que tiene en la víctima Clasificación según el grado de autonomía: Durante el proceso de preparación, el atacante necesita localizar agentes probables e infectarla con el código malicioso. Esta primera clasificación se hace según el grado de autonomía del ataque: Ataque manuales: El atacante hace un escaneo remotamente en busca de vulnerabilidades, quiebra la defensa de la víctima, instala el código malicioso y luego comanda a distancia el ataque. Ataque Semiautomático: Para un ataque semiautomático, la red DDoS necesita una máquina maestra y una agente (esclavo, demonio, etc). El atacante despliega código automatizado para el escaneo y comprometimiento de las máquinas y luego instala el código malicioso. A través de la máquina maestra, especificará el tipo de ataque, la dirección de las víctimas y comandar remotamente a los agentes quienes bombardean con paquetes a la víctima. Según el tipo de comunicación entre los agentes y el maestro, el ataque semiautomático se divide en: a) Ataque con comunicación directa: En éste caso, el agente y el maestro necesitan conocer sus identidades a fin de poder comunicarse. Esto se logra a través de una dura codificación de la dirección IP del maestro, dentro del código malicioso, que luego se instalará en la máquina agente. Cada agente “se presenta” al maestro quien almacena su sus direcciones IP. b) Ataque con comunicación indirecta: En éste caso, el agente se comunica con el maestro a través de un canal IRC oculto. Es muy difícil localizar al 10 maestro, debido a que se usa un servicio legítimo para comunicar y coordinar una botnet. Ataque automático: En éste último caso, se automatiza la fase de ataque, eliminando la necesidad de una comunicación entre el maestro y el agente. El momento de inicio del ataque, el tipo de ataque, duración y dirección de las víctimas son programados dentro del código malicioso. Suelen dejarse “puertas traseras” abiertas dentro de la máquina comprometida a fin de habilitar un futuro acceso y modificación del código malicioso. Tanto el automático como el ataque semiautomático entrenan máquinas agentes quienes ejecutan técnicas de escaneo y propagación automática. Según la estrategia de escaneo se puede diferenciar entre: a) Escaneo aleatorio: Durante un escaneo aleatorio, cada host comprometido prueba una dirección IP, elegida en forma aleatoria, de un espacio de direcciones. b) Escaneo por “lista negra” (hitlist): Una máquina ejecutando un escaneo sobre todas las direcciones de una lista (la “hitlist”) externamente suministrada. Cuando ésta detecta una máquina vulnerable, envía la mitad de la lista inicial al receptor y mantiene la otra mitad. Ésta técnica permite una gran velocidad de propagación (debido a su propagación exponencial) sin colisiones durante la fase de escaneo. c) Escaneo topológico: El escaneo topológico usa la información dentro de una máquina comprometida (direcciones de e-mail, direcciones IP, etc) para localizar nuevos objetivos. d) Escaneo permutado: Durante un escaneo permutado, todas las máquinas comprometidas comparten una combinación pseudos-aleatoria de espacios de direcciones IP comunes. Cada dirección IP es mapeada a un índice en esta permutación. Una máquina comienza el escaneo usando el índice 11 computado desde su espacio de direcciones. Cuando encuentra una nueva máquina ya infectada, elige un nuevo punto de inicio aleatorio. Este escaneo tiene el efecto de permitir un escaneo semi coordinado y sensitivo mientras mantiene los beneficios de un sondeo aleatorio. e) Escaneo en una subred local: El escaneo dentro de una subred local puede ser agregado a las técnicas anteriormente descriptas. Buscando objetivos que residen dentro de la subred a la que el host comprometido pertenece. Según las técnicas de mecanismos de propagación del código malicioso, se puede diferenciar entre: a) Con una fuente central de propagación: El código maliciosos reside dentro de un servidor central. Luego de comprometer una máquina, el código se descarga por medio de un mecanismo de transferencia de archivos. b) Propagación encadenada: El código malicioso es descargado desde una máquina que fue usada para explotar el sistema. La máquina infectada se convierte entonces en la fuente para un nuevo paso en la propagación del código. c) Propagación autónoma: La propagación autónoma elimina el paso de recuperación de archivos, inyectando directamente instrucciones de ataque dentro del host objetivo durante la fase de explotación. Numerosos gusanos de e-mail utilizan esta propagación. Clasificación según la vulnerabilidad explotada Según la vulnerabilidad que es objetivo de nuestro ataque, se puede diferenciar entre: Ataque de protocolo: El ataque de protocolo explota una característica específica o un problema no resuelto de una implementación del protocolo instalado en el host de la víctima logrando así un consumo excesivo de sus 12 recursos. Algunos ejemplos de éste método son: ataque TCP SYN, ataque CGI request y ataque de autenticación de servidor. Ataque por fuerza bruta: El ataque por fuerza bruta se logra por el inicio de un gran conjunto de transacciones aparentemente legítimas. Una upstream network normalmente puede entregar un volumen de tráfico tan grande que la red víctima no puede manejar, esto desgasta sus recursos. Según la relación existente entre el contenido de los paquetes con los servicios de las víctimas, podemos dividir los ataques por fuerza bruta en: a) Ataques filtrables: Éste tipo de ataque usa paquetes falsos o que nos son críticos para los servicios de la víctima. El problema puede ser filtrado con un firewall. b) Ataques no filtrables: Los ataques no filtrables usan paquetes que requieren servicios legítimos de las víctimas. Filtrando entonces paquetes que concuerdan con éste ataque, se puede denegar el servicio tanto al atacante como a clientes legítimos. La línea que separa un ataque de protocolo y uno por fuerza bruta es muy fina. Oponerse al ataque por protocolo con una modificación de la implementación, facilita al ataque correspondiente de la categoría fuerza bruta. Por ejemplo, si la víctima utiliza TCP SYN cookies [1] para combatir un ataque TCP SYN, ésta todavía será vulnerable a un ataque TCP SYN que genere mas request que la red pueda manejar. Sin embargo, el ataque por fuerza bruta necesita generar un volumen mucho mayor de paquetes que el ataque por protocolo para poder realizar algún daño. Así es que, modificando el protocolo implementado, la víctima empuja los límites de vulnerabilidad un poco mas arriba. Calificación según la taza dinámica de ataque Dependiendo de la taza dinámica de ataque, se puede dividir entre: 13 Ataque a taza continua: Una vez que se ordena a los agentes que realicen el ataque, las máquinas agentes generan paquetes de ataque con toda su fuerza. Este repentino diluvio hace estragos rápidamente en los servicios de las víctimas y ponen al descubierto el ataque. Ataque a taza variable: Un ataque a taza variable es más precavido comprometiendo a sus víctimas, de ésta forma disminuye la posibilidad de ser detectados y que se tomen medidas al respecto. Según el mecanismo con el que se varía la taza de carga, se puede distinguir entre: a) Ataque a taza incremental: Con un ataque a taza incremental lleva a un lento agotamiento de los recursos de la víctima. b) Ataque a taza fluctuante: En éste caso se ajusta la taza según el comportamiento de la víctima, ocasionalmente alivian el efecto para eliminar la posibilidad de ser detectado. Clasificación según el impacto Según el impacto que el ataque tenga en la víctima, se diferencia entre: Ataque disruptivo: El objetivo de éste tipo de ataque es denegar completamente el servicio de da la víctima a sus clientes. Ataque degradante: El objetivo de un ataque degradante es el de consumir parte (presumiblemente constante) de los recursos de la víctima. Al no llegar a una total denegación de servicio, éste tipo de ataques pueden permanecer sin ser detectados por un período de tiempo mas prolongado. El daño infligido sobre la víctima podría ser inmenso: perdida de clientes a un servidor de Internet, compra de ancho de banda innecesario, etc. 14 Capitulo 4 Sistemas Distribuidos de Denegación de servicios. Ataques de denegación de servicios. Con el paso del tiempo, y considerando la evolución que ha sufrido Internet, el enfoque sobre posibles ataques ya no es tanto el intentar acceder a un sistema, sino el imposibilitar su acceso. Es por ello que los hackers adoptan una nueva estrategia de ataque: provocar la denegación de servicio o imposibilidad de prestar el servicio del sistema atacado. La denegación de servicio, por tanto, sólo busca el impedir que los usuarios de un determinado sistema no puedan acceder a él, y por consiguiente a los servicios que proporciona. En las circunstancias actuales de globalización, el daño económico y de imagen que sufre una empresa por un ataque de este tipo probablemente sea mucho mayor que el derivado de una simple intrusión. El primer sistema de denegación de servicio fue el denominado mail bombing, consistente en el envío masivo de mensajes a una máquina hasta saturar el servicio. Hoy en día, los mecanismos de ataque por denegación de servicio resultan bastante más sofisticados, empleando debilidades de los protocolos TCP/IP para generar auténticas avalanchas de paquetes sobre un sistema concreto, o 15 simples estados de inconsistencia que provocan que el proceso que atiende el servicio quede inoperante. El caso del smurfing, o amplificación de peticiones broadcast, ha sido ampliamente utilizado en ataques por denegación de servicio, y como se verá, es relativamente fácil prevenir el no ser usados en un ataque de este tipo. Este sistema de ataque se basa en transmitir a la red una trama ICMP correspondiente a una petición de ping. Esta trama lleva como dirección de origen la dirección IP de la víctima, y como dirección de destino la dirección broadcast de la red atacada. De esta forma se consigue que por cada trama que se transmite a la red, contesten a la víctima todos aquellos sistemas (relays) que tienen habilitado el poder contestar a paquetes destinados a la dirección broadcast de la red. Se define como factor de amplificación a la relación entre tramas recibidas por la víctima por cada trama transmitida por el demonio. La solución a este problema es relativamente simple: hay que configurar los sistemas para que no contesten a tramas ICMP cuyo destinatario sea una dirección de broadcast. El problema se convierte en irresoluble cuando los usuarios no quieren o no saben cómo hacerlo. Ataques distribuidos de denegación de servicios. A continuación describiremos cinco sistemas básicos de ataque distribuido de denegación de servicios: 16 TRINOO El proyecto TRINOO también conocido como TRIN00, es una herramienta que implementa un ataque de denegación de servicio mediante un modelo jerárquico maestro / esclavo (master/slave). El caso típico de un ataque sería: En una cuenta de un sistema asaltado se deposita un repositorio de herramientas precompiladas: rastreo, ataque, sniffers, root kits, así como demonio y maestro de Trinoo. El sistema idóneo para un asalto dispondrá de un gran número de usuarios, y por consiguiente, una gran potencia de proceso y amplio ancho de banda en sus comunicaciones. Posteriormente, desde este ordenador comprometido se procede al rastreo (scanning) de otros ordenadores con vulnerabilidades conocidas en servicios básicos (FTP, RPC, NFS…) para proceder a su infección. Con los resultados obtenidos del rastreo se genera una lista de ordenadores vulnerables dónde se ejecutarán los programas para obtener el acceso (exploits). Para verificar que ordenadores de la lista han podido ser captados, el ordenador de origen suele tener un proceso demonio (daemon) que escucha el puerto TCP 1524, dónde se enviará una señal por cada ordenador infectado. Una red Trinoo esta formada por Atacantes, Maestros, Demonios y Víctimas, y tendría una estructura como la reflejada en la siguiente figura. 17 El atacante controla uno o más maestros. Cada maestro controla a gran cantidad de demonios. Los demonios son los que reciben la orden coordinada de realizar un ataque contra una o más víctimas. La comunicación entre los distintos niveles de realiza de la siguiente forma: Atacante a Maestro: 27665/TCP Maestro a Demonio: 27444/UDP Demonio a Maestro: 31335/UDP La comunicación entre el atacante y el maestro, así como la del maestro y el demonio están protegidas por claves de acceso. Las claves se emplean en forma simétrica, de manera que se almacenan cifradas tanto en el maestro como en el demonio, procediéndose a su comparación con la clave que se proporciona y transporta sin cifrar por la red. El ataque de Trinoo es del tipo de inundación por tramas UDP. En los ataques de este tipo, el atacante envía tramas UDP con dirección de origen falsa y que consigue enlazar el servicio de generación de caracteres (chargen) de una de las víctimas con el servicio de eco (echo) de la otra. La primera comienza a enviar caracteres que la segunda responde. El volumen de 18 tráfico se va incrementando hasta que los dos sistemas terminan por inundar la red. TRIBE FLOOD NETWORK También conocido como TFN, esta compuesto por un conjunto de programas clientes y demonios que implementan herramientas de denegación de servicios distribuidas, capaces de generar ataques por flujo de paquetes ICMP, SYN, UDP y ataques estilo Smurf (falsificar respuestas de eco ICMP desde la victima a una serie de direcciones broadcast). Así como también obtener bajo demanda un root shell mediante un demonio que escucha el puerto TCP especificado, lo que permite al atacante tener acceso ilimitado a la maquina cuando lo desee. La arquitectura de funcionamiento TFN es bastante parecida a la de TRINOO. Una red TFN esta formada por Atacantes, Clientes, Demonios y Victimas. El atacante controla uno o más clientes, los cuales pueden controlar varios demonios. Los demonios son quienes reciben las instrucciones para realizar un ataque coordinado basado en paquetes hacia una o más victimas por cliente. 19 El control remoto de una red TFN es logrado vía ejecución de comandos de línea desde el programa cliente lo cual puede lograrse a través de alguno de los siguientes métodos de conexión: • remote shell bound to a TCP port • UDP based client/server remote shells • ICMP based client/server • shells such as LOKI • SSH terminal sessions • normal "telnet" TCP terminal sessions La comunicación desde el cliente hacia los demonios es lograda mediante el envío de paquetes ICMP_ECHOREPLY, por lo que no existe comunicación TCP o UDP entre ambos equipos, a diferencia de TRINOO. Uno de los puntos fuertes de esta herramienta de ataque por denegación de servicio es que muchas herramientas de monitorización de redes no analizan todo el abanico de paquetes de tipo ICMP o simplemente no muestran la parte de datos de estos paquetes, por lo que la detección del diálogo entre cliente y demonio puede resultar compleja. Aunque el acceso a los clientes no esta protegido por palabra clave, los comandos que el cliente envía a los demonios van codificados en forma de número binario en dos bytes, siendo fijo el número de secuencia del paquete: 0x0000, lo que puede hacer que parezca como el primer paquete generado por un comando ping. Los valores definidos por defecto son: #define ID_ACK 123 /* for replies to the client */ #define ID_SHELL 456 /* to bind a root shell, optional */ #define ID_PSIZE 789 /* to change size of udp/icmp packets */ #define ID_SWITCH 234 /* to switch spoofing mode */ 20 #define ID_STOPIT 567 /* to stop flooding */ #define ID_SENDUDP 890 /* to udp flood */ #define ID_SENDSYN 345 /* to syn flood */ #define ID_SYNPORT 678 /* to set port */ #define ID_ICMP 901 #define ID_SMURF 666 /* to icmp flood */ /* haps! haps! */ El motivo de este cambio en la comunicación viene dado en que muchos sistemas de monitorización / protección de redes en la actualidad (Firewalls...) filtran los paquetes TCP/UDP, y especialmente aquellos que van a puertos no estándares o bien conocidos (como WWW que es puerto 80, SSH que es el puerto 22...). Sin embargo, la mayoría de sistemas dejan pasar los paquetes ICMP de ECHO y REPLY utilizados en el PING que permiten comprobar si un ordenador está encendido o no (entre otras posibles opciones). Además, pocas herramientas de filtrado de red muestran adecuadamente los paquetes ICMP, lo que permite camuflarse entre el tráfico normal de la red. Tanto los clientes como los demonios necesitan ejecutar con privilegio de root, pues utilizan sockets del tipo SOCK_RAW. Por otra parte, el cliente necesita disponer del fichero conteniendo la lista de direcciones IP de los demonios (iplist), por lo que localizado el cliente se dispone de la relación de demonios. En las últimas versiones se ha detectado tratamiento criptográfico en el fichero iplist mediante el sistema Blowfish. El cliente TFN admite los siguientes parámetros: ./tfn <lista_ip> <tipo> [ip] [port] <lista_ip> Contiene la lista de direcciones IP a atacar. <tipo> -1 Tipo de máscara (spoofmask type) 0 para stop/status. 1 Para realizar UDP Flooding. 2 Para realizar SYN Flooding. 3 Para realizar ICMP Flooding. -2 Tamaño de los paquetes a enviar. 4 Realizar un “root shell” (se debe espicifar en que puerto) 21 5 Realizar un ataque SUMRF, la primera IP es la dirección de origen y las demás son usadas como direcciones de broadcast. [ip] Dirección de origen (separadas por @ si hay mas de una) [port] Debe especificarse para SYN Flood (0 =aleatorio). TRIBE FLOOD NETWORK 2000 / TFN2K TFN2K es una evolución del anteriormente comentado TFN. La estructura es similar, aunque cambia la terminología. De esta forma, se denomina Maestro al sistema informático en el que corre el Cliente, y Agente al sistema informático donde se ejecuta el Demonio. Las nuevas características añadidas a TFN2K son principalmente: • Las comunicaciones master/slave se realizan vía protocolos TCP, UDP, ICMP o los tres a la vez de forma aleatoria. • Los ataques utilizados son TCP SYN Flood, UDP Flood, ICMP/PING Flood o SMURF. El demonio (daemon) puede ser programado para que alterne entre estos cuatro tipos de ataque, lo que permite mantener un ataque sostenido contra un ordenador concreto dificultando la detección del ataque por los sistemas tradicionales de seguridad (Firewall). • Las cabeceras de los paquetes de comunicación master/slave son aleatorias, excepto en el caso del ICMP dónde siempre se utiliza ICMP_ECHO_REPLY, de esta forma se evita que puedan ser detectados por patrones de comportamiento. • A diferencia de otras herramientas de DDOS, los daemons no responden a cada comando recibido (acknowledge). En su lugar, el cliente envía el mismo comando 20 veces esperando que al menos llegue una de sus peticiones. 22 • Los comandos enviados ya no se basan en cadenas de caracteres (strings), sino que son de la forma <ID> + <DATA> <ID> Un byte que indica (codifica) el comando a efectuar. <DATA> Indica los parámetros del comando. • Todos los comandos están cifrados usando CAST-256 [RFC2612]. La clave se define en tiempo de compilación y se usa como password para acceder al cliente. Además todos los datos cifrados se pasan a BASE64 antes de ser enviados para asegurar que todo está en caracteres ASCII imprimibles (argucia común en prácticamente todos los ordenadores). • Los paquetes UDP y TCP no incluyen en la pseudo-cabecera (header) del paquete en el cálculo del checksum correctamente, lo que hace que todos sean incorrectos. • El daemon genera un proceso hijo para cada ataque a una dirección IP. Además prueba de diferenciarse entre sí por los argumentos/parámetros (arg[0]) que se pasan al ejecutarse. Por lo que se ha visto, la detección de TFN2K resulta a priori muy compleja, pero también tiene su “talón de Aquiles”. Puede que por un descuido, o por un simple error, en la codificación a Base 64 siempre aparece una marca al final de cada paquete. No se tiene claro el objetivo, pero al final de cada trama se introduce una colección de ceros (entre 1 y 16) que al ser codificados en Base 64 quedan como 0x41 (carácter A). De esta forma, el número de 0x41 que aparecen al final de cada paquete es variable, pero siempre aparece por lo menos uno. La presencia de esta marca permite rastrear y localizar los paquetes de comandos. 23 Otros errores que pueden ayudar en la detección de tramas generadas por TFN2K son: • La longitud de los paquetes UDP (la que aparece en la cabecera UDP) es tres bytes mayor que la real. • La longitud de las cabeceras TCP (la que aparece en la cabecera TCP) es siempre cero, lo que nunca podría ocurrir. • Los checksums de las tramas UDP y TCP no incluyen los 12 bytes de las pseudo cabeceras y por lo tanto son incorrectos. STACHELDRAHT El término de origen alemán Stacheldraht podría traducirse por alambre de espina. Combina características de Trinoo y TFN, y añade mecanismos de cifrado en la comunicación entre el cliente y el conductor, así como mecanismos de actualización automática de los agentes. Como en TRINOO, la arquitectura básica de STACHELDRAHT mantiene una jerarquía dónde existen los master (denominados ahora “handlers”, manipuladores o controladores) y demonios/daemons o bcast (denominados ahora “agents” o agentes). 24 Algunos analistas consideran Stacheldraht como la competencia a TFN2K, pues presentan muchas similitudes en cuanto a comportamiento y facilidades: denegación de servicio mediante avalancha de tramas ICMP, SYN y UDP, así como ataques mediante técnicas de amplificación de broadcast (smurf). Sin embargo a diferencia del TFN no contiene la posibilidad de proporcionar un “shell de root” en las máquinas infectadas. Al contrario que la primera versión de TFN, en donde la conexión entre el atacante y el cliente se transmitía sin cifrar, Stacheldraht dispone de un mecanismo similar a un Telnet (Stacheldraht Term) para la comunicación del cliente con el conductor que incluye cifrado mediante el uso de clave simétrica. Una vez establecida la comunicación entre el cliente y el conductor, se solicita un password que está cifrado mediante crypt(). A partir de ese momento toda la comunicación se realiza de forma cifrada mediante el algoritmo Blowfish. La comunicación entre los distintos niveles de realiza de la siguiente forma: • Cliente a Conductor: 16660/TCP • Conductor a/desde Agente: 65000/TCP, ICMP_ECHOREPLY A diferencia de las herramientas TRINOO (que usaba UDP para las comunicaciones entre master/slave) o TFN (que utiliza ICMP como vehículo de comunicación entre clients/daemons), STACHELDRAHT utiliza para sus comunicaciones entre handlers y agentes los protocolos ICMP y TCP indistintamente. La mayor novedad que presenta Stacheldraht respecto a otras herramientas anteriormente analizadas es la posibilidad de ordenar a los agentes su actualización. Para ello se utiliza el comando rcp (514/tcp) sobre una cuenta robada en cualquier máquina de la red. Los agentes borran la actual copia del programa, descargan la nueva versión y arrancan ésta usando nohup. En ese momento finaliza la ejecución de la antigua copia. 25 En el momento de arranque de un agente, éste intenta leer un fichero de configuración en el que se le indica qué conductores le pueden controlar. Este fichero contiene una relación de direcciones IP y está cifrado mediante Blowfish. Para los casos en que falle la localización del mencionado fichero, el propio agente lleva definido en el código una serie de direcciones que debe usar por defecto. Una vez que el agente ha arrancado y dispone de la lista de conductores, comienza a transmitir tramas del tipo ICMP_ECHOREPLY con ID 666 y conteniendo en el campo de datos la palabra “skillz”. Todos aquellos conductores que reciben esta trama contestan con otra del mismo tipo, con ID 667 y en el campo de datos la palabra “ficken”. El diálogo entre conductor y agente se mantiene de forma periódica, lo que permite detectar la presencia de Stacheldraht mediante la monitorización pasiva de la red a través de un sniffer. SHAFT Es otra herramienta de denegación de servicio distribuido. Su característica más distintiva es la capacidad de cambiar los servidores y puertos de comunicación en tiempo de ejecución. Una de las novedades que presenta esta herramienta es el uso de ticket para garantizar el control sobre los agentes. Tanto el password como el ticket deben ser correctos para que un agente acepte las peticiones que le puedan llegar. Hace especial hincapié en las estadísticas de los paquetes. Como las otras herramientas se basa en un paradigma jerárquico de la forma: 26 en donde a los conductores (master/handler) los llama shaftmaster y a los agentes (slaves) shaftnode. El atacante se conecta mediante un programa cliente a los shaftmasters desde dónde inicia, controla y finaliza los ataques DDOS. El atacante se conecta vía TELNET a un shaftmaster utilizando una conexión fiable, una vez conectado se le pide un password para autorizar su acceso al sistema. La comunicación entre los shaftmasters y shaftnodes se realiza mediante el protocolo UDP que no es fiable, por eso SHAFT utiliza la técnica de los “ticket” para mantener el orden de la comunicación y poder asignar a cada paquete un orden de secuencia. La combinación del password y el ticket son utilizadas para el envío de ordenes a los shafnodes, que verifican que sean correctos antes de aceptarlos. Tanto el conductor como el agente disponen de su propio conjunto de comandos. Aunque el atacante sólo interactúa con el conductor mediante comandos a través de una conexión Telnet. La posibilidad de cambiar los números de los puertos dinámicamente hace que SHAFT sea difícilmente detectable por sistemas convencionales. Por otra parte, el programa por sí mismo intenta camuflarse como un proceso habitual, como puede ser por ejemplo http. 27 Por otro lado en lo que se supone un fallo de implementación, tenemos que el número de secuencia de todos los paquetes TCP es fijo siempre (0x28374839) lo que permite su detección a nivel de red. Los autores de Shaft han demostrado tener un interés muy especial por disponer de estadísticas. En concreto, la tasa de generación de paquetes de cada uno de los agentes. Es posible que esta información les permita optimizar el número de agentes necesarios para ejecutar un ataque, o añadir más en caso de disminuir el nivel estimado de carga para que el ataque proporcione los resultados esperados. MSTREAM Es la más primitiva de todas las herramientas, la comunicación entre agentes y maestro se realiza mediante el intercambio de paquetes UDP. Ha sido diseñada para bloquear una red ahogando determinados sistemas mediante la generación de gran cantidad de tramas. La red mstream esta formada al igual que trinoo y shaft por: cliente(s)-->conductor / master(es)-->agente/slave(s)-->victima(s) El cliente es la máquina que el atacante emplea para lanzar el ataque. El conductor coordina a todos los agentes. Y son éstos los que realizan el ataque a la víctima. Cada conductor puede coordinar un número indeterminado de agentes, y cada agente puede estar coordinado por un número indeterminado de conductores, además de poder atacar a una o más victimas. El tipo de ataque que realiza es Stream: • Agente > Víctima: envía TCP ACK a puertos aleatorios y dirección de remitente falsa (normalmente de otra red). • Víctima: contesta TCP RST al remitente a través del router. • Router > Víctima: ICMP indicando que el destinatario no existe. • Se consigue un elevado consumo de ancho de banda. • Ataque con único origen: pocos efectos. 28 • Ataque con múltiples orígenes: saturación de la red La comunicación entre el atacante y el conductor se realiza sin encriptar sobre una conexión TCP, mientras que la comunicación entre conductor y agente se realiza sobre UDP sin encriptar. Los puertos utilizados para la comunicación son: • Atacante a conductor(es): 6723/tcp (acceso mediante password) • Agentes a conductor(es): 9325/udp • Conductor a agente(s): 7983/udp Cada conductor mantiene una lista de agentes activos. Codificación de Cesar. Al igual que las otras herramientas tanto los agentes como los conductores tienen un grupo de comandos para comunicarse. 29 Conclusión La disponibilidad de recurso es lo mas preciado en los Sistemas Distribuidos. La limitación de éstos es un problema, no solo para la víctima, sino tambien para el victimario. Por un lado la victima se vera imposibilitada de acceder a estos o lo hara con un desempeño menor debido al daño causado por el atacante. Por el otro lado, el atacante, seguramente no contará con los recursos necesarios para realizar el daño deseado, es por ello que recurre a esclavizar máquinas para aumentar su poder. Estas maquinas esclavas, las máquinas zombis, deben realizar un trabajo coordinado para ser más eficientes. Es por ello que se agrupan en Botnets. Como en todo ataque es importante que la identidad del atacante esté escondida para de esta manera dificultar enormemente el desarme de la red. A diferencia de otros ataques, el objetivo de un DDoS no es el de acceder a un servidor, y de esta manera robar información, sino el de denegar un servicio o causar daño. Para denegar un servicio, todas arquitecturas de redes actúan similarmente: - Bombardean a un servidor hasta que éste caiga o sus recursos queden limitados. - Falsifican el origen de las tramas que, por lo general, solicitan una respuesta (jugando al frontón). - El atacante, generalmente, controla remotamente a alguna PC que, a su vez, coordina un ataque. - Usan los paquetes ICMP. - Pata coordinar un ataque se usa protocolo TCP o UDP. 30 - Algunos cifran sus comunicaciones para esconder mejor su trabajo (ataque no filtrable - como puedo saber si me están acatando cuando no puedo entender el contenido de los paquetes). - El ocultamiento trata de lograrse camuflándose como un programa cualquiera. - Otras técnicas mas avanzadas utilizan ataques de protocolo. A pesar de su intento por mantenerse oculta, las Botnets pueden ser detectadas. Para ello se necesita un continuo y minucioso testeo de los paquetes que viajan por la red. El problema se agrava si se crea una nueva arquitectura de Botnet. En ese caso será necesario, no solo recurrir a la técnica, sino también a la intuición para ver que "algo huele mal" y saber que es lo que "está podrido". 31 BIBLIOGRAFÍA Definición de maquina zombie: http://es.wikipedia.org/wiki/Zombie_(ordenador) Una invasión de robot amenaza la seguridad en la red. http://www.pcnews.com/detalle.asp?sid=&id=5&Ida=2161 Articulo sobre bonets: http://jocker.es/archives/3#more-3 Definición de Botnet: http://es.wikipedia.org/wiki/Botnet Que son y como crear una Botnet: http://miarroba.com/foros/ver.php?foroid=953103&temaid=4909674&imprimible =si Articulo sobre http://www.rediris.es/cert/doc/reuniones/cord/jt2004/botnets.pdf Sistemas Distribuidos de http://www.fi.upm.es/~flimon/ddos.pdf Denegación de Denegación de Servicios: http://tau.uab.es/~gaby/DEA/2%20DOS-DDOS.pdf Botnets: Servicios: DOS/DDOS: The "Tribe Flood Network" distributed denial of service attack tool: http://staff.washington.edu/dittrich/misc/tfn.analysis Tribe Flood Network: http://staff.washington.edu/dittrich/talks/cert/tfn.html DDoS: Un campo de batalla abierto en la seguridad http://www.rebelion.org/cibercensura/ddos240403.htm de The "stacheldraht" distributed denial of service http://staff.washington.edu/dittrich/misc/stacheldraht.analysis attack Internet: tool: Números y tipos de puertos: http://www.wittys.com/files/all-ip-numbers.txt An analysis of the ``Shaft'' distributed denial of http://www.ussrback.com/docs/distributed/shaft_analysis.txt service tool: Analysing Distributed Denial Of Service Tools: The Shaft http://www.usenix.org/event/lisa2000/full_papers/dietrich/dietrich_html/ Case: The "mstream" distributed denial of service http://staff.washington.edu/dittrich/misc/mstream.analysis.txt 32 attack tool: “TCP SYN flooding and IP spoofing attacks”, http://www.cert.org/advisories/CA1996-21.html 33