BGP劫持攻击导致网络受影响:一系列本可避免的低级错误
黑客发起了一次供应链攻击,用了一种不寻常的手段:劫持了一块用于更新云管理软件的网络空间,而这些软件正是托管服务商、数据中心和其他大型基础设施公司所使用的。
在一次精心协调的行动中,未知攻击者利用了托管服务商Hetzner Online的路由安全配置弱点,以及获取有效TLS证书的流程缺陷。这些疏漏让攻击者成功实施了BGP(边界网关协议)劫持,夺取了分配给Softaculous的IP地址控制权。这家公司总部位于阿拉伯联合酋长国,是一家Web软件安装与管理平台的开发商,同时也是虚拟化环境管理平台Virtualizor的研发方。
Softaculous使用这些IP地址发布更新并托管客户端与计费网站。在控制劫持空间后,攻击者利用这些地址向毫无防备的用户推送伪装成更新包的恶意软件。
愚蠢且本可避免的失误
Softaculous托管服务商Hetzner Online的路由安全配置松散,是导致此次入侵的主要原因。此外还有大量其他错误共同促成了攻击成功。最值得注意的是,Softaculous未能遵循软件开发中最常见的安全步骤之一——使用代码签名来验证软件更新。
"在事件发生期间,流量被重定向的Virtualizor安装可能从攻击者服务器接收到了恶意更新包,"Softaculous 周一警告道。"我们的产���更新客户端当时尚未对更新包进行密码学校验,因此修改过的包不会因此被拒绝。我们相信实际受影响的服务器数量很少,但无法提供确切清单,因此请将每台Virtualizor服务器视为以下检查的覆盖范围。"
Hetzner Online 一项宽松的配置导致劫持者在 33 小时的时间窗口内,两次路由劫持中断性地篡改了流量走向。劫持开始 12 小时后,Hetzner Online 通过发布正确路径回收了地址空间 12.0.0.0/8。随后 Hetzner Online 停止了该路径的宣告,攻击者再次执行了同样的劫持。这一次,Hetzner 几乎花了近 10 小时才做出反应,而在此期间劫持一直在活跃状态。 与 Hetzner Online 一样,作为其下游中转对等方的 Softaculous 和 Zet.net 也未对系统实施有效监控,结果在劫持断断续续持续了 22 小时之后才被发现。此外,另一家托管服务商 Nexon Host 也受到质疑,其基础设施不知为何协助了恶意路由宣告的传播。 BGP 专家兼 BGP Tools 套件创始人 Ben Cartwright-Cox 将这些失误称为"愚蠢且本可避免的错误"。Softaculous、Hetzner 和 Zet.net 均未立即回应电子邮件采访请求。BGP 简史
BGP 攻击针对的是让互联网成为一个统一全球网络的基础架构。互联网被分割为众多 AS(自治系统),也称 ASN(自治系统编号)。每个 AS 都是一个独立网络,被分配了 IPv4 协议下 37 亿个公网地址的一部分。BGP 是将所有这些 AS 粘合在一起的粘合剂,使得每个 AS 都能与任何其他 AS 互联。
为了让分配给德国某个 AS 的地址能够访问北美地区的 IP,该 AS 必须"宣告"那些应该 Transit 承载流量的其他 AS。这些路由宣告是以条目形式发布在全局路由表上的声明,被所有 AS 及其所属托管服务商共同使用。在互联网早期,BGP 建立在信任基础之上——运营商简单地假设所有宣告都是合法的、善意的。
多年来,攻击者屡屡滥用该信任机制,擅自宣告本不属于自己的IP地址。无论是涉国家背景的势力还是图财谋利的团伙,均利用这一制度漏洞牟利,部分攻击者甚至借此将数PB的敏感数据经其控制的网络转发。
此后,互联网架构师推出了一系列防御措施以应对此类劫持。其中最具代表性的是RPKI(资源公钥基础设施)下的ROV(路由源验证)机制。RPKI ROV通过一种名为路由源授权(ROA)的密码学记录,验证BGP路由的正确起源及前缀掩码长度。部署该机制的AS会自动丢弃与ROA记录不符的路由,从而阻断劫持流量在全球互联网的蔓延。
事件始末
攻击始于周五晚9点(UTC)前几分钟,当时一小段Softaculous的IP地址段被注入全球路由表。该新前缀为162.55.80.0/24,宣告路径为:AS6204(Zet.net)→ AS62390(Nexon Host)→ AS24940(Hetzner Online)。
这256个IP地址原本托管着Softaculous的软件更新节点,以及其客户端和计费平台。该地址段是AS24940通常所宣告的162.55.0.0/16大网段下的一个更小、更精确的子段。BGP专家Doug Madory在一文中指出,此次宣告极有可能源于NexonHost(AS62390),要么是因其基础设施遭入侵,要么是某客户利用了其安全漏洞。
尽管RPKI等协议能阻止运营商转发因欺诈或配置错误产生的地址,但由于路由层面的疏漏加上缺乏有效的流量监控,导致此次劫持在整个周末断断续续持续发生。Infoblox互联网分析主管Madory接着补充道:
此次劫持还包含了一条带有伪造起源的 AS 路径。攻击者在路径最右侧附加了 ASN 24940,使得该路径被判为 RPKI 有效,原因有二:一是 ROA 要求起源必须为 AS24940,二是 ROA 允许前缀长度在 16 到 24 之间任意取值。因此,该路由符合 RPKI 有效性,不会被拒绝处理 RPKI 无效路由的 AS 丢弃。
Cartwright-Cox 和 Madory 均表示,Hetzner 的配置方式使得劫持得以在安全措施的保护伞下悄然进行。
IP 地址按块分配,块大小由斜杠后的数字表示。反直觉的是,该数字越大,块反而越小。这是因为 该系统基于构成 IPv4 标准基础的 32 位。/24 块表示 2(32-24),即 256 个地址;/16 块表示 2(32-16),即 65,536 个 IP。
Hetzner Online 在 RPKI 中配置了一项参数,允许小至 /24 的子前缀也被视为有效。加之被劫持路由的 AS 路径已被伪造以匹配 ROA 中的起源,攻击者的新路由凭借更短前缀成功绕过了 RPKI 防护。
"由于 162.55.80.0/24 没有现存的竞争路由,它得以传播至其他路由过滤机制允许的最远距离,"Madory 写道。"而且由于这是一条更具体的路由,任何发往该 IP 段的流量都会优先选择它而非合法路由(162.55.0.0/16),因为路由器倾向于最长前缀匹配。"
Cartwright-Cox 将此次疏漏概括为:"Hetzner 允许更精确的 IP 范围(/24,而非应有的 /16)被宣告,使得劫持者得以冒充这些范围,并在路由决策中自动胜出。"