ARP原理和Kali环境下的ARP攻击实验

目录

ARP原理

ARP协议

ARP之简单请求应答

ARP攻击

Kali环境下的ARP攻击实验

获取局域网IP地址的方法

数据转发

防御


ARP原理

ARP协议

ARP(Address Resolution Protocol)地址解析协议,目的是实现IP地址到MAC地址的转换。

在计算机间通信的时候,计算机要知道目的计算机是谁(就像我们人交流一样,要知道对方是谁),这中间需要涉及到MAC地址,而MAC是真正的电脑的唯一标识符。

为什么需要ARP协议呢?因为在OSI七层模型中,对数据从上到下进行封装发送出去,然后对数据从下到上解包接收,但是上层(网络层)关心的IP地址,下层关心的是MAC地址,这个时候就需要映射IP和MAC。

 

ARP之简单请求应答

当两台计算机在同一个局域网通信,我们以ping命令为例,该命令使用的ICMP协议

ARP原理和Kali环境下的ARP攻击实验

PC1依据OSI模型①依次从上至下对数据进行封装,包括对ICMP Date加IP包头的封装,但是到了封装MAC地址的时候,②PC1首先查询自己的ARP缓存表,发现没有IP2和他的MAC地址的映射,这个时候MAC数据帧封装失败。我们使用ping命令的时候,是指定PC2的IP2的,计算机是知道目的主机的IP地址,能够完成网络层的数据封装,因为设备通信还需要对方的MAC地址,但是PC1的缓存表里没有,所以在MAC封装的时候填入不了目的MAC地址。

 

那么PC1为了获取PC2的MAC地址,③PC1要发送询问信息,询问PC2的MAC地址,询问信息包括PC1的IP和MAC地址、PC2的IP地址,这里我们想到一个问题,即使是询问信息,也是需要进行MAC数据帧的封装,那这个询问信息的目的MAC地址填什么呢,规定当目的MAC地址为ff-ff-ff-ff-ff-ff时,就代表这是一个询问信息,也即使后面我要说的广播。

 

PC2收到这个询问信息后,将这里面的IP1和MAC1(PC1的IP和MAC)添加到本地的ARP缓存表中,然后④PC2发送应答信息,对数据进行IP和MAC的封装,发送给PC1,因为缓存表里已经有PC1的IP和MAC的映射了呢。这个应答信息包含PC2的IP2和MAC2。PC1收到这个应答信息,理所应当的就获取了PC2的MAC地址,并添加到自己的缓存表中。

 

经过这样交互式的一问一答,PC1和PC2都获得了对方的MAC地址,值得注意的是,目的主机先完成ARP缓存,然后才是源主机完成ARP缓存。之后PC1和PC2就可以真正交流了。

 

ARP攻击

ARP原理和Kali环境下的ARP攻击实验

 

我们知道,当PC1对PC2正常通信的时候(先别管攻击者PC3),PC2、PC1会先后建立对方的IP和MAC地址的映射(即建立ARP缓存表),同时对于交换机而言,它也具有记忆功能,会基于源MAC地址建立一个CAM缓存表(记录MAC对应接口的信息),理解为当PC1发送消息至交换机的Port1时,交换机会把源MAC(也就是MAC1)记录下来,添加一条MAC1和Port1的映射,之后交换机可以根据MAC帧的目的MAC进行端口转发,这个时候PC3只是处于监听状态,会把PC1的广播丢弃。

 

正常的PC3会把广播包丢弃,同样的PC3可以抓住这一环节的漏洞,把不属于自己的广播包接收,同时回应一个虚假的回应包,告诉PC1我就是PC2

(IP2-MAC3),这样PC1会收到两个回应包(一个正确的IP2-MAC2,一个虚假的IP2-MAC3),但是PC1并不知道到底哪个是真的,所以PC1会做出判断,并且判断后到达的为真,那么怎么让虚假的回应包后到达呢,PC3可以连续不断的发送这样的回应包,总会把哪个正确的回应包覆盖掉。

 

而后PC1会建立IP2-MAC3这样一条ARP缓存条目,以后当PC1给PC2发送信息的时候,PC1依据OSI模型从上至下在网络层给数据封装目的IP为IP2的包头,在链路层通过查询ARP缓存表封装目的MAC为MAC3的数据帧,送至交换机,根据查询CAM表,发现MAC3对应的接口为Port3,就这样把信息交付到了PC3,完成了一次ARP攻击。

 

Kali环境下的ARP攻击实验

1.获取目标主机的信息

ARP原理和Kali环境下的ARP攻击实验

IP是192.168.0.102  子网掩码是255.255.255.0 网关是192.168.0.1

 

 2 攻击

ARP原理和Kali环境下的ARP攻击实验

如上图,arpspoof -i [网卡] -t [被攻击的机器ip] [被顶替mac地址的机器ip]

在攻击过程中,被攻击的机器一直以为网关(192.168.0.1)的mac地址是攻击者(192.168.104)的mac地址,数据包一直发往攻击者的机器,攻击者没有转发数据包而是直接丢弃掉,被攻击机器发出去的数据包得不到回复,造成断网的现象。

 

获取局域网IP地址的方法

fping -asg [网络号.0]/[子网掩码]

如 fping -asg 192.168.0.0/24  其中192.168.0是我的网络号,/24是子网掩码255.255.255.0的缩写,前24位都是网络号的意思。

命令意思可以解释为:网络号192.168.0 主机号从0开始,子网掩码是/24 ping这个网络下的所有IP地址,返回alive状态的IP。

 

数据转发

上文说过,欺骗过来的数据包不会杯转发而是直接丢弃,所以造成杯攻击者断网的现象。如果希望数据包被攻击者的机器转发,执行以下命令:

echo 1 > /proc/sys/net/ipv4/ip_forward

这里需要说明>和>>的区别,> 左边的内容直接覆盖式写入右边的文件中;>>左边的内容append,附加到右边的文件中。这里右边的文件的内容是个标志位,告诉网卡是否需要转发数据,0或文件不存在是不转发,1是转发。如果文件已经存在并有内容,使用>>可能会出现问题。建议使用>.

 

数据经过网卡转发后,可以使用一些工具来获取经过网卡的数据,如driftnet抓取图片,ettercup获取请求的参数等等,另外ettercup的功能很强大,还可以做DNS欺骗等。

 

防御

1.静态ARP表 弊端:局域网中的机器变动需要手动修改ARP表

2.划分VLAN,广播包只能在同一个虚拟域内广播。

 

参考引用了以下链接的一些内容的图片:

https://blog.51cto.com/13570193/2083332