davidocuevas/agent-ioc-sweep
GitHub: davidocuevas/agent-ioc-sweep
一个只读的 IOC 排查工具,用于检测 AI 编程代理宿主机是否因 prompt injection 等攻击而被入侵或配置遭篡改。
Stars: 0 | Forks: 0
# agent-ioc-sweep
[](LICENSE)
[](#)
[](#)
[](#)
## 为什么需要这个工具
AI 编程代理(Claude Code、Cursor 等)会读取不受信任的内容——代码库、网页、工具输出、MCP 服务器——**并且可以运行 shell 命令、编辑文件和发起网络调用。** 这使得*宿主机*成为了攻击目标:单凭一次间接的 prompt injection,就能在你的用户权限下获取一个真实的 shell,进而访问环境中的所有机密信息。最近的攻击甚至会在运行时从 **DNS TXT record** 获取 payload,因此无论是代码审查、静态扫描工具还是代理本身,都无法察觉它。
关于如何*预防*此类问题的指南有很多,但却缺乏一个快速且真实的工具来**检查这种攻击是否已经发生。** 这正是本工具的用途。
## 它是什么(以及不是什么)
- ✅ 快速、**只读**的排查扫描 + 针对你代理的配置、hooks 和 MCP 服务器的**防篡改基线**。
- ✅ 呈现*常见*的 IOC,并带有严重级别(`OK` / `INFO` / `WARN` / `ALERT`)地将其标记出来,**供人工审查**。
- ❌ **不能**证明宿主机是纯净的。它**无法**可靠地捕捉到内核/驱动级 rootkit、纯内存驻留的植入物,或是那些在事后清理了自身痕迹的入侵。
- ⚠️ **循环依赖警告:** 如果你是在*已被入侵的*代理内部运行此工具,高级的植入物可能会篡改结果。请在受信任的 shell 中重新运行它。
## 检查内容
| # | 板块 | 检查目标 |
|---|---------|-------------------|
| 1 | **代理配置** | `settings.json` 中自动执行的 **hooks**(以及是否有 hook 会进行获取/执行操作),**MCP server** 定义(标记意外的 / REMOTE 服务器) |
| 2 | **代理操作历史** | 解析代理自身的记录,查找**它实际运行过的危险命令**——DNS-TXT 查询、`curl … \| bash`、反弹 shell、凭据文件访问——以及对非白名单主机的出站请求 |
| 3 | **宿主机持久化** | cron / 计划任务、systemd 用户单元 / Run keys、`authorized_keys`、shell-rc 及 PowerShell-profile 植入、自启动项、`/etc/hosts`、WMI 持久化 |
| 4 | **防护栏** | (Windows) Defender 排除项和实时保护状态 |
| 5 | **网络** | 已建立的出站连接 + 非回环监听器(时间点快照) |
| 6 | **防篡改基线** | 配置/hooks/keys/Run-keys 的 SHA-256 值;**与已保存的基线进行 diff 比对**以发现更改——包括运行时的 **TOCTOU / TXT-record 翻转** |
## 用法
**Linux / macOS**
```
chmod +x ioc-sweep.sh
./ioc-sweep.sh --baseline # once, on a host you trust — records the trusted state
./ioc-sweep.sh # anytime after — sweeps + diffs against the baseline
./ioc-sweep.sh --allow internal.corp,vpn.example # extra allowlisted outbound hosts
```
**Windows (PowerShell)**
```
.\ioc-sweep.ps1 -Baseline
.\ioc-sweep.ps1
.\ioc-sweep.ps1 -Allow "internal.corp,vpn.example"
```
退出代码:`0` = 常见位置未发现 IOC · `1` = 有 WARN(需审查)· `2` = 有 ALERT(需调查)。
**基线是信号最强的功能。** 在繁忙的开发机上,第 2 部分会产生很多噪音(你自己的工具安装、端口检查,甚至本工具之前的运行都会匹配风险模式)。防篡改基线能穿透这些噪音:在信任宿主机时快照一次,之后对 hook 脚本、MCP 配置或 Run key 的任何更改都会变成一个清晰的 `ALERT`——这正是你捕获在审查*之后*被翻转的 payload 的绝佳方式。
## 推荐工作流
1. 在设置/信任你的机器后,立即运行 `--baseline`。
2. 定期重新运行,特别是在**让代理处理不受信任的代码库之后**。
3. 调查每一个 `ALERT`。将 `WARN` 视为“确认这是否是我自己的操作”。`INFO` 提供上下文。
4. 为了获得真正的保障,也应手动重新运行关键检查(`crontab -l`、`cat ~/.ssh/authorized_keys`、`ss -tunp`)——不要仅仅依赖代理调用的工具。
## 减小波及范围(比任何扫描都重要)
- 在接触不受信任的代码时,**沙盒化**运行代理(container/VM,使用一次性凭据)。
- 代理环境中**不要保留长期有效的机密**;严格限制 API token 的权限范围。
- **实施出站控制(包括 DNS)**——可以同时阻止带外 payload 获取和 DNS 数据外泄。
- 保持**开启权限提示**,并仔细阅读执行的命令。
## 平台说明
- **Bash** 版本是参考实现(在 Linux 上测试过)。macOS 上基本可用;对于 `ss` 命令,请使用 `netstat` 替代。
- **PowerShell** 版本目前为 **v1 / 社区验证阶段**——基于 Bash 逻辑编写,尚未在每个 Windows 构建上经过实战检验。欢迎提交 PR。
- 目前主要针对 **Claude Code** 的路径(`~/.claude`)。Cursor/Windsurf/其他代理使用不同的配置位置——扩展覆盖范围是一个非常棒的首次 PR。
## 贡献
欢迎提交 PR:更多的持久化检查、其他代理的配置路径、更好的白名单、Windows 的边缘情况。请保持工具的**只读**特性,并诚实地说明其局限性。
## 许可证
MIT — 详见 `LICENSE`。
标签:AI合规, AI编程代理, AMSI绕过, Bash, IPv6, OpenCanary, PowerShell, 入侵痕迹排查, 威胁检测, 应用安全