远程代码执行漏洞将易受攻击的服务器变成他人的计算机。攻击者发送应用程序本应拒绝的输入,应用程序将其作为命令执行。AI加速了过去需要攻击者实时操作的部分工作。
什么是远程代码执行(RCE)?
远程代码执行是一类漏洞,允许攻击者通过网络在目标系统上运行自己的代码或命令,无需事先访问权限。它也被称为任意代码执行。无论哪种情况,攻击者决定机器的行为。RCE漏洞通常来自于将不受信任的输入传递给其执行内容的应用程序:如shell命令、模板、反序列化对象、文件上传处理程序。RCE利用是触发该漏洞的特定输入或序列。
远程代码执行的工作原理
攻击通常沿直线进行。攻击者找到运行易受攻击组件的暴露系统,发送精心制作的输入,并在服务账户下运行代码。第一个有效载荷保持较小,通常是一个网页shell或下载某物的命令。在攻击者确认立足点有效后,会使用更大的工具。
Log4Shell(CVE-2021-44228)是一个关于单个漏洞传播范围的典型例子。该漏洞于2021年12月在Apache Log4j日志库中披露,允许在日志字段中插入特制字符串,使易受攻击的服务器下载并执行攻击者控制的代码。Log4j被嵌入了众多应用程序中,因此该漏洞无处不在。
大多数RCE漏洞都是从小处开始的。下面第一个函数将用户输入直接传递给shell。第二个函数放弃shell并验证输入。
# Vulnerable: input goes straight to a shell
import os
def ping(host):
os.system("ping -c 1 " + host) # host = "8.8.8.8; id" runs a second command
# Safer: no shell, validated input
import ipaddress, subprocess
def ping(host):
ipaddress.ip_address(host) # raises ValueError unless host is an IP
subprocess.run(["ping", "-c", "1", host], check=True)
人工智能如何改变远程代码执行攻击
该漏洞类别较旧。攻击者已改变他们通过每个阶段的速度。
目标被排名
互联网范围的扫描已经存在多年。人工智能帮助进行排序:扫描结果可以按软件和版本分组,并根据每个系统携带已知漏洞的可能性进行排名,因此攻击者会优先攻击最佳目标。
补丁变成漏洞利用教程
供应商发布补丁和公告以帮助防御者,攻击者也会阅读它们。模型可以接受补丁差异或公告并描述易受攻击的代码路径,从而减少逆向工程工作并缩短公开披露与可用漏洞利用之间的时间。
一个proof of concept,多个版本
公开的概念验证通常针对一个版本或框架。模型可以将其移植到不同的版本或语言,并更改有效载荷以规避已知的检测模式。
多步骤攻击需要更少的技能
许多网络攻击分为两个阶段。小规模注入证明代码正在运行,然后第二步下载更大型的工具。模型可以设计该链条,并在某阶段失败时进行修改重试,因此针对CMS、API或门户的多步骤攻击所需技能比以前少。
后续工作通过脚本运行
代码运行后,后续操作是重复性的:读取配置文件,收集密钥和凭据,创建计划任务以确保访问在重启后依然有效,并寻找邻近系统。脚本和AI辅助的例程每次都以相同方式执行这些步骤。
同一链条,数百个组织
针对一个组织有效的链条可以指向数百个组织。每个阶段都为下一个阶段提供支持,每增加一个目标,攻击者的成本就比上一个更低。
Stage | Traditional RCE attack | AI-assisted RCE attack |
|---|---|---|
|
Finding targets |
Manual review of scan results |
Results grouped by software and version and ranked by likelihood of a known flaw |
|
Understanding the flaw |
Slow, specialist reverse engineering of a patch |
Patch diff or advisory summarized into a description of the vulnerable code path |
|
Building the exploit |
Written from scratch or copied as-is from a public proof of concept |
Proof of concept adapted to a new version, framework, or language |
|
Multi-stage attacks |
Planned and tested by hand |
Chains drafted and retried automatically when a stage fails |
|
After access |
Operator reads files and runs commands one at a time |
Configs, keys, and credentials collected by scripted routines |
|
Scale |
A few targets per operator |
The same chain run against hundreds of organizations |
|
Defender window |
Time between disclosure and exploitation gives teams room to patch |
Less time to patch after disclosure |
攻击者在RCE漏洞利用后的最初几分钟内所做的事情
成功利用后,攻击者的首批动作遵循一定模式。攻击者将web shell或加载器放入服务可写的目录,然后添加计划任务、服务或cron作业,以确保访问权限在重启后依然存在。接着,他们从配置文件和内存中提取credentials和密钥,并开始探测邻近系统。
每个步骤都会留下可供检查的痕迹。这些命令显示了web root中的最近文件更改和Linux上的新cron条目。
# Files changed in the web root in the last 24 hours
find /var/www -type f -mtime -1 -ls
# Recently modified cron entries
ls -lt /etc/cron.d /var/spool/cron 2>/dev/null | head
在 Windows 上,此查询列出过去一天内注册的计划任务。请先启用任务计划程序操作日志,因为默认情况下它是关闭的。
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-TaskScheduler/Operational'
Id = 106
StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, Message
这样的手动检查适用于一台服务器。在数百个系统中,它们会落后,快速行动的攻击者可能在下一次计划审查之前完成。
如何防止远程代码执行并限制损害
补丁和安全的输入处理仍然是防御RCE漏洞的主要手段。之后的所有措施都假设漏洞最终会在补丁发布前被利用,因此目标转向快速捕捉变化并限制被攻破服务的能力。
Netwrix Change Tracker 监控RCE攻击涉及的系统。它设定配置基线,并使用文件完整性监控来标记新增或修改的文件,如添加到网页目录的web shell,以及Windows、Linux、Unix和网络设备上的关键系统文件和设置的更改。其计划变更模型将观察到的内容与批准的变更请求进行比较,因此任何未计划的修改都会被标记以供审查。变更历史为调查人员提供时间线,系统文件认证通过全球信誉数据库检查文件,以确认哪些是可信的。
Netwrix PolicyPak 限制攻击者在Windows系统上运行代码后能做什么。 最小权限 强制执行会移除本地管理员权限,并为标准用户设置提升规则,因此被攻破的进程拥有更少的权限。使用PolicyPak,如果文件所有者未被预先列入白名单,您可以阻止应用程序和脚本运行。
使用 PolicyPak 移除本地管理员权限
免费试用远程代码执行防护清单
- 按照既定计划修补面向互联网的软件,首先从CMS平台、VPN门户和API开始。
- 验证并清理输入,确保用户输入远离shell、模板和反序列化器。
- 以最小权限运行服务, 移除不需要的本地管理员权限。
- 监控网站目录、关键文件和配置,以防止意外更改。
- 阻止不受信任的应用程序和脚本在 Windows 系统上运行。
- 保持可搜索的变更历史,使调查从时间线开始。
常见问题
分享到
了解更多
关于作者
Jarosław Bogalecki
产品经理
Jarosław Bogalecki 是 Netwrix 的产品经理,负责 PolicyPak 和 Password Policy Enforcer。他自2019年以来一直从事技术岗位,热衷于产品策略、人工智能及围绕真实客户问题构建解决方案。在担任产品经理之前,他曾从事应用工程和技术咨询工作。