一、概述
斯坦福大学计算机网络CS144课程实验:基于Mininet实现BGP路径劫持攻击演示。
1、1 BGP概述
首先互联网整体上来说是一个分布式的网络,并没有整个网络的中心。但是整个互联网实际上是由成百上千个不同的ISP的子网络组成的。
这些子网络互相连接,通过BGP
协议告诉对方自己子网络里都包括哪些IP
地址段,自己的AS
编号(AS Number
)以及一些其他的信息。
这里又要扯到互联网的IP
地址分配方式。互联网的IP
地址分配是中心化的,ICANN
这个机构把IP
地址大段分给Regional Internet Registries(RIR)
,区域互联网注册管理机构。RIR
再把IP
地址段细分后分给ISP
们。
大部分情况下,AS Number
和分给该AS
什么IP
段是没有任何关系的。
下面问题来了,BGP
协议里虽然有一些简单的安全认证的部分,但是对于两个已经成功建立BGP
连接的AS
来说,基本会无条件的相信对方AS
所传来的信息,包括对方声称所拥有的IP地址范围。
对于ISP
分配给大公司客户的地址段,ISP
往往会对BGP
做一些有限的过滤。但是对于大型ISP
来说,因为对方所拥有的IP
地址段可能过于分散,所以一般是按最大范围设置BGP prefix
地址过滤。比如假设ISP A
拥有地址段20.1.0.0/16
和20.200.0.0/16
,那么ISP B
可能会设置过滤对方传来的20.0.0.0/8
以外的路由。
当然这种情况比较极端,一般ISP
分配到的IP
地址段都是连续的,但是基本也都有可操作的空间,可以把数百到几万个不属于自己的IP
合法加到自己的BGP
信息里。
多数ISP
甚至都没有把自己本身的IP
段过滤掉,也就是说如果其他AS
声称拥有该ISP
自己的IP
段,这个ISP
的BGP
路由也会相信。
为了解决这个问题,有人发明了一个叫Internet Routing Registry (IRR)
的东西,相当于一个开放式的数据库,像DNS
根服务器一样采用分布式镜像服务器放在世界各地。
ISP
可以向IRR
注册自己的IP
地址段和路由策略,其他ISP
就可以查询IRR
从而对自己的BGP
路由器做过滤。这样做的确防止了一些由于无意而导致的路由劫持。
但是IRR
这个东西本身也是不靠谱的。IRR
里存了大约10
万条记录,如果全部加载进路由器的话是个不小的负担。另外IRR
基本没人管,任何人可以可以往里面注册任何路由记录。
所以在大部分ISP
都无条件相信IRR
的时代,IRR
也带来了不少的麻烦。
最简单的方式就是通过Whois
找到目标IP
段的 管理员邮箱,如果该邮箱或者邮箱所在的域名已经过期,那么就自己注册一个,然后就可以随便通过邮件向IRR
修改记录了。
或者直接通过BGP
路由向ISP
发送,反正大家都不care……
1、2 实验原理
利用BGP
进行特殊攻击,使用伪装的AS
伪造一个更短的路径到前缀P
,其他的AS
要路由到前缀P
时就会选择这个更短的路径,受到感染的AS
会把该攻击信息继续向其他的AS
传播,使得更多的AS
受到感染,从而造成BGP
劫持攻击。
1、3 相关工具简介:Mininet
Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single machine (VM, cloud or native), in seconds, with a single command:
Because you can easily interact with your network using the Mininet CLI (and API), customize it, share it with others, or deploy it on real hardware, Mininet is useful for development, teaching, and research.
Mininet is also a great way to develop, share, and experiment with OpenFlow and Software-Defined Networking systems.
Mininet is actively developed and supported, and is released under a permissive BSD Open Source license.
Mininet: An Instant Virtual Network on your Laptop (or other PC) - Mininet http://mininet.org/
1、4 参考资料:
网络与信息安全学报, 2016, 2(8): 54-61 BGP路由泄露研究
http://www.infocomm-journal.c...
BlackHat议题分析:浅析BGP劫持利用 - FreeBuf.COM | 关注黑客与极客
http://www.freebuf.com/articl...
BGP Path Hijacking Attack Demo · mininet/mininet Wiki · GitHub
https://github.com/mininet/mi...
加密货币攻击之比特币:已成为可能?(含演示视频) - FreeBuf.COM | 关注黑客与极客
http://www.freebuf.com/news/1...
二、拓扑构建
2、1 拓扑和网络实现原理
我们在mininet
中进行拓扑构建,我们需要构建如下拓扑:
拓扑中涉及具体的主机在上图中不做标识。
包含4个AS
:AS1
,AS2
,AS3
和AS4
(流氓AS
)。每个AS
都有它的路由守护进程(R1,R2,R3,R4
)
守护路由的连接情况:
R1
和R2、R4
是对等的
R2
和R1、R3
是对等的
R3
和R4
是对等的
BGP网络构建脚本:jvimal / bgp — Bitbucket https://bitbucket.org/jvimal/bgp(实验环境已经下载好实验所需的脚本)
网络实现原理:
1)使用开源组件Quagga
为每个AS
节点创建容器,每个容器都有一个路由守护进程。运行bgpd
来承载BGP
,通过zebra
来配置linux
内核中的路由转发规则。
2)每个AS
的配置存储在conf
目录中(实验文件目录中)
3)Mininet
使用了Linux
的网络命名空间,所以每个AS
容器的路由表都是独立的,也就是说改变AS1
的路由表不会影响AS2
的路由表。
4)AS
之间使用独立的网口通过静态路由表项进行相连。R1
的IP地址是9.0.0.1
,R2
的是9.0.0.2
,其他类似。
2、2 构建BGP网络
打开Shell终端
使用写好的Python
脚本构建所需的网络环境,命令如下:
cd ~/bgp
sudo python bgp.py
等待构建完成
当看到 mininet>
提示符 就表示网络构建完成了
2、3 mininet基本操作
查看网络信息
查看全部节点:nodes
命令
查看链路信息:net
如果想要对某个节点的虚拟机单独进行命令操作,也十分简单,格式为 node cmd
。例如查看R1
上的网络信息,只需要在执行的ifconfig
命令前加上R1
主机标志即可,比如R1 ifconfig
整个实验过程请保持mininet
在前台运行
接下来打开另外一个shell
窗口完成接下来的操作。
在会话窗口上右键选择New Window
新开一个shell
会话窗口
三、BGP路径劫持攻击验证
3、1 正常情况下的路由情况
1.连接到AS1
的路由器R1
在新开的shell会话窗口中执行如下命令:
cd ~/bgp/
./connect.sh
输入密码 en
回车(注意这里的密码不会回显)
输入en
进入路由器特权模式
并再次输入密码 : en
回车
2.查看 AS1的路由表
命令如下:
sh ip bgp (show ip bgp的简写)
可以看到,在AS1
上,到达13.0.0.0/8
的所选AS
路径是2 3
(即通过AS2
和AS3
)。
3.在AS3
中开启一个Default Web
站点,并模拟从主机h1-1
访问这个站点
再新开一个Shell
会话窗口
执行如下命令:
cd ~/bgp/
./website.sh
可以看到,现在h1-1
主机访问的是AS3
中的Default Web Server
。
3、2 BGP路径劫持攻击验证
4.启动流氓AS
进行路径劫持
保持上面的Shell
会话窗口,新开一个窗口,执行如下命令
cd ~/bgp/
./start_rogue.sh
这个流氓AS
连接到AS1
并通知它一条路由到13.0.0.0/8
的更短的路径(即AS1
到AS4
的路径),这样AS1
就会的选择这个更短的路径。
5.观察网络访问和AS1
的路由表变化
切换到模拟h1-1
主机访问AS3
站点的Shell
窗口
可以看到,原本访问是 Default Web Server
,现在已经变成了 Attacker web server
了。
再来看看AS1
的路由表
使用 ./connect.sh
连接到R1
路由器,按提示输入密码 en
然后使用 sh ip bgp
查看路由表
我们在AS1
的路由表中可以看出AS4
的选择路径和AS3
的路径。由于通过AS4
到达13.0.0.0/8
的AS
路径长度较短,所以R1
选择AS4
作为下一跳,而不再选择AS2
到AS3
再到13.0.0.0/8
。
6.关闭流氓AS
./stop_rogue.sh
关闭之后,你会发现路由收敛非常快,访问又正常了
7.停止网络
切换到mininet>
会话窗口
输入 exit
即可结束
BGP路径劫持攻击实验完成。
戳下面的链接即可进行在线体验 BGP路径劫持攻击
?????
四、说明
本文由合天网安实验室原创,转载请注明来源。
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台
真实环境,在线实操学网络安全 ;
实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。
(本文来源:合天网安实验室--领先的实操型网络安全在线教育平台)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。