基于Mininet实现BGP路径挟持攻击实验

1 实验目的

  • 掌握如何mininet内模拟AS。
  • 掌握BGP路径挟持的原理和分析过程。

2 实验原理

互联网是由相互连接的自治系统AS组成的,通过一个通用的边界网关协议(BGP)进行交互彼此的路由信息。如果利用BGP进行特殊攻击,比如一个伪装的AS伪造了一个更短的路径到前缀P,其他的AS要路由到前缀P时就会选择这个更短的路径,受到感染的AS会把该攻击信息继续向其他的AS传播,使得更多的AS受到感染,逐渐形成了BGP劫持攻击。

3 实验任务

通过创建下图所示的网络拓扑,包括四个AS(AS1,AS2,AS3,AS4)。每个AS都有它的路由守护进程(R1,R2,R3,R4),守护路由的对接情况如下:
1.R1和R2,R4对接
2.R2和R1,R3对接
3.R3和R2对接

BGP路径挟持攻击样例 图1

1.为每个AS节点创建容器,每个容器都有一个路由守护进程,我们使用开源路由组件quagga,每个AS运行bgpd来承载BGP,通过zebra配置linus内核中的路由规则。

2.每个as的配置信息存放在实验代码包的conf文件夹中

3.因为mininet使用网络域名,每个容器的路由表都是相互独立的,因此改变AS1的路由表不会影响AS2的路由表。

4.AS是通过静态路由规则中分离的网络接口互相连接的。

4 实验步骤

4.1 搭建环境

创建虚拟机mininet,并在创建时选择mininet_bgp的镜像,该镜像中已经下载了相关的实验代码,进行了对应的环境配置(注:如果用户需要选择其他mininet镜像,建议参考附录进行环境配置),启动实验和虚拟机。

4.2实验验证

登录虚拟机mininet,启动quagga:

切换到/home/bgp目录执行以下命令创建实验拓扑。

BGP路径挟持攻击样例 图16

执行ctrl+a+d切换到系统操作界面。执行以下命令启动登录AS1的路由R1。

请根据提示输入密码en登录。

BGP路径挟持攻击样例 图17

执行命令sh ip bgp查看AS1的路由表信息:

BGP路径挟持攻击样例 图18

从上图中可以看出,要到达“13.0.0.0/8”选择的AS路径是“2 3”(例如通过AS2和AS3)。

执行exit退出到系统操作界面。执行以下脚本访问mininet开启在AS3中的一个默认web服务器,并判定可以直接从AS的host1-1直接访问。

在代码目录下有一个“website.sh”,这个脚本执行后会在AS1上循环执行curl -s 13.0.1.1这个命令。

BGP路径挟持攻击样例 图19

执行ctrl+a+d切换到系统操作界面,执行以下命令开启伪装的AS。

这个AS连接到AS1并通知它一条路由到“13.0.0.0/8”的更短的路径(例如一个直接从AS1到AS4的路径),这样AS1就会的选择这个更短的路径。

BGP路径挟持攻击样例 图20

查看website.sh的执行结果。

1.执行screen –r选择登录website的执行界面。

BGP路径挟持攻击样例 图21

当前有两个界面,其中1895为mininet的操作界面进程,2422为website.sh的界面进程,此处选择2422。

2.执行以下命令登录website的执行界面。

可以看出原来的“default web server”变成了“Attacker web server”。
说明实际的进程号可能会不一样,请会根据实际情况操作。

BGP路径挟持攻击样例 图22

执行ctrl+a+d切换到系统操作界面,执行下面命令启动登录AS1的路由R1。

请根据提示输入密码en登录。

BGP路径挟持攻击样例 图23

执行命令sh ip bgp查看AS1的路由表信息。

BGP路径挟持攻击样例 图24

可以在AS1的路由表中看出AS4的选择路径和AS3的路径。因为通过AS4到达“13.0.0.0/8”是比较短的,所以R1选择了AS4作为它的下一跳。

执行以下脚本关闭R4的路由进程。

BGP路径挟持攻击样例 图25

登录website.sh的执行界面查看界面变化。

可以看出原来的“Attacker web server”又变成了“default web server”。
说明2422为website.sh的界面进程,实际的进程号可能会不一样,请会根据实际情况操作,可执行screen -r命令查看进程号。

BGP路径挟持攻击样例 图26

登录到mininet的操作界面退出拓扑:

在mininet操作命令行中输入exit退出拓扑结束实验。
说明1895为mininet的界面进程,实际的进程号可能会不一样,请会根据实际情况操作,可执行screen -r命令查看进程号。

5 实验结论

在BGP消息通告中把BGP邻居作为完全可信的实体,并认为所有从邻居学习到的路由信息都是当前网络拓扑的真实状况。因此当一个攻击者将不属于自己的IP前缀宣告到其他的组织,接收到通告的组织也只是依据自身策略决定到达该IP前缀的下一跳AS,没有机制可以用来验证发布该前缀的组织是否真的拥有该IP前缀。如果选择了攻击者AS作为到达该IP前缀的下一跳地址,则所有到达该IP前缀的流量都会被劫持到攻击者AS,并且受到感染的AS会把该攻击信息继续向其他的AS传播,使得更多的AS受到感染,逐渐形成了BGP劫持攻击。

6 附录(手动配置环境)

如果用户需要自行配置实验环境,可参考以下步骤获取实验代码并进行其他环境配置。

步骤1.执行以下命令安装easy_install,如果已经安装请跳过此步骤。

步骤2.执行以下命令获取实验代码。

步骤3.切换到bgp目录下,修改run.py中的如下代码。

修改内容在第19行,修改前:

BGP路径挟持攻击样例 图27

修改后:

BGP路径挟持攻击样例 图28

修改完成后请保存退出。

步骤4.执行以下命令安装termcolor和quagga。

步骤5.执行以下步骤配置quagga。

1.编辑/etc/quagga目录下的daemons文件。

将zebra和bgpd对应的值设置为yes后保存退出
zebra=yes
bgpd=yes

2.执行以下命令创建zebra、bgp以及vtysh对应的配置文件。

3.执行以下命令重新启动quagga。

步骤6.执行以下命令安装telnet,如果已经安装请跳过此步骤。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/15122.html

分享到:
条评论

登录后才可以评论

SDNLAB君 发表于15-12-01
0