BGP劫持在2008年的defcon大会上就曾经有涉及,然而在2015年的blackhat上又被选为议题,可见问题的严重性,冰冻三尺,非一日之寒,BGP劫持问题有待世界各地的组织携手解决。
0x00 什么是BGP
BGP用于在不同的自治系统(AS)之间交换路由信息。当两个AS需要交换路由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。这个节点可以是一个主机。但通常是路由器来执行BGP。
由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGP(Internal/Interior BGP)。这些子网络互相连接,通过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分配到的IP地址段都是连续的,但是基本也都有可操作的空间,可以把数百到几万个不属于自己的IP合法加到自己的BGP信息里。
0x01 BGP劫持概览
我们把BGP劫持分为两类
1、Prefix劫持
prefix劫持中,当受害者被正当分配IP prefix时 劫持的AS申请同样的prefix,假冒的BGP声明来自劫持的AS,消息通过路由系统散播,其他的AS就用本地的策略选择正当AS路线还是假冒的BGP路线。
2、subprefix劫持
使用subprefix劫持,攻击者可以截获受害IP的全部流量,劫持的AS创建一个受害IP prefix的subprefix,所以prefix就被受害者的IP prefix覆盖了。
2008年2月24日,巴基斯坦电信公司攻击使Youtube不能访问就是此类攻击。
互联网的路径设计基于值得信任的网络提供者彼此交流,这使无意的路径泄漏变得难以解决。然而(BGP)边界网关劫持并不被人重视,尽管都知道它可以导致拒绝服务,中间人攻击,窃取未加密的会话,但是随着强大的TLS加密方法普及,攻击者接触到重要数据变得越来越不可能,所以劫持就是个好办法。
BGP劫持由于(ISP)互联网服务提供商在转发之前没有过滤来自对等节点的prefix声明。一旦一个攻击者获得了对等节点的权限,他就可以让其他的对等节点广播任意prefix,劫持前结点和上游ISP
0x02全球化的和本地的劫持
劫持和泄漏通常被认为是由黑客,政府雇佣的人员发起的特定活动所以不常发生,在我看来它们确实罕见,由于人们错误操作使路径泄漏随处可见,然而为什么黑客们忽略了它们能偷走prefixs的可能性。
大的ISP有措施防止劫持,但从事件来看也不是那么管用,小的ISP不关心prefix过滤的问题。正因为如此ISP总能满足网络的应用,即使边界路由很脆弱。对一个有技术的黑客来说,黑进一个ISP,随意修改声明不是很难。然而在我看来,这几乎不会无端发生。
举个例子:
1, AS-A向它的上游AS-C声明了X.Y.Z.0/22 2, AS-M向它的上游AS-B声明了X.Y.Z.0/23 3, ISP默认路径都是上游提供,然后用本地的网络替代它,在这样情景中本地路径将高于其他网络。这时路径/23就会被路径/22代替。 4, 所有通信包都经由AS-B发往AS-M
传输途中的中间设备都是选择路径最短的那个,然而AS间距离可以被黑客修改,攻击者劫持了所有目标AS的流量。为了让回来的数据包也经过你的路由器,你需要记录trace route到目标网络的时候都会经过哪些AS。使用AS-PATH prepend list包括这些AS Number ,设置static route到traceroute出现的第一个ASN。
0x03劫持CA(certificate authority)证书
通过TLS CA 为用户获得TLS证书的过程如下:
1,先在CA网页申请一个帐号
2,认证登录请求CSR(certificate signing request)创建并载入,尽管这很重要,一些CA甚至允许跳过这步直接从CA中取私钥
3,CA提供了很多选择认证用户所有权
查询whois记录 载入特定html在特定url通过认证 使用者在dns表中建立自定义token
4,当确认所有权后,使用者付款,CA发放TLS认证,然后就能用这个CA证书向你网页的用户证明身份。
如果我们选择了正确的CA,BGP劫持打断CA间的通话也不会被发现。
受害者的服务器和客户都在美国,但是prefix都被劫持在了中国,然后我们可以假装受害者(在这个CA没有可靠认证时),或者冒充一个WHOIS 认证服务器得到目标域的正当TLS认证。这个过程最多5到10分钟,过后攻击者停止声明受害者的prefix,只有在此时间段内才能发现异常。尽管这个CA离受害者相当远,但是证书是全球范围的,所以此举在世界各地都可行。
实现这样的攻击你需要的只有两个:
1,一个可控制的边界路由 2,你的BGP结点的信息 :它的客户,提供者,结点信息,公共服务类似Qrator Radar或者 BGP监听。花一个小时确认这些基本信息,ASpath 追踪路线,等等
0x04如何预防攻击
有很多的监控系统(BGPmon,Qrator Radar)会通知受害者prefix被劫持,但很重要的一点是这和CA没有什么关系。
RFC 7469 (http的公钥扩展)考虑到了这个问题以https声明,是个很好的概念,但是:
1、像BGPsec一样它目前只是概念, 2、这又是个替代方案,把问题关键点从CA转移到了客户
其他措施包括浏览器平台 (包括firefox的认证巡逻),要彻底解决这个问题,我们必须打破TLS PKI或者互联网的路由选择。但两者都难以有太大的改变,新的PKI概念例如基于DNS的实名认证同样给我们提供了解决的思路。
这无关软件中的漏洞,是概念的缺陷,互联网的路由选择不该基于信任,我们在越来越认识到它错误的同时,也要为安全的互联网寻找思路,而不是急着去利用它们。
(更多参考资料,请阅读原文)
*本文由特约作者:月尽西楼投稿,未经许可禁止转载