什么是远程执行代码 (RCE)?远程执行代码攻击技术

1,029 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情

远程执行代码

什么是远程执行代码 (RCE)?

远程执行代码 (RCE) 是一种安全漏洞,允许攻击者在远程计算机上运行任意代码,并通过公共或专用网络连接到远程计算机。

RCE 被认为是称为任意代码执行 (ACE) 的更广泛的漏洞组的一部分 - RCE 可能是最严重的 ACE 类型,因为即使攻击者事先没有对系统或设备的访问权限,它们也可能被利用。RCE 相当于对受影响的系统或应用程序进行完全破坏,并可能导致严重后果,例如数据丢失、服务中断、勒索软件或其他恶意软件的部署以及攻击者横向移动到其他敏感 IT 系统。

远程执行代码攻击的影响

RCE 漏洞可能对系统或应用程序产生严重影响,包括:

  • 渗透 - 攻击者可以使用 RCE 漏洞作为他们第一次进入网络或环境。
  • 权限提升 - 在许多情况下,服务器存在内部漏洞,只有具有内部访问权限的人员才能看到这些漏洞。RCE 允许攻击者发现并利用这些漏洞,提升权限并获取对已连接系统的访问权限。
  • 敏感数据泄露 - RCE 可用于通过安装数据窃取恶意软件或直接执行命令从易受攻击的系统泄露数据。这可以从简单复制未加密的数据到在系统内存中查找凭据的内存抓取恶意软件。
  • 拒绝服务 (DoS) —  一个 RCE 漏洞允许攻击者在系统上执行代码。此代码可用于耗尽系统资源并使系统崩溃,或利用系统的资源对第三方执行 DoS。
  • 加密挖矿 - 利用RCE后常见的下一步是运行加密挖矿或加密劫持恶意软件,使用受感染设备的计算资源来挖掘加密货币,从而为攻击者带来经济利益。
  • 勒索软件 - RCE最危险的后果可能是攻击者可以在受影响的应用程序或服务器上部署勒索软件,并通过网络传播勒索软件,拒绝用户访问其文件,直到他们支付赎金。

RCE 攻击的类型

有几种类型的RCE攻击。最常见的是:

  • 注入攻击 - 各种应用程序允许用户提供的输入来执行命令。攻击者可以故意提供格式错误的输入数据来执行任意代码。
  • 反序列化攻击 - 应用程序通常使用序列化来组织数据,以便于通信。反序列化程序可以将用户提供的序列化数据解释为可执行代码。
  • 越界写入 - 应用程序通常分配固定的内存块来存储数据。内存分配缺陷允许攻击者提供写入缓冲区外部的输入 - 内存存储可执行代码,包括恶意代码。

远程执行代码攻击技术

执行 RCE 有两种主要方法:远程代码评估和存储代码评估。

远程代码评估

当计算代码的函数接受用户输入时,将进行代码计算。例如,某些应用程序允许用户使用其用户名生成变量名称 - 用户控制其用户名,因此他们可以创建包含恶意代码的用户名,并影响为特定编程语言启用输入评估的应用程序。

存储代码评估

此方法不同于标准远程代码评估,因为它依赖于解释器解析文件而不是特定的语言函数。解释器不应使用用户输入执行文件。Web 应用程序通常具有上载功能,但不能充分验证文件。

例如,应用程序可能为每个用户提供一个具有特定语言变量设置的控制面板,并将其存储在配置文件中。攻击者可以修改语言参数,将代码注入配置文件,从而执行任意命令。

已知的远程执行代码漏洞示例

以下是近年来发现的一些最重要的RCE漏洞:

  • CVE-2021-44228 (Log4Shell)  — Apache Log4j 2.x 中的一个漏洞,随后是其他 Log4j 漏洞 CVE-2021-45046 和 CVE-2021-45105。它影响了Log4j的多个版本,Log4j是数百万个Java应用程序使用的通用日志记录库,包括一些世界上最大的在线服务。它允许攻击者远程执行代码,即使他们没有经过身份验证,也可以通过创建恶意LDAP服务器并通过Log4j JndiLookup类访问它。
  • CVE-2021-1844 — Apple iOS、macOS、watchOS 和 Safari 的操作系统模块中的一个漏洞。当受害者使用易受攻击的设备访问攻击者控制的 URL 时,操作系统会在该设备上执行恶意有效负载。
  • CVE-2020-17051 — 一个影响 Microsoft Windows 通信协议 NFS v3 的漏洞。攻击者可以使用它连接到易受攻击的 NFS 服务器,并发送要在目标端点上运行的有效负载。
  • CVE-2019-8942 — WordPress 5.0.0 中的一个漏洞,允许攻击者通过上传在其 Exif 元数据中包含 PHP 代码的特制图像文件,在 WordPress 中执行任意代码。

RCE 攻击的缓解和检测

远程执行代码攻击可以利用各种漏洞,因此防范这些漏洞需要多方面的方法。以下是检测和缓解 RCE 攻击的一些最佳做法:

  • 清理输入 - 攻击者经常利用反序列化和注入漏洞来执行 RCE。在允许应用程序使用用户提供的输入之前对其进行验证和清理将有助于防止各种 RCE 攻击类型。
  • 安全地管理内存 - 攻击者可以利用缓冲区溢出等内存管理问题。请务必对所有应用程序运行定期漏洞扫描,以识别缓冲区溢出和与内存相关的漏洞,以便在攻击者执行 RCE 之前修复问题。
  • 检查流量 - RCE 攻击涉及攻击者通过利用代码漏洞访问公司系统来操纵网络流量。组织应实施网络安全解决方案,以检测对其系统的远程访问和控制,并阻止对易受攻击的应用程序的尝试。
  • 控制访问 - RCE 为攻击者在目标网络中提供了立足点,他们可以使用该立足点来扩展访问并执行更具破坏性的攻击。访问控制和技术(如网络分段、零信任策略和访问管理平台)可以帮助防止横向移动,确保攻击者在获得对目标系统的初始访问权限后无法使攻击者上报。