JacobRHess/agentdetect

GitHub: JacobRHess/agentdetect

一组专为检测自主 LLM agent 入侵行为而设计的 Splunk 行为检测规则,基于 agent 操作节奏而非特定 payload 进行告警,每条规则均附带攻击与良性样本并通过 CI 持续验证。

Stars: 0 | Forks: 0

# agentdetect 用于检测入侵者为自主 LLM agent 的检测规则,并附带证明其能被触发的 遥测数据。 每个人都在默默准备的威胁模型:你网络中的操作者不是人,也不是脚本, 而是一个通过工具调用循环驱动 shell 的语言模型。它能在几秒钟内完成主机 枚举,精准读取关键文件,适应各种错误,并将公共模型 API 作为其 命令通道。agentdetect 是一组专为该操作者的*节奏*而非特定 payload 调整的 小型检测规则包,每条规则都附带了两个 trace(追踪记录)——一个必须触发它的 攻击样本,和一个绝对不能触发它的良性样本—— 并且 CI 会在每次提交时通过真实的 Splunk 重放这两个样本。 ## 为什么这与“封锁 LLM API”不同 将模型 API 加入白名单并不等于检测。真正有价值的信号不是某台主机与 `api.anthropic.com` 进行了通信;而是同一个会话在与模型通信的*同时在每次调用之间对主机执行了操作*, 如此反复,其节奏之快是人类无法输入的,其停顿方式也是普通脚本所没有的。agentdetect 将两者区分开来: - **Anchors**(Sigma)——廉价、易伪造的信号:与模型 API 的通信、 SDK user agent、凭据文件读取、对实例元数据服务的访问。 有用,但很脆弱,因此被特意如此标记。 - **Behavioral flagships**(原生 SPL)——当对手自行开发 SDK、伪造 user agent 或轮换基础设施时依然有效的信号, 因为它们的关键在于 agent 的*操作方式*: - **agent-loop-interleave** ——在一个会话中不断重复:模型调用、主机操作、模型调用、主机操作。 这是工具调用循环的标志,也是良性 AI 功能绝对不会做的事情(良性 AI 会调用模型;但随后不会去运行 `cat /etc/passwd`)。 - **agent-command-cadence** ——非交互式命令爆发,且各次命令之间隔着推理延迟造成的间隙:比人类更快、更有规律, 但比 shell 脚本慢得多。 - **agent-retry-storm** ——在每次失败后的几秒钟内不断微调并重新运行同一个工具,一次又一次。 这是机器的自我纠正,而不是人类的放弃。 - **recon-breadth-burst** ——单个会话在两分钟内横扫六个或更多不同的发现类别,因为模型已经知晓每一个路径。 - **sensitive-read-llm-exfil** ——读取凭据后紧接着向模型 API 发送一个巨大的 POST 请求。这是披着 prompt 外衣的数据窃取。 ## 是遥测数据,不是科幻小说 每个 fixture 都采用一个小巧的 schema(`src/agentdetect/schema.py`)编写, 该 schema 精确地模拟了任何 Linux EDR、auditd pipeline 或 Sysmon-for-Linux 安装已经发出的两种事件:`process_creation` 和 `network_connection`。这里没有任何东西 需要你当前尚未收集的数据源。创新之处在于规则寻找的内容,而不在于数据本身。 ``` detections.yaml (single source of truth) │ ┌─────────────┴─────────────┐ rules/**/*.yml rules/**/*.spl (Sigma) (native Splunk) │ │ Sigma → SPL run as-is └─────────────┬─────────────┘ Splunk (CI service) index this fixture's events, run the search │ alert trace → must fire benign trace → must stay silent ``` ## 实时循环:由真实 agent 生成的 fixture 此仓库中的攻击 fixture 均为手工编写,因此 CI 是免费且 确定性的。但该项目的重点在于,它们并非必须如此。 `agentdetect emulate` 会将一个目标交给真实的 Claude agent,为其提供一个 连接到一次性 Docker 容器的单一 `run_shell` 工具,该容器装有 **合成**的蜜罐数据(虚假的云密钥、虚假的元数据服务、诱饵 SSH 密钥),并将每次工具调用及其时间记录到同一个 schema 中。 攻击者不是被脚本化的;由自主模型决定运行什么,其实际的 操作节奏成为了检测规则所测试的 trace。 这条路径需要 Anthropic API 密钥和 Docker,仅在 sandbox 中运行, 且从不在 CI 中执行。有关安全模型,请参阅 [docs/LIVE-LOOP.md](docs/LIVE-LOOP.md)。 ``` uv sync --extra emulate export ANTHROPIC_API_KEY=... agentdetect emulate --list agentdetect emulate recon-and-loot --out trace.json ``` ## 覆盖范围 跨越 agent 杀伤链(kill chain)的十项检测,每项技术都映射到 MITRE ATT&CK。完整且始终保持最新状态的列表位于 [docs/ATTACK.md](docs/ATTACK.md), 它是从清单生成的,而非手工编辑,并在 CI 中进行 diff 以防止发生偏移。 ## 运行说明 ``` uv sync --extra dev uv run agentdetect list # every detection, rule kind, ATT&CK mapping uv run agentdetect validate # every rule is well-formed (offline gate) uv run agentdetect convert agent-loop-interleave # see the SPL a detection runs docker compose -f lab/docker-compose.yml up -d # local Splunk uv run pytest -m replay # replay every fixture through Splunk uv run agentdetect report --out report.html ``` ## 目录结构 ``` detections.yaml single source of truth: id, rule, ATT&CK, fixtures rules/process/ Sigma rules over process_creation events rules/network/ Sigma rules over network_connection events rules/correlation/ native Splunk searches for the behavioral detections fixtures/ attack + benign traces, one pair per detection src/agentdetect/ schema, manifest, Sigma converter, Splunk client, CLI emulate/ the sandbox container + honeypot for the live agent loop lab/ docker-compose for a local Splunk docs/ generated ATT&CK coverage + the live-loop runbook ``` ## License MIT。详见 [LICENSE](LICENSE)。
标签:AI安全, AMSI绕过, Chat Copilot, LLM代理检测, SIEM规则, StruQ, 威胁检测, 安全规则引擎, 无线安全, 请求拦截, 逆向工具