ARP

当一个局域网中有很多台主机时,假如PC1要和PC2通信,但是PC1只知道PC2的ip地址,而不知道PC2的MAC地址,那么PC1将数据包发给交换机进行ARP广播,询问IP地址对应的MAC地址是哪个,此时局域网中的所有主机都会受到ARP请求,但是PC3,PC4收到数据包之后,发现这个IP地址不属于自己,就会把包丢弃。而PC2收到了数据包之后,发现这个IP地址是自己的,就会发一个ARP单播回应包,告诉他这个IP地址对应的MAC地址。此时,在PC1内就会有一个ARP缓存表,在交换机内部也有会一个CAM表,这就是ARP协议(Address Resolution Protocol)

ARP协议_mac地址

主机通信需要查找ARP表,交换机通信需要查找CAM表,而路由器通信需要查找Route表


  • ARP表: ip <--> MAC地址   (存储在主机、路由器的ARP缓存表中)
  • CAM表:MAC地址 <--> 端口 (存储在交换机的CAM缓存表中)
  • Route表: route <--> 端口 (存储在路由器的Route表中)

查看ARP信息: arp  -a 

清除ARP信息: arp  -d 

arp静态绑定:      arp  -s  ip  mac 

ARP协议_ip地址_02

ARP数据包的封装 

ARP协议_ip地址_03

ARP协议_缓存_04

硬件类型字段表示硬件地址的类型.它的值为1即表示以太网

协议类型字段表示的协议类型.它的值为 0x0800 即表示 IP 地址

硬件地址长度和协议地址长度分别指硬件地址和协议地址的长度,以字节为单位.对于以太网上 IP 地址的 ARP 请求或应答来说,它们的值分别为 6 和 4

操作字段op出四种操作类型,它们是 ARP 请求(值为1)、ARP 应答(值为 2 )、RARP 请求(值为 3 )和 RARP 应答(值为 4 )

接下来的四个字段是发送端的mac址、发送端的ip址、目的端的mac址和目的端的ip址.


免费ARP

免费ARP主要是用来进行地址的冲突性检测,当为某台主机配置完IP地址后,此设备会连续发送两次免费ARP,如果无回应,说明不存在地址冲突。免费ARP还有一个作用是刷新同网段内其他终端的ARP缓存表

ARP协议_ip地址_05

ARP协议_ip地址_06

ARP代理

ARP代理的工作原理:R1和R3虽然属于不同的广播域,R1要和R3进行通信,R1发出ARP请求广播包,请求获得R3的MAC地址。由于路由器不会转发广播包,因此ARP请求只能到达路由器,不能到达R3。当在路由器上启用ARP代理后,路由器会查看ARP请求,发现IP地址192.168.20.1属于它连接的另一个网络,因此路由器用自己的接口MAC地址代替R3的MAC地址,向R1发送了一个ARP应答。R1收到ARP应答后,会认为R3的MAC地址就是R2的MAC地址,而不会感知到ARP代理的存在。proxy ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上 (windows系统不配网关与不同网段通信的话,直接不发送数据包,Linux会发送)

ARP协议_缓存_07

ARP协议_缓存_08

ARP欺骗

假设内网中有下列几台主机:

主机

IP

MAC

A

192.168.1.1

aa:aa:aa:aa:aa:aa

B

192.168.1.2

bb:bb:bb:bb:bb:bb

C

192.168.1.3

cc:cc:cc:cc:cc:cc

在同一局域网内,主机A和B想要通信,于是主机A就会向整个局域网广播ARP请求,请求B主机的ip(192.168.1.2)对应的MAC地址。正常情况下,B和C都会收到整个ARP请求。B看到目标ip地址是自己,于是会回一个ARP回复包,告诉A主机IP 192.168.1.2对应的MAC地址 bb:bb:bb:bb:bb:bb。C看到目标ip地址不是自己,则丢弃整个数据包。

但是,事情并没有想象的那么美好!C是黑客,他想监听A和B之间通信的流量包。他收到这个请求后,也向A回复ARP回复包,并且大量的回复ARP回复包。于是A将会收到B和C回复的ARP回复包。由于ARP回复包遵循后到优先原则。C大量回复的ARP回复包会把B回复的数据包给覆盖了。所以A最终会相信C的ARP回复包。认为192.168.1.2对应的MAC地址是cc:cc:cc:cc:cc:cc。

同理,C也会用同样的手段去欺骗B。

这样,A就会认为C是B,B会认为C是A。于是,他们两之间通信的数据包都会发送给C。

那么,现在C就可以对A和B之间的数据流量做手脚了!

而如果C是欺骗A和路由器或者B和路由器,那么,C将可截获A和B访问外网的所有流量了!这是非常可怕的

ARP欺骗的实现

在arp欺骗之前,先开启流量转发,不然将直接导致被攻击者断网!

echo 1 > /proc/sys/net/ipv4/ip_forward       #开启流量转发

arpspoof 

aspspoof是kali下一款命令行进行ARP欺骗的工具,操作简单

arpspoof -i eth0  -t 192.168.10.10  192.168.10.254  #第二个ip是网关的ip

ettercap

ettercap是Kali下一款用于ARP欺骗的工具,可以图形化操作也可以命令行

ettercap -G   #图形化操作
ettercap -i eth0 -Tq -M arp:remote //192.168.10.10// //192.168.10.254// #命令行操作,两个ip地址可以互换

bettercap

bettercap是ettercap的继承者,功能强大。​

driftnet 

driftnet是kali下能抓取流经网卡的图片和链接。和ARP欺骗工具进行结合,可以探测局域网内其他用户流量中的图片

driftnet  -b  -i  eth0  查看图片
-b 捕获到新的图片时发出嘟嘟声
-i interface 选择监听接口
-f file 读取一个指定pcap数据包中的图片
-p 不让所监听的接口使用混杂模式
-a 后台模式:将捕获的图片保存到目录中(不会显示在屏幕上)
-m number 指定保存图片数的数目
-d directory 指定保存图片的路径
-x prefix 指定保存图片的前缀名

urlsnarf 

urlsnarf是kali下能抓取流经指定网卡80端口、8080端口或3128的数据,也就是流经的http协议,和arp欺骗工具结合可以探测局域网内其他用户浏览过的网站

urlsnarf -i eth0

ARP协议_缓存_09

ARP欺骗的危害


  • 断网攻击,直接把截获的数据包丢弃
  • 限速,断网攻击很容易被发现,很多黑客会对同一个局域网内的其他用户进行限速,这样,黑客自己上网的速度就快了
  • 窃取隐私,如果截取的数据是通过明文传输的,那么,就可以看到账号密码等东西。常见的明文传输的协议有HTTP、FTP、Telnet、POP3、SMTP等

ARP欺骗的防御

网络设备

支持DAI(Dynamic ARP Inspection)动态ARP监测的交换机或无线路由器


  • 交换机记录每个接口对应的IP地址和MAC地址,即 port<->mac<->ip,生成DAI监测表
  • 交换机监测每个接口发送过来的ARP回应包,根据DAI表判断是否违规,若违规则丢弃此数据包并对接口进行惩罚

但是事实上,大部分能支持这种动态ARP监测技术的交换机或者路由器,基本都是企业级的产品。即便是企业级交换机,具备局域网安全防御功能的设备,价格都要高出不少。所以很多中小型企业或者校园网,基本都愿意买不具备这种功能的产品,因为能通网就行,至于是否安全,这不是他们考虑的问题

用户端

对于普通用户,陌生网络不要随意接入。其次,用户的电脑或者手机上安装360卫士,腾讯电脑管家等安全产品

RARP

RARP:反向地址转换协议(RARP:Reverse Address Resolution Protocol) 反向地址转换协议(RARP),将MAC地址转换成IP地址,允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。