jueves, 8 de noviembre de 2012

Como detectar y evitar un ARP Spoofing

Holas, hoy os traigo otra de esas entradas que está relacionada con otra entrada.

En este caso está relacionada con el manual de ARP Spoofing que subí hace un tiempo, así que en esta ocasión os contare como detectar y evitar un ARP Spoofing.


¿CÓMO DETECTAR UN ARP SPOOFING?

Esta es quizá la parte mas complicada, ya que es muy difícil detectarlo, de hecho una persona que sepa hacerlo muy bien puede hacer un ARP Spoofing prácticamente indetectable.

El primer método para detectar un ARP Spoofing es mirar la tabla ARP y comprobar que todas las direcciones MAC son distintas, si hay alguna repetida quiere decir que estamos siendo víctimas de un ARP Spoofing, ya que las direcciones MAC son únicas para cada dispositivo, además es muy probable que la dirección mac duplicada sea la que hace referencia a vuestra puerta de enlace (gateway), ya que casi siempre se intenta redirigir el tráfico que se envía hacia internet.

para mirar la tabla ARP podéis hacerlo con este comando (se necesitan permisos de root para ejecutar el comando arp):


arp -v




como se puede ver en la imagen aparecen dos direcciones IP con la misma dirección MAC. La dirección MAC que aparece es la del ordenador al que estamos siendo redirigidos (por lo general suele ser el pc del atacante).

La segunda manera de detectar un ARP Spoofing es ejecutando un sniffer (como wireshark) en nuestro ordenador, de manera que tenemos que fijarnos en los paquetes ARP reply que recibimos (podemos poner un filtro en el wireshark para facilitar la visualización), si vemos que recibimos varios paquetes indicando una dirección IP y distintas direcciones MAC, quiere decir que estamos siendo victimas de un ARP Spoofing.



Como se puede ver en la imagen, se están recibiendo varios paquetes ARP reply indicando la dirección 192.168.120.30, pero las direcciones MAC con la que vienen asociados son distintas, lo cual es una incongruencia, ya que una tarjeta de red no puede tener más de una dirección MAC, lo cual indica que hay un atacante enviándonos paquetes ARP reply falsos y por otra parte está el dispositivo verdadero que también nos esta enviando sus paquetes ARP reply.

Por lo general en estos casos los paquetes ARP mas abundantes serán los falsos y los menos abundantes serán los verdaderos.


¿CÓMO BLOQUEAR O EVITAR UN ARP SPOOFING?

Bien, lo que veremos a continuación es como evitar ser víctimas de un ARP Spoofing, el procedimiento a seguir es bastante fácil.

Lo único que tenemos que hacer para evitar un ARP Spoofing es poner las entradas de la tabla ARP, estáticas (en vez de dinámicas que es como se crean por defecto).

Para introducir entradas estáticas en la tabla ARP lo haremos de la siguiente manera:


arp -s <direccion IP> <direccion MAC>


donde <direccion IP> es la dirección IP del ordenador que queramos introducir en la tabla ARP y <direccion MAC> es la dirección MAC que tenga dicho ordenador.

Ahora viene la pregunta ¿qué ordenadores tengo que meter en la tabla ARP?, realmente el más importante de todos es la puerta de enlace (gateway) ya que el ARP Spoofing casi siempre se hace con el objetivo de conseguir interceptar el tráfico que va dirigido hacia internet, pero si te sueles conectar a ordenadores de tu red (y no solo a internet) también es recomendable poner estos ordenadores en la tabla.

Nota: para saber la dirección MAC de los ordenadores que vas a introducir en la tabla puedes fiarte de las direcciones que ya están en la tabla (como dinámicas) siempre y cuando estés 100% seguro de que nadie te esta realizando un ARP Spoofing en ese momento, de todas maneras lo mas seguro es que las mires directamente en los ordenadores que quieras meter en la tabla (usando el comando ifconfig en cada uno de ellos por ejemplo), en el caso del router puedes mirar la dirección MAC en la página de configuración del mismo.

En este caso yo solo voy a poner la entrada para mi puerta de enlace (gateway), de manera que lo haría así:


arp -s 192.168.120.30 d0:ae:ec:ec:0a:44




Como podemos ver ahora en el campo "Flags" aparece una "M" indicando que la entrada ha sido introducida de manera manual en la tabla.

Nota: la entrada manual se borrará al reiniciar el sistema, así que, si queremos, podemos crear un script que se inicie en el arranque del sistema para que se introduzca la entrada manual automáticamente.

Tal y como está la tabla ARP ahora mismo sería imposible que se modificase la entrada del router enviando paquetes ARP reply, de manera que es imposible que nos hagan un ARP Spoofing para suplantar a nuestro router (puerta de enlace / gateway).


Espero os haya gustado =)

Cualquier duda dejádmela en comentarios

Saludos =D


19 comentarios:

  1. Amigo una pregunta tu metodo es muy bueno pero tengo dos preguntas, espero me puedas ayudar:

    1. Cuando ejecuto el comando en Windows 7 "arp -s IP MAC" aparece un mensaje de acceso denegado porque? si soy administrador

    2. Entonces Googleando me dice que ejecute el comando: "netsh interface ipv4 add neighbors "nombre del adaptador" IP MAC y funciona perfectamente pero al momento de crear un script me aparece otro error que dice "El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos." Porque?

    Me puedes dar alguna ayuda?

    Gracias!

    ResponderEliminar
  2. Hola.

    El problema en windows viene porque no te deja hacerlo con la IP de la puerta de enlace (no se porque).

    Para arreglarlo puedes hacerlo cambiando la IP de tu puerta de enlace (a una cualquiera), despues ejecutas el arp -s para meter la entrada estatica (quiza tengas que borrar la entrada dinamica usando arp -d ) y despues vuelves a poner la puerta de enlace real. (es un truco un poco chapucero pero funciona)

    Si quieres hacer esto en un script puedes usar el siguiente comando para cambiar la puerta de enlace:

    netsh interface ipv4 set address name=<ID from interface list> source=static address=<preferred IP address> gateway=<gateway address>

    ResponderEliminar
  3. Hola Alfa,

    Te cuento que soy victima de un ARP Spoofing no se si es por un virus o es alguien mal intencionado de la red, el hecho es que se me ha hecho practicamente imposible detectar el origen de este problema

    Como son varios equipos me queda muy poco practico ir equipo por equipo a ejecutar el script, por lo que estoy desplegando una GPO de inicio de sesion para que automatice el proceso, pero no se porque razon cuando ejecuto este comando en cmd:

    netsh interface ipv4 set neighbors "Conexión de red inalámbrica" 10.0.0.10 c0-c1-c0-0b-be-82

    Funciona OK, pero cuando lo ejecuto por script .bat me aparece el error: "El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos." No entiendo porque, si ejecutar un script es de lo mas facil

    La solucion que me brindas para usar el comando arp -s es cambiar la direccion del gateway establecer la IP estatica y volver el gateway a su direccion original?

    No se como construir tal script, seria algo asi:?

    netsh interface ipv4 set address name= source=static address=192.168.1.200 gateway=192.168.1.240 – aca cambio el direccionamiento a uno diferente

    arp –s 192.168.1.4 FF-FF-FF-FF-FF-FF

    netsh interface ipv4 set address name= source=dynamic – aca lo dejo por DHCP?

    Si seria algo asi el script? O no?

    Te agradezco mucho tu valiosa ayuda


    Saludos

    ResponderEliminar
  4. El script podria ser algo como esto:


    @echo off
    netsh interface ipv4 set address name="Local Area Connection" source=static address=192.168.1.2 gateway=192.168.1.23

    ping 127.0.0.1 -n 5 > nul

    arp -d 192.168.1.1
    arp -s 192.168.1.1 11-22-33-44-55-66

    netsh interface ipv4 set address name="Local Area Connection" source=dhcp


    Este script meteria la entrada estatica en la tabla ARP y despues dejaria configurada la interfaz del ordenador en DHCP. (el ping simplemente actua como timer).

    ResponderEliminar
  5. Perfecto entiendo muy bien lo que hace el script y me parece una buena idea, pero lo acabo de realizar y me sigue apareciendo el mismo error:

    "El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos"

    Una pregunta donde te puedo enviar una imagen, para que veas que es lo que aparece?

    Tu ya has intentado ejecutar ese script en un Windows?

    Sigo muy agradecido por tu ayuda


    Saludos

    ResponderEliminar
  6. Si, a mi el script me funciona correctamente en windows 7.

    Si lo ejecutaste tal y como lo he puesto no debería de darte ese error.

    Ejecuta el registro (vas a ejecutar y tecleas "regedit") y a continuación pincha encima de la carpeta HKEY_LOCAL_MACHINE, despues le das a archivo y a exportar, y mandame el archivo resultante a: TornadoXTRM@gmail.com

    ResponderEliminar
  7. Ya te envie la info que me pediste...

    Es muy raro ese error es como si no encontrara la ruta donde se esta ejecutando, ya probe desde otro PC con Windows 7 y el problema sale tambien

    A que se debe este error? desde que ubicacion se debe ejecutar el script? sera por la ruta desde donde se ejecuta?

    Voy a realizar mas pruebas


    Saludos

    ResponderEliminar
  8. Vamos por partes...

    En principio pensaba que el error te salia porque algún programa (probablemente un malware) había modificado alguna clave del registro relacionada con el netsh y por eso te daba error de que no encontraba el archivo...

    Pero después de ver la captura que me mandaste creo que el error viene del parámetro name, en este parámetro tienes que poner el nombre exacto de la interfaz de red. Para ver el nombre vete a ejecutar y pon "ncpa.cpl" y ya te salen ahí todos los adaptadores de red que tengas.

    En tu caso tienes "Conexion de red inalambrica" probablemente "conexion" e "inalambrica" lleven tilde, asi que el sistema no te lo reconoce al ponerlos sin tilde, de todas maneras míralo como te indiqué antes y confírmalo. Procura también poner las letras mayúsculas (en caso de que las haya).

    En la captura que me mandaste he visto que el comando arp -s no te da error, no se si la ip que pones es exactamente la de la puerta de enlace, pero si es así y te funciona ya no necesitarías hacer todo este rollo del netsh... (aunque bueno, en tu primer comentario pones que precisamente este comando te da error, así que supongo que en esa ocasión estabas poniendo una ip diferente a la de la puerta de enlace).

    Lo del registro, si lo comprimes debería de quedarte en bastante menos (quizá entre 10 y 20 MB), pero de momento no me lo envíes, prueba lo que te he dicho, debería de funcionar.

    ResponderEliminar
  9. Si es verdad no es un problema de malware ni nada, ya que he intentado en otro PC que acabo de instalar y sucede lo mismo

    Ya le puse las tildes, pero el problema persiste eso ya lo habia intentado antes

    Tienes razon el comando arp -s no arroja ningun error, pero al momento de verificar si quedo bien con arp -a sigue en dinamico

    Te acabo de enviar 5 imagenes con el paso a paso que estoy realizando

    Ojala me puedas ver el error que yo no he podido ver


    Saludos !!

    ResponderEliminar
  10. Vale, el problema que tienes es la codificación que usa la consola de windows, es un problema muy común, al meter el comando en un script, la codificación que usa la consola no es la misma que la que usa el editor de texto y por eso en vez de una tilde te pone un simbolo raro (fijate que al ejecutar el script no te salen las tildes).

    La solución es cambiar en el script los caracteres que no detectará la consola por los equivalentes en su codificación para que los detecte como tales (en este caso letras con tilde) (ya te he enviado a tu correo los archivos con los modificaciones necesarias).

    De hecho el comando que pusiste en el primer comentario debería de funcionar, pero probablemente no funcionaba por este error.

    y otra cosa, en el script que te he puesto yo, tendrás que introducir un tercer parámetro en el comando arp -d y arp -s indicando la ip de la interfaz, ya que como tienes varias interfaces de red tendras que indicar en la tabla ARP de que interfaz quieres realizar las modificaciones.

    ResponderEliminar
  11. Amigo solo me resto decir MUCHISIISISIMAS GRACIAS! si era eso lo que dices de la codificacion de las tildes, me sirvio el script con este comando:

    netsh interface ipv4 set neighbors "Conexi¢n de red inal mbrica" 192.168.50.5 a0-f3-c1-6c-31-fa

    y listo! ahora solo me resta desplegar una GPO por el dominio para que aplique a todos los usuarios, pero bueno ya avanzamos en el script

    Tengo una pregunta, porque aveces el Script se queda ejecutando infinitamente? es decir nunca se cierra si no se queda ejecutando hasta que uno lo cierra con la X o con Ctrl + C

    Te agradezco infinitamente voy a empezar a desplegar una GPO para los adaptadores de red inalambrico y alambrico. Como hiciste para saber la letra equivalente que llevaba la tilde?

    Muchas gracias amigo por tu tiempo y enseñanza

    Saludos!!

    ResponderEliminar
  12. Para saber el caracter de las tildes, primero abres un terminal y ejecutas el programa "edit" despues tienes que escribir los caracteres que quieras, pero cuidado, para poder escribir las letras con tilde no podras hacerlo de la manera normal, tienes que usar una entrada de caracteres especial que tiene windows, primero mantienes pulsada la tecla "Alt" y a continuación escribes el numero del caracter que quieras, por ejemplo "á" es 160 (te dejo aquí una tabla con la equivalencia de todos los caracteres: http://www.atlantiswordprocessor.com/en/news/1_6_1_001_00.png) , y a continuación sueltas la tecla "Alt" y ya deberia de aparecer el caracter. A continuación le das a guardar y abres el archivo guardado con el notepad de manera normal y en vez de "á" te saldrá el caracter equivalente.

    Lo de que el script se te quede ejecutando no sé muy bien porque puede ser, las veces que lo he probado no me ha pasado eso. Así a bote pronto se me ocurre que puedes añadirle al final del comando "> nul" y después una segunda linea con el comando "exit" aunque dudo que funcione...

    De todas maneras puedes probar a ejecutar el script que te pasé yo, se te ejecutará mas lento pero alomejor no se te queda ejecutando infinitamente...

    ResponderEliminar
  13. Si es cierto tu script funciona perfectamente, pero es rarisimo porque mis scripst funcionaban perfecto y de un momento a otro modifique una linea para hacer pruebas lo deje como estaba antes y ahora se queda ejecutando infinito, no se porque...

    Estos son los dos scripts que funcionaban perfecto pero de un momento a otro no

    1
    arp -s 192.168.50.5 a0-f3-c1-6c-31-fa

    2
    netsh interface ipv4 set neighbors "Conexi¢n de red inal mbrica" 192.168.50.5 a0-f3-c1-6c-31-fa

    Les agregue la linea "exit" "> nul" y nada, es como si hubiera quedado corrupto

    Antes servian ahora se queda infinito, en fin...

    Gracias Alfa por todo, he visto otros post tuyos y son muy interesantes como el comando netstat


    Saludos!

    ResponderEliminar
  14. Ok, después de ver las imagenes que me has enviado ya se cual es el problema.

    Has nombrado los scripts con el mismo nombre de un comando que usa la consola entonces el sistema no es capaz de distinguir entre el script y el comando en si, y se produce este error.

    Simplemente cambia el nombre a los archivos y listo.

    ResponderEliminar
  15. Tienes toda la razon, yo si decia que porque de un momento a otro el script dejaba de funcionar, una vez mas infinitas gracias

    Creo que nunca hubiera visto el error...

    Solo debo agradecerte por tu tiempo y tu sabiduria...

    En tu blog hablas de pfSense o sistemas de seguridad, firewall?

    Igual ya tengo tu blog en mis favoritos para seguir aprendiendo

    Saludos y creo q este post le ayudara mas de uno a aclarar varias dudas que me salieron con este problema de ARP Spoofing

    ResponderEliminar
  16. Obrigado pelas explicações e pelo post.

    Achei muito produtivo.

    Estou no Brasil e estou sofrendo com este problema na empresa.

    Gracias!

    ResponderEliminar
  17. buenas amigo soy victima de un atanque arp se conectan de mi router y me dejan si acceso wifi , alguien me puede ayudar?

    ResponderEliminar
    Respuestas
    1. Hola.

      Para evitar el arp spoofing simplemente tienes que poner las entradas de tu tabla ARP referentes a la puerta de enlace en modo estático (esta explicado como hacerlo en el articulo y en los comentarios superiores).

      De todas maneras si alguien se esta conectando a tu red sin tu permiso creo que tienes un problema mayor que el del ARP Spoofing. Reconfigura tu punto de acceso/router inalambrico, asegurate de que la seguridad esta establecida con WPA2-PSK y cambia la contraseña de tu red wifi por una nueva (asegurate de que la contraseña sea robusta).

      Si tienes configurado tu punto de acceso/router con seguridad WEP no servira de nada cambiar la contraseña ya que se puede descifrar muy facilmente. Si tu punto de acceso no soporta mas seguridad que WEP te recomiendo que compres un punto de acceso/router nuevo.

      Eliminar
  18. gracias tio, nos acabas de salvar un examen de Seguridad Informática en el Chan do Monte. Te queremos

    ResponderEliminar