0x00 背景


最近世界真是越来越不太平了,尤其是对于大部分普通人而言。昨天又传来噩耗,根据网络监测公司BGPMon,Google的公开DNS服务器 IP 8.8.8.8被劫持到了委内瑞拉和巴西超过22分钟。

Google DNS 服务器平均每天处理超过1500亿个查询,在被劫持的22分钟里起码几百万个查询包括金融系统,政府和个大商业网站的DNS查询流量都被劫持走了。

 

g1

根据砖家们的推测,这次劫持可能是黑客利用了Border Gateway Protocol(BGP) 协议中一个众所周知的漏洞来实现的,BGP协议为ISP级的路由协议,一般用来协调大型ISP之间的路由走向。这次劫持可以让黑客把网上的部分流量劫持从而经过他们所控制的路由。

g2

这已经不是Google DNS服务器被第一次劫持了,在2010年也Google DNS的流量也曾经被劫持到了罗马尼亚和奥地利境内。

BGP劫持攻击是一种大规模的中间人攻击,并且较难发现,因为数据包的最终目的地并没有变,只是绕了下路而已。

0x01 BGP劫持详解


本部分来源于Tony Kapela 和 Alex Pilosov在2008年 Defcon会议上的演讲。

什么是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……

实际案例

现在我们来看一个Youtube被劫持的案例:

youtube有5个网段,其中一个是

208.65.152.0/22  

因为觉得Youtube不和谐,于是巴基斯坦政府决定封锁Youtube。

巴基斯坦电信在路由器上加了条static route把

208.65.153.0/24

弄到了null0接口(GFW之黑洞路由大法)

巴电信的工程师手抖把static route redistribute到BGP了(Cisco路由器上同步不同协议路由表的方法),也就是说把该路由器上的静态路由表添加到BGP的路由表了,静态路由同步到其他路由表里的优先值最高。

BGP把这条路由向其他AS的路由器同步了,最先中枪的是香港的电讯盈科(PCCW),然后接着被逐渐同步到了全世界。

这时互联网的大部分用户想上Youtube的时候数据包都跑到巴基斯坦了,结果当然是打不开了(因为进来就被弄到null0了)。

Youtube发现后重新用BGP声明了对该IP段和其他IP段的所有权,成功刷新了部分ISP路由器的路由表。

两小时后PCCW断开了和巴基斯坦电信路由器的BGP连接。3-5分钟后,一切恢复正常,除了苦逼的巴基斯坦用户们。

这意味着只要控制了任何一个ISP的任何一个BGP路由,都将具备影响全世界互联网的能力。

BGP劫持很难被发现,如果不是因为巴基斯坦电信把youtube的IP段转发到了null0接口,数据包就只会在巴基斯坦网络里绕一圈然后再到达Youtube。

如果攻击者的路由器具备篡改TTL的功能,那么即使通过traceroute也很难发现数据包被劫持,唯一的方法就是像前面所说的BGPmon那样检测全世界范围内的AS路由表和BGP信息。

BGP劫持理论

当我们控制了ISP的BGP路由后,像平常一样发送路由信息。通过修改AS Path等BGP信息,让其他AS认为你到目标网络的距离最短。

为了让回来的数据包也经过你的路由器,你需要记录trace route到目标网络的时候都会经过哪些AS。

使用AS-PATH prepend list包括这些AS Number

设置static route到traceroute出现的第一个ASN

详解:

目标IP段

10.10.220.0/22

在AS 200中
ASN 200向相邻的AS 20和30发送BGP通告。
此时为正常的状态。

2014031815415353677

攻击者控制了AS 100的BGP路由。

AS 100的路由表和BGP表显示到达

10.10.200.0/22

需要经过 AS 10.

于是我们把AS10,20和200加入我们的AS PATH prepend list

2014031815423285580

通过route-map把目标IP段加入BGP路由表

10.10.220.0/24 is announced with a route-map:  
route-map hijacked permit 10  
match ip address prefix-list jacked  
set as-path prepend 10 20 200  

然后在AS100的路由器中加入static route,把流向目标IP段的数据包指向AS10

ip route 10.10.220.0 255.255.255.0 4.3.2.1 

2014031815431276804

完成后可以看出,AS30 40 50 60的数据包如果想要到AS 200去,都会先经过AS 100.

到了这里我们已经可以分析出,BGP劫持的本质再次回到安全的本质既是信任这一点,因为BGP直接无条件信任对方AS发来的路由信息,并且缺乏有效的认证和过滤手段,导致BGP劫持屡次得手。

 

来源: http://drops.wooyun.org/papers/1207

扩展阅读

Pakistan hijacks YouTube

BGP AS-Path Prepending

五月 22nd, 2009

    

5.19日晚8点到9点的样子。QQ上的朋友都在问我断网没?

描述故障现象:能上QQ,网站打不开。

远程》》 cmd 》》  ping www.g.cn   解析不了。

nslookup  输入 www.g.cn 解析不了。

很明显dns问题!

换成opendns地址问题解决。很明显了dns出问题了。

我的建议: 首选dns还是当地的,毕竟响应速度快点。

但是有一点,就是让人讨厌的dns劫持。现在网通给联通了。联通天天放广告!

我现在的做法是 首选还是当地的。备用是 208.67.222.222  208.67.220.220也就是opendns的

这样绝对不怕dns问题!

事件始末我也懒的打字。网上直接copy过来。

——————————————–我是分啊分—————————————

5月19 DNS大规模故障始末

   5月20日下午工信部发布公告,确认“5月19 DNS大规模故障”是暴风网站域名解析系统受到网络攻击出现故障,导致电信运营企业的递归域名解析服务器收到大量异常请求而引发拥塞。

根据网上收集的信息,我们可以推测这次故障的演变过程。可以分为3个阶段。

1、 2家私服火拼

      神秘的2家私服火拼,相互用DDOS攻击对方,据说一方动用了超过10G的攻击流量也没有把对方搞倒。DDOS失败后,非常生气。他们调整攻击目标,丧心病狂地攻击对方的玉米服务商dnspod。搞定了dnspod,也就搞定了对方,当然也影响了众多的使用dnspod的用户

这一次dnspod没有那么幸运,被打倒了。> server 208.67.222.222

Default Server: [208.67.222.222]

Address: 208.67.222.222

> set q=ns

> baofeng.com.

Server: [208.67.222.222]

Address: 208.67.222.222故事到此,该baofeng.com出场了。黑社会火拼的原因似乎和电影里的情节差不多。对于事情的结果可能是攻击者没有想到的,现在应该想怎么逃避责任。这两家sf以后在IDC不会过的很舒服。

3、baofeng等用户“攻击”攻击电信的网络

       暴风影音的装机数量应该是千万级别。当千万级别的暴风影音不停地尝试访问baofeng.com下的主机时,这千万级别的用户也就不停的向当地电信DNS服务器查询baofeng.com的域名,电信dns服务器也就不停的递归解析baofeng.com,但是没有结果返回,结果电信网络的DNS服务器解析量激增,响应速度下降。到此时事件演变成了暴风影音用户“攻击”电信DNS服务器。当然还有其他是DNSpod作为域名解析的网站的访问者也在干着同样的事情。但是暴风影音是主要的,据说baofeng.com的解析量占到了DNS解析流量的40%。

    

     电信DNS服务器出现问题,更多的网站服务器无法解析域名,普通用户无法访问,不停的刷新页面,电信DNS服务器访问量进一步增加,更多的DNS服务器无法提供正常的服务,故障扩大。

Comment: 2个黑社会在自己的地盘群殴,IDC没有发现? 你给了钱,我给你接入,做什么生意我不管。

2、DNSpod早攻击

      攻击者

Non-authoritative answer:

baofeng.com     nameserver = ns2.mydnspod.com

baofeng.com     nameserver = ns1.mydnspod.com

>

Comment:

DNSpod 除了为一家私服提供服务,还为超过10万个其他网站提供服务,当然为了争夺游戏玩家什么都可以干。

Comment:

暴风影音为什么要不停地,不厌其烦地访问自家的网站?不停地,不厌其烦地访问自家的网站,不停把东西推给用户,这是主要的盈利模式?

电信的DNS服务器也太脆弱了。当然现存的DNS(BIND)已经不适合现在的网络了,解析速度慢,不安全等。中国到现在也没有root服务器,费了好大的劲才把cn搬回了中国。在这次事故中电信启动应急预案虽然迟了点,但是比以前好了很多。

2个流氓打架

DNSpod受伤

baofeng火上浇油

结果火烧一大片

电信很生气。

—————————————————–继续分————————————————————

18日开始,著名免费dns服务提供商的6台服务器开始受到攻击.dnspod为诸多网站提供域名解析服务,其中包含暴风影音.

  18日晚上20点33分59秒.在史无前例的大流量攻击下dnspod的6台解析服务器开始失效,大量网站开始间歇性无法访问,其中包括国内诸多知名网站,当然,其中也包含我的不知名网站.第一波攻击的流量在21点30分左右达到高峰,流量超过了10Gbps,如下图 ,要知道,一个电信核心机房的带宽也仅仅最多只有几十G

dnsgz

18日当晚,由于dnspod耗尽了整个机房近乎3分之1的带宽资源,为了不影响机房其他用户,dnspod的电信主力dns服务器被迫离线

  19日晚上,在另一轮高强度攻击下,dnspod服务完全中断,由于暴风影音播放器客户端无法解析出服务器的IP,开始不断向网络供应商的dns服务器发送解析请求,造成当地运营商的dns服务器堵塞.

  19日晚上21点左右,浙江电信dns开始瘫痪 , 之后的两个小时内北京、天津、上海、河北、山西、内蒙古、辽宁、吉林、江苏、黑龙江、浙江、安徽、湖北、广西、