 
 
 
 
 
 
 
  
 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