利用RIPv1协议进行路由劫持攻击实验

本文详细介绍了如何通过GNS3和VirtualBox搭建实验环境,利用RIPv1协议漏洞注入虚假路由,成功实现流量劫持。包含完整网络配置、Quagga工具使用及Wireshark抓包分析,展示了路由协议安全的重要性。

利用RIPv1协议进行路由劫持攻击实验

在本次实验中,我将探讨RIPv1——可能最基础的路由协议。与VLAN实验类似,我在GNS3中构建此实验环境,并将其连接到运行Debian的VirtualBox虚拟机。计划是构建一个由三台路由器组成的网络,所有路由器均使用RIP同步路由信息。然后,我将使用攻击机向网络中注入虚假路由,从而将流量从其真实目标转移。

如果您不熟悉RIP,它是一种基于跳数的系统,其中每个跳数是一个单位,流量通过最少的跳数进行路由。更多信息请参阅维基百科文章。

实验网络构建

我最初使用与VLAN实验相同的3660镜像构建实验室,但在全部设置并运行后,检查所有路由器上的RIP路由信息时,发现所有路由都显示正确,但所有路由的度量值均为1,而不是正确的值。例如,在R1上,到192.168.1.0网络有两个跳数,但度量值仅为1。经过一些搜索,发现这是包括3660在内的一系列设备的已知问题,更多信息请参见GNS3论坛帖子。

因此,我使用3745重新构建了所有内容。这些设备工作正常,但在我关闭实验室并重新启动后,所有配置都丢失了。我以为自己搞砸了,重新构建了所有内容,并确保保存了所有内容。再次重启后,配置再次丢失。进一步搜索发现了这个论坛帖子,解释了该设备与Dynamips存在一个错误,导致无法在启动时恢复配置。

第三次尝试时,我使用了2611,这些是老旧且功能有限的设备,但最终成功运行。

我为每个设备添加了一个NM-4E模块,技术上这不是必需的,但提供了四个额外的以太网接口,可能以后会有用。

下表显示了每个路由器的配置:

主机 接口 IP 连接到
R1 e1/0 10.0.0.1 R2 e1/0
R1 e1/3 192.168.0.1 SW1
R2 e1/0 10.0.0.2 R1 e1/0
R2 e1/1 11.0.0.2 R3 e1/1
R3 e1/1 11.0.0.1 R2 e1/1
R3 e1/3 192.168.1.1 SW2
C1 VirtualPC 1 192.168.0.100 SW1
C2 VirtualPC 2 192.168.1.100 SW2
C3 VirtualPC 3 192.168.0.102 SW1
VBox VirtualBox 192.168.0.101 SW1

SW1和SW2是标准的GNS3交换机。我尝试使用安装了交换机模块的3660以在未来提供更多灵活性,但由于某种原因,这没有正常工作,因此坚持使用通用的GNS3交换机。C3并不是真正必需的,但对于检查连接性很有用。

为便于设置所有内容,以下是使三台路由器进入正确状态的命令。(下载准备进行剪切和粘贴)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
R1#conf t
R1(config)#int e1/0
R1(config-if)#ip add 10.0.0.1 255.0.0.0
R1(config-if)#no sh
R1(config-if)#int e1/3
R1(config-if)#ip add 192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#router rip
R1(config-router)#net 10.0.0.0
R1(config-router)#net 192.168.0.0

R2#conf t
R2(config)#int e1/0
R2(config-if)#ip add 10.0.0.2 255.0.0.0
R2(config-if)#no sh
R2(config-if)#int e1/1
R2(config-if)#ip add 11.0.0.2 255.0.0.0
R2(config-if)#no sh
R2(config-if)#router rip
R2(config-router)#net 10.0.0.0
R2(config-router)#net 11.0.0.0

R3#conf t
R3(config)#int e1/1
R3(config-if)#ip add 11.0.0.1 255.0.0.0
R3(config-if)#no sh
R3(config)#int e1/3
R3(config-if)#ip add 192.168.1.1 255.255.255.0
R3(config-if)#no sh
R3(config-if)#router rip
R3(config-router)#net 11.0.0.0
R3(config-router)#net 192.168.1.0

设置好路由器后,您可以在启用提示符下使用show ip route命令检查RIP是否正常运行。如帮助文本所述,左侧列中的R表示设备通过RIP学习了路由。假设您有正确的路由,可以通过ping其他设备来检查连接性。

设置虚拟PC和VirtualBox机器

如果所有工作正常,下一步是设置虚拟PC和VirtualBox机器。我在第一个GNS3和VirtualBox实验室中涵盖了大部分内容,因此这里不再重复所有内容,但现在我们需要额外一步,因为我们正在超越单个子网。

要离开我们的子网并看到外部世界,您需要在设置IP地址时添加默认网关。您可以在ip命令的第二个参数中执行此操作。网关IP是将子网连接到网络其余部分的机器的IP,因此对于C1,这是192.168.0.1,对于C2是192.168.1.1。

设置两台机器的IP后,您可以通过一些ping来检查连接性。

如果发现ping失败,最好的调试方法是返回路由器,检查每个路由器是否可以正确ping通,检查R1是否可以与R2上的两个IP通信,R2是否可以与R3通信,然后R1与R3通信。检查每个路由器的路由表,确保它知道将流量发送到哪里。如果所有这些都正常工作,则检查C1是否可以与每个路由器通信。分解所有内容,错误往往更容易找到。这就是C3可以有用的地方,以检查错误是否不在C1上。

对于VirtualBox机器,我使用与VLAN实验室中相同的机器。在这里,我设置了IP和默认路由,并再次测试连接性。

攻击

在所有设置之后,现在是时候攻击网络了。计划是劫持从C1发往C2的流量,并将其传递到VBox。这将通过生成我们自己的RIP数据包向网络中注入新路由来实现。我们需要发送一个数据包,广告到192.168.1.0/24子网的路由,其度量(跳数)低于真实路由器。检查R1上的路由表显示,到达192.168.1.0/24的度量是2,因此我们必须广告度量為1的路由才能成功。

我最初考虑使用某种攻击工具或在Scapy中创建自定义数据包,但在研究这个项目时,我遇到了Quagga,一个在软件中实现路由器的Linux包。由于这是专门设计用于与各种路由协议(包括RIP)通信的,我认为使用它比“攻击”工具要好得多。

Quagga设置非常简单,可以在VBox上安装:

1
apt-get install quagga

配置文件存储在/etc/quagga中,我们只需要编辑以下两个文件:

daemons

1
ripd=yes

ripd.conf

1
2
3
4
5
6
hostname ripd
password zebra
router rip
network eth0
version 1
route 192.168.1.0/24

这简单地告诉路由器它在eth0上使用RIP,并广告到192.168.1.0/24的路由。

由于我们计划劫持发往C2的流量,我还向eth0添加了一个虚拟接口,其IP地址为C2,这使我们能够在流量到达时充当C2。如果您只想嗅探流量,可以在机器上创建一个虚拟接口并赋予适当的IP。我发现如果机器上没有具有正确网络IP的接口,事情就不如有了它那样工作。这可能只是我做事的方式,但由于设置接口很容易,无论如何都值得做。

要创建虚拟接口,您可以执行:

1
ifconfig eth0.1 192.168.1.100 up

要创建虚拟接口,您可以执行:

1
2
modprobe dummy
ifconfig dummy0 192.168.1.100 up

在启动Quagga之前,让我们启动Wireshark,以便我们可以看到我们创建的数据包并确保它们看起来正确。要在GNS3中执行此操作,右键单击R1和SW1之间的链接,选择“Start capturing”,在右侧的捕获列表中,右键单击捕获并选择“Start Wireshark”。在Wireshark中添加RIP过滤器并将其放在一边。

现在一切就绪,我们可以启动Quagga。

1
/etc/init.d/quagga start

切换回Wireshark,如果一切设置正确,您将开始看到来自192.168.0.101的RIP数据包,广告其能够以度量1路由到192.168.1.0。

要查看毒化是否有效,检查R1,看它认为到192.168.1.0的最佳路由是什么。

与上面的图像比较,可以看到路由已从:

1
R    192.168.1.0/24 [120/2] via 10.0.0.2, 00:00:27, Ethernet1/0

变为:

1
R    192.168.1.0/24 [120/1] via 192.168.0.101, 00:00:02, Ethernet1/3

我们现在就位,让我们通过劫持一些流量来证明这一点。在VBox上启动tcpdump监听ICMP流量,然后在C1上尝试ping C2(192.168.1.100)。

就这样,VBox正在接收来自C1(192.168.0.100)的ping,这些ping本应发往C2(192.168.1.100)。

总结

如您所见,这种攻击非常容易执行,不需要任何特殊的黑客工具。它稍微有限,因为一旦您毒化了路由,您就无法与原始目的地通信,除非您有第二条路由到它,因为您已经破坏了有效路由,这意味着您不能轻易进行中间人攻击。您还受到可以毒化的网络区域的限制,在这个例子中,可以让R1接受新路由,因为VBox只有一跳之遥,而C2有两跳。如果还有另一个网络连接到R3的右侧,那么从VBox的跳数将高于从R3的跳数,因此毒化不会影响它。

如果必须使用RIP,版本2通过添加身份验证提供了对此的小防御,我将在第二部分中探讨这一点及其有效性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计