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, 威胁检测, 安全规则引擎, 无线安全, 请求拦截, 逆向工具