中间人攻击又被简称为NITM攻击,这是一种很有意思的攻击方式。攻击者会把自己的设备放置在网络连接的两台设备中间以此来监听它们之间的通信,当然这个中间位置是逻辑上的。攻击者就像是一个间谍,它不断从一个设备接收信息,解读之后再转发给另一个设备。在这个过程中两个设备之间的通信并没有中断,因此它们完全不会发觉多了一个“中间人”。
国内的网络安全行业有一本很经典的图书《白帽子讲web安全》,该书的作者就提到他在进入阿里巴巴之后的很快就通过网络嗅探获得了开发总监的邮箱密码。这里面提到的网络嗅探正是利用了中间人攻击技术,这种技术是最受黑客欢迎的技术,因为它极为简单高效。
中间人攻击的目标并不是交换机,而是终端设备(例如计算机、手机等)。在每一台终端设备中都有一个 ARP 缓存表,这个表中保存了一些 IP 地址和 MAC 地址之间的对应关系。
通常应用程序只能通过 IP 地址进行通信,但是在内部网络中使用的交换机却不能识别 IP地址。因此每一台终端设备在发送应用程序产生的数据包时,必须在它里面添加上一个MAC 地址。而这个 MAC 地址是哪里来的呢?
ARP协议的相关理论
互联网可以看作是无数局域网的集合,我们一自身所处的局域网为例。每当我们要向外部发送一个数据包的时候,需要判断这个数据包是否是发往局域网外部的,这一点可以通过子网掩码和本机的IP地址进行计算人,如果是局域网内就发给目标主机。如果是局域网外就发给网关
数据包在局域网内部是无法使用IP地址进行通信的,因为局域网中的连接设备只能识别MAC(硬件)。但是应用程序发出的数据包中往往只包含了目标的IP地址,此时就需要由ARP程序来找到数据包目的IP地址对应的MAC地址。
在每一台计算机中都存在有一个ARP缓存表,这个表中动态的保存了一些IP地址和MAC地址的对应关系。当计算机接收到一个数据包之后,就会通过ARP程序在这个表中查找包中IP地址所对应的表项,然后根据这个表项在数据包中再添加MAC地址。
启动wireshark,再选中要使用的网卡
将”arp”作为过滤器
查看ARP缓存中的内容
有网关的硬件地址
使用arp -d命令来清除ARP缓存中的内容。这样做的目的是观察ARP协议的请求和应答过程。
在第一步知道本机硬件地址为”DC-F5-05-8C-7C-35”。建立一个显示过滤器”eth.addr==DC-F5-05-8C-7C-35 and arp”
ARP请求:Who has 192.168.1.1?
ARP应答:Tell 192.168.1.104
192.168.0.1是网关地址,192.168.0.115是本机地址
ARP请求数据帧的前面4项硬件类型(Hardware type)、协议类型(Protocol type)、硬件地址长度(Hardware size)、协议地址长度(Protocol size)是固定的。
Opcode 用来表明这个ARP数据帧的类型,为1表示请求、为2表示应答
Sender MAC address 表示发送方的硬件地址、Sender IP address表示发送方的IP地址
Target IP address 表示目标的IP地址,发送方希望这个IP地址的主机回答做自己的硬件地址
ARP应答数据帧
列出运行在对ARP进行分析时wireshark过滤器
最简单的ARP过滤器技术”arp”
ARP请求”arp.opcode==0x0001”
ARP请求”arp.opcode==0x0002”
获得源地址或目的地址为”arp.src.hw_mac == DC-F5-05-8C-7C-35”
ARP欺骗的原理
ARP协议简单高效,但是这个协议存在一个重大缺陷,就是这个过程并没任何的认证机制,也就是说如果一台主机如果收到ARP请求数据包,形如“注意了,我的IP地址192.168.1.100,我的物理地址是22: 22: 22: 22: 22: 22,IP地址为192.168.1.2在吗,我需要和你进行通信,请告诉我你的物理地址,收到请回答!”的数据包,并没有对这个数据包进行任何真伪的判断,无论这个数据包是否真的来自192.168.1.100,都会将其添加到ARP表中。因此黑客就可能会利用这个漏洞来冒充网关等主机。
使用WireShark的专家系统分析中间人攻击
在这个网络中所有的主机地址都是192.168.169.0/24,网关地址为192.168.169.2。
这个数据包文件中前面的部分都是一些交换机产生的STP数据包,这里并没有发现问题。可是从第13个数据包开始,发现几乎所有数据包都是ARP数据包,这一点就很不正常,因为通过前面了解ARP的工作流程,通常一个主机在建立一个连接时,只需要发送一个ARP请求,收到ARP应答。这也表示只需要两个ARP数据包就可以完成。如果出现大量的ARP数据包,通常是有以下3中情况造成的
- 有攻击者在利用ARP请求对网络主机进行扫描
- 有计算机感染了ARP病毒并在破坏网络的通信
- 有攻击者在利用ARP欺骗在发动中间人攻击
显然是有攻击者在利用ARP欺骗在发动中间人的这种可能性最大。
这里我们要使用 Wireshark 中的一个强大的智能功能——专家系统。其实在上面的数据包文件中,不仅仅是我们发现了问题,Wireshark 也同样发现了问题。而且 Wireshark 比起我们来说拥有更大的优势,因为它的处理速度远不是手工可以相比的。
数据包文件发现了问题之后,就会在左下角显示一个圆形按钮,根据问题严重性的不同,这个按钮的颜色也不同
这个警告表示发现了有重复的IP地址。信息”Duplocate IP address configured(192.168.169.2)”
通知我们192.168.169.134与另外的一个IP地址使用了同一个MAC地址,这里列出的数据包来自攻击者发出的ARP应答
这说明00:0c:29:23:le:f4主机在同时冒充192.168.169.2和192.168.169.134.这是在进行双向欺骗
00:0c:29:23:le:f4在计算机192.168.169.134和网关192.168.169.2之间充当了中间人,从而监听了所有192.168.169.14和外部的通信,自然也获取了使用192.168.169.134主机用户的密码
wireshark 专家系统
- Errors:数据包或者接下去错误,用红色表示
- Warnings:来着 application/transport 的异常响应,用黄色表示
- Notes:来着 application/transport 的异常响应,用浅蓝色表示
- Chats:关于工作流的信息,有蓝色表示
数据包捕获时专家系统是不可用的
如何发起中间人攻击
正所谓“知己知彼,百战百胜”,前面我们刚刚利用 Wireshark 的专家系统分析了一个
中间人攻击的实例。接下来我们来了解一下这种攻击是如何实现的。
使用arpspoof来完成异常网络欺骗
sudo arpspoof -i eth0 -t 192.168.0.102 192.168.0.2
现在受欺骗的主机把192.168.0.142当做网关
但是我们的主机也不会再将这些数据包转发到网关,这样将会导致目标主机无法正常上网,所以我们需要主机上开启转发功能。开启一个终端,来气的方法
echo 1 >> /proc/sys/net/ipv4/ip_forward
这样我们就可以将截获到的数据包再转发出去,被欺骗的主机就依然可以正常上网,从而无法察觉受到了攻击
使用Wireshark来发起攻击
虽然 ARPspoof是一个非常简单实用的工具,都是它隐藏了攻击实现的细节。
首先kali清除arp缓存表。然后启动wireshark来抓包,显示过滤器”arp.opcode == 0x0002”来捕获ARP应答包
思路很简单,将这里的Sender MAC address 字段的内容修改为主机的MAC地址,将Sender IP address字段的内容修改为要冒充的主机的IP地址。然后将这个数据包发送出去。
所以这里我们就在这个数据包信息面板中单击鼠标右键,然后选中”Export Selected Packet Bytes”将其保存为一个文件
接下来使用编辑器(任意类型的16为编辑器都可以)打开这个文件
然后将里面的 00:50:56:e8:cd:1c替换成为主机的MAC地址,把192.168.0.254替换为网关的地址,最后保存
kali提供了一个可以专门用来将文件已数据包发送出去的工具 file2cable
file2cable -i eth0 -f ArpSpoof
这样就完成了一次ARP欺骗
如何防御中间人攻击
静态绑定 ARP 表项
arp -s 网关的IP地址网关的MAC地址
使用 DHCP Snooping 功能
交换机开启 DHCP-Snooping 后,会对DHCP报文进行侦听,可以提取报文中IP地址和MAC地址信息,然后建立DGCP Snooping的绑定表
划分 VLAN
VLAN(虚拟局域网)技术可以局域网中建立多个子网,这样就限制了攻击者的攻击范围
ARP防火墙