ikaruscareer/SafeAI
GitHub: ikaruscareer/SafeAI
面向 AI Agent 应用的静态代码风险分析器,在部署前离线检测框架能力暴露、Prompt 注入及 MCP 配置风险。
Stars: 7 | Forks: 4
# SafeAI — 静态 AI 能力与风险分析器
[](https://github.com/ikaruscareer/SafeAI/actions/workflows/ci.yml)
[](https://scorecard.dev/viewer/?uri=github.com/ikaruscareer/SafeAI)
[](https://safeai-analyzer.ikaruscareer.com)
**SafeAI** 是一款静态分析工具,用于扫描 AI 应用源代码中的安全风险、能力暴露和治理缺陷。它完全在离线环境下运行,绝不执行 agent 或调用 LLM,并可集成到 CI/CD pipeline 中。
## 为什么选择 SafeAI?
传统的应用安全工具(SAST、SCA、IaC 扫描)并非为 AI agent 系统设计。AI 应用引入了新的风险面:
- **Prompt injection** — 不可信的输入流入模型 prompt
- **Agent 工具滥用** — 拥有文件系统、shell 或数据库访问权限的 agent
- **能力蔓延** — 框架在缺乏可见性的情况下暴露各项能力
- **MCP 暴露** — Model Context Protocol endpoint 和工具
- **治理缺陷** — 缺失身份验证、权限控制、审计跟踪
SafeAI 弥补了这一空白,通过在部署前对处于静止状态的框架、agent、工具、能力和 MCP 集成进行分析。
SafeAI 在不执行 AI 应用的前提下对其进行分析,帮助开发者在软件生命周期的早期发现能力、识别潜在风险并完善治理。
SafeAI 的设计初衷是保持轻量级、可解释且由社区驱动,旨在成为 AI 能力和风险分析的开放基石。
在安全生命周期中,SafeAI 位于 runtime 防护和红队工具之前。它在代码提交时扫描 agent 源代码——在你将 agent 部署到预发布环境之前,检测特定于框架的能力、MCP 配置错误以及 prompt injection 模式。它不替代 runtime 工具(Microsoft AGT)、评估框架(LangSmith、DeepEval)或红队扫描器(Promptfoo、Garak)。而是作为它们的补充:先在代码中发现风险,然后在 runtime 中进行验证。
## 核心功能
| 功能 | 描述 |
|---------|-------------|
| **框架检测** | 检测并解析 15 种 AI agent 框架 |
| **能力发现** | 识别文件系统、shell、网络、数据库等能力 |
| **AI 风险分析** | 将发现结果归类为 7 个风险类别,并带有加权信任评分 |
| **Prompt 风险分析** | 检测 injection 模式、分隔符问题、系统泄露、角色覆盖 |
| **工具分析** | 识别绑定到 agent 的工具及其风险特征 |
| **记忆分析** | 检测 agent 工作流中的 memory/checkpointer 使用情况 |
| **MCP 分析** | 发现 MCP 服务器、客户端、工具、资源,并验证配置 |
| **数据泄露检测** | 标记硬编码的 secret、token 和 API key |
| **CI/CD 集成** | 包含 SARIF 输出、退出代码、GitHub Actions 工作流 |
| **多格式报告** | 终端摘要、JSON、SARIF 2.1.0、HTML |
| **跨文件分析** | Import graph、符号解析及项目图 |
| **置信度仲裁解析** | 每个文件使用多个解析器,并结合来源进行合并 |
## 工作原理
```
Source Code
│
▼
Framework Detection — identifies AI frameworks via imports, configs, deps
│
▼
Static Analysis — AST parsing, capability patterns, dependency scanning
│
▼
Capability Mapping — maps framework objects to normalized risk categories
│
▼
Risk Rules — applies rule engine with configurable severity and weights
│
▼
Trust Score — deterministic category-weighted scoring from 0–100
│
▼
Reports — terminal, JSON, SARIF, HTML
```
## 支持的框架
| 框架 | 检测 | 发现 | 能力分析 | 风险分析 | 状态 |
|-----------|-----------|-----------|-------------------|---------------|--------|
| LangGraph | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| CrewAI | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| LangChain | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Semantic Kernel | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| OpenAI Agents SDK | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Microsoft Agent Framework | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Azure AI Foundry | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Bedrock Agent | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Claude Code | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Google ADK | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Mastra | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Haystack | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| LlamaIndex | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Dify | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| n8n | ✔ | 部分 | 最小 | 最小 | 早期预览 |
### 框架支持详情
- **LangGraph** — 检测 `StateGraph`、`add_edge`、`bind_tools`、节点、模型
- **CrewAI** — 检测 `Agent`、`Task`、工具、模型
- **LangChain** — 检测 `AgentExecutor`、`Chain`、`Tool`、`PromptTemplate`、模型
- **Semantic Kernel** — 检测 `Kernel.invoke`、插件、函数、技能、memory
- **OpenAI Agents SDK** — 检测 `Agent`、工具、handoff、MCP 引用
- **Microsoft Agent Framework** — 检测 `AgentClient`、工具、工作流、Azure 模型
- **Azure AI Foundry** — 检测带有 Azure 资源的 YAML 配置
- **Bedrock Agent** — 检测带有 Bedrock 资源的 JSON 配置
- **Claude Code** — 检测 `CLAUDE.md` 和 `.claude/` 配置引用
- **Google ADK** — 检测 ADK agent、工作流、工具和模型模式
- **Mastra** — 检测 Mastra agent、工作流、工具和模型引用
- **Haystack** — 检测 Haystack pipeline、agent、工具和 retriever
- **LlamaIndex** — 检测 agent、工具、索引和模型引用
- **Dify** — 检测 Dify 工作流和 agent 配置文件
- **n8n** — 检测 n8n 工作流导出、节点和连接
上述七个框架属于早期预览适配器。目前提供检测和基础组件发现功能,但其特定于框架的分析尚未达到与成熟适配器同等的水平。
## 支持的能力
SafeAI 在框架对象级别和通过备选 regex 模式对能力进行指纹识别。每项能力都包含证据、置信度得分、解析后的定义以及来源信息。
| 能力 | 类别 | 风险影响 |
|------------|----------|-------------|
| Shell 执行 | Shell | 命令注入、主机被攻陷 |
| 文件系统访问 | 文件系统 | 数据泄露、文件篡改 |
| 浏览器自动化 | 浏览器 | 基于 UI 的攻击、凭证窃取 |
| 规划 / 编排 | 规划器 | 自主决策链风险 |
| Agent 委托 | 委托 | 未受控的子 agent 权限 |
| 记忆 / 检查点 | 记忆 | 跨会话数据保留 |
| RAG / 检索 | RAG | 文档泄露、通过文档进行 prompt injection |
| GitHub 集成 | GitHub | 仓库访问权限、secret 泄露 |
| Slack 集成 | Slack | 频道监控、消息注入 |
| 电子邮件集成 | 电子邮件 | 网络钓鱼、数据泄露 |
| 数据库访问 | 数据库 | SQL 注入、数据泄露 |
| 云服务 | 云 | 云资源滥用、成本激增 |
| 外部 API | 外部 API | 第三方数据泄露 |
| MCP 服务 | MCP | 暴露的 endpoint、未授权工具访问 |
| 人工审批 | 人工审批 | 绕过审批风险 |
| 多 Agent | 多 Agent | 基于委托的权限提升 |
## 安装
### 前提条件
- Python 3.11 或 3.12
- PyYAML(用于解析 YAML 配置)
### 从源码安装
```
git clone https://github.com/ikaruscareer/SafeAI.git
cd SafeAI
pip install -e .
```
### 安装开发依赖
```
pip install -e ".[dev]"
```
## 命令行用法
```
python -m safeai scan [options]
```
### 选项
| 选项 | 默认值 | 描述 |
|--------|---------|-------------|
| `directory` | 必需 | 要扫描的路径 |
| `--sarif` | `report.sarif` | SARIF 输出路径(留空则跳过) |
| `--json` | — | JSON 输出路径 |
| `--html` | — | HTML 报告输出路径 |
| `--rules` | 内置 | 自定义规则目录 |
| `--fail-on` | `critical` | 退出代码阈值:`critical`、`high`、`medium` |
| `--verbose` | — | 启用详细输出 |
### 退出代码
| 代码 | 条件 |
|------|-----------|
| 0 | 未发现达到或超过阈值的结果 |
| 1 | 检测到达到或超过阈值的结果 |
## 输出示例
### 终端
```
SafeAI Scan Summary
Files: 12
Frameworks: langgraph, crewai
MCP assets: 2
Overall AI Risk Score: 73
critical: 1
high: 3
medium: 5
Findings:
[critical] app.py:10 - Untrusted input interpolated into prompt
[high] app.py:22 - Capability detected: shell_execution
[high] mcp.json:1 - MCP configuration does not define authentication
```
### 示例:带有 MCP 的 LangGraph agent
```
{
"Framework": "LangGraph",
"Capabilities": ["Planner", "Memory", "Filesystem", "MCP"],
"Risk Score": 73,
"Findings": 9,
"Critical": 1,
"High": 3
}
```
## CI/CD 集成
### GitHub Actions
`.github/workflows/ci.yml` 中包含了一个工作流。要在你的项目中使用:
```
jobs:
safeai-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install SafeAI
run: |
pip install -e .
- name: Run scan
run: |
python -m safeai scan . --sarif results.sarif --html report.html
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
```
### GitLab CI
```
safeai-scan:
image: python:3.12
script:
- pip install -e .
- safeai scan . --sarif results.sarif --html report.html
artifacts:
paths:
- results.sarif
- report.html
```
### Azure DevOps
```
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
import subprocess
subprocess.run(["pip", "install", "-e", "."])
subprocess.run(["safeai", "scan", ".", "--sarif", "$(Build.ArtifactStagingDirectory)/results.sarif"])
```
### SARIF 集成
SafeAI 输出 SARIF 2.1.0 格式,与 GitHub Advanced Security、Azure DevOps 及其他兼容 SARIF 的工具无缝对接。
## 路线图
请查看 [ROADMAP.md](./ROADMAP.md) 获取涵盖所有 5 个阶段的详细路线图:
- **阶段 1** — 静态 AI 风险扫描器 (OSS) — *正在积极开发中*
- **阶段 1.5** — AI 组件安全
- **阶段 2** — AI 安全测试(未来可选)
- **阶段 3** — 测试包
- **阶段 4** — 企业版(商业化)
- **阶段 5** — 社区情报
## 许可证
SafeAI 基于 Apache 2.0 许可证发布。
## 为什么选择 SafeAI?
传统的应用安全工具(SAST、SCA、IaC 扫描)并非为 AI agent 系统设计。AI 应用引入了新的风险面:
- **Prompt injection** — 不可信的输入流入模型 prompt
- **Agent 工具滥用** — 拥有文件系统、shell 或数据库访问权限的 agent
- **能力蔓延** — 框架在缺乏可见性的情况下暴露各项能力
- **MCP 暴露** — Model Context Protocol endpoint 和工具
- **治理缺陷** — 缺失身份验证、权限控制、审计跟踪
SafeAI 弥补了这一空白,通过在部署前对处于静止状态的框架、agent、工具、能力和 MCP 集成进行分析。
SafeAI 在不执行 AI 应用的前提下对其进行分析,帮助开发者在软件生命周期的早期发现能力、识别潜在风险并完善治理。
SafeAI 的设计初衷是保持轻量级、可解释且由社区驱动,旨在成为 AI 能力和风险分析的开放基石。
在安全生命周期中,SafeAI 位于 runtime 防护和红队工具之前。它在代码提交时扫描 agent 源代码——在你将 agent 部署到预发布环境之前,检测特定于框架的能力、MCP 配置错误以及 prompt injection 模式。它不替代 runtime 工具(Microsoft AGT)、评估框架(LangSmith、DeepEval)或红队扫描器(Promptfoo、Garak)。而是作为它们的补充:先在代码中发现风险,然后在 runtime 中进行验证。
## 核心功能
| 功能 | 描述 |
|---------|-------------|
| **框架检测** | 检测并解析 15 种 AI agent 框架 |
| **能力发现** | 识别文件系统、shell、网络、数据库等能力 |
| **AI 风险分析** | 将发现结果归类为 7 个风险类别,并带有加权信任评分 |
| **Prompt 风险分析** | 检测 injection 模式、分隔符问题、系统泄露、角色覆盖 |
| **工具分析** | 识别绑定到 agent 的工具及其风险特征 |
| **记忆分析** | 检测 agent 工作流中的 memory/checkpointer 使用情况 |
| **MCP 分析** | 发现 MCP 服务器、客户端、工具、资源,并验证配置 |
| **数据泄露检测** | 标记硬编码的 secret、token 和 API key |
| **CI/CD 集成** | 包含 SARIF 输出、退出代码、GitHub Actions 工作流 |
| **多格式报告** | 终端摘要、JSON、SARIF 2.1.0、HTML |
| **跨文件分析** | Import graph、符号解析及项目图 |
| **置信度仲裁解析** | 每个文件使用多个解析器,并结合来源进行合并 |
## 工作原理
```
Source Code
│
▼
Framework Detection — identifies AI frameworks via imports, configs, deps
│
▼
Static Analysis — AST parsing, capability patterns, dependency scanning
│
▼
Capability Mapping — maps framework objects to normalized risk categories
│
▼
Risk Rules — applies rule engine with configurable severity and weights
│
▼
Trust Score — deterministic category-weighted scoring from 0–100
│
▼
Reports — terminal, JSON, SARIF, HTML
```
## 支持的框架
| 框架 | 检测 | 发现 | 能力分析 | 风险分析 | 状态 |
|-----------|-----------|-----------|-------------------|---------------|--------|
| LangGraph | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| CrewAI | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| LangChain | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Semantic Kernel | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| OpenAI Agents SDK | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Microsoft Agent Framework | ✔ | 部分 | 部分 | 部分 | 早期预览 |
| Azure AI Foundry | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Bedrock Agent | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Claude Code | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| Google ADK | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Mastra | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Haystack | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| LlamaIndex | ✔ | 部分 | 最小 | 最小 | 早期预览 |
| Dify | ✔ | 最小 | 最小 | 最小 | 早期预览 |
| n8n | ✔ | 部分 | 最小 | 最小 | 早期预览 |
### 框架支持详情
- **LangGraph** — 检测 `StateGraph`、`add_edge`、`bind_tools`、节点、模型
- **CrewAI** — 检测 `Agent`、`Task`、工具、模型
- **LangChain** — 检测 `AgentExecutor`、`Chain`、`Tool`、`PromptTemplate`、模型
- **Semantic Kernel** — 检测 `Kernel.invoke`、插件、函数、技能、memory
- **OpenAI Agents SDK** — 检测 `Agent`、工具、handoff、MCP 引用
- **Microsoft Agent Framework** — 检测 `AgentClient`、工具、工作流、Azure 模型
- **Azure AI Foundry** — 检测带有 Azure 资源的 YAML 配置
- **Bedrock Agent** — 检测带有 Bedrock 资源的 JSON 配置
- **Claude Code** — 检测 `CLAUDE.md` 和 `.claude/` 配置引用
- **Google ADK** — 检测 ADK agent、工作流、工具和模型模式
- **Mastra** — 检测 Mastra agent、工作流、工具和模型引用
- **Haystack** — 检测 Haystack pipeline、agent、工具和 retriever
- **LlamaIndex** — 检测 agent、工具、索引和模型引用
- **Dify** — 检测 Dify 工作流和 agent 配置文件
- **n8n** — 检测 n8n 工作流导出、节点和连接
上述七个框架属于早期预览适配器。目前提供检测和基础组件发现功能,但其特定于框架的分析尚未达到与成熟适配器同等的水平。
## 支持的能力
SafeAI 在框架对象级别和通过备选 regex 模式对能力进行指纹识别。每项能力都包含证据、置信度得分、解析后的定义以及来源信息。
| 能力 | 类别 | 风险影响 |
|------------|----------|-------------|
| Shell 执行 | Shell | 命令注入、主机被攻陷 |
| 文件系统访问 | 文件系统 | 数据泄露、文件篡改 |
| 浏览器自动化 | 浏览器 | 基于 UI 的攻击、凭证窃取 |
| 规划 / 编排 | 规划器 | 自主决策链风险 |
| Agent 委托 | 委托 | 未受控的子 agent 权限 |
| 记忆 / 检查点 | 记忆 | 跨会话数据保留 |
| RAG / 检索 | RAG | 文档泄露、通过文档进行 prompt injection |
| GitHub 集成 | GitHub | 仓库访问权限、secret 泄露 |
| Slack 集成 | Slack | 频道监控、消息注入 |
| 电子邮件集成 | 电子邮件 | 网络钓鱼、数据泄露 |
| 数据库访问 | 数据库 | SQL 注入、数据泄露 |
| 云服务 | 云 | 云资源滥用、成本激增 |
| 外部 API | 外部 API | 第三方数据泄露 |
| MCP 服务 | MCP | 暴露的 endpoint、未授权工具访问 |
| 人工审批 | 人工审批 | 绕过审批风险 |
| 多 Agent | 多 Agent | 基于委托的权限提升 |
## 安装
### 前提条件
- Python 3.11 或 3.12
- PyYAML(用于解析 YAML 配置)
### 从源码安装
```
git clone https://github.com/ikaruscareer/SafeAI.git
cd SafeAI
pip install -e .
```
### 安装开发依赖
```
pip install -e ".[dev]"
```
## 命令行用法
```
python -m safeai scan
## 许可证
SafeAI 基于 Apache 2.0 许可证发布。标签:AI安全, Chat Copilot, DevSecOps, LNA, 上游代理, 人工智能, 安全合规, 恶意代码分类, 用户模式Hook绕过, 网络代理, 自动化payload嵌入, 逆向工具, 错误基检测, 静态代码分析