ARP cache poisoning / ARP spoofing (MIT) February 8, 2011Posted by Tournas Dimitrios in Linux admin tools.
This article assumes that you are already familiar with the functionality of the arp protocol , as we already know it is the foundation for LAN addressing . Many people think that once they use a switch for connecting their local network they’re safe from network sniffing . Basically this is right because the traditional way of sniffing was to force a host to read all network packets ( the so called “promiscuous mode” ) .On a switched network this is not applicable because each computer has only access to traffic that is destined to his own IP address .
arp-spoofing is also known as MIT (man in the middle attack)
The tool used here is called arpspoof and is distributed in the dsniff package . This package is provided from the EPEL repository for a CentOs 5.x distribution , just install it with :
yum install dsniff .
What we do is the following : we constantly send the victim computer ARP answers telling him that the MAC address belonging to the IP of the gateway machine (router) is our MAC address . After some time the victim computer will believe us and makes a wrong entry in his ARP cache. Next time the victim wants to send an IP packet to the router , it will use our MAC address , so actually we get the IP packets . Of course we do the same thing with the gateway (router) machine just the other way round . Yes it is a weak point of the ARP protocol , it works passively , so each computer that receives an ARP answer it will update it’s arp table even if no ARP request were made . Different jargon’s are used to describe this technique : arp spoofing , arp poisoning , MIT man in the middle .
The process is simple :
- In order to tell the victim host that now we (our MAC address) are the one belonging to the IP of the gateway enter the following command :
arpspoof -i eth0 -t victimIP gatewayIP
- In a separate shell we start the matching command to fool the gateway to believe we are victimIP .
arpspoof -i eth0 -t gatewayIP victimIP
- Don’t forget to enable IP forwarding on your host so that the traffic goes through your host . Otherwise victim will loose connectivity .
sysctl -w net.ipv4.ip_forward=1
- Now watch all the traffic between the victim host and the outside network going throuhg your machine
tcpdump host victimIP and not arp
Step 2/3 can be combined on one terminal :
arpspoof -t victimIP gatewayIP 2&>/dev/null
arpspoof -t gatewayIP victimIP 2&>/dev/null
The “& >/dev/null ” part is there to make it easier to run from one terminal but you may want to omit it for debugging purposes .