人工智能
黑客发动了一场供应链攻击,采用了一种特殊手段向网络植入恶意软件——劫持一段互联网地址空间,该地址空间被用于更新托管服务商、数据中心及其他大型基础设施公司所使用的云管理软件。
在这场精心策划的行动中,身份不明的攻击者利用托管服务商Hetzner Online在路由安全配置上的漏洞,以及获取有效TLS证书流程中的缺陷。这些疏漏使攻击者成功实施了BGP(边界网关协议)劫持,获得了对Softaculous所属IP地址的控制权。Softaculous是一家总部位于阿联酋的公司,旗下产品包括一套用于安装和管理网络软件的平台,以及名为Virtualizor的虚拟化环境管理平台。
Softaculous此前使用这些IP地址发布软件更新,并托管客户端和账单站点。攻击者控制被劫持的地址空间后,开始利用这些地址向毫无防备的用户推送伪装成更新包的恶意软件。
低级且本可避免的失误
此次攻击事件的主要根源,在于Softaculous的托管服务商Hetzner Online对路由安全的配置过于宽松。此外,多个其他失误也共同促成了此次攻击的成功。最值得关注的是,Softaculous未能遵循软件开发中最基本的安全措施之一——通过代码签名验证软件更新。
Softaculous于本周一发出警告:"在事件发生期间,任何流量被转移的Virtualizor安装实例,都可能收到来自攻击者服务器的恶意更新包。我们的产品更新客户端当时尚未对更新包进行加密验证,因此被篡改的安装包不会在这一环节被拦截。我们认为实际受影响的服务器数量较少,但无法提供明确名单,请将所有Virtualizor服务器均视为需要检查的对象。"
由于Hetzner Online的配置存在漏洞,攻击者得以在长达33小时的窗口期内,分两段间歇性地将流量错误引导。劫持开始约12小时后,Hetzner Online通过公告正确路径的方式夺回了被劫持的地址空间。但随后Hetzner Online停止了路径公告,攻击者趁机再次实施了同样的劫持。这一次,Hetzner用了近10个小时才作出响应,在此期间劫持持续生效。
与Hetzner Online一样,Softaculous和位于Hetzner Online下游的传输对等方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)的地址能够与北美的IP通信,该AS必须"公告"应当承载流量的其他AS。这些路由公告以条目的形式记录在全球路由表中,供所有AS及其托管服务商使用。互联网早期,BGP完全依赖信任机制运行,各服务商默认所有公告均合法且出于善意。
多年来,攻击者不断滥用这一信任机制,对其无权控制的IP发出路由公告。与国家行为者和经济利益驱动型组织均有关联的攻击者,借助这一脆弱体系,曾将数PB量级的敏感数据经由其掌控的网络中转。
互联网架构师们最终开发出一系列措施来防止此类劫持,其中最具代表性的是RPKI(资源公钥基础设施)ROV(路由源验证)。RPKI ROV利用名为路由源授权(ROA)的加密记录,验证BGP路由的合法来源和前缀掩码长度。部署了RPKI ROV的AS将拒绝与ROA信息不匹配的路由,从而阻止劫持行为在互联网中蔓延。
攻击过程还原
攻击发生在UTC时间周五晚近9时,一小段Softaculous的IP地址空间出现在全球路由表中。这个被标记为162.55.80.0/24的新IP前缀,经由AS6204(Zet.net)→AS62390(Nexon Host)→AS24940(Hetzner Online)的路径公告。
这段包含256个地址的IP范围,托管着Softaculous的软件更新端点及其客户端与账单站点,是通常由AS24940公告的更大地址段162.55.0.0/16中的一个更精确子段。据BGP专家Doug Madory的分析,该公告很可能源自Nexon Host(AS62390),攻击者可能是通过入侵其基础设施或利用其安全漏洞的某个客户实现的。
RPKI等协议本可阻止大型运营商路由欺诈或误操作产生的地址公告,但由于路由配置疏漏和流量监控缺失,这次劫持得以在整个周末断断续续地持续。Infoblox互联网分析主管Madory进一步指出:
此次劫持还包含一个伪造AS路径,因为攻击者在路径末尾附加了24940作为最右侧ASN,使其在两个维度上均通过了RPKI验证:一方面,ROA要求路由源为AS24940;另一方面,ROA允许前缀长度在/16到/24之间。因此,这条路由被判定为RPKI有效,不会被那些拒绝RPKI无效路由的AS丢弃。
Cartwright-Cox和Madory均指出,正是Hetzner的相关配置,使此次劫持得以绕过安全防护措施的监控。
IP地址范围以块为单位进行划分,斜线后的数字表示块的大小。看似反直觉的是,数字越大,地址块反而越小——这是因为该系统基于构成IPv4标准的32位地址。/24块代表(32-24)?,即256个地址;/16块代表(32-16)?,即65536个IP。
Hetzner Online将RPKI中的一个参数配置为允许最小至/24的子前缀被视为有效。结合被劫持路由中包含与ROA来源相符的伪造AS路径这一事实,攻击者公告的更精确前缀得以绕过RPKI防护。
Madory写道:"由于当时不存在与162.55.80.0/24竞争的现有路由,该前缀得以在其他路由过滤机制允许的范围内广泛传播。而由于它是一条更精确的路由,基于路由器对最长前缀匹配的偏好,所有发往该IP范围的流量都会优先选择它,而非合法路由(162.55.0.0/16)。"
Cartwright-Cox对此次配置失误的简洁描述是:"Hetzner允许公告比应有精度更高的IP范围(/24,而正确配置应为/16),使劫持者得以冒充他们的身份,并自动在路由决策中胜出。"
绕过TLS证书验证
较小的IP范围同样使攻击者得以绕过业界对TLS证书请求验证的通行机制。通常情况下,证书申请方必须在地理上分散的多个端点上证明其对域名的控制权。颁发此次劫持所用证书的证书颁发机构Let's Encrypt要求多数验证节点返回正面结果,方可签发证书。
Let's Encrypt在一封邮件中表示,通过将目标锁定在较小的/24范围,此次劫持在全球范围内扩散,"导致所有验证视角(以及其他所有流量)都到达了攻击者的服务器,而非合法的域名运营者"。该机构表示,如果启用了证书颁发机构授权(CAA)账户绑定功能(用于限制可接受的证书颁发机构和验证方式),"将会使攻击者的操作难度大幅提升"。
目前,受恶意更新影响的Virtualizor用户数量及恶意软件安装后的具体行为尚不明朗。Softaculous已敦促所有用户检查其系统是否存在被入侵的迹象。
此次事件是为数不多的已知BGP劫持被用于传播恶意软件的案例之一。此前有记录的案例包括:2015年,雇佣黑客团伙Hacking Team对其受雇攻击的目标实施了BGP劫持;2022年,攻击者劫持了属于亚马逊的IP地址,利用这些地址托管智能合约,在用户访问Celer Bridge加密货币交易所时,从中窃取了约23.5万美元的比特币。
值得庆幸的是,随着RPKI的广泛部署,BGP劫持事件正变得越来越少见。但本次事件再次证明,仅仅一处配置失误,就足以让这些防护措施全面失效。
Q&A
Q1:BGP劫持攻击是如何绕过RPKI安全防护的?
A:攻击者利用Hetzner Online将RPKI参数配置为允许最小至/24子前缀有效的漏洞,同时在路由路径中伪造了与ROA来源相符的AS路径末尾节点,使恶意路由在RPKI验证中被判定为合法,从而绕过了本应拦截非法路由的安全机制,并凭借更精确前缀的路由优先级在全球范围内扩散。
Q2:Softaculous的Virtualizor用户应该怎么做?
A:Softaculous已发出警告,由于其产品更新客户端在事件发生期间未对更新包进行加密验证,流量被转移的Virtualizor安装实例可能收到了恶意更新包。Softaculous建议所有用户将每台Virtualizor服务器均视为潜在受害目标,按照官方提供的检查清单逐一排查是否存在被入侵的迹象。
Q3:Let's Encrypt是怎么被用于此次攻击的?
A:攻击者通过BGP劫持将/24地址段的流量全球性地重定向至自己的服务器,包括Let's Encrypt的多视角验证请求。由于各地验证节点的请求均到达了攻击者的服务器而非合法域名运营者,Let's Encrypt的多视角验证机制被绕过,攻击者因此成功获得了合法TLS证书,为后续推送恶意软件提供了可信背书。
