在过去的几个小时里,已经有十几个新闻报道揭露了有攻击者企图(也许已经完成了)使用BGP泄漏来窃取加密货币。

elhombredenegro提供的CC BY 2.0 图像

什么是BGP?

互联网由路由组成。关于我们的DNS解析器1.1.1.1,我们告知外界所有属于 1.1.1.01.1.1.255范围内的IP地址均可通过CloudFlare的任一网路连接点 (Point of Presence,PoP)进行访问。

对于没有直接连接我们路由器的人,他们从传输供应商得到路由,传输供应商会将数据包传送到这些与Cloudflare和其他互联网连接的路由地址。

这是互联网正常的运作方式。

IP地址是由权威机构(地区互联网注册机构,RIR)负责分发的,以避免人们使用相同的地址空间。这些机构分别是IANARIPEARINLACNICAPNICAFRINIC

什么是BGP泄漏?

马格努斯d提供的CC BY 2.0 图像

BGP泄漏被广义定义为某IP空间的非法占有者对外通报了该空间。当一家传输提供商收到Cloudflare的公告 1.1.1.0/24并将其向互联网通报时,这是受到我们允许的。他们还使用了RIR信息进行验证,因此只有Cloudflare可以向他们通报。

虽然检查所有公告可能会很棘手,而且互联网上有700,000多个路由和供应商链彼此之间交换流量。

就其性质而言,路由泄漏是本地化的。您的本地连接数越多,遭受路由泄露的风险就越小。
为了使访问请求经过合法的路由被接收,路由必须满足:

  • 较小的IP前缀( 10.0.0.1/32= 1 IP vs 10.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仍然能正常工作。

例如,以下查询应该返回合法的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正维护一个用于此用途数据库

我们能解决这个问题吗?

这是一个难以回答的问题。我们对受到保护的BGP建议:
可以将一些条款添加到RIR数据库中,由此可以生成允许的源列表:

$ 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

使用RIR设置RPKI / ROA记录作为路由路径的真实来源,尽管不是每个人都由创建这些记录或去验证它们。IP和BGP是几十年前创建的,在完整性和可靠性方面有不同的要求(更少的路由)。

我们在网络堆栈的上层也可以做一些事情。

DNS上,您可以使用DNSSEC对记录进行署名。伪DNS返回的IP不会被署名,因为它们没有私钥。

如果您将Cloudflare用作DNS,则只需在面板中单击几下即可启用DNSSEC 。

HTTPS上,您的浏览器将检查网站提供的TLS证书。如果启用了HSTS,浏览器将始终需要有效证书。为域生成合法TLS证书的唯一方法是病毒入侵证书颁发机构的非DNSSEC DNS解析器的缓存。

DANE让用户可以使用DNS将证书固定到域名。

通过HTTPS的DNS还可以验证是否正在与正确的解析器通信,以防在DNS解析器而非DNS权威上发生泄漏。

没有完美且唯一的解决方案。但只要防护措施越多,恶意攻击者就越难以进行此类攻击。

关键词:BGP加密TLSHTTPS安全性漏洞