sudan94/agentaudit

GitHub: sudan94/agentaudit

agentaudit 是一个只读、离线、CI 原生的安全扫描器,用于在 AI agent 执行前检测技能文件、规则文件和 MCP 配置中的 prompt injection、隐藏指令和危险权限。

Stars: 0 | Forks: 0

# 🛡 agentaudit **你审计你的依赖。现在来审计你的 agent 指令。** 一个针对 AI agent 技能、规则文件和 MCP 配置的只读安全扫描器。 它检测 prompt injection、隐藏指令和危险权限 *在* 你的 agent 执行它们*之前*。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/1d/1d494e8e0d31b078d30d4187a990f06e7c891c9e4fc1b3499c6d8dedecded045.svg)](https://github.com/sudan94/agentaudit/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/agentaudit-scanner.svg)](https://pypi.org/project/agentaudit-scanner/) [![Python](https://img.shields.io/pypi/pyversions/agentaudit-scanner.svg)](https://pypi.org/project/agentaudit-scanner/) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) ![Scanned by agentaudit](https://img.shields.io/badge/scanned%20by-agentaudit-blue.svg)
## 原因 你的 AI agent 会执行你安装的每一个文件 —— `SKILL.md`、`CLAUDE.md`、 `.cursorrules`、`.mcp.json`。这些是**可执行指令**,但与 代码不同,没人审查它们。恶意指令可能是不可见的:隐藏在 HTML 注释、零宽度 unicode 或 base64 中。单个被投毒的 skill 可以告诉 你的 agent 窃取 `.env` 文件、运行破坏性命令,或向你隐藏其自身 行为。**agentaudit 会优先读取这些文件。** ## 快速开始 ``` pip install agentaudit-scanner agentaudit scan . ``` 使用 [uv](https://github.com/astral-sh/uv) 进行零安装: ``` uvx --from agentaudit-scanner agentaudit scan . ``` ``` 🛡 agentaudit v0.1.0 — scanned 14 file(s) in 0.3s HIGH SKILL.md:47 Hidden instruction inside HTML comment HIGH .mcp.json Server "helper-tools" combines filesystem read + network access MEDIUM CLAUDE.md:12 Instruction to act silently or without confirmation LOW .cursorrules:3 Base64-encoded block (2.1 KB) — cannot verify contents 2 high · 1 medium · 1 low → exit code 1 ``` - **只读。** 从不修改任何内容。可在任何地方安全运行。 - **零配置。** 即开即用,无需设置。 - **默认离线。** 启发式引擎无需网络和 API key。 - **最小依赖。** `typer`、`rich`、`pyyaml`。该扫描器不会带来供应链风险。 - **原生 CI 支持。** 有意义的退出代码,JSON/SARIF 输出。 ## 它能捕获什么 | 类别 | 示例 | |---|---| | **隐藏内容** | HTML 注释中的指令;零宽度与 bidi(Trojan Source)unicode;同形字;不可见的 CSS | | **Prompt injection** | “忽略所有之前的指令”;角色劫持;“不要告诉用户”;条件触发器 | | **数据窃取** | `.env`/`.ssh`/凭据与 `curl`/`POST`/webhook 结合;URL 缩短器,原始 IP,punycode | | **危险命令** | `curl … \| sh`、`rm -rf`、反向 shell、base64-to-shell、cron/注册表持久化 | | **MCP 权限过大** | 结合了文件系统 + 网络的服务器;未指定版本的 `npx @latest`;内联密钥;明文 HTTP endpoint | | **Hooks** | 运行 shell 命令的 `.claude/settings.json` hooks(总是报告;危险的标记为 HIGH) | | **混淆** | 解码 base64/hex 数据块并进行一层深度的重新扫描 | 运行 `agentaudit rules` 查看每条检测规则,或运行 `agentaudit rules --explain AA-INJ-003` 查看详情。 ## GitHub Action ``` - uses: sudan94/agentaudit@v0.1.1 with: path: . fail-on: high ``` 或直接在任何 workflow 中运行它: ``` - run: pipx run --spec agentaudit-scanner agentaudit scan . --format sarif -o agentaudit.sarif - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: agentaudit.sarif ``` ## `--ai` 深度扫描(可选) 默认关闭。在启发式引擎之上添加 LLM 审计器: ``` export ANTHROPIC_API_KEY=sk-... pip install 'agentaudit-scanner[ai]' agentaudit scan . --ai ``` 被扫描的内容被视为**不受信任的数据** —— 包裹在分隔符中, 绝不作为指令执行,并且只接受严格验证过的 JSON。 ## 配置 在你的项目根目录下放置一个 `.agentaudit.yml`: ``` fail_on: high ignore_paths: - docs/examples/** ignore_rules: - AA-CMD-002 allow: - rule: AA-INJ-001 path: SKILL.md reason: "False positive — documented in #12" ``` 或者直接在发现的上一行进行内联抑制: ``` ``` ## 编写自定义规则 一个检测规则大约是 10 行 YAML —— [查看指南](docs/writing-rules.md): ``` - id: AA-INJ-100 title: Instruction to disable logging severity: high category: injection applies_to: [markdown] patterns: - regex: '(?i)\b(disable|turn off|suppress)\s+(logging|audit|telemetry)\b' ``` 使用 `--rules ./my-rules/` 或配置中的 `custom_rules_dir` 让 agentaudit 指向它。 **提交规则的 PR 是最好的贡献方式** —— 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 对比 包扫描器审计你安装的代码。**agentaudit 审计你安装的*指令*** —— 也就是你的 agent 实际上会服从的那一层。 ## 路线图 - [x] v0.1 — 启发式引擎,规则包,美观的 JSON 报告器,配置,CI - [ ] v0.2 — `--ai` 深度扫描,SARIF + GitHub Action,`scan --installed`,`scan ` - [ ] v0.3 — 规则包,pre-commit hook,watch 模式,rule-docs 自动生成 ## 许可证 MIT —— 参见 [LICENSE](LICENSE)。请通过 [SECURITY.md](SECURITY.md) 报告绕过方法。
标签:AI代理, DNS 反向解析, GraphQL安全矩阵, LNA, Python, Redis利用, 云安全监控, 安全扫描器, 恶意代码分类, 无后门, 逆向工具, 静态分析