需要云计算吗? 即刻开始体验

CUPS 溢出带来的DDoS 威胁

Akamai Wave Blue

寫於

Larry Cashdollar, Kyle Lefton, 和 Chad Seaman

October 01, 2024

Larry W. Cashdollar 从事安全领域漏洞研究员工作已经超过 18 年,目前是 Akamai Technologies 安全事件响应团队的成员。他曾在南缅因大学学习计算机科学专业。Larry 记录了超过 150 个 CVE,曾经在 BSides Boston、OWASP Rhode Island 和 Defcon 上发言,介绍自己的研究成果。在闲暇时间,他喜欢户外运动和重新制作迷你自行车的发动机。

Akamai 蓝色波纹

寫於

Kyle Lefton

Kyle Lefton 是 Akamai 安全智能响应团队中的安全研究实习人员。Kyle 之前担任过美国国防部的情报分析人员,他在网络防御、威胁研究和反情报工作方面拥有数年的经验。他为参与调查新兴威胁、漏洞研究和威胁组织映射方面的工作而感到自豪。闲暇之余,他喜欢与朋友和家人一起度过欢乐时光,也喜欢玩一玩策略游戏或者去户外徒步旅行。

Chad Seaman headshot

寫於

Chad Seaman

Chad Seaman 是 Akamai 安全情报响应团队的首席安全研究员兼团队负责人。他自豪地称自己为“互联网垃圾箱潜水员”,喜欢探查在互联网上发现的各种“垃圾”。Chad 的职业生涯始于程序员,在因数据泄露调查接触到安全、漏洞利用和取证之后,他便与安全工作结下了不解之缘。他现在忙于恶意软件调查、逆向工程、漏洞研究、DDoS 攻击和网络犯罪调查。他喜欢开飞机;喜欢远远地在纸上戳洞;喜欢在大自然中消磨时光,尤其喜欢在林间小径骑越野车。

只需短短数秒,攻击者就能轻易利用互联网上所有易受攻击的 CUPS 服务发起攻击。
只需短短数秒,攻击者就能轻易利用互联网上所有易受攻击的 CUPS 服务发起攻击。

编辑和评论补充:Tricia Howard

执行摘要

  • Akamai 研究人员已确认一种使用 CUPS 的新攻击媒介,攻击者可以利用该媒介来实施分布式拒绝服务 (DDoS) 攻击。(CVE-2024-47850)

  • 研究表明,攻击系统只要向暴露在互联网上的易受攻击的 CUPS 服务发送一个数据包,即可发动攻击。

  • Akamai 安全情报响应团队 (SIRT) 发现,超过 198,000 台设备容易受到此攻击媒介的攻击,并且这些设备都可通过公共互联网进行访问;其中大约 34% 的设备(超过 58,000 台)可被用于 DDoS 滥用。

  • 在超过 58,000 台易受攻击的设备中,有数百台设备出现了“无限循环”请求。

  • 只需要有限的资源即可发起成功的攻击,这突显出了其危险性: 只需短短数秒,攻击者就能轻易利用互联网上所有易受攻击的 CUPS 服务发起攻击,并且在现代超大规模云服务提供商平台上,攻击者所付出的成本还不到一美分

CVE

2024 年 9 月 26 日,安全研究人员 evilsocket 披露了 Unix 通用打印系统 (CUPS) 内存在的远程代码执行 (RCE) 漏洞。简单来说,攻击者可以 远程操纵互联网打印协议 (IPP) URL 来执行恶意命令。这可以通过将四个不同的漏洞链接在一起来实现。

  1. cups-browsed 中的 CVE-2024-47176,此漏洞会将请求强制发送到攻击者控制的地址

  2. libcupsfilters 中的 CVE-2024-47076,它不会对攻击者服务器返回的数据执行验证或清理,并且会将其传递给 CUPS 系统的其他部分

  3. libppd 中的 CVE-2024-47175,这同样涉及到不对输入进行清理,并将其写入临时文件

  4. cups-filters 中的 CVE-2024-47177允许执行任意命令

关于 CUPS 问题的更多内容

在查看关于这些漏洞的技术文章的同时,我们发现大家并未讨论另一个攻击媒介: DDoS。作为一种依然有效的攻击媒介,DDoS 还是在活跃地骚扰和扰乱互联网上的各种受害者,包括大型行业、政府、小型内容创作者、在线商店以及游戏玩家。虽然原有分析内容重点介绍了会产生更严重后果的 RCE,但在这种情况下,攻击者也能够轻松滥用 DDoS 放大攻击。

当攻击者发送一个特制的数据包,将目标的地址指定为要添加的打印机时,问题便会出现。对于所发送的每个数据包,易受攻击的 CUPS 服务器都会生成一个更大的、部分由攻击者控制的 IPP/HTTP 请求,该请求将指向指定的目标。 因此,不仅是该目标会受到影响,CUPS 服务器的主机也会成为牺牲品,因为攻击会消耗其网络带宽和 CPU 资源

漏洞利用

攻击者可以使用一个简单的脚本将恶意 UDP 数据包发送到 CUPS 的易受攻击实例。特制的有效负载会指示 CUPS 向攻击者指定的目标和端口发送一个 IPP/HTTP 请求。 cups-browsed 尝试获取指定的 URI 来下载 IPP 属性文件时,该漏洞就会出现

此 PPD 文件 URI 具有一定的任意性,并且攻击者可以对其进行修改。在测试中,我们发现此 URI 有效负载可以填充到 989 字节。此填充将在 IPP/HTTP 请求中包含两次:一次在 HTTP 标头中,另一次在指向目标系统的 POST 数据中。

通过使用此填充技术,攻击者可以消耗目标网络和系统上的更多带宽及资源,从而进一步增强 CUPS 支持的 DDoS 攻击的影响。图 1 直观地展示了这种情况。

 Figure 1 is a visual representation of what this would look like. Fig. 1: Network diagram of attack flow

攻击系统

对于此威胁来说,更令人不安的是,攻击者只需要很少的资源就能发起攻击。图 2 和 3 表明 攻击系统只要向暴露在互联网上的易受攻击的 CUPS 服务发送一个数据包,便可以让运行 CUPS 的系统发动攻击。

  ./cups.py [CUPS_IP] [TARGET_IP]:1337 attacker_controlled-payload%20goes.here

  Sending UDP Payload to target [TARGET_IP] and port 1337
  Bytes Sent: 78

图 2:分阶段利用

    09:05:03.072432 IP 192.168.12.143.43937 > X.X.X.X.631: UDP, length 78
	0x0000:  4500 006a 1991 4000 4011 2ed5 c0a8 0c8f  E..j..@.@.......
	0x0010:  xxxx xxxx aba1 0277 0056 bb25 3020 3000  .......w.V.%0.0.
	0x0020:  6874 7470 3a2f 2fxx xxxx 2exx xx2e xxxx  http://xxx.xx.xx
	0x0030:  2exx xxxx 3a31 3333 372f 7072 696e 7465  .xxx:1337/printe
	0x0040:  7273 2f61 7474 6163 6b65 725f 636f 6e74  rs/attacker_cont
	0x0050:  726f 6c6c 6564 2d70 6179 6c6f 6164 2532  rolled-payload%2
	0x0060:  3067 6f65 732e 6865 7265                 0goes.here

图 3:传出 UDP 数据包(可以修改为非功能性有效负载)

目标系统

我们最终得到的结果是,CUPS 服务尝试获取它认为是 IPP 属性文件的内容,但实际上获取的是攻击者早已指定的任何内容。UDP 数据包中指定的目标将开始接收来自运行 CUPS 的系统的传入 TCP 连接(图 4)。

The target specified in the UDP packet will start to receive incoming TCP connections from the system running CUPS (Figure 4). Fig. 4: CUPS service establishing a connection to the target

如果更仔细地查看两个已收到的包含实际请求数据的数据包,我们可以发现原始 IPP 请求,以及随附的 POST 数据,这些来自 CUPS 服务的数据部分由攻击者控制(图 5)。

If we look closer at the two received packets that contained the actual request data, we can see the raw IPP request, and the accompanying POST data, partially attacker-controlled, coming from the CUPS service (Figure 5). Fig. 5: IPP/HTTP request received by the target

从 cups-browsed 守护进程的日志中,我们可以看到获取 IPP 属性的浏览尝试最终生成了这些针对目标主机的请求(图 6)。

We can see from the logs for the cups-browsed daemon that the browsed attempts at fetching the IPP attributes are ultimately what generates these requests directed at the targeted host (Figure 6). Fig. 6: Cups-browsed logs

影响和漏洞

为了确保分析的全面性,我们在受控实验室中和互联网上测试并观察了机器的不同模式。这些模式极大地影响了攻击场景和放大系数。

根据 evilsocket 向我们提供的数据,Akamai SIRT 扫描并分析了全球互联网,以查找容易受到此缺陷影响并且可以在公共互联网上访问的设备(超过 198,000 台)。根据这些数据,我们发现这些设备中大约有 34% 的设备(超过 58,000 台)容易遭受此攻击。

此外,我们的测试还发现, 这些活跃的 CUPS 服务器中有部分服务器会在接收初始请求后反复回传信标,并且其中部分服务器似乎会在响应 HTTP/404 响应时无休止地回传信标。现实环境中的数百个此类系统分别建立了数千个请求并将它们发送到我们的测试系统。

这表明,此漏洞的潜在放大效应相当大并且会给运行这些受影响服务器的企业带来严重问题。我们还通过测试确认,在我们对受 HTTPS 保护的有效网站进行的探测尝试中,一些易受攻击的 CUPS 服务器能够完成传输层安全 (TLS) 握手。能够影响 TLS 也会导致问题更加严重,因为它会由于握手和加密/解密处理而进一步增加服务器硬件的压力和资源消耗开销。

过时的技术卷土重来

我们应当注意到,这些已识别的机器中有很多都在运行非常旧的 CUPS 版本,例如最初于 2007 年发布的 1.3 版。部分企业让机器运行严重过时的硬件和软件的情况并不少见,并且此类设备也不太可能很快得到更新。 这为恶意攻击者带来了绝佳的机会:他们可以利用这些过时的硬件进行 DDoS 放大攻击,或者(鉴于此情况下的 RCE)构建僵尸网络来实现多种目的,包括发动 DDoS 攻击

放大率估算

放大率可能会有很大差异,因此我们涵盖了一般情况和最坏情况,以帮助读者评估潜在的威胁。

最终,目标指令决定了此有效负载的大小,但对于基准计算,我们将使用 30 字节的最小可行 UDP 数据包大小,并在最坏情况下使用最大填充量为 1028 字节的 UDP 数据包。此数据包使用 IPP URI 指令并使用 989 字节(测试过程中发现的最大值)对其进行填充,这些内容会被复制并包含在最终的攻击流量中。

在最坏的情况下,我们观察到一次探测便引发了无数次尝试连接和请求。这些流量似乎没有终点,会一直持续到守护程序被终止或重新启动。在这种情况下,这可以被视为无限放大。在对超过 58,000 个响应机器进行测试的过程中,有几百个机器表现出了这种模式。

其中大约 62%(超过 35,900 个)的系统至少向我们的目标系统发送了 10 个 TCP/IPP/HTTP 请求,以响应我们的 UDP 数据包。总体而言,超过 58,000 个响应机器(包括时间范围无限大的响应机器)的响应率平均为 45 次响应,我们将使用此数据来进一步计算潜在的放大率。

在最小可行探测(30 字节)的情况下,我们看到目标机器收到了完整的 TCP 连接以及两个包含有效负载的数据包。第一个数据包含 HTTP 请求和标头;第二个数据包包含该请求的 POST 数据(图 7)。

The first packet contains the HTTP request and headers; the second contains the POST data for the request (Figure 7). Fig. 7: Minimal viable amplification flow

这些数据包(226 字节和 174 字节)总和为 400 字节。如果我们假设每个 CUPS 反射器将收到这些连接和请求 45 次,那么每个 30 字节的探测会产生 18,000 字节的流量,或者说 一般 尝试的放大系数约为 600 倍。

更低的放大率并不意味着更小的影响

除了数据包大小之外,最坏的情况还会产生不同的结果。如果我们使用最大填充量为 1,028 字节的 UDP 有效负载来运行相同的练习(图 8),那么会看到指向目标的流量更大,但放大率更低。

The worst-case scenario has different results outside of packet size. If we run this same exercise using maximally padded UDP payloads of 1,028 bytes (Figure 8), we see much larger flows directed at the target, but lower amplification. Fig. 8: Maximally padded attack payloads arriving at the target

在此情况下,我们的双数据包有效负载仍然会到达,但各自的大小现在为 1,217 字节和 1,164 字节,总共 2,381 字节。假设每个反射器的平均响应数都为 45 次,则每个 1,028 字节的探测最终会产生总共 107,000 字节的流量,放大率下降为 104 倍。

虽然放大率下降了, 但目标网络上消耗的带宽接近于最小可行有效负载的 6 倍。这还会导致目标 HTTP 服务器需要分配资源来处理这些请求。因此,虽然它不会提高放大率,但对于防御者来说,这种情况会带来问题更严重(并且更现实)的攻击。

扩大这些可能性

如果我们假设所有 58,000 多个已识别的 CUPS 主机都被集中到同一活动中,那么在最小填充的示例中,每个 UDP 数据包可能会产生 1 GB 的大量传入攻击流量。最大填充的情况可能会产生 6 GB 的大量流量。虽然这些带宽数字可能并不惊人,但无论在哪种情况下,它们都会导致目标需要处理大约 260 万个 TCP 连接和 HTTP 请求。

CUPS 中的 DDoS 选项

这种性质的攻击是令人担忧的趋势的一部分,即攻击者进行此类攻击的技术门槛不断降低,他们甚至可以指挥互联网上易受攻击的系统向受害者发送持续的大量流量。更糟糕的是,这通过向暴露在互联网上的 CUPS 服务发送一个数据包就能实现。 只需短短数秒,攻击者就能轻易利用互联网上所有易受攻击的 CUPS 服务发起攻击,并且在现代超大规模云服务提供商平台上,攻击者所付出的成本还不到一美分

正如 evilsocket 的研究指出的那样,在互联网上发现有略多于 198,000 台的设备对 UDP 探测做出了响应,并且 SIRT 发现其中大约 34%(超过 58,000 台)的设备以很容易被滥用于 DDoS 攻击的方式对我们的 UDP 探测做出了响应。

使用特制攻击负载的远程攻击者可以利用此漏洞获取 cups-browsed 守护进程来与第三方建立出站 TCP 连接。如果上述目标恰好正在目标端口上运行 HTTPS 服务器,那么该服务器不得不花费周期和资源来尝试解析并处理这些请求及数据,从而可能使该攻击产生更大的影响。对于 CDN 和缓存来说,POST 请求中指定的 URL 不太可能存在,从而导致产生绕过缓存命中并将这些攻击负载转发到源站服务器的 404 错误。

根据 evilsocket 的研究结果,CUPS 的很多发行版和版本都受到了影响。最终,当接收到通过 UDP 添加打印机的请求时,“cups-browsed”与“cups-filters”相结合后便会出现漏洞。一些 Linux 发行版似乎提供了抵御措施,可将 cups-browsed 绑定至 localhost 或完全禁止 cups-browsed 进行侦听。

CUPS 漏洞抵御措施

更新到最新版本的 CUPS 还是完全将其移除取决于您系统的具体需求。如果您的系统依赖打印功能,那么更新到最新版本的 CUPS 可确保增强安全性、性能,并且可以为现代设备提供支持。但是,如果贵企业不需要打印功能,那么移除 CUPS 可以简化您的系统、减少潜在漏洞并节省资源。

最终,此决定应基于打印功能对于您所在环境的必要性以及维护最新、安全的系统的重要性。如果移除或更新 CUPS 软件不可行,那么防御者至少应该通过防火墙保护服务端口 (UDP/631),尤其是在可以通过广阔的互联网访问这些端口的情况下。

攻击者往往会迅速利用新报告的漏洞,其中很多新公布的漏洞在首次披露后的短短七天内就会遭到利用。安装补丁需要时间,而黑客们迫切希望利用这个脆弱的过渡期。很多企业也会忽视对部分较旧的软件进行更新,这可能会使利用此类漏洞的黑客们获取丰厚利润。

适用于受害者的 DDoS 抵御措施

对于通过易受攻击 CUPS 系统发起的 DDoS 攻击的受害者来说,相关流量的一些特征可帮助对网络上或 Web 应用程序防火墙 (WAF)处的攻击流量进行告警、确认和丢弃。

来自 CUPS 服务的所有请求都以 POST /printers/  POST /classes/ 开头,并且虽然攻击者可以控制 /printers/  字符串后的有效负载,但他们无法控制有效负载的初始部分。此外,CUPS User-Agent 字符串可以提供丰富的信息,并且使用格式 CUPS/[VERSION]以及引用 IPP。这些是 UA 中非常独特的字符串,通常不会出现在自然流量中。

此外,HTTP 标头和 POST 数据中还有一些静态元素。POST 数据中 application/ippContent-Type 标头和有效负载 printer-uri 都是我们在测试过程中识别的静态值(图 9)。

There are also static elements in HTTP headers and POST data. The Content-Type header of application/ipp and payload printer-uri in the POST data are both static values we identified during testing (Figure 9). Fig. 9: Highlighted values in observed traffic that could aid in detection and blocking

为了帮助防御者,我们还添加了一项 Snort 规则,该规则应该可以帮助识别通过明文套接字进入您网络中的这些流量(图 10)。

  alert http any any -> any any (msg:"CUPS Reflected DDoS IPP Request";
pcre:"/POST \/printers\/|POST \/classes\//"; http_method;
content:"Content-Type: application/ipp"; http_header;
content:"User-Agent: CUPS/"; http_header;
content:"printer-uri"; http_client_body;
metadata:service http;
reference:url,https://akamai.com/blog/security-research/2024/october-cups-ddos-threat;
sid:100004; rev:2;)

图 10:CUPS 攻击流量的 Snort 规则

如前所述,我们发现现实环境中的系统会在传输其 HTTP 有效负载之前完成 HTTPS 握手,因此使用 HTTPS 的防御者应考虑在其 WAF 配置而不是在其网络监控系统中实施这些匹配规则。

结论

技术能力低的投机性攻击者有时会发现新的 DDoS 攻击媒介,并且往往会很快滥用这些攻击媒介。CUPS 中的这个漏洞和可通过此方式滥用的大量设备让我们相信,防御者很可能会遭遇基于 CUPS 的攻击。

在消息传递和清理工作取得成效以减少易受攻击和暴露在互联网上的设备数量(目前为 58,000 多台)之前,我们怀疑此攻击媒介会在现实环境中遭到滥用。我们希望防御者、网络运营商和系统管理员都能了解这一信息,并且迅速处理各自的漏洞以保护每个人的利益,或者至少需要准备好识别并抵御今后可能会利用这些漏洞的攻击者。

我们在此感谢 evilsocket (Simone Margaritelli) 提供的宝贵帮助和意见。♥️



Akamai Wave Blue

寫於

Larry Cashdollar, Kyle Lefton, 和 Chad Seaman

October 01, 2024

Larry W. Cashdollar 从事安全领域漏洞研究员工作已经超过 18 年,目前是 Akamai Technologies 安全事件响应团队的成员。他曾在南缅因大学学习计算机科学专业。Larry 记录了超过 150 个 CVE,曾经在 BSides Boston、OWASP Rhode Island 和 Defcon 上发言,介绍自己的研究成果。在闲暇时间,他喜欢户外运动和重新制作迷你自行车的发动机。

Akamai 蓝色波纹

寫於

Kyle Lefton

Kyle Lefton 是 Akamai 安全智能响应团队中的安全研究实习人员。Kyle 之前担任过美国国防部的情报分析人员,他在网络防御、威胁研究和反情报工作方面拥有数年的经验。他为参与调查新兴威胁、漏洞研究和威胁组织映射方面的工作而感到自豪。闲暇之余,他喜欢与朋友和家人一起度过欢乐时光,也喜欢玩一玩策略游戏或者去户外徒步旅行。

Chad Seaman headshot

寫於

Chad Seaman

Chad Seaman 是 Akamai 安全情报响应团队的首席安全研究员兼团队负责人。他自豪地称自己为“互联网垃圾箱潜水员”,喜欢探查在互联网上发现的各种“垃圾”。Chad 的职业生涯始于程序员,在因数据泄露调查接触到安全、漏洞利用和取证之后,他便与安全工作结下了不解之缘。他现在忙于恶意软件调查、逆向工程、漏洞研究、DDoS 攻击和网络犯罪调查。他喜欢开飞机;喜欢远远地在纸上戳洞;喜欢在大自然中消磨时光,尤其喜欢在林间小径骑越野车。