用LLM驱动的分析加速EDR绕过

admin 2026-07-05 05:56:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文探讨了利用LLM加速EDR绕过的方法。作者通过一个简单的测试框架(DayShift)结合GPT-5.5-Cyber模型和BinaryNinja,成功逆向分析了PaloAltoCortexXDR等EDR产品。核心发现包括:LLM能自动识别进程内DLLhook、解密并提取本地YARA规则(如针对Mythicagent的检测),以及重构行为检测逻辑。文章指出当前主流EDR在LLM驱动的逆向分析面前存在脆弱性,并提供了可操作的绕过思路,但未公开完整解密密钥。 综合评分: 90 文章分类: 红队,渗透测试,恶意软件,安全工具,漏洞分析


cover_image

用 LLM 驱动的分析加速 EDR 绕过

Adam Chester Adam Chester

securitainment

2026年7月3日 12:20 中国香港

在小说阅读器读本章

去阅读

| 原文链接 | 作者 | | — | — | | https://specterops.io/blog/2026/06/29/llm-powered-edr-analysis/ | Adam Chester |

这些年来,我一直非常热衷于拆解和调试终端检测与响应 (EDR) 及杀毒软件 (AV) 引擎。从我记事起,就有很多个夜晚,我会放着音乐,启动一个开启了内核调试的虚拟机,花时间寻找不同的绕过方法。虽然这是一种发掘新颖技术的有趣方式,但当截止日期临近,或者某个项目需要特定的绕过手段才能继续不被发现时,这种缓慢的磨砺有时会令人沮丧。因此,当 LLM 具备了驱动逆向工作的能力时,我很兴奋能尝试用它们来加速这一过程。

在我的前一篇文章《Disposable Tooling: Building LLM-Generated Mythic Agents from Prompt to Deployment》中,我详细介绍了 LLM 如何协助进攻性安全研究人员进行载荷生成。在本文中,我们将继续这个系列,探讨 LLM 如何影响我们对待终端安全的方式,包括 LLM 驱动的 EDR 绕过。

披露的平衡

每个合格的红队都有各种在幕后依赖的绕过技术。我们都有对不同产品有效的绕过方法,或者某些在会议上几杯酒下肚后压低声音口口相传的技巧。

就 EDR 绕过技术而言,这些对话即将变得非常公开。

Justin Elze 写了一篇很棒的博客文章,展示了 TrustedSec 内部使用 LLM 分析不同 EDR 产品的实践。我很确定,像我们一样,你们中的许多人读过那篇文章后立刻就联想到了自己内部正在看到的情况。但对我来说更有趣的是,当我们看到当前一系列 EDR 产品在 LLM 面前纷纷失守 (特别是在主机检测方面) 时,却很少有人公开讨论这件事。

我热爱公开分享信息的一点是,虽然我们中许多人理解某项技术的局限性,但更广泛的行业却继续假设他们的安全控制是有效的。然后当新的研究发布时,突然间就可以展开更开放的讨论了。

所以这篇文章是我分享近期观察到的现象的尝试,希望它能继续鼓励其他人也这样做。

我们看到了什么?

在过去几个月里,我们看到了明确的迹象:终端安全框架,特别是我们在评估中遇到的”五大”产品,容易受到 LLM 逆向工程和绕过的影响。

更重要的是,实现 EDR 本地检测完全拆解所需的测试框架出奇地简单。它甚至催生了一个内部讨论串,收集了来自不同供应商的 EDR 规则,这些规则明显旨在阻止 SpecterOps 的几个工具集:

EDR 规则收集截图

随着一个又一个 EDR 被攻破,规则被分析,测试框架生成的自动化报告突出了 Mythic agent 检测、SCCMHunter 规则,甚至旨在识别 Bloodhound 收集行为的 LDAP 流量监控变体。

在本文中,我们将深入分析 Palo Alto 的 Cortex XDR 产品。我选择聚焦 Cortex 的原因是他们做了一些很酷的事情,看起来和玩起来都很有趣。

需要说明的是,每个主要 EDR 供应商也经历了完全相同的过程。在我打字的时候,我们已经把他们提取的规则、签名和模型放在了一台内部服务器上。

此外,我想事先声明,这篇文章不会是对 Cortex 规则或行为检测的完整拆解。我会提供足够的内容来向更广泛的受众展示影响,但不会在这里发布任何解密密钥或规则转储。相反,我们将聚焦于 LLM 测试框架的输出,提供足够的细节来展示 SOTA 模型在产生可操作绕过方面的有效性。

坦白说,这篇文章不是对任何单一 EDR 供应商的批评,这是对我们行业在绕过终端安全方面所处位置的一次现实检验。

测试框架

首先讨论用于执行分析的测试框架和模型。

在这次评审中,我从 OpenAI 的 GPT-5.4-Cyber 模型开始,并在 GPT-5.5-Cyber 模型可用后迁移到该模型。在之前的一篇博客文章中,我讨论了”Bishop”主机,这是我用于 24/7 运行 LLM 的专用主机之一。我在那台主机上拥有的测试框架之一,我称之为”Day Shift” (当然这意味着还有一个”Night Shift”框架,但那是另一篇文章的事了)。

Day Shift 本质上是一个 Ralph Wiggum 循环,开发者们因用它绕过 LLM 在目标完成前停止任务的限制而闻名。由于这只是一个循环,它当然也可以适配于一般的研究任务。

Day Shift 框架的核心由几个 markdown 文件组成:

  • REPORT.md

    – 一个 markdown 文件,供运行中的 agent 用于呈现供人工审查的关键发现。

  • STATE.md

    – 一个状态文件,每个 agent 可用于跟踪分析期间的关键事件。

  • CODEMAP.md

    – 允许每个 agent 存储对反汇编中有趣或关键区域的引用,帮助在后续 agent 迭代中提高速度。

  • AGENTS.md

    – 一组指令,告诉模型如何使用上述文件。

GPT-5.5-Cyber 被设置为在 Codex-CLI 中执行,而 Codex-CLI 本身在一个 Docker 容器中执行。为了在循环之间提供持久性,一个工作区被挂载到容器中,其中包含供每个循环使用的共享暂存空间。

可视化后,它看起来是这样的:

Day Shift 框架架构图

然后我将 Cortex 产品添加到工作区中,一个 Bash 脚本触发执行:

#!/usr/bin/env zsh

source ./codex-docker.sh

whiletrue;do
    [ -f "./STOP" ] &&break
    codex-dind exec --yolo "First review your AGENTS.md file. Your task is to understand what detections, hooks, mitigations, alerts, rules and models are implemented by Cortex. You should focus on understanding how they are loaded, how they are used, any obfuscation/encryption/compression added to raw files, and ultimately provide a method for extracting the raw content for human/redteam review. Additionally, if ML models are loaded by Cortex, documenting how the model is loaded, how the model works, what risk-ratings/features the model reviews, and potential test-code for interacting with the model in an isolated environment for testing. The Cortex product can be found in the ProgramFiles directory, and the ProgramData directory contains a copy of data taken from a running Cortex host. Your output must added to REPORT.md, and STATE.md must be used for your state output. Note: You are restricted from accessing any external servers, only use local files for analysis.".
    sleep 5
done

为了给 Codex 提供工具,我创建了一个基础服务器,通过 MCP 暴露 Binary Ninja:

Binary Ninja MCP 服务器截图

就这样!

没有多 agent 工作流。没有尝试设置一个分诊 agent 和一个专门 agent 来指挥一群小兵。没有,就是 Binary Ninja、Codex 和一个 while 循环。

运行这样的循环的优势在于帮助克服当前一代 LLM 在你给它一个开放式目标时表现出的一个局限。我发现 LLM 经常会过早退出任务,或者在使用所有获取的数据推进进度之前就停下来。

通过更新共享状态然后不断重启 agent,你可以清理上下文窗口,然后通过让 LLM 审查之前迭代的 markdown,agent 们经常能找到新的线索继续工作,直到最终通过 REPORT.md文件弹出发现。

实践中 LLM 驱动的 EDR 绕过是什么样的

有了我们这个看似简单的框架在运行,现在我们可以进入有趣的部分——发现。

进程内 DLL 审查

大多数 EDR 都有一个加载到进程中的用户态 DLL。它们的确切用途各不相同,但通常 DLL 用于丰富从用户态进程内获取的遥测数据,或者用于 hook 或监控进程中负责可疑活动的函数。

从生成的输出来看,这是 LLM 报告的第一件事,正确识别了 Cortex 加载到进程中的第一个用户态 DLL:

## 1. `cyinjct.dll` is the shared user-mode hook writer and process-start gate

Locations:
- `ProgramFiles/Traps/cyinjct.dll`
- `CyInject_InitializeRuntime` `0x180006140`
- `CyInject_InstallInlineHook` `0x18000b520`
- `CyInject_NtContinueShim` `0x180005ed0`
- `CyInject_NtTestAlertShim` `0x1800032c0`

Finding:
- Cortex installs early inline hooks on `LdrInitializeThunk`, `NtContinue`, `NtTestAlert`, and
  `KiUserApcDispatcher` and uses them to gate bootstrap and later feature shims.

Attacker value:
- Clean `ntdll` remapping, direct syscalls, manual mapping, or restoring patched prologues are the
  highest-value user-mode bypass points because they avoid the shared interception layer instead of
  fighting each downstream feature separately.

与用户态 DLL 注入和监控相关的发现清单还在继续,详细说明了每个 hook 的工作方式、负责的 DLL 以及带注释的 Binary Ninja 数据库、哪些内存区域受保护,以及哪些设备用于与 Cortex 驱动通信。

YARA 规则

接下来是 Cortex 产品中嵌入的 YARA 规则列表。虽然 EDR 产品在云端执行丰富化和行为模式匹配,但一些 EDR 也会将一组 YARA 规则下发到终端,用于静态签名的本地检测。

Cortex 就是这些 EDR 之一,GPT-5.5-Cyber 立即发现了这一点,提供了一个很好的概览:

## 7. YARA rules are fully recoverable offline from local files

Locations:
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/yara_plugin_config.lua`
- `yara_plugin.dll`
- `ProgramData/Cyvera/LocalSystem/Python/scripts/yara_data.json`
- `ProgramData/Cyvera/LocalSystem/YaraRulesetsCache/yara_rulesets_cache.bin`

Finding:
- `YaraSignatures_*.yara` files are stored locally with an `ENCY` wrapper, decrypted with
&nbsp; AES-128-ECB using embedded key prefix <REDACTED>, then inflated.
- Cached rulesets are also local and decryptable.
- `yara_data.json` provides a plaintext rule inventory with 6,358 `{id, action, ti_action}` entries.

Attacker value:
- The shipped YARA corpus, allow/block split, and cache contents can be audited and diffed offline
&nbsp; without Cortex backend access.

用于加密 YARA 规则的固定密钥已在报告中注明 (在本文中已编辑)。然而,GPT-5.5-Cyber 并没有止步于此。它还创建了相应的 Python 工具来解密每个文件,然后在后续循环中,提取了每组规则,提供了整齐组织的文件集:

YARA 规则解密文件列表

审查每组已解密的规则,我们发现了数千条明确定义的签名。

其中一个例子是针对我们自己的 Poseidon 植入体的以下载荷检测:

Poseidon 植入体检测规则截图

与 LLM 生成的任何内容一样,我们绝不应盲目信任输出。因此,为了证明提取是有效的,我们使用上述规则集触发了一个特定的告警:

YARA 规则验证告警截图

在这里,我们看到将字符串 github.com/MythicAgents追加到一个良性 PE 可执行文件的末尾,引发的告警确认了提取的 YARA 规则确实是有效的。

行为检测

除了静态 YARA 规则之外,EDR 当然还会监控行为异常来检测恶意活动。

同样,这被 LLM 在生成的报告条目引言中突出显示:

## 12. DSE/BIOC behavior is largely reconstructable offline from plaintext metadata and host overlays

Locations:
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/dse_rules_config.lua`
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/dse_modules.json`
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/dse_internals.json`
- `ProgramData/Cyvera/Logs/trapsd.log`

Finding:
- The host ships 9,350 DSE rules, including 4,209 BIOC rules.
- Local dynamic overlays disable 494 rules, yielding 8,856 effective DSE rules and 3,989 effective
&nbsp; BIOC rules on this host.
- `ChildProcessPattern` is built locally from `C01` tuples.
- `OpenProcess` is a primitive that flows into higher-level `passwordStealing` rules rather than a
&nbsp; one-rule detector.
- `Credential Gathering` maps directly to module id `2` (`passwordStealing`).

Attacker value:
- Plaintext metadata plus host disable flags are enough to reconstruct real behavioral coverage
&nbsp; without reversing the encrypted matcher pack first.

那是 9,350条 DSE 规则和 4,209条 BIOC 规则,以及一大堆子进程规则。

同样,这不仅仅是 LLM 引用的一个二进制工件。在审查结果时,我发现了一系列准备好的明文文件可供审查。

同样,我们需要信任但验证,所以我聚焦于几个检测来帮助证明 LLM 的发现。

对于子进程检测,在一个提取的 LUA 文件中有一大串路径以及要检测的可疑子进程和参数,例如:

LUA 子进程检测规则截图

拿上面的例子,我尝试通过用匹配所提供正则表达式的参数启动 cmd.exe来触发检测:

子进程检测触发截图

又是一组经过验证的规则。

我不会再举更多例子了,因为这篇文章的重点是展示 LLM 在生成可操作的绕过情报方面的出色表现,但希望到现在你能看到正在浮现的模式。

本地模型

LLM 非常擅长的一件酷事是从 EDR 中提取其他 ML 模型:

## 9. Local-analysis ML is a tree-ensemble scorer over engineered features, not a neural runtime

Locations:
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/ml_plugin.dll`
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/tlaplugin.dll`
- `ProgramData/Cyvera/LocalSystem/Download/contents/1776941162100/tlapluginv2.dll`
- `LocalAnalysisModel_*.dat`

Finding:
- The scorer walks serialized decision trees, accumulates leaf values, and applies &nbsp;1 / (exp(-sum) + 1) .
- Script models use &nbsp;tlapluginv2.dll ; PE/document paths use &nbsp;tlaplugin.dll .
- Representative active metadata recovered locally:
&nbsp; - PE &nbsp;7.1.1 : parser family &nbsp;1 , &nbsp;22977 &nbsp;features, threshold &nbsp;0.88
&nbsp; - PowerShell &nbsp;8.4.0 : type &nbsp;4 , &nbsp;26142 &nbsp;features, threshold &nbsp;0.65
&nbsp; - VBS &nbsp;8.6.0 : type &nbsp;5 , &nbsp;707 &nbsp;features, threshold &nbsp;0.27
&nbsp; - JS &nbsp;8.8.0 : type &nbsp;6 , &nbsp;9355 &nbsp;features, threshold &nbsp;0.75

Attacker value:
- Feature suppression and structural shaping matter more than raw-byte perturbation because the
&nbsp; models are explicit tree ensembles with stable, named extractors.

这并非独有,但看到 LLM 不仅提取了模型,还能为我们创建一个基于 Windows 的执行框架,说实话令人叹服:

ML 模型执行框架截图

从 Cortex 中总共提取了 7 个 ML 模型,并构建了相应的执行框架。

为了本文的目的,让我们审查 PE 模型来展示产出的内容。

该框架的工作方式是加载 tlaplugin.dllDLL,该 DLL 负责从目标 PE 文件中提取特征。然后 DLL 加载提供的模型并执行它,以生成一个分数和一个分类。

在两个样本上执行时,我们可以清楚地看到产生的差异:

PE 模型评分对比截图

CLP Rules

这可能是所有 EDR 分析中最棒的发现。不太是因为它比其他数据更有用,而更多是因为它太奇特了,选择这种特定技术背后一定有个故事!

## CLP Decryption Status

The .clp blobs are real encrypted content, not plaintext CLIPS source.

The corrected root cysvc.dll now yields a complete offline decrypt path for the shipped DSE CLP files:

&nbsp; 1. Read the 64-byte embedded secret from cysvc.dll:
&nbsp; &nbsp; • &nbsp;<REDACTED>
&nbsp; 2. Read k2u and v_s from dse_common.lua:
&nbsp; &nbsp; • &nbsp;k2u = <REDACTED>
&nbsp; &nbsp; • &nbsp;v_s = 9
&nbsp; 3. Derive the AES material exactly as the service does:
&nbsp; &nbsp; • key = full_secret[v_s:v_s+20] + k2u[:12]
&nbsp; &nbsp; • key = <REDACTED>
&nbsp; &nbsp; • iv = k2u[-16:]
&nbsp; &nbsp; • iv = <REDACTED>
&nbsp; 4. Decrypt the .clp blob with aes-256-cbc
&nbsp; 5. Strip PKCS#7&nbsp;padding
&nbsp; 6. Inflate the resulting gzip stream

&nbsp; That produces plaintext CLIPS source. Example:

&nbsp; • &nbsp;dse_rules_9_1_0_windows_encrypt.clp &nbsp;-> &nbsp;dse_rules_9_1_0_windows_encrypt.plain.clp
&nbsp; • decrypted plaintext begins with:
&nbsp; &nbsp; • &nbsp;(deftemplate internal.debug_build_timestamp (slot cid) (slot prio)
&nbsp; &nbsp; &nbsp; &nbsp;(slot timestamp) (slot build_timestamp))

LLM 识别并解密了这个巨大的数据块,产生了以下内容:

CLIPS 解密状态及明文规则截图

你可能会看着这个觉得这些规则看起来非常接近 LISP。你部分正确,它实际上是一种叫做 CLIPS 的语言,基于 LISP。

我会再写一篇博客文章专门讨论这个数据块,因为说实话,当我看到这个并在内部分享时,我们几个人都按捺不住兴奋。这是我第一次在任何地方看到这种特定的语言。由于没有 LISP 风格编程的经验,我做了我通常做的事——跑出去买了一本书,这样我就能学到我需要的一切。

Tweet screenshot

https://x.com/xpn/status/2050926150122111092

我再把一些有趣的内容留到以后,但为了让你了解这里包含了什么以及为什么它对绕过如此有价值:

Cortex 使用这条长规则来判断一个导出 SAM 配置单元的 reg save命令是否被允许。

CLIPS 规则块截图

例如,如果我们尝试执行类似 reg save HKLM\SAM out.bin的操作,我们可以看到这如期被检测到了:

reg save 告警截图

但是,如果我们从上述数据块中取一条白名单规则,比如命令 reg save HKLM\SAM C:coc\sam.hive并再次尝试:

reg save 绕过截图

这次我们能够顺利导出,没有任何本地检测。

模拟绕过

在结束之前,我想先展示一下我们在 GhostWorks 上正在试验的一种方法,用于帮助为目标环境产生可操作的绕过。

我们现在都看到了 LLM 在模拟已知系统方面有多高效。我们实际上可以利用这一点来创建一个完整的模拟环境,包括 C2 框架。

让我展示一下我的意图。如果我们从两个子 agent 开始:

  • EMULATE-WINDOWS.yaml

    – 一个设计用于模拟 Windows 主机以进行 API 调用的子 agent

  • EMULATE-EDR.yaml

    – 一个设计用于解析提取的 EDR 数据并产生详细说明任何检测结果的结果的子 agent

然后为了驱动模拟框架,我们在以下文件中定义指令:

  • AGENTS.md

    – 用于模拟我们”Upside Down” C2 框架的 agent 文件。

每个文件的完整内容可以在这里找到。

一旦我们启动,就会看到我们的虚拟提示符:

模拟虚拟提示符截图

如我们所见,尝试执行 ps会产生一个相当令人信服的进程列表:

模拟进程列表截图

现在来真正的测试,模拟环境能否不仅识别出上述检测 SAM 导出的行为规则,还能建议一个合适的绕过?

让我们聚焦于上面的注册表导出绕过。我们将尝试使用模拟的 shell命令来运行我们的 reg save HKLM\SAM C:\out.reg,Cortex 应该会检测到这个:

模拟绕过测试截图

令人惊叹。这当然还需要进一步的工作,但到目前为止的内部测试证明它非常有前景。

总结与反思

LLM 在自动化逆向工程方面表现出色,尤其是当模型连接到 Binary Ninja 或 Ghidra 等工具时。通过在循环中运行 LLM,你可以让多个实例在后台扫描终端安全产品,收集有效的绕过方法。

正如我们现在所了解的,这将引发一波终端安全规则转储、绕过方法集成到进攻性工具中的浪潮,坦白说,也会给依赖终端安全产品作为第一道防线的防御者带来一些痛苦。

LLM 辅助的绕过不再是理论上的。终端安全供应商显然需要考虑他们未来的策略。

但在你举手投降、放弃工作去当农民之前,请记住 EDR 仍然是任何组织安全策略中不可或缺的一部分。虽然本地规则和行为检测在短期内效果会减弱,但也值得记住,EDR 的价值只有一小部分来自主机检测,遥测数据不断从主机上传并远程分析。

但这清楚地强调了我们多年来一直在传达的信息:任何单一产品或解决方案只能构成你整体安全策略的一部分。检测是一个重要工具,但它必须与预防性控制结合使用,后者作为补充手段来隔离和消除环境中的攻击面。

虽然 EDR 逆向问题没有立竿见影的解决方案,但我希望通过更广泛地参与讨论,我们能更好地为即将到来的挑战做好准备。


免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:securitainment Adam Chester Adam Chester《用 LLM 驱动的分析加速 EDR 绕过》

评论:0   参与:  0