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
Interessant. En... prima met de vermelde links onderaan.
BeantwoordenVerwijderen