0x00 BGP(RFC 1771、 RFC 4271)定义
全称是Border Gateway Protocol, 对应中文是边界网关协议,最新版本是BGPv4。 BGP是互联网上一个核心的互联网去中心化自治路由协议。它的地位是核心的毫不夸张地说, 是目前唯一连接海陆空和7大洲4大洋的外部路由协议。BGP是最复杂的路由协议,属于应用层协议,其传输层使用TCP,默认端口号是179。因为是应用层协议,可以认为它的连接是可靠的,并且不用考虑底层的工作,例如fragment,确认,重传等等。 BGP是唯一使用TCP作为传输层的路由协议,其他的路由协议可能都还到不了传输层。
1.相关的重要概念
AS(Autonomous sydstem):自治系统,指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。每个AS有自己唯一的编号。通常一个自治系统将会分配一个全局的唯一的16位号码, ASN范围:1-65535;1-64511属于公有ASN,而私有ASN:64512-65535。
AS PATH:路由每通过一个AS范围都会产生一个记录。 (路由防环机制)。
EBGP:外部BGP协议(EBGP)的主要作用是向外部路由器或AS提供更多信息。
IBGP:内部BGP协议(IBGP)的主要作用是向AS内部路由器提供更多信息。
2.BGP的3张表
邻居表(adjancy table):保存所有的BGP邻居信息。
BGP 表(forwarding database) : 保存从每一个邻居学到的路由信息。 路由表(routing table) :BGP 默认不做负载均衡,会从BGP表中选出一条到达各个目标网络最优的路由,放入路由表保存。路由器只需按路由表保存的路由条目转发数据即可。3.关于BGP路由器商业角色
出 于 经 济 利 益 的 考 虑 , AS 优 先 选 择 来 自 CustomerAS 的 路 由 , 其 次 是 PeerAS 及ProviderAS。 换句话说, 大部分网络采用的路由策略规则如下:
1. 来自 CustomerAS 宣告的路由允许传递给Customer、 Peer 和 Provider。
2. 来自 PeerAS 宣告的路由允许传递给Customer, 不允许通告给其他的 Peer 和 Provider。
3. 来自 ProviderAS 宣告的路由允许传递给 Customer , 不允许通告给其他的 Peer 和
Provider。如下表:
0x01 5个经典BGP安全大事件
1.Northrop Grumman部分bgp网络被恶意利用(2003)
2003年5月,一群垃圾邮件黑客攻击了美国诺斯洛普·格鲁门公司申请但(Northrop
Grumman,当时世界第三大军工生产厂商、世界上最大的雷达制造商和最大的海军船只制造商)尚未使用的一段网络。并用来发送海量的垃圾邮件,以规避垃圾邮件过滤系统。最终,这家军火承包商花费2个月来重新声明对这些IP地址的所有权,并在国际互联网上封堵这些流氓路由广播。同时,由于被频繁地列入垃圾邮件地址黑名单, Northrop Grumman的IP地址全部被禁止使用。
2.巴基斯坦电信致YouTube断网事件(2008)
2008年2月,巴基斯坦政府以视频网站YouTube有亵渎神明内容为理由命令网络服务商封锁YouTube。 巴基斯坦电信(Pakistan Telecom)试图限制本地用户接入
YouTube,通过BGP向香港电信盈科(PCCW)发送新的路由信息(有错误)。然后PCCW向国际互联网广播了这个错误的路由信息。当时,巴基斯坦电信在路由器上加了条static route把208.65.153.0/24弄到了
null0接口(黑洞路由) ;巴电信的工程师手抖把static route redistribute(Cisco路由器上同步不同协议路由表的方法)到BGP了,也就是说把该路由器上的静态路由表添加到BGP的路由表了,静态路由同步到其他路由表里的优先值最高。
BGP把这条路由向其他Peer AS的路由器同步了,最先中枪的是香港的电讯盈科(PCCW),然后接着被逐渐同步到了全世界。这时互联网的大部分用户想上
Youtube的时候,数据包都丢到巴基斯坦某个路由器的null接口,结果当然是打不开。
3.Hacking Team利用BGP Hijack协助意大利黑客团体的攻击行动(2015)
利用bgp hijack技术劫持目标网络链路数据, 然后结合Adobe flash 0day等技术手段向目标网络投递/植入RCS, 完成长期监控。
4.Google工程师配置错误致日本800万用户断网1小时(2017)
Google工程师配置错误, 意外劫持了NTT通信株式会社的流量。 (NTT是日本一家主要的ISP, 其还支持OCN和KDDI两个小型的ISP。 在日本, NTT为767万家庭用户和48万家公司提供互联网服务)。 导致日本持续断网40分钟左右, 这在日本引 起 不 小 的 恐 慌 。 据 日 本 当 地 媒 体 报 道 , 日 本 总 务 省( Ministry of Internal Affairs andommunications) 已经对此事展开调查, 并要求ISP提供详细报告。Google发言人发表声明承认是他们的错误, 发言人向朝日新闻表示, Google对网络设置了错误信息导致问题发生, 并对带来的不便与恐慌致以歉意。 断网事件发生后, Google方面在8分钟之内更正了信息。
为什么日本会遭受如此严重的影响呢?谷歌此次泄漏的16万条路由中, 超过25,000条路由是属于NTT的路由地址段, 在受影响的全部网络, 涉及NTT的路由数最多。实际上, 本次路由泄漏并不涉及KDDI的路由地址段。 但KDDI为何会遭此灾难呢? 因为KDDI是Verizon的互联网转接(IP
Transit) 客户, 也就是说, KDDI买了Verizon的互联网转接(IP Transit) 服务。 KDDI从Verizon接受了超过95,000条泄漏的路由前缀。 日本另一个电信运营商IIJ也从Verizon接受了超过97,000条泄漏的路由前缀。 因此, 从KDDI或IIJ到NTT的任何互联网流量, 都被先传送到谷歌在芝加哥的数据中心。NTT、 KDDI、 Softbank BB和IIJ是日本前四大互联网骨干网络,他们之间互联互通流量巨大。 这次BGP路由事故导致其中三大日本运营商之间的国内流量国际化, 漂洋过海跨越太平洋, 经过日美之间众多国际海缆系统, 流向谷歌的美国芝加哥数据中心。 这种情况下, 纵使日美之间国际海缆带宽原本很充足, 也承载不了本来应该在日本国内的互联网洪荒之流, 导致日美互联网高速公路严重堵塞, 互联网流量通达时间过长, 从而出现灾难性互联网数据丢包, 导致日本互联网中断。
5. 亚马逊遭BGP劫持致价值1730万美元ETH被盗(2018)
美国时间4月24号上午, 亚马逊权威域名服务器遭到BGP路由劫持攻击。 攻击者的目的是利用DNS和BGP固有的安全弱点来盗取加密货币。 该劫持波及了澳洲、 美国等地区。本次事件中, 用户对该网站的访问流量被全部劫持到一个俄罗斯ISP提供的非法网站。 MyEtherWallet 已发声明表示很多用户成为本次攻击的受害者。
0x02关于BGP的那些安全缺陷/漏洞
1.BGP基本三原则
1.当BGP路由建立邻居连接后, 彼此将路由条目发送给邻居。
2.当目的网络确定时, AS_PATH最短路径具有路由优先权
3.当目的网络确定时, 网络通告地址越具体(掩码越长)越有路由优先权有路由优先权
2.BGP hijack
2.1闲置AS抢夺
对外宣告不属于自己, 但属于其他机构合法且未被宣告的网络。
攻击前:
AS1是网络1.1.1.1/18和1.1.2.2/18的所有者, 但其目前只使用了1.1.1.1/18, 故对只宣告了1.1.1.1/18, 而没有宣告1.1.2.2/18。 如下图:
攻击后:
AS5 拥 有 网 络 5.5.5.5/16 , 他 发 现AS1 没 有 对 外 宣 告 了 1.1.2.2/18 而1.1.2.2/18确实是存在且是合法的。 AS5对外宣告了1.1.2.2/18导致所有前往1.1.2.2/1的所有流量都发给了AS5。如下图:
2.1近邻AS通告抢夺
利用物理位置邻近特性, 就近宣告不属于自己的网络劫持近邻网络链路。攻击前:
攻击后:
2.2长掩码抢夺(吸虹效应) Special-Prefix hijack
利用BGP选路长掩码优先的特性劫持有可达网段全流量。攻击前:
攻击后:
2.2 AS_PATH hijack (沙丁鱼捕术)
利用AS_PATH prepend可任意修改的特点,通过增AS_PATH穿越AS数量抑制其路由优先级, 将数据流向赶向目标网络。 达到控制网络流量的目的。
攻击前:
攻击后:
2.3 路由泄露(Route leak)
BGP路由泄露:
BGP路由条目在不同的角色都有其合理通告范围, 一旦BGP路由通告传播到其原本预期通告范围之外称之为路由泄露, 而这会产生难以准确预料的结果。根据其发生泄漏后造成的结果大致可分为以下3种:Ø造成源网络中断。Ø造成源网络和被指向网络中断。Ø造成AS穿越/ISP穿越/MITM等问题
在AS1发生路由泄露前, AS1、 AS2、 AS3、 AS4、 AS5都能正常通讯。 如下图:
2.4 BGP TTL modify (饭后甜点)
EBGP运行在AS与AS之间的边界路由器上, 默认情况下需要直连或使用静态路由如果不是直连,必须指EBGP多条。否则无法建立邻居关系。为解决此问题定义了ebgp-multihop属性来修正跳数(hop)问题。在ebgp建立邻居的时候默认ttl值为1,如果不修改ebgp-multihop会导致非直连的ebgp邻居无法建立邻居关系(这也是一种ebgp的防环措施)。其实质就是通过此属性来修改出站方向路由的TTL属性值。
BGP TTL值支持自定义修改, 故可在进行MITM(BGP 路由TTL值每经过一跳值会减小1) 攻击的同时制定策略, 修改TTL值(增加对应跳数消耗的TTL值) 让其跳数看起来无异常。 能达到一定的隐藏作用。
switch(config)# router bgp 1.1
switch(config-router)# neighbor 192.0.2.1 remote-as 1.2
switch(config-route-neighbor) ebgp-multihop 2 (1-255)
2.5 Use BGP Break HTTPS
有了之前的BGP hijack, 现在只需拿到合法TLS证书即可解密https流量。Ø通过TLS CA 为用户获得TLS证书的过程如下:
1、 先在CA网页申请一个帐号 ;
2、 认证登录请求CSR(certificate signing request) 创建并载入,尽管这很重要, 一些CA甚至允许跳过这步直接从CA中取私钥;
3、 CA提供了很多选择认证用户所有权, 其中包含以下必备的3项:
•查询whois记录
•载入特定html在特定url通过认证
•使用者在dns表中建立自定义token
当以上确认后,申请者付款,付款完成,CA发放TLS合法认证,,然后我们就能用这个TLS证书向你网页访问者证明身份合法性。(确实是合法的,全球有效)
劫持CA(certificate authority) 证书:从以上过程我们可以看出, 只要保证3中的3个条件验证通过, 即可申请到合法TLS证书。如果我们选择了正确的CA, BGP劫持打断CA间的通话也不会被发现。实现这样的攻击你需要的只有两个:
1、 一个可控制的边界路由
2、 你的BGP结点的信息:它的客户, 提供者, 结点信息, 公共服务类似Qrator Radar或者 BGP监听。 花一个小时确认这些基本信息, AS_PATH 追踪路线, 等等。
然后:
使用BGP劫持技术将whios、 URL认证server、 DNS TXT、 DNS , token对应的地址指向自己搭建的3类server:
查询whois记录 |
(明文传送可伪造) |
载入特定html在特定url通过认证 |
(明文传送可伪造) |
使用者在dns表中建立自定义token |
(明文传送可伪造) |
然后接着进行第4步即可完成TLS证书申请。
0x03 检测 & 防御
1.BGP Routes Moniting(检测篇)
使用traceroute命令查看TTL相关信并与正常情况下进行比对。 多数情况通过TTL值增和经过的AS路径来判否存在劫持。当未发生路由劫持时, 如下图:
当发生路由劫持时, 发现路由绕行了:AS40->AS30->AS10->100。如下图:
自建平台实时同步全球权威机构、 组织的全量BGP路由表,并与本地收集到的BGP进行比对。 发现异常并实时告警。如下图:部分开源项目,如RouteViews:
选取合理的采集周期, 在周期内对BGP正常状态下路由更新条目的数量进行统计。 选合理的更新条目总数阈值范围, 实时监控AS内BGP路由条目更新数目, 发现异常实时告警。Ø使用商业化BGP路由监控告警平台
• IAR (Internet Alert Registry)
• PHAS (Prefix Hijack Alert System)
• RIPE NCC MyASN Service
• BGPmon
• WatchMY.NET
• Renesys Routing Intellig
2.过滤和限制路由通告范围(防御篇)
Ø梳理清楚AS范围内BGP、 IGP全局路由策略哪些路由通告是允许的、 哪些是禁止的。 并合理使用ACL、 Route-map或BGP Prefx Filtering控制路由的宣告、 传播范围。Ø运营商、 服务提供商应当依据以下原则, 对不同商业角色路由器进行路由通告制定详细的BGP Prefx Filtering并启用。如下图:
3.算法模型(检测篇---外部引用)
3.1 域间路由的中间人攻击模型
域间路由的中间人攻击通常基于前缀劫持来实现。 前缀劫持宣告伪造的路由以劫持通往受害网络的流量。 典型的前缀劫持如图所示。 AS6向外非法宣告属于AS1的前缀10.1.16.1/22, 使得AS4和AS5被该伪造路由污染。 进而, 它们到达受害网络• AS1的流量也将被劫持到AS6中。 如下图示:• AS1是网络10.1.16.1/22的真实所有者, 我们标示为:f• AS5为起始网络/受污染网络, 我们标示为:Y• AS6为起始攻击者网络, 我们标示为:X
• 在攻击发起前从Y到f的AS_PATH为: AS2 AS
在攻击发生后, 从Y到f的AS_PATH为: AS6 AS2 AS1。 如下图:
3.2 域间路由中间人攻击的异常特征
首先, 如节上所述, 域间路由中间人攻击的第1步是实施前缀劫持。 鉴于前缀劫持会造成MOAS(multiple origin AS)冲突, 因此产生异常的MOAS是域间路由中间人攻击的第一个重要特征。
由上述分析显见, 除产生上述控制平面的MOAS异常外, 域间路由中间人攻击还具有另外2个典型特征, 即:
1) 受污染网络在攻击之后, 其到达受害前缀的数据平面的转发路径比控制平面的AS-path要延长(换言之, 控制平面的
AS-path是其数据平面的转发路径的子路径)。
2) 受污染网络在攻击之后到达受害前缀的转发路径的终点正是攻击之前到达该前缀的AS-path的终点。综合上面的分析, 可使用公式表达式来描述:
4.安全增强协议RPKI 与BGPsec (终极防御篇)
4.1 RPKI(RFC 6810)
针对BGP路由前缀劫持问题,当前业界正在推进的方案是RPKI(Resource Public Key Infrastructure:互联网码号资源公钥基础设施) 在之前亚马逊的案例中,当天上午为时两小时的过程中,攻击者(AS10297)对以下前缀发起了路由起源声明:
205.251.192.0/24, AS10297
205.251.193.0/24, AS10297
205.251.195.0/24, AS10297
205.251.197.0/24, AS10297
205.251.199.0/24, AS10297如果亚马逊部署RPKI并签发资源证书和ROA(路由起源认证)那么其他部署了RPKI路由器的自治网络就可以帮助过滤这些虚假路由。具体地说, 亚马逊使用自己的RPKI证书签发以下ROA并发布到全球资料库中:
<205.251.192.0/23, AS16509>
<205.251.193.0/23, AS16509>
<205.251.195.0/23, AS16509>
<205.251.197.0/23, AS16509>
<205.251.199.0/23, AS16509>那么部署了RPKI路由器的其他自治网络, 就可以从RPKI依赖方那里得到验证后的IP前缀和起源AS号的绑定关系, 继而判定起源于AS16509的相应路由通告为真并将其保留, 以及判定由攻击者发起的起源于AS10297的路由通告为假并将其丢弃, 从而完全抵御这次路由劫持。RPKI作为一种域间路由安全机制, 本身只能提供路由起源认证, 而不能提供路由全路径认证, 所以RPKI能够避免以上这种前缀劫持攻击。
4.2 BGPsec(RFC 8206)
但其他类型的路由攻击(如路由泄漏攻击和路径缩短攻击) 可以绕过RPKI进行流量劫持。 针对这种情况, IETF提出了一种部署在RPKI之上的全路径认证机制——BGPsec, 并将其标准化。 BGPsec要求每一个AS都对它接收到的路由通告消息进行签名, 签名内容作为路由消息的路径属性BGPsec_Path_Signatures通告给邻居AS。
签名内容包括:
(1)上一个AS的BGPsec_Path_Signatures;
(2)本自治系统的AS号;
(3)路由消息要发往的自治网络的AS号;
(4)本AS的RPKI路由器公钥。由此可见, BGPsec_Path_Signatures实际上代表了AS路径中的前一AS对后一AS继续通告该路由的授权。部署了BGPsec的AS在路径签名之前还要进行路径验证, 验证过程如下:当一个AS收到路由通告消息后, 会依次验证AS路径中每一个AS对应的BGPsec签名(包含在BGPsec_Path_Signatures中) 。 如果全部验证成功, 说明该AS路径是真实有效的, 当前AS才可能采用并继续向外播该路由通告。 BGPsec可以有效避免BGP路径缩短攻击。
from:https://mp.weixin.qq.com/s/GhmPpxZjMaI9GUlAKw7wtA