在过去的几个小时里,已经有十几个新闻报道揭露了有攻击者企图(也许已经完成了)使用BGP泄漏来窃取加密货币。
由elhombredenegro提供的CC BY 2.0 图像
什么是BGP?
互联网由路由组成。关于我们的DNS解析器**1.1.1.1**,我们告知外界所有属于 1.1.1.0
到 1.1.1.255
范围内的IP地址均可通过CloudFlare的任一网路连接点 (Point of Presence,PoP)进行访问。
对于没有直接连接我们路由器的人,他们从传输供应商得到路由,传输供应商会将数据包传送到这些与Cloudflare和其他互联网连接的路由地址。
这是互联网正常的运作方式。
IP地址是由权威机构(地区互联网注册机构,RIR)负责分发的,以避免人们使用相同的地址空间。这些机构分别是IANA,RIPE,ARIN,LACNIC,APNIC和AFRINIC。
什么是BGP泄漏?
BGP泄漏被广义定义为某IP空间的非法占有者对外通报了该空间。当一家传输提供商收到Cloudflare的公告 1.1.1.0/24
并将其向互联网通报时,这是受到我们允许的。他们还使用了RIR信息进行验证,因此只有Cloudflare可以向他们通报。
虽然检查所有公告可能会很棘手,而且互联网上有700,000多个路由和供应商链彼此之间交换流量。
就其性质而言,路由泄漏是本地化的。您的本地连接数越多,遭受路由泄露的风险就越小。为了使访问请求经过合法的路由被接收,路由必须满足:
较小的IP前缀(
10.0.0.1/32
= 1 IP vs10.0.0.0/24
= 256 IP)在相同长度前缀下具有更好的度量(路径更短)
BGP泄漏的原因通常是配置错误:要么是路由器突然通告它获知的IP,要么是内部用于传输工程的较小前缀突然变为公共的前缀。
但有时配置错误是因为他人恶意为之。前缀被路由重定向从而被动地分析数据。或者有人设置了非法响应服务。这些以前都发生过。
如今发生了什么改变?
Cloudflare维护着一系列BGP收集器,这些收集器从全球数百个路由器收集BGP信息。
在大约**今天11:05:00 UTC到12:55:00 UTC之间,**我们看到以下公告:
BGP4MP|04/24/18 11:05:42|A|205.251.199.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.197.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.195.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.193.0/24|10297
BGP4MP|04/24/18 11:05:42|A|205.251.192.0/24|10297
...
BGP4MP|04/24/18 11:05:54|A|205.251.197.0/24|4826,6939,10297
这些是更具体的范围公告:
205.251.192.0/23
205.251.194.0/23
205.251.196.0/23
205.251.198.0/23
此IP空间是分配给Amazon(AS16509)的,但是却由eNet Inc(AS10297)的访问堆栈结点(ASN)向其他结点宣布这是分配给它的IP空间并将此讯息转发给Hurricane Electric(AS6939)。
这些IP地址属于Route53 Amazon DNS服务器。当您查询其中一个客户端区域时,这些服务器将向您做出响应。
在两小时的泄漏期间,该IP域内的服务器仅响应对myetherwallet.com的请求。有些人注意到服务器故障。
任何DNS解析器(被询问由Route53管理的名称)都会请求通过BGP泄漏被接管的权威服务器。这个中毒的DNS解析器的路由器已被该路由接管。
这其中也包括Cloudflare DNS解析器1.1.1.1。我们在芝加哥,悉尼,墨尔本,珀斯,布里斯班,宿雾,曼谷,奥克兰,马斯喀特,吉布提和马尼拉的解析器1.1.1.1均受到影响。在世界的其他地方,1.1.1.1仍然能正常工作。
BGP hijack this morning affected Amazon DNS. eNet (AS10297) of Columbus, OH announced the following more-specifics of Amazon routes from 11:05 to 13:03 UTC today:205.251.192.0/24205.251.193.0/24205.251.195.0/24205.251.197.0/24205.251.199.0/24
— InternetIntelligence (@InternetIntel) April 24, 2018
Correction: the BGP hijack this morning was against AWS DNS not Google DNS. https://t.co/gp3VLbImpX
— InternetIntelligence (@InternetIntel) April 24, 2018
例如,以下查询应该返回合法的Amazon IP:
$ dig +short myetherwallet.com @205.251.195.239
54.192.146.xx
但在劫持期间,它返回了与俄罗斯供应商(AS48693和AS41995)相关的IP 。就算你没有接受被劫持的路由,只要你使用已经中毒的DNS解析器,你就成为了攻击的受害者。
如果您使用的是HTTPS,假网站将显示由未知权限署名的TLS证书(证书中列出的域名是正确的,但它是自署名的)。此攻击生效的唯一途径是继续访问并接收错误的证书。从那时起,您发送的所有内容都将被加密,但攻击者拥有密钥。
如果您已登录,则浏览器将发送在cookie中的登录信息。换句话说,如果您在登录页面上输入了用户名和密码,则您的用户名和密码会被发送出去。
一旦攻击者获得了登录信息,他就会在合法网站上使用它们来转移和窃取以太币。
图片摘要
正常情况
BGP路由泄漏后
受影响的地区
如前所述,AS10279宣布了这一路由。但只有一些地区受到影响。Hurricane Electric受到的影响在澳大利亚非常显著,这主要源于互联网的成本。芝加哥地区受到影响,因为AS10279实际就在该处,这是直接的结果。
下图显示受影响区域和未受影响区域中接收的数据包数(Y轴归一化)。数据包丢失是由于权威服务器不再响应我们的请求(它只响应一个网站而忽略所有其他Amazon域)。
eNet(CenturyLink,Cogent和NTT)使用的其他传输线似乎没有接收这条路由:原因可能是他们有筛选程序和/或有亚马逊作为客户。
eNet提供IP服务,因此他们的一个客户可能已经声明了它。
找到涉事人员了吗?
由于其中涉及许多参与者,很难确定是谁的过错。参与者有:
ISP声明了一个它没有拥有的子网。
在转发之前未检查声明的传输供应商。
接收该路由的ISP。
缺乏保护的DNS解析器和权威机构。
托管在俄罗斯供应商的网络钓鱼网站。
未强制执行合法TLS证书的网站。
即使TLS证书无效也继续点击访问的用户们。
就像区块链一样,网络变更通常是可见的和已存档的。RIPE正维护一个用于此用途的数据库。
我们能解决这个问题吗?
$ whois -h whois.radb.net ' -M 205.251.192.0/21' | egrep '^route:|^origin:|source:' | paste - - - | sort
route: 205.251.192.0/23 origin: AS16509 source: RADB
route: 205.251.192.0/23 origin: AS16509 source: REACH
这是一个难以回答的问题。我们对受到保护的BGP建议:可以将一些条款添加到RIR数据库中,由此可以生成允许的源列表:
使用RIR设置RPKI / ROA记录作为路由路径的真实来源,尽管不是每个人都由创建这些记录或去验证它们。IP和BGP是几十年前创建的,在完整性和可靠性方面有不同的要求(更少的路由)。
我们在网络堆栈的上层也可以做一些事情。
在DNS上,您可以使用DNSSEC对记录进行署名。伪DNS返回的IP不会被署名,因为它们没有私钥。
如果您将Cloudflare用作DNS,则只需在面板中单击几下即可启用DNSSEC 。
在HTTPS上,您的浏览器将检查网站提供的TLS证书。如果启用了HSTS,浏览器将始终需要有效证书。为域生成合法TLS证书的唯一方法是病毒入侵证书颁发机构的非DNSSEC DNS解析器的缓存。
DANE让用户可以使用DNS将证书固定到域名。
通过HTTPS的DNS还可以验证是否正在与正确的解析器通信,以防在DNS解析器而非DNS权威上发生泄漏。
没有完美且唯一的解决方案。但只要防护措施越多,恶意攻击者就越难以进行此类攻击。