SEG Lab 5 - ARP Cache Poisoning Attack Lab
Conteúdos
- Modelo Relatório
- SEG Lab 1 - Web SQL Injection
- SEG Lab 2 - Cross-Site Scripting (XSS) Attack Lab
- SEG Lab 3 - Cross-Site Request Forgery Attack Lab
- SEG Lab 4 - Packet Sniffing and Spoofing Lab
- SEG Lab 5 - ARP Cache Poisoning Attack Lab
- SEG Lab 6 - ICMP Redirect Attack Lab
- SEG Lab 7 - TCP Attacks
Nome da Atividade: SEG Lab 5 - ARP Cache Poisoning Attack Lab
Nome e Matrícula: Lucas Lima do Nascimento - 12111ECP024
3. Task 1.A (using ARP request).
Primeiramente, iniciei o processo construindo o código necessário para enviar o pacote com as informações de IP e endereço MAC que foram previamente obtidas. Este processo envolveu a criação de uma série de instruções cuidadosamente elaboradas para garantir que o pacote fosse enviado corretamente e que todas as informações necessárias fossem incluídas.
Uma vez que o código foi construído, utilizei o método sendp para enviar o pacote. Este método é particularmente útil em situações em que é necessário enviar pacotes de dados com informações críticas e precisas.
Depois de enviar o pacote, entrei no container A e acessei os registros ARP para verificar se as informações de IP e endereço MAC foram recebidas corretamente. Este processo envolveu uma verificação cuidadosa das informações de registro, incluindo a análise de todos os dados relevantes para garantir que estavam corretos e precisos.
No geral, o processo de enviar pacotes com informações de IP e endereço MAC pode ser complexo, mas com o código correto e o método de envio adequado, é possível garantir que as informações sejam enviadas corretamente e que todas as informações necessárias sejam incluídas. Com a verificação cuidadosa dos registros ARP, é possível confirmar que as informações foram recebidas corretamente e que o processo foi concluído com sucesso.



3. Task 1.B (using ARP reply).
Para a segunda atividade, foi necessário fazer uma alteração no arp.op, trocando-o por is-at (ou 2). Além disso, para facilitar a visualização, incluí um comando show no pacote, que exibe as informações no terminal.
Durante a execução dessa parte do exercício, ao adicionar um registro já existente no ARP, o registro anterior foi removido automaticamente. Para garantir que não houvesse conflitos, executei o comando ip -s -s neigh flush all, que limpa todos os registros do cache ARP, antes de prosseguir com a atividade.


![]()
3. Task 1.C (using ARP gratuitous message)
Para essa terceira atividade, bastou alterar o valor do endereço MAC e utilizar o mesmo endereço IP para psrc e pdst (utilizando assim, uma ARP grauitous message).


![]()
4. Task 2: MITM Attack on Telnet using ARP Cache Poisoning
Para iniciar o ataque, M falsifica dois pedidos ARP: um com o endereço IP de B como destino e outro com o endereço IP de A como destino. Isso é semelhante ao procedimento usado na Tarefa 1A.
Criei um script que envia os pacotes de 3 em 3 segundos. Com isso, podemos notar que, quando B tenta pingar A, por exemplo, ele acaba pingando M sem saber.


B tenta pingar A

M é pingado no lugar
Com o encaminhamento de IP ativo, ele envia corretamente os pacotes.
Já relativa à parte do exercício envolvendo telnet, apesar de ter conseguido logar na máquina os comandos e executar algumas instruções disponíveis no pacote telnet, não consegui fazer com que os dados fossem alterados (eu suspeito que algo relativo à conexão dos contêineres não esteja funcionando corretamente)



5. Task 3: MITM Attack on Netcat using ARP Cache Poisoning
Nessa última parte, utilizando o netcat, consegui conectar ambos os contêineres corretamente,

Entretanto, apesar do TCPdump conseguir detectar a troca de pacotes, o meu código não parecia executar o sniffing de forma correta.

Segue o código utilizado:
#!/usr/bin/env python3
from scapy.all import *
IP_A = "10.9.0.5"
MAC_A = "02:42:0a:09:00:05"
IP_B = "10.9.0.6"
MAC_B = "02:42:0a:09:00:06"
def spoof_pkt(pkt):
print(pkt)
if pkt[IP].src == IP_A and pkt[IP].dst == IP_B:
# Create a new packet based on the captured one.
# 1) We need to delete the checksum in the IP & TCP headers,
# because our modification will make them invalid.
# Scapy will recalculate them if these fields are missing.
# 2) We also delete the original TCP payload.
newpkt = IP(bytes(pkt[IP]))
del newpkt.chksum
del newpkt[TCP].payload
del newpkt[TCP].chksum
#################################################################
# Construct the new payload based on the old payload.
# Students need to implement this part.
if pkt[TCP].payload:
data = pkt[TCP].payload.load # The original payload data
newdata = list("AAAAAAAAA") + data # No change is made in this sample code
print(newdata)
send(newpkt / newdata)
else:
send(newpkt)
################################################################
elif pkt[IP].src == IP_B and pkt[IP].dst == IP_A:
# Create new packet based on the captured one
# Do not make any change
newpkt = IP(bytes(pkt[IP]))
del newpkt.chksum
del newpkt[TCP].chksum
send(newpkt)
f = "tcp"
pkt = sniff(iface="eth0", filter=f, prn=spoof_pkt)