Siguiente: Negaciones de servicio
Subir: Ataques remotos
Anterior: Escaneos de puertos
Índice General
Por spoofing se conoce a la creación de tramas TCP/IP utilizando
una dirección IP falseada; la idea de este ataque - al menos la idea - es
muy sencilla: desde su equipo, un pirata simula la identidad de otra máquina
de la red para conseguir acceso a recursos de un tercer sistema que ha
establecido algún tipo de confianza basada en el nombre o la dirección IP
del host suplantado. Y como los anillos de confianza basados en estas
características tan fácilmente falsificables son aún demasiado
abundantes (no tenemos más que pensar en los comandos r-, los
accesos NFS, o la protección de servicios de red mediante TCP
Wrapper), el spoofing sigue siendo en la actualidad un ataque no trivial,
pero factible contra cualquier tipo de organización.
Como hemos visto, en el spoofing entran en juego tres máquinas: un
atacante, un atacado, y un sistema suplantado que tiene cierta relación con
el atacado; para que el pirata pueda conseguir su objetivo necesita por un lado
establecer una comunicación falseada con su objetivo, y por otro evitar que
el equipo suplantado interfiera en el ataque ([HB96]). Probablemente
esto último no le sea muy difícil de conseguir: a pesar de que existen
múltiples formas de dejar fuera de juego al sistema suplantado - al menos a
los ojos del atacado - que no son triviales (modificar rutas de red, ubicar un
filtrado de paquetes entre ambos sistemas...), lo más fácil en la
mayoría de ocasiones es simplemente lanzar una negación de servicio
contra el sistema en cuestión. Aunque en el punto siguiente hablaremos con
más detalle de estos ataques, no suele ser difícil `tumbar', o al menos
bloquear parcialmente, un sistema medio; si a pesar de todo el atacante no lo
consigue, simplemente puede esperar a que desconecten de la red a la máquina a
la que desea suplantar (por ejemplo, por cuestiones de puro mantenimiento).
El otro punto importante del ataque, la comunicación falseada entre dos
equipos, no es tan inmediato como el anterior y es donde reside la principal
dificultad del spoofing. En un escenario típico del ataque, un
pirata envía una trama SYN a su objetivo indicando como dirección
origen la de esa tercera máquina que está fuera de servicio y que mantiene
algún tipo de relación de confianza con la atacada. El host objetivo
responde con un SYN+ACK a la tercera máquina, que simplemente lo
ignorará por estar fuera de servicio (si no lo hiciera, la
conexión se resetearía y el ataque no sería posible), y el atacante
enviará ahora una trama ACK a su objetivo, también con la dirección
origen de la tercera máquina. Para que la conexión llegue a establecerse,
esta última trama deberá enviarse con el número de secuencia adecuado; el
pirata ha de predecir correctamente este número: si no lo hace, la trama
será descartada), y si lo consigue la conexión se establecerá y podrá
comenzar a enviar datos a su objetivo, generalmente para tratar de insertar una
puerta trasera que permita una conexión normal entre las dos máquinas.
Podemos comprobar que el spoofing no es inmediato; de entrada, el
atacante ha
de hacerse una idea de cómo son generados e incrementados los números
de secuencia TCP, y una vez que lo sepa ha de conseguir `engañar' a su
objetivo utilizando estos números para establecer la comunicación; cuanto
más robusta sea esta generación por parte del objetivo, más difícil
lo tendrá el pirata para realizar el ataque con éxito. Además, es
necesario recordar que el spoofing es un ataque ciego: el atacante no ve
en ningún momento las respuestas que emite su objetivo, ya que estas van
dirigidas a la máquina que previamente ha sido deshabilitada, por lo que debe
presuponer qué está sucediendo en cada momento y responder de forma
adecuada en base a esas suposiciones. Sería imposible tratar con el
detenimiento que merecen todos los detalles relativos al spoofing por lo
que para obtener información adicional es necesario dirigirse a excelentes
artículos que estudian todos los pormenores del ataque, como
[Dae96] o [HB96]; de la misma forma, para conocer con detalle
el funcionamiento del protocolo TCP/IP y sus problemas podemos consultar
[Ste94], [Tan96], [Bel89] y [Mor85].
Para evitar ataques de spoofing exitosos contra nuestros sistemas
podemos tomar diferentes medidas preventivas; en primer lugar, parece evidente
que una gran ayuda es reforzar la secuencia de predicción de números de
secuencia TCP: un esquema de generación robusto puede ser el basado en
[Bel96], que la mayoría de Unices son capaces de implantar
(aunque muchos de ellos no lo hagan por defecto). Otra medida sencilla es
eliminar las relaciones de confianza basadas en la dirección IP o el
nombre de las máquinas, sustituyéndolas por relaciones basadas en claves
criptográficas; el cifrado y el filtrado de las conexiones que pueden aceptar
nuestras máquinas también son unas medidas de seguridad importantes de cara
a evitar el spoofing.
Hasta ahora hemos hablado del ataque genérico contra un host
denominado spoofing o, para ser más exactos, IP Spoofing; existen
otros ataques de falseamiento relacionados en mayor o menor medida con este,
entre los que destacan el DNS Spoofing, el ARP Spoofing y el Web Spoofing ([Ris01]). Para finalizar este punto, vamos a comentarlos
brevemente e indicar algunas lecturas donde se puede ampliar información
sobre los mismos:
- DNS Spoofing
Este ataque hace referencia al falseamiento de una dirección IP ante una
consulta de resolución de nombre (esto es, resolver con una dirección falsa
un cierto nombre DNS), o viceversa (resolver con un nombre falso una cierta
dirección IP). Esto se puede conseguir de diferentes formas, desde modificando
las entradas del servidor encargado de resolver una cierta petición para
falsear las relaciones dirección-nombre, hasta comprometiendo un servidor
que infecte la caché de otro (lo que se conoce como DNS Poisoning);
incluso sin acceso a un servidor DNS real, un atacante puede enviar datos
falseados como respuesta a una petición de su víctima sin más que
averiguar los números de secuencia correctos.
- ARP Spoofing
El ataque denominado ARP Spoofing hace referencia a la construcción de
tramas de solicitud y respuesta ARP falseadas, de forma que en una red
local se puede forzar a una determinada máquina a que envíe los paquetes
a un host atacante en lugar de hacerlo a su destino legítimo. La idea
es sencilla, y los efectos del ataque pueden ser muy negativos: desde negaciones
de servicio hasta interceptación de datos, incluyendo algunos Man in
the Middle contra ciertos protocolos cifrados. En [Vol97] podemos
obtener más información acerca de este ataque, así como código
fuente para enviar tramas falseadas y comprobar los efectos del ARP
Spoofing en nuestra red.
- Web Spoofing
Este ataque permite a un pirata visualizar y modificar cualquier página web que su víctima solicite a través de un navegador, incluyendo las
conexiones seguras vía SSL. Para ello, mediante código malicioso
un atacante crea una ventana del navegador correspondiente, de apariencia
inofensiva, en la máquina de su víctima; a partir de ahí, enruta
todas las páginas dirigidas al equipo atacado - incluyendo las cargadas en
nuevas ventanas del navegador - a través de su propia
máquina, donde son modificadas para que cualquier evento generado por el
cliente sea registrado (esto implica registrar cualquier dato introducido en un
formulario, cualquier click en un enlace, etc.). Para obtener más
información acerca del Web Spoofing podemos consultar [FBDW96].
Siguiente: Negaciones de servicio
Subir: Ataques remotos
Anterior: Escaneos de puertos
Índice General
2003-08-08