IRC war


Lamentablemente las redes y canales de IRC se convierten de vez en cuando en auténticos campos de batalla en donde los objetivos fundamentales son siempre los mismos:
- Hacerse dueño del canal
- Expulsar a alguien del canal

En IRC-WEB estamos en contra de este tipo actividades.
Sin embargo, consideramos necesario explicar las técnicas de ataque y defensa más usadas en el IRC, para que cualquier usuario que haya sido víctima de un ataque sepa qué ha ocurrido y cómo lo han hecho.

Redes de IRC: Fundamentos
Conseguir el rango de OP
Otras formas de conseguir OP
BOT de servicio
Tácticas de guerra: ATAQUES
    FLOOD
    NICK COLLIDE
        SPLIT SERVER COLLIDE
        LAG COLLIDE
    NUKE
        ICMP NUKE
        OOB NUKE
    PING
    SSPING
    TEARDROP
    LAND
    SMURF
    SPOOFING

REDES DE IRC: FUNDAMENTOS

Una red IRC está compuesta por varios servidores enlazados e interconectados. Cuando un usuario se conecta a uno de los servidores, éste informa a los demás servidores de la red IRC. De la misma forma, cualquier otra acción es notificada a todos los servidores. Así el usuario aparece en todos los servidores aunque físicamente sólo esté conectado a uno.

Una red IRC se estructura en forma de árbol, de manera que partiendo de un nodo nunca se llegará por ningún camino otra vez al mismo nodo. Esto se conoce como "spanning tree".

Si se rompe uno de los enlaces (por la razón que sea) que unen 2 servidores la red se divide en 2 subconjuntos, los cuales intentarán seguir funcionando normalmente aunque de forma aislada, de manera que los usuarios de cada subconjunto no existirán para el resto de usuarios de los otros subconjuntos. Esta situación se conoce como Net-Split.

Cuando el enlace caido se recupera y se reestablece la comunicación entre los servers spliteados se produce un Net-Merge.

Los programas que detectan y avisan cuando se produce algún Net-Split o Net-Merge se denominan Link-Lookers, .

CONSEGUIR EL RANGO DE OP (Operador)

Cuando un usuario entra en un canal donde no hay nadie ( /join #nombre-de-canal ) el servidor entiende que se trata de un nuevo canal, lo crea y le otorga OPa dicho usuario.

Esta situación se puede aprovechar para hacernos con el OP en un canal ya existente. Para ello, solo hay que aprovechar un Net-Split, de la siguiente forma:

En ocasiones, al deshacerse el split conservaremos el op en los restantes servidores (los que acaban de unirse). En este caso habremos llevado a cabo un Net-Hack.

Actualmente casi todos los servidores tienen protecciones anti-nethack, por lo que esta operación es difícil de llevar a cabo.

OTRAS FORMAS DE CONSEGUIR OP

La otra alternativa para conseguir el OP es que alguien te lo de . Puede ser un OP del canal o un IRCOP de la red, aunque para esto último tendrás que dar una justificación convincente (como por ejemplo que os acaban de tomar el canal, alguien os ha atacado, etc).

Para la primera alternativa entra en juego tu "don de la palabra": trata de hacerte amigo de algún OP para que éste te lo pase.
En ese momento ya estás capacitado para quitarle el OP a todos los demás (mass-deop) y quedarte con el canal. Esto lo hacen automáticamente muchos scripts (automatic-deop): nada más darte el OP el script automáticamente deopea a todos los OPs (excepto a tí, claro).

BOT DE SERVICIO

Se trata de un "usuario" muy especial. Es un robot que se encarga, entre otras cosas, de proteger los canales. En la Red Hispana se llama Scytale y está dentro de muchos canales registrados. Normalmente suele tener OP, con lo cual el canal deja de ser opless y se evita el Net-Hack.
Suele tener ircop-status además de otras funciones más avanzadas. En resumen, si hay un BOT el canal es difícil de asaltar.

TACTICAS DE GUERRA ATAQUES

A partir de ahora, pasamos a describir los distintos tipos de ataque y tácticas ofensivas.
OBJETIVO: DESTRUIR AL ENEMIGO
O lo que es lo mismo: Tirar a alguien del Server IRC.

FLOOD
Los servidores IRC tienen que controlar el tráfico de entrada (el que proviene del exterior) para evitar su congestión. Una de las formas de conseguirlo es no permitir que un cliente le mande más de una determinada cantidad de información en un pequeño intervalo de tiempo; o lo que es lo mismo: la velocidad con que un cliente puede enviar datos al servidor está limitada.

Cuando un cliente supera el límite preestablecido por el servidor, éste cierra la conexión con el cliente: lo echa del servidor porque no puede soportar tanto caudal de entrada.

Un flood, en general, no es otra cosa que mandar mucha información en poco tiempo a alguien para intentar que se sature su conexión. Se puede floodear una dirección IP, ..., o lo que ahora nos concierne: un servidor de IRC. La manera de aprovechar el flood en nuestro favor consiste en mandar muchas peticiones de información a nuestra víctima, de forma que ésta, al contestar, supere el límite del servidor y éste lo eche. Por ejemplo, si le mandamos muchos /ctcp version's seguidos (requiriendo información sobre el programa cliente que está utilizando) la víctima floodeará al servidor cuando conteste porque mandará muchas veces (tantas como peticiones haya habido) el texto de respuesta al servidor.

En esto del flood juega un papel muy importante el número de peticiones que se reciben en un pequeño intervalo de tiempo. Cuantas más se reciban, más posibilidades hay de que el flood tenga éxito. Por ello no es ninguna tontería mandar peticiones desde varios puntos a la vez, y no desde uno sólo, es decir, varios usuarios (¡que podrían ser una misma persona!) de la red IRC manden peticiones a la víctima todos a la vez en un determinado momento. Si los usuarios (nicks) corresponden a una misma persona (una misma dirección IP) se habla de clones. Por tanto, una posible forma de ataque sería crearnos muchos clones y peticionar a la vez desde todos ellos a la víctima.

Pero los servidores también suelen estar preparados para evitar muchos clones (cada clon ocupa, por decirlo de alguna manera, una "linea" de entrada al servidor, y esto consume recursos del mismo). Suele haber un máximo permitido (en el IRC Hispano el máximo de clones permitidos es 2) denegándosele el acceso a la red a un tercer clon, o en caso de que éste lo consiguiese expulsándole del servidor ("matándolo"). El programa servidor revisa periódicamente las IP's conectadas y detecta cuando hay varios usuarios con una misma dirección IP.

¿Cómo provocar un flood con más de 2 clones entonces? La respuesta es simple: en principio no se puede. Sin embargo hay una solución: que varias personas distintas se pongan de acuerdo para atacar a la vez a la víctima. Pero hay un problema: ¿cómo sincronizarse para atacar? ¿Cómo "ponerse de acuerdo" para mandar las peticiones en un determinado momento? Para esto existe lo que se denomina floodnet que, como se puede suponer es una "red" (asociación) de gente cuyo único objetivo es floodear a alguien.

La ventaja que tiene es que la sincronización entre los distintos componentes de la floodnet es automática (lo hacen los scripts) lo cual resuelve el problema anterior. También existe lo que se denomina botnet y que es análogo a la floodnet pero usando bots (no confundir con los "de servicio"; estos últimos los ponen los servers de la Red IRC y no los usuarios) los cuales serán lanzados desde alguna shell Unix (intérprete de comandos en una máquina Unix). Los bots suelen estar prohibidos y cuando se detectan, por lo menos, son expulsados.

Hoy en día tanto los programas clientes de IRC como los scripts implementan protecciones anti-flood que dificultan enormemente el éxito de un ataque de tipo flood. Por ejemplo, cuando detectan varias peticiones seguidas mandan las respuestas espaciadas en el tiempo (con pausas) y no inmediatamente, con lo cual se evita el flood.

También hay técnicas de flood bastante optimizadas (por ejemplo, usando una floodnet) aunque en general un ataque flood no suele ser demasiado eficiente y es bastante costoso lograr su éxito.

NICK COLLIDE
Un nick collide ocurre cuando dos personas tienen un mismo nick. En principio esto no debería ser posible (el servidor no deja usar un nick que ya está en uso) pero hay dos situaciones en las que podría darse el caso y que se describen en los dos puntos siguientes.

El resultado de un nick collide depende del servidor. En servidores antiguos (sin protección) el collide se resuelve matando a los dos usuarios con mismo nick. En otros más inteligentes (con protección) el servidor guarda información acerca de los usuarios y puede saber qué usuario tiene el nick con mayor antigüedad, matando únicamente al usuario con el nick más reciente.

SPLIT SERVER COLLIDE
Se basa en aprovechar un Net-Split:

Si todo va bien (el servidor no tiene protección), a la vuelta del split se detectará el collide y se matarán tanto al atacante como a la víctima. Lógicamente nuestro usuario atacante será un clon nuestro, con lo cual no pasa nada si es killeado.

LAG COLLIDE
Consiste en aprovechar el lag de un servidor, o lo que es lo mismo, el retraso en recibir los mensajes de otros servidores. Esta técnica es más efectiva que la anterior, pues funciona en servidores con protección.

Los pasos serían los siguientes:

Lo que ocurre es que nuestra orden de cambiar el nick para nuestro clon llega antes al servidor (lageado) que la orden de cambio de nick de la víctima, debido a que nuestra orden va directamente de nuestro cliente al servidor lageado mientras que la otra va a través de la Red IRC (donde hemos supuesto que se introduce un lag notable). Esto hace que el servidor (lageado) tome a nuestro clon como "dueño" legítimo del nick y mande un kill al otro (la víctima). Esto ocurriría en caso de servidores protegidos; si es "no protegido" el resultado es que ambos mueren, resultado también aceptable, pues hemos acabado con nuestro objetivo.

NUKE
Nuke es la denominación genérica que se le suele dar a cualquier forma de ataque consistente en mandar paquetes arbitrarios a una determinada dirección IP.
Realmente el término NUKE se refiere más concretamente al ICMP NUKE (uno de los dos tipos de Nuke comentados a continuación).

ICMP NUKE
El más veterano de los Nukes. Usa un protocolo subyacente de IP, el ICMP ("Internet Control Message Protocol", parte integral del protocolo de Internet [IP] que resuelve errores y controla los mensajes), para romper una conexión cliente-servidor de IRC (tirar a alguien del server). Para entender cómo funciona es necesario explicar un poco los protocolos.

Una conexión IRC (cliente-servidor, que es lo que nos interesa) utiliza el protocolo TCP (nivel 4 [transporte] en la torre OSI), el cual se apoya sobre IP (nivel 3 [red]). IP se encarga, entre otras cosas, de hacer el rutado de paquetes ("datagramas IP"), es decir, dado un destino ir enviando los paquetes por el camino apropiado hasta alcanzar el host destino. TCP no ve nada de esto, tan sólo el destino directamente (manda los segmentos TCP directamente al destino), porque IP lo oculta (hace que el rutado sea transparente a TCP).

Lógicamente para que un protocolo de nivel superior funcione correctamente, también deberán hacerlo todos los que estén por debajo. En particular, para que nuestra conexión TCP (IRC) se mantenga "viva", IP debe funcionar perfectamente. Y aquí es donde interviene ICMP: se encarga de informar de posibles anomalías que se han producido en el nivel 3 (IP), como por ejemplo, "host unreachable", que significaría que no se ha podido alcanzar el host (el paquete IP ha ido dando saltos ["hops"] de un nodo a otro, hacia el destino, y ha llegado un momento en el que un determinado nodo intermedio no sabía qué hacer con él o ha expirado el tiempo de vida de dicho paquete).

En este caso, el paquete que informa del error (ICMP) lo envía el nodo intermedio que se ha dado cuenta del error hacia el "remitente" que lanzó el paquete original (que no se ha podido entregar a su destinatario). Los mensajes ICMP se situan dentro del campo de datos de un datagrama IP y se envían exactamente igual que si fueran datos IP (no son prioritarios).

En resumen: mediante ICMP informamos de que IP ha fallado, y por tanto, también los niveles superiores como TCP.

Comprendiendo lo anterior ya se puede intuir en qué consiste el ICMP nuke: mandar mensajes ICMP falseados, engañando al destino, haciéndole creer que el otro extremo ha detectado un error y por tanto, provocando un "cierre" de la comunicación.

En una conexión siempre tenemos dos extremos, lo que da dos posibilidades a la hora de engañar, según lo hagamos a uno u otro. En el caso de una conexión IRC, podemos llevar a cabo dos formas de ataque:

Server Nuking (nukear al server)
Los mensajes ICMP se mandan al servidor IRC, haciéndole creer que se ha producido un error al intentar comunicarse con el cliente. Como respuesta a este mensaje el server cierra la conexión que tenía con dicho cliente. El efecto producido es la "expulsión" del usuario por parte del servidor.

Client Nuking (nukear al cliente)
Esta vez se envían los ICMP's al cliente; éste cree que el servidor no está disponible y cierra la conexión (el cliente). El servidor no sabe nada en principio, pero detecta el cierre de conexión por parte del cliente, dando el correspondiente error y cerrando también la conexión por su parte.

En teoría las dos fomas de nuking son perfectamente válidas y eficientes, aunque hay que tener ciertas consideraciones en cuenta, como son:

OOB NUKE
También conocido como WINNUKE, ya que afecta sólo al sistema operativo Windows, en cualquiera de sus versiones.

Se basa en un bug que tiene este SO en la pila de protocolos por el cual el sistema se cuelga ("error de protección general") cuando recibe un paquete con el flag OOB ("Out Of Band") activado. El ataque es sencillo: mandar un paquete de este tipo a un puerto (normalmente el 139) de nuestra víctima (ésta debe estar corriendo Windows, lo cual es muy normal hoy en día). Existen programas ya hechos a los cuales simplemente le das la dirección IP de la víctima y el programa lo hace todo.

La forma de protegerse es cerrar los puertos por los que nos puedan atacar (el 139 principalmente) o aplicar algún parche al SO para quitarnos el bug. Otra solución menos recomendable es la que llevan a cabo algunos ISPs (proveedores de Internet), y que consiste en filtrar todos los paquetes dirigidos al puerto 139 (inconveniente: nos están dejando inoperativo ese puerto). Hoy en día es muy popular este bug y normalmente está ampliamente parcheado (aunque siempre habrá algún que otro despistado que no lo tenga instalado).

Este ataque no sólo consigue echar a la víctima del server sino que además le deja colgado el ordenador (tendrá que hacer un reboot, reinicializar o rearrancar), lo que lo hace especialmente peligroso. La víctima saldrá del IRC con un mensaje de tipo ping-timeout.

PING
Algunos los llama también "IP bombs" (bombas IP). Un ping es un tipo de mensaje ICMP que se usa para ver si una máquina se encuentra operativa y accesible. El procedimiento es enviarle un ping a la máquina; ésta lo recibe y contesta. Al recibir la contestación ya sabemos que la máquina vive. Si no se recibe en un plazo dado se considera como no accesible (la máquina podría estar apagada, o todos los "caminos" en la red hacia ella cortados). Además podemos obtener más datos como el grado de saturación de una máquina o red (midiendo el tiempo de respuesta de la máquina, es decir, el tiempo transcurrido desde que una máquina origen envía el ping hasta que recibe la contestación de la otra).

La manera de usar esto de forma ofensiva consiste en mandar más pings a un usuario de los que su máquina pueda contestar, saturándole su conexión a Internet. Por tanto se debe de hacer desde un enlace más potente que el que pretendemos atacar.

Lo típico es que la víctima esté en su casa y tenga un modem. Por tanto, necesitamos una conexión a Internet más rápida que eso. Lo normal es atacar desde una máquina ubicada ya en la red (conectada mediante ATM, FDDI, ...).

SSPING
Nos encontramos ante otro bug parecido al del OOB, que afecta a Win95 y NT (aunque no a todas las configuraciones), y cuya idea es que el "maravilloso" Windows "se lía" a la hora de reconstruir paquetes que le han llegado fragmentados y acaba con un cuelgue del ordenador. El ataque consiste precisamente en mandar esos paquetes fragmentados a la víctima.

Un bug de este tipo es viejo conocido de los sistemas UNIX (el ataque se conocía como "ping of death"); pero la novedad es que ahora lo sufren los Windows. Aunque son cosas técnicamente diferentes, la forma de proceder a la hora de atacar es análoga a OOB: solo hay que saber la dirección IP de la víctima y ¡boom!: le dejamos colgado el ordenador.

La solución pasa por parchear el Sistema Operativo. En particular, este bug parece que no afecta al Trumpet Winsock así que si lo usais estareis protegidos.

TEARDROP
Este ataque nos recuerda al "ssping" ya que también está basado en un error al reensamblar paquetes fragmentados que le han llegado a la víctima.

Esta vez la pila TCP/IP se lía al intentar ensamblar paquetes fragmentados que se solapan entre sí (es decir, hay regiones de "datos" comunes en dos paquetes distintos) provocando el cuelgue del ordenador. A diferencia de "ssping" y "OOB" este bug afecta a multitud de Sistemas Operativos, incluídos Linux, Win95 y NT.

Podremos solucionar este bug, parcheando nuestro Sistema Operativo o actualizándolo a la versión más reciente posible.

LAND
Consiste en mandar a un host y puerto especificado (víctima) un paquete spoofeado con el bit syn (petición de conexión) activo y con dirección y puerto fuente los mismos a los cuales va dirigido el paquete (dirección y puerto de la víctima).

Es decir, hacemos como si la máquina víctima quisiera realizar una conexión a ella misma. Esto provoca el cuelgue de la máquina víctima en la mayoría de los casos o en otros que la carga de la CPU alcance valores insospechados.

Este bug afecta a una gran variedad de sistemas (routers incluídos).

SMURF
Consiste en mandar paquetes ICMP de "echo request" (como los de un ping) con una falsa dirección de origen (la IP de la víctima) a una dirección de difusión ("broadcast"). De esta forma alcanzarán muchas máquinas, cada una de las cuales enviará sus paquetes de respuesta a la dirección origen de la petición (cuyos datos estaban falseados y apuntaban a la víctima). El resultado es que la máquina víctima se ve inundada de paquetes IP, resultando en una saturación de su enlace (algo así como si le hubieran hecho un ping a lo grande).

Desgraciadamente la víctima no puede hacer nada para evitarlo. La solución está en manos de los administradores de red, los cuales deben configurar adecuadamente sus routers para filtrar los paquetes ICMP de petición indeseados (broadcast) o bien configurar sus máquinas para que no respondan a dichos paquetes. Es decir, que lo que se parchea son las máquinas/redes que puedan actuar de intermediarias (inocentes) en el ataque y no la máquina víctima.

De igual forma también se podría evitar el ataque si el router/firewall de salida del atacante (por ejemplo el Proveedor de Internet al que pertenece) estuviera convenientemente configurado para evitar spoofing. Esto se haría filtrando todos los paquetes de salida que tuvieran una dirección source (origen) que no perteneciera a la red interna (desde la cual salimos).

SPOOFING
Esta técnica no es un ataque en sí pero permite mejorar y perfeccionar cualquier ataque (de los anteriores, por ejemplo). También puede ser la base de algún ataque, como ocurre con el IP Spoofing que los hackers suelen emplear.

Se trata de "spoofear" (falsear) la dirección IP de origen de los paquetes que se mandan a la víctima, de forma que ésta crea que el origen de dichos paquetes es otro (el que nosotros le indiquemos). De esta forma protegemos nuestro anonimato, y en general podemos llevar a cabo cualquier acción que se nos pueda ocurrir y que se derive de una falsa dirección source (origen). Por ejemplo, podemos nukear a alguien, con la dirección fuente de otro, haciendo creer a la víctima (si ésta tiene un analizador de paquetes o algo parecido) que es el otro el que le está atacando.

El spoofing es (o podría ser) una funcionalidad más del programa de ataque (del nuker, del ping, ...). Como consiste en manejar IP desde un muy bajo nivel en muchos casos se requieren privilegios especiales. Por ejemplo, en el caso de máquinas Unix, se necesita abrir "raw sockets" y ésto requiere de privilegios de superusuario (root).