斯坦福大学计算机网络CS144课程实验:基于Mininet实现BGP路径劫持攻击演示。html
首先互联网总体上来讲是一个分布式的网络,并无整个网络的中心。可是整个互联网其实是由成百上千个不一样的ISP的子网络组成的。node
这些子网络互相链接,经过BGP
协议告诉对方本身子网络里都包括哪些IP
地址段,本身的AS
编号(AS Number
)以及一些其余的信息。python
这里又要扯到互联网的IP
地址分配方式。互联网的IP
地址分配是中心化的,ICANN
这个机构把IP
地址大段分给Regional Internet Registries(RIR)
,区域互联网注册管理机构。RIR
再把IP
地址段细分后分给ISP
们。linux
大部分状况下,AS Number
和分给该AS
什么IP
段是没有任何关系的。git
下面问题来了,BGP
协议里虽然有一些简单的安全认证的部分,可是对于两个已经成功创建BGP
链接的AS
来讲,基本会无条件的相信对方AS
所传来的信息,包括对方声称所拥有的IP地址范围。github
对于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
之外的路由。web
固然这种状况比较极端,通常ISP
分配到的IP
地址段都是连续的,可是基本也都有可操做的空间,能够把数百到几万个不属于本身的IP
合法加到本身的BGP
信息里。shell
多数ISP
甚至都没有把本身自己的IP
段过滤掉,也就是说若是其余AS
声称拥有该ISP
本身的IP
段,这个ISP
的BGP
路由也会相信。数据库
为了解决这个问题,有人发明了一个叫Internet Routing Registry (IRR)
的东西,至关于一个开放式的数据库,像DNS
根服务器同样采用分布式镜像服务器放在世界各地。vim
ISP
能够向IRR
注册本身的IP
地址段和路由策略,其余ISP
就能够查询IRR
从而对本身的BGP
路由器作过滤。这样作的确防止了一些因为无心而致使的路由劫持。
可是IRR
这个东西自己也是不靠谱的。IRR
里存了大约10
万条记录,若是所有加载进路由器的话是个不小的负担。另外IRR
基本没人管,任何人能够能够往里面注册任何路由记录。
因此在大部分ISP
都无条件相信IRR
的时代,IRR
也带来了很多的麻烦。
最简单的方式就是经过Whois
找到目标IP
段的 管理员邮箱,若是该邮箱或者邮箱所在的域名已通过期,那么就本身注册一个,而后就能够随便经过邮件向IRR
修改记录了。
或者直接经过BGP
路由向ISP
发送,反正你们都不care……
利用BGP
进行特殊攻击,使用假装的AS
伪造一个更短的路径到前缀P
,其余的AS
要路由到前缀P
时就会选择这个更短的路径,受到感染的AS
会把该攻击信息继续向其余的AS
传播,使得更多的AS
受到感染,从而形成BGP
劫持攻击。
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/
网络与信息安全学报, 2016, 2(8): 54-61 BGP路由泄露研究
http://www.infocomm-journal.com/cjnis/article/2016/2096-109X/2096-109X-2-8-00054.shtml
BlackHat议题分析:浅析BGP劫持利用 - FreeBuf.COM | 关注黑客与极客
http://www.freebuf.com/articles/network/75305.html
BGP Path Hijacking Attack Demo · mininet/mininet Wiki · GitHub
https://github.com/mininet/mininet/wiki/BGP-Path-Hijacking-Attack-Demo
加密货币攻击之比特币:已成为可能?(含演示视频) - FreeBuf.COM | 关注黑客与极客
http://www.freebuf.com/news/155287.html
咱们在mininet
中进行拓扑构建,咱们须要构建以下拓扑:
包含4个AS
:AS1
,AS2
,AS3
和AS4
(流氓AS
)。每一个AS
都有它的路由守护进程(R1,R2,R3,R4
)
守护路由的链接状况:
R1
和R二、R4
是对等的
R2
和R一、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
,其余相似。
打开Shell终端
使用写好的Python
脚本构建所需的网络环境,命令以下:
cd ~/bgp
sudo python bgp.py
复制代码
等待构建完成
mininet>
提示符 就表示网络构建完成了
查看网络信息
查看所有节点:nodes
命令
net
node cmd
。例如查看
R1
上的网络信息,只须要在执行的
ifconfig
命令前加上
R1
主机标志便可,好比
R1 ifconfig
mininet
在前台运行
接下来打开另一个shell
窗口完成接下来的操做。
在会话窗口上右键选择New Window
新开一个shell
会话窗口
1.链接到AS1
的路由器R1
在新开的shell会话窗口中执行以下命令:
cd ~/bgp/
./connect.sh
复制代码
输入密码 en
回车(注意这里的密码不会回显)
en
进入路由器特权模式
并再次输入密码 : en
回车
命令以下:
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
。
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
复制代码
关闭以后,你会发现路由收敛很是快,访问又正常了
切换到mininet>
会话窗口
输入 exit
便可结束
BGP路径劫持攻击实验完成。
戳下面的连接便可进行在线体验 BGP路径劫持攻击
👇👇👇👇👇
本文由合天网安实验室原创,转载请注明来源。
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台 真实环境,在线实操学网络安全 ; 实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。
(本文来源:合天网安实验室--领先的实操型网络安全在线教育平台)