一、概述
斯坦福大学计算机网络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
找到