25 de marzo de 2011

Defiéndete contra ARP Poisoning


El ARP Spoofing, también conocido como ARP Poisoning o ARP Poison Routing, es una técnica usada para infiltrarse en una red Ethernet y permite al atacante husmear los paquetes de datos en la LAN, modificar el tráfico, o incluso detener el tráfico.

El principio del ARP Poisoning es enviar mensajes ARP falsos a la Ethernet, con la finalidad de asociar la dirección MAC del atacante con la dirección IP de otro nodo, como por ejemplo la puerta de enlace predeterminada (gateway o router).

Por lo que cualquier tráfico dirigido a la dirección IP de ese nodo, será enviado al atacante y el atacante puede elegir entre reenviar el tráfico a la puerta de enlace predeterminada real (ataque pasivo o escucha), o modificar los datos antes de reenviarlos (ataque activo). El atacante puede incluso lanzar un ataque de tipo DoS (Denegación de Servicio) contra una víctima, asociando una dirección MAC inexistente a la dirección IP de la puerta de enlace predeterminada de la víctima.


El ataque de ARP Poisoning puede ser ejecutado desde una máquina controlada, un Jack Box, o bien la máquina del atacante está conectada a la LAN Ethernet.

Para defenderse de un ataque por ARP Poisoning tenemos que mantener estática la IP y MAC de la puerta de enlace en las tabla ARP. Al mantener estática nuestra tabla ARP, nos aseguramos de que no van a modificar la entrada de nuestra tabla ARP y tampoco podrán redireccionar el tráfico de la puerta de enlace y sufrir un ataque de envenenamiento ARP desde un programa como puede ser Cain y Abel.

Para defendernos tenemos que saber que IP y que MAC tiene nuestra puerta de enlace, y luego la sustituimos con el comando que le corresponda según el sistema que estemos usando.

Para ver la tabla ARP en Windows, Linux o Mac, tenemos que lanzar este comando en la consola: arp -a (-A para Mac)


Cuando lanzamos este comando nos dará la siguiente información de la tabla ARP: IP del nodo, MAC del nodo y el tipo que puede ser estática o dinámica, por lo que tendremos que cambiar el tipo de la puerta de enlace que sea de tipo estático.

Para poder cambiar el tipo de la tabla ARP, tendremos que lanzar en la consola de comando las siguiente línea: arp -s IP del nodo MAC del nodo (-S para Mac)

Ejemplo: arp -s  192.168.1.1  ff-ff-ff-ff-ff-ff


El problema es que cuando reiniciemos la tabla ARP desaparecerá, y para hacer que la  tabla ARP sea persistente tenemos que crear un archivo por lotes o que se lance esta línea de comandos cuando se inicie el sistema.

Para hacer que la tabla ARP quede persistente abrimos el bloc de notas y escribimos la línea de comandos que hemos puesto en el ejemplo y este archivo lo guardamos no como  .txt, sino como .bat y le damos el nombre que queramos como por ejemplo: staticarp.bat

Una vez creado este archivo se configura la directiva en el equipo local:

    Inicio ->Ejecutar -> gpedit.msc


Cuando se abre la ventana de Directiva de grupo, nos dirigimos a:

Configuración de Windows -> Archivos de comandos

Y hacemos clic dos veces sobre inicio.




Pulsamos el botón de Agregar, y con el botón de Examinar seleccionamos el archivo .bat que hemos creado, por ejemplo staticarp.bat y finalmente pulsamos el botón de Aceptar.


Otra forma para hacer persistente la tabla ARP es escribir en la casilla de texto:

Nombre del archivo de comandos: arp

En la casilla de texto:

Parámetros del archivo de comandos: -s 192.168.1.1  ff-ff-ff-ff-ff-ff

Y pulsamos el botón de Aceptar.



Persistencia en Linux:

Para hacer persistente la tabla ARP en Linux tenemos que crear un archivo .sh que es el equivale an archivo .BAT de MSDOS, con la diferencias siguientes:
  • No tiene que terminar con la extensión .bat, es más si se quiere no tiene porqué tener extensión.
  • Tiene que tener permisos de ejecución (chmod  755).
  • Puede ser muy complejo.
En realida es un archivo de texto, con una lista de comandos, que se ejecutan en el orden que esten de forma automática, del mismo modo que si los escribes uno a uno en una consola o una terminal.

El script que tenemos que crea y guardar con extensión .sh, en el directorio /etc/init.d/, con premisos de ejecución (chmod 755 nombre_archivo.sh), es el siguiente:
#!/bin/bash
arp -s $(route -n | awk '/^0.0.0.0/ {print $2}') \ $(arp -n | grep route -n | awk '/^0.0.0.0/ {print $2}' | awk '{print $3}')

Este archivo lo podemos crear por ejemplo con gedit y lo guardaremos con el nombre de staticarp.sh, una vez creado lazaremos los sigientes comandos:

Cambiamos los permisos y le damos permiso de ejecución:
antonio@antonio:~/Escritorio$ sudo chmod 755 staticarp.sh
antonio@antonio:~/Escritorio$ ls -l staticarp.sh
-rwxr-xr-x 1 antonio antonio 138 2011-03-31 19:20 staticarp.sh

Cambiamos el propietario y el grupo del archivo:
antonio@antonio:~/Escritorio$ sudo chown root:root staticarp.sh
antonio@antonio:~/Escritorio$ ls -l staticarp.sh
-rwxr-xr-x 1 root root 138 2011-03-31 19:20 staticarp.sh

Y lo movemos (mv) o copiamos (cp) al directorio /etc/init.d:
antonio@antonio:~/Escritorio$ sudo mv staticarp.sh /etc/init.d/

Una ver realizados estos paso, creamos las referencias con el siguiente comando:
antonio@antonio:~/Escritorio$ sudo update-rc.d staticarp.sh default

Y ya tenemos nuestra tabla ARP estática en Linux.

Espero que os haya servido de ayuda, un saludo:

Antonio

4 comentarios:

  1. muchas gracias, hacia tiempo que buscaba como hacerlo. Te felicito esta estupendo y muy bien explicado.

    Saludos desde México.

    ResponderEliminar
  2. Gracias a ti por el comentario.
    Espero que lo mismo que te ha resultado útil a ti, le sea útil a tod@s.

    Un saludo desde España:

    Antonio

    ResponderEliminar
  3. Hola.. por fin alguien que sabe hacer las cosas como se debe :-) ..Gracias, estaba buscando esta informacion y no la encontraba.

    Felicidades y sigue adelante.

    Saludos

    ResponderEliminar
  4. Gracias a ti por leer el artículo y valorad lo.

    ResponderEliminar

No olvides dejar tu comentario y gracias por tu tiempo ;-)