0x01 前言
你可能觉得是个标题党,但是,先别急关闭~~
先来看几张图:
注:截图来自搜狐新闻
(2017年12月13日Google、Apple、Facebook、Microsoft等遭遇BGP劫持)
注:截图来自互联网
(2014年)Google的公开DNS服务器 IP 8.8.8.8被劫持到了委内瑞拉和巴西超过22分钟
注:截图来自360安全客
注:图片来自freebuf
这,具体是啥,此处省略几万字吧~~
更多类似的案例,就不一一展示了
0x02 概述
进入今天的正题:BGP路径劫持
首先什么是BGP
首先互联网整体上来说是一个分布式的网络,并没有整个网络的中心。但是整个互联网实际上是由成百上千个不同的ISP(比如电信)的子网络组成的。
这些子网络互相连接,通过BGP协议告诉对方自己子网络里都包括哪些IP地址段,自己的AS编号(AS Number)以及一些其他的信息。
什么是AS
自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain),一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
一个自治系统即为由一个或多个网络运营商来运行一个或多个网络协议前缀的网络连接组合,这些运营商往往都具有单独的定义明确的路由策略。
这里有个很严重的问题:BGP协议里虽然有一些简单的安全认证的部分,但是对于两个已经成功建立BGP连接的AS来说,基本会无条件的相信对方AS所传来的信息,包括对方声称所拥有的IP地址范围。
聪明的你,看到这里是不是明白了什么呢?
0x03 BGP劫持演示
别急,我们接着说
先来看张网络拓扑图
注:截图来自合天网安实验室(http://www.hetianlab.com)
在上图中,我们可以看到,有三个相连的AS。每个AS内都有不同数量的主机和路由器。
它们直接是互相联通的,并且可以互相通信。
实现原理:
基于Mininet操作系统构建
Mininet简介:
Mininet 是一个轻量级软件定义网络和测试平台;它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow、OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。
Mininet特性:
1、支持 OpenFlow、OpenvSwitch 等软定义网路部件
2、支持系统级的还原测试,支持复杂拓扑,自定义拓扑等
3、提供 Python API, 方便多人协作开发
4、很好的硬件移植性与高扩展性
5、支持数千台主机的网络结构
摘自:SDN 网络系统之 Mininet 与 API 详解 https://www.ibm.com/developerworks/cn/cloud/library/1404_luojun_sdnmininet/index.html
Mininet下载地址:Download/Get Started with Mininet - Mininet http://mininet.org/download/
BGP网络构建脚本:
jvimal / bgp — Bitbucket https://bitbucket.org/jvimal/bgp
使用写好的Python脚本构建所需的网络环境,命令如下:
sudo python bgp.py
构建完成后,保持mininet在前台运行
我们可以在R1上查看路由表 (运行 connect.sh 可以链接到R1路由器,密码为 en )
注:截图来自合天网安实验室(http://www.hetianlab.com)
可以看到,在AS1上,到达13.0.0.0/8的所选AS路径是“2 3”(即通过AS2和AS3)。
运行website.sh脚本模拟AS1中的机器到AS3的访问。
这是我们从AS1中的机器访问AS3中的网站也是正常的
注:截图来自合天网安实验室(http://www.hetianlab.com)
不要走,接下来就是精彩时刻
这时候,如果我们劫持了一个和AS1相连的AS会怎样呢?
注:截图来自合天网安实验室(http://www.hetianlab.com)
如上图所示,我们控制了和AS1相连的AS4,或者说我们搭建了这么一个流氓AS
然后我们在R4上分布了一条到达13.0.0.0/8的路由。
运行 start_rogue.sh 脚本启动流氓AS(AS4)并发布一条路由信息
这个流氓AS连接到AS1并通知它一条路由到“13.0.0.0/8”的更短的路径(即AS1到AS4的路径),这样AS1就会的选择这个更短的路径。
注:截图来自合天网安实验室(http://www.hetianlab.com)
此时可以看到,此时原本访问正常的网站已经被我们劫持到了我们搭建的网站。
注:截图来自合天网安实验室(http://www.hetianlab.com)
再次查看路由表,AS1的路由表中可以看出到AS4的选择路径和AS3的路径。由于通过AS4到达13.0.0.0/8 的AS路径长度较短,所以R1选择AS4作为下一跳,而不再选择AS2到AS3再到13.0.0.0/8
执行 stop_rogue.sh 脚本停止流氓AS
我们停止劫持之后,网络马上会恢复正常
0x04 总结(危害和防护)
看到这里,那你肯定会问,这玩意有什么用,有什么危害呢?
1、现在很火的比特币,可以通过BGP劫持从而盗取你的比特币
相关链接:加密货币攻击之比特币:已成为可能?(含演示视频) - http://FreeBuf.COM | 关注黑客与极客 http://www.freebuf.com/news/155287.html
2、如果运营商网络被劫持或者运营商恶意劫持,就会导致大规模无法访问原本能正常访问的网络(你是不是想到了什么?/手动滑稽)
3、劫持CA(certificate authority)证书
防御措施:
1、检测虚假路由通告
a)比如BGPmon,Qrator Radar 项目
2、PGBGP方案(Pretty Good BGP)
a)简单来说就是如果出现一个完全包含在现有前缀中的新前缀,则PGBGP将继续路由到现有前缀,并忽略一天中的新前缀。
3、其他措施包括浏览器平台 (比如firefox的认证巡逻)
4、使用新的路由协议,比如HLP协议
注:合天网安实验室已上线相关实验,欢迎登录www.hetianlab.com,在首页的“最新推荐”就能看到噢(你难道不想亲自试试劫持整个互联网是什么感觉么?)