Sunday, October 18, 2009

Hack 31 Detect ARP Spoofing











 < Day Day Up > 





Hack 31 Detect ARP Spoofing





Find out if there's a

"man in the middle" impersonating

your server
.





One of

the biggest threats to a computer

network is a rogue system pretending to be a trusted host. Once

someone has successfully impersonated another host, they can do a

number of nefarious things. For example, they can intercept and log

traffic destined for the real host, or lay in wait for clients to

connect and begin sending the rogue host confidential information.

Spoofing a host has especially severe consequences in IP networks, as

this opens many other avenues of attack. One technique for

spoofing a host on an IP

network is Address Resolution Protocol (ARP) spoofing. ARP

spoofing
is limited only to local segments and works by

exploiting the way IP addresses are translated to

hardware Ethernet addresses.





When an IP datagram is sent from one host to another on the same

physical segment, the IP address of the destination host must be

translated into a MAC address. This is the hardware

address of the Ethernet card that is physically connected to the

network. To accomplish this, the Address Resolution Protocol is used.





When a host needs to know another host's Ethernet

address, it sends out a broadcast frame that looks like this:





01:20:14.833350 arp who-has 192.168.0.66 tell 192.168.0.62




This is called an ARP request. Since this is

sent to the broadcast address, all Ethernet devices on the local

segment should see the request. The machine that matches the requests

responds by sending an ARP reply:





01:20:14.833421 arp reply 192.168.0.66 is-at 0:0:d1:1f:3f:f1




Since the ARP request already contained the MAC address of the sender

in the Ethernet frame, the receiver can send this response without

making yet another ARP request. Unfortunately, ARP's

biggest weakness is that it is a stateless

protocol


.

This means that it does not track responses to the requests that are

sent out, and therefore will accept responses without having sent a

request. If someone wanted to receive traffic destined for another

host, they could send forged ARP responses matching any chosen IP

address to their MAC address. The

machines that receive these spoofed ARP responses

can't distinguish them from legitimate ARP

responses, and will begin sending packets to the

attacker's MAC address.





Another side effect of ARP being stateless is that a

system's ARP tables usually only use the results of

the last response. In order for someone to continue to spoof an IP

address, it is necessary to flood the host with ARP responses that

overwrite legitimate ARP responses from the original host. This

particular kind of attack is commonly known as ARP cache

poisoning
.





Several tools�such as

Ettercap

(http://ettercap.sourceforge.net),

Dsniff (http://www.monkey.org/~dugsong/dsniff/), and

Hunt (http://lin.fsid.cvut.cz/~kra/)�employ

techniques like this to both sniff on switched networks and perform

man-in-the-middle attacks. This technique can of course be used

between any two hosts on a switched segment, including the local

default gateway. To intercept traffic bidirectionally between hosts A

and B, the attacking host C will poison host A's ARP

cache, making it think that host B's IP address

matches host C's MAC address. C will then poison

B's cache, to make it think A's IP

address corresponds to C's MAC address.





Luckily, there are methods to detect just this kind of behavior,

whether you're using a shared or switched Ethernet

segment. One program that can help accomplish this is

Arpwatch

(ftp://ftp.ee.lbl.gov/arpwatch.tar.gz). It

works by monitoring an interface in promiscuous mode and recording

MAC/IP address pairings over a

period of time. When it sees anomalous behavior, such as a change to

one of the MAC/IP pairs that it has learned, it will send an alert to

the syslog. This can be very effective in a shared network using a

hub, since a single machine can monitor all ARP traffic. However, due

to the unicast nature of ARP responses, this program will not work as

well on a switched network.





To achieve the same level of detection coverage in a switched

environment, Arpwatch should be installed on as many machines as

possible. After all, you can't know with 100%

certainty what hosts an attacker will decide to target. If

you're lucky enough to own one, many high-end

switches allow you to designate a

monitor port that

can see the traffic of all other ports. If you have such a switch,

you can install a server on that port for network monitoring, and

simply run Arpwatch on it.





After downloading Arpwatch, you can compile and install it in the

usual manner by running:





# ./configure && make && make install




When running Arpwatch on a machine with multiple interfaces,

you'll probably want to specify the interface on the

command line. This can be done by using the -i

command-line option:



arpwatch -i iface




As Arpwatch begins to learn the MAC/IP pairings on your network,

you'll see log entries similar to this:





Nov  1 00:39:08 zul arpwatch: new station 192.168.0.65 0:50:ba:85:85:ca




When a MAC/IP address pair changes, you should see something like

this:





Nov  1 01:03:23 zul arpwatch: changed ethernet address 192.168.0.65 0:e0:81:3:d8:8e 

(0:50:ba:85:85:ca)

Nov 1 01:03:23 zul arpwatch: flip flop 192.168.0.65 0:50:ba:85:85:ca (0:e0:81:3:d8:8e)

Nov 1 01:03:25 zul arpwatch: flip flop 192.168.0.65 0:e0:81:3:d8:8e (0:50:ba:85:85:ca)




In this case, the initial entry is from the first fraudulent ARP

response that was received, and the subsequent two are from a race

condition between the fraudulent and authentic responses.





To make it easier to deal with multiple Arpwatch installs on a

switched environment, you can send the log messages to a central

syslogd [Hack #54], aggregating all the output

into one place. However, due to the fact that your machines can be

manipulated by the same attacks that Arpwatch is looking for, it

would be wise to use static ARP table entries [Hack #32]

on your syslog server, as well as all the hosts running Arpwatch.





















     < Day Day Up > 



    No comments:

    Post a Comment