cftcai/ai-skill-scanner
GitHub: cftcai/ai-skill-scanner
针对公开 AI agent 技能的独立静态安全扫描器,检测代码执行、数据泄露、prompt injection 及供应链风险。
Stars: 1 | Forks: 0
# ai-skill-scanner
用于公开可用或已下载 AI agent 技能的独立安全扫描器。
**Web 界面**:https://github.com/cftcai/ai-skill-scanner-web
## GitHub Actions
我们的自动化由 GitHub Actions 驱动。所有工作流都位于 `.github/workflows/` 中。
**CI 与质量**
🚀 **ci.yml** — Linting • 自扫描 • Docker 构建 • 每周定期扫描
[](https://github.com/cftcai/ai-skill-scanner/actions/workflows/ci.yml)
**部署**
📦 **pages.yml** (ai-skill-scanner-web) — 部署静态站点到 GitHub Pages
**安全示例**
🔐 **oidc-demo.yml** — OIDC token 交换示例(无长期有效的密钥,演示了 audience claims)
**测试**
🧪 通过 `test_malicious_skill_fixture` 使用规范的 **mock malicious_skill.py** 夹具
这是针对高严重性检测(危险执行、数据泄露、prompt injection、代码混淆)的参考测试用例。
**遵循的最佳实践**
- 最小权限
- OIDC 示例中没有长期有效的密钥
- 轻量级静态工作流
查看所有工作流 → [Actions 标签页](https://github.com/cftcai/ai-skill-scanner/actions)
## 存在原因
公开的 AI 技能(Python 模块、SKILL.md prompt 文件、工具定义)代表了一个不断增长的攻击面。恶意或受损的技能可能会执行任意代码、通过 callback 泄露 agent 内存或环境变量、投毒 prompt,或者通过文件系统更改进行持久化。此工具提供了一个快速、本地、独立的防御前线。
## 快速开始
直接克隆并运行:
```
git clone https://github.com/cftcai/ai-skill-scanner.git
cd ai-skill-scanner
python scanner.py --help
```
扫描公开的技能仓库:
```
python scanner.py --github-url https://github.com/example/vulnerable-skill-repo
```
扫描本地路径:
```
python scanner.py --path /path/to/your/skills --output my_report.json
```
作为命令安装(推荐):
```
pip install -e .
ai-skill-scanner --path .
```
为 GitHub 代码扫描生成 SARIF(在 Security 标签页中显示结果):
```
ai-skill-scanner --path . --format sarif --output ai-skill-scanner.sarif
```
然后使用 `github/codeql-action/upload-sarif` 上传(参见 `.github/workflows/ci.yml`)。严重程度映射到 SARIF 级别:high → error,medium → warning,low → note。
## Docker(推荐用于隔离)
```
docker build -t ai-skill-scanner .
docker run --rm -v $(pwd)/target-skill:/scan:ro ai-skill-scanner --path /scan
```
对于 GitHub URL 扫描,容器需要临时的网络访问权限才能执行 git clone。
## 检测范围
扫描器跨以下向量执行静态分析:
- 危险的 Python 执行(eval、exec、subprocess、pickle 反序列化)
- 网络数据泄露和 callback 模式(向未加入白名单的主机发送请求、密钥泄露)
- SKILL.md 和 markdown 定义中的 prompt injection 和覆盖指令
- 高熵混淆字符串和解码链
- requirements.txt、setup.py 和工作流文件中的供应链指标
- 文件持久化尝试
查看 JSON 报告以获取每个检测项的严重程度(high/medium/low)、行号、代码片段和建议。
## 架构
- 纯标准库实现。运行时无外部依赖。
- AST 遍历,用于精确的 Python 调用检测。
- Regex + Shannon 熵,用于模式和混淆发现。
- 对技能定义文件(SKILL.md)进行特殊处理。
- 临时目录克隆,并带有自动清理功能。
- 结构化的 JSON 输出,可供 CI/CD 摄取或进一步自动化。
该设计遵循现代 SAST 工具和最新 AI agent 安全扫描器中使用的纵深防御原则。它特意设计为静态的。在生产环境中使用时,请结合容器运行时控制和可选的动态追踪。
## 签名更新
扫描器支持可选的 `--update-signatures` 标志。如果存在该标志,它将使用 git 浅克隆从 ai-skill-signatures 仓库中提取最新模式,并存入本地 signatures/ 缓存中。git pull 更新模型保持了扫描器二进制文件的稳定性,同时允许检测规则独立演进。
示例:
```
ai-skill-scanner --path /my/skills --update-signatures --output report.json
```
有关清单版本比较逻辑,请参见 ai-skill-signatures 仓库。
## GitHub Actions 集成
添加以下工作流以在 pull request 或定时任务上扫描技能:
```
name: Skill Security Scan
on: [pull_request, schedule: [{cron: '0 3 * * 1'}]]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run ai-skill-scanner
run: |
pip install -e .
ai-skill-scanner --path . --output scan-report.json
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: skill-scan-report
path: scan-report.json
```
## 限制与建议
- 仅限静态分析。行为确认需要沙盒执行。
- 可能会对合法的动态或元编程代码产生误报。始终仔细甄别高严重性项目。
- 在扫描期间不会执行任何技能代码或联系外部服务。
- 为获得最大安全性,请在带有只读挂载和 seccomp 的 Docker 中运行。
通过添加自定义 regex 规则、集成 YARA 签名以及使用本地 LLM 裁判进行语义分析来扩展该工具。
## 许可证
MIT 许可证。参见 LICENSE 文件。
## 安全策略
通过仓库安全建议私下报告安全问题。不要为漏洞公开 issue。
标签:LNA, 安全专业人员, 请求拦截, 逆向工具