agentverus/agentverus-scanner

GitHub: agentverus/agentverus-scanner

一款面向 AI Agent 技能文件的专项安全扫描器,可检测提示词注入、数据窃取等 11 类 ASST 威胁并生成结构化信任报告。

Stars: 5 | Forks: 1

# AgentVerus Scanner 面向 AI Agent 技能(`SKILL.md` 及其变体)的开源安全与行为信任扫描器。 [![npm version](https://img.shields.io/npm/v/agentverus-scanner)](https://www.npmjs.com/package/agentverus-scanner) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) [![GitHub Release](https://img.shields.io/github/v/release/agentverus/agentverus-scanner)](https://github.com/agentverus/agentverus-scanner/releases/latest)

AgentVerus Scanner — detecting hidden threats in AI agent skill files

## 功能简介 扫描 Agent 技能文件并生成结构化的信任报告,涵盖以下内容: - 权限分析(文件系统/网络/执行访问) - 能力合约检查(声明的权限与推断的行为是否一致) - 注入检测(Prompt 注入、指令覆盖、中继) - 依赖分析(外部 URL、可疑下载) - 行为风险评分(数据窃取、权限提升、隐蔽模式) - 代码安全分析(危险代码块、eval/exec、数据窃取模式) - **工作区配置篡改检测**(试图修改 `AGENTS.md`、`TOOLS.md`、`CLAUDE.md` 或 `.claude/**` 的行为) - 内容分析(混淆、隐藏、社会工程学) ## 工作区配置篡改(信任边界升级) Agent 技能可能会试图通过指示(或嵌入代码)修改工作区信任边界文件,从而**持久化地改变你的 Agent 行为**,这些文件包括: - `AGENTS.md`、`TOOLS.md`、`CLAUDE.md` - `.claude/**` 这被视为高风险行为,因为它们可以静默地禁用安全规则、扩大工具访问权限,或注入长期存在的恶意指令。 **扫描器行为:** - 在**行为**类别中,标记*写入/编辑*这些文件的文本指令。 - 在**代码安全**类别中,标记写入这些文件的嵌入代码块。 - 任何配置篡改的发现结果**会将徽章等级上限设为 `suspicious`**(若存在严重发现则仍为 `rejected`)。 ## 安装 ``` npm install --save-dev agentverus-scanner ``` ## 命令行使用

AgentVerus Scanner CLI output

``` # 扫描本地 skill 文件 npx agentverus scan ./SKILL.md # 扫描目录(递归查找 SKILL.md / SKILLS.md) npx agentverus scan . # 从 URL 扫描(GitHub blob/tree/repo URLs + ClawHub pages 会被标准化) npx agentverus scan https://github.com/user/repo/blob/main/SKILL.md npx agentverus scan https://clawhub.ai// # JSON 输出 npx agentverus scan ./SKILL.md --json # 用于 GitHub Code Scanning 的 SARIF 输出 npx agentverus scan . --sarif agentverus-scanner.sarif --fail-on-severity high # 用于供应链审查的 CycloneDX SBOM 输出 npx agentverus scan ./SKILL.md --sbom agentverus-scanner.sbom.json ``` ### 检查 ClawHub 技能 通过 Slug 检查 ClawHub 注册表中的任何技能——下载、扫描并打印信任报告: ``` # 检查单个 skill npx agentverus check web-search # 检查多个 skill npx agentverus check git-commit docker-build # JSON 输出 npx agentverus check web-search --json ``` ### 注册表扫描 批量扫描整个注册表,生成报告并构建静态仪表板: ``` # 扫描 registry 中的所有 skill(4,929 个 skill,50x 并发约 100 秒) npx agentverus registry scan --concurrency 50 # 生成 markdown 分析报告 npx agentverus registry report # 生成交互式 HTML 仪表板 npx agentverus registry site --title "ClawHub Security Analysis" ``` 注册表扫描选项: - `--urls ` — 技能 URL 列表的路径(默认:`data/skill-urls.txt`) - `--out ` — 输出目录(默认:`data/scan-results`) - `--concurrency ` — 并行下载数(默认:25) - `--limit ` — 仅扫描前 N 个技能(用于测试) 退出代码: - `0`:扫描通过 - `1`:扫描完成但策略检查失败 - `2`:一个或多个目标扫描失败(结果不完整) ## GitHub Action 使用捆绑的 Action 在 PR 中扫描 `SKILL.md` 并将 SARIF 上传至 GitHub Code Scanning: ``` name: Skill Trust Scan on: pull_request: push: branches: [main] jobs: scan: runs-on: ubuntu-latest permissions: contents: read security-events: write steps: - uses: actions/checkout@v4 # Pin to a release tag or SHA for supply-chain safety and reproducibility. - uses: agentverus/agentverus-scanner/actions/scan-skill@v0.3.0 with: target: . fail_on_severity: high upload_sarif: true ``` ## 信任等级徽章 (GitHub Pages) 生成**仓库级别**和**单个技能**的信任等级徽章,格式为 [Shields.io endpoint](https://shields.io/endpoint) JSON: ``` # 写入: # - badges/repo-certified.json # - badges/repo-certified-pct.json # - badges/skills/.json npx agentverus scan . --badges ``` 徽章含义: - `repo-certified.json` — 仅当仓库中*所有*技能均为 `CERTIFIED`(且无扫描失败)时才为 **CERTIFIED**。否则为 **NOT CERTIFIED**。 - `repo-certified-pct.json` — `CERTIFIED` 技能的百分比(例如 `Certified 83%`)。 - `skills/.json` — 单个技能徽章(权威)。`slug` 源自被扫描文件的路径(例如 `skills/web-search/SKILL.md` → `skills--web-search--SKILL.md.json`)。 嵌入到你的 README 中(示例 URL 假设你将 `badges/` 目录部署为 **GitHub Pages 站点根目录**): ``` ![AgentVerus Repo Certified](https://img.shields.io/endpoint?url=https://.github.io//repo-certified.json) ![AgentVerus Certified %](https://img.shields.io/endpoint?url=https://.github.io//repo-certified-pct.json) ``` 单个技能徽章: ``` ![AgentVerus Skill](https://img.shields.io/endpoint?url=https://.github.io//skills/.json) ``` 要通过 GitHub Pages 发布,请在推送到 `main` 分支时运行徽章生成,并部署 `badges/` 目录: ``` name: Publish AgentVerus Badges on: push: branches: [main] workflow_dispatch: permissions: contents: read pages: write id-token: write jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npx agentverus scan . --badges - uses: actions/upload-pages-artifact@v3 with: path: badges deploy: needs: build runs-on: ubuntu-latest steps: - uses: actions/deploy-pages@v4 ``` ## 能力合约 AgentVerus 将**声明的意图**与**推断的运行时行为**进行对比。 - 声明来源: - Frontmatter 中的权限声明(例如 `permissions: - network: "..."`) - 框架权限列表(`permissions: [network_restricted, read]`) - 推断来源: - 声明的工具/权限 - 指令/内容中的行为模式 - 扫描期间提取的依赖指标 如果推断出高风险行为但未声明,扫描器会添加明确的 `PERM-CONTRACT-MISSING-*` 发现结果。这使得声明偏差在审查和 CI 过程中可见。 ## SBOM 输出 `--sbom` 会写入一个 CycloneDX 1.5 JSON 文档,包含: - 扫描器元数据和版本 - 每个目标的技能组件 - 从扫描证据中提取的依赖指标组件 - 技能 → 依赖关系 这旨在为治理和发布检查提供供应链**基础工作**。 ## MCP Server (Agent 集成) 如需通过 MCP 进行 Agent/框架集成,请使用配套包: ``` npx -y agentverus-scanner-mcp ``` ## 编程方式使用 ``` import { buildSbomDocument, scanSkill, scanSkillFromUrl } from "agentverus-scanner"; const report1 = await scanSkill("# My Skill\\n..."); console.log(report1.overall, report1.badge); const report2 = await scanSkillFromUrl("https://raw.githubusercontent.com/user/repo/main/SKILL.md", { timeout: 30_000, retries: 2, retryDelayMs: 750 }); console.log(report2.metadata.skillFormat, report2.findings.length); const sbom = buildSbomDocument([{ target: "./SKILL.md", report: report1 }]); console.log(sbom.bomFormat, sbom.components.length); ``` ## 信任评分 总分是各类别分数的加权平均值: | Category | Weight | |----------|--------| | Permissions | 20% | | Injection | 25% | | Dependencies | 15% | | Behavioral | 15% | | Content | 10% | | Code Safety | 15% | ## 徽章等级 徽章等级规则: - 任何 **critical**(严重)发现:`REJECTED` - 分数 `< 50`:`REJECTED` - 分数 `50–74`:`SUSPICIOUS` - 分数 `75–89` 且 `<= 2` 个高危发现:`CONDITIONAL` - 分数 `>= 90` 且 `0` 个高危发现:`CERTIFIED` ## ASST 分类法 发现结果引用了 AgentVerus 技能安全分类法: - **ASST-01**: 指令注入 - **ASST-02**: 数据窃取 - **ASST-03**: 权限提升 - **ASST-04**: 依赖劫持 - **ASST-05**: 凭证窃取 - **ASST-06**: Prompt 注入中继 - **ASST-07**: 欺骗性功能 - **ASST-08**: 过度权限 - **ASST-09**: 缺失安全边界 - **ASST-10**: 混淆 - **ASST-11**: 触发器操纵 ## 开发 ``` pnpm install pnpm typecheck pnpm test pnpm lint # 构建 action bundle(写入 actions/scan-skill/dist/index.cjs) pnpm build:actions ``` ## 贡献 我们欢迎各种贡献!请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解以下准则: - 报告 Bug 和误报 - 添加或改进检测规则 - 编写测试和固定数据 - Pull Request 流程 ## 更新日志 查看 [CHANGELOG.md](./CHANGELOG.md) 获取完整的变更历史。 ## 许可证 MIT — 详见 [LICENSE.md](./LICENSE.md)。
标签:AI代理, AI基础设施安全, AI安全, ASST威胁, Chat Copilot, DevSecOps, DNS 反向解析, DNS 解析, IP 地址批量处理, MITM代理, NPM包, OSV-Scalibr, RASP, WebSocket, 上游代理, 云安全监控, 依赖分析, 信任边界, 开源安全工具, 技能验证, 提示词注入检测, 数据渗漏, 文档结构分析, 权限分析, 混淆检测, 社会工程学检测, 自动化攻击, 逆向工程平台, 配置篡改检测, 防病毒, 隐蔽威胁, 静态分析, 风险评分