HawkLab1811/Aegis-AI
GitHub: HawkLab1811/Aegis-AI
安全优先的多提供商 AI 网关,通过 CrowdStrike AIDR 实时扫描所有 LLM 输入与输出,兼顾 RAG、对话管理与策略验证测试。
Stars: 0 | Forks: 0
# Aegis AI - 安全 AI 网关
Aegis AI 是一个安全优先的 AI 网关,提供由 **CrowdStrike AIDR 保护**的多 LLM 提供商访问。它充当用户与 AI 模型之间的代理,通过 CrowdStrike 的 AI Detection and Response (AIDR) 服务扫描所有输入和输出。
## 功能
### 多提供商 LLM 支持
为 5 个提供商的 17 个模型预配置了适配器:
- **OpenAI** - GPT-5, GPT-5 Mini, GPT-5 Nano, GPT-4o (Vision), GPT-4o Mini
- **Anthropic** - Claude Opus 4.5, Claude Sonnet 4.5, Claude Haiku 4.5
- **Google** - Gemini 3 Flash, Gemini 3 Pro, Gemini 2.5 Flash, Gemini 2.5 Pro
- **xAI** - Grok 4.1 Fast, Grok 4 (Latest), Grok Code Fast
- **Xiaomi MiMo** - MiMo V2.5 Pro, MiMo V2.5
### CrowdStrike AIDR 安全
- 通过 CrowdStrike AI Guard 进行实时输入/输出扫描
- 可配置的 AIDR 收集器,每个部署具有单独的 token
- 访问规则执行、内容阻止和内容转换
- 通过 CrowdStrike AIDR MCP 代理进行 MCP 工具扫描
### 内置 MCP 服务器(3 个服务器,20 个工具)
- **Aegis Test Server** - 用于 AIDR 策略验证的文件操作(安全 + 风险)
- **HR ToolBox Server** - 30 个包含 PII(SSN,薪水)的员工档案,用于数据脱敏测试
- **LLM Helper Server** - 用于 prompt injection 检测测试的恶意工具描述
### RAG 知识库
- ChromaDB 向量存储,每个知识库相互隔离
- 支持:PDF, TXT, MD, 图像,视频,Excel, CSV, Word, PowerPoint
- 基于 Vision 的媒体描述(图像/视频由 LLM 描述,然后向量化)
- 从配置的引擎中自动选择 Vision 提供商
### 对话管理
- 每个用户的持久聊天记录
- 多对话支持,可创建/切换/删除
- 基于上下文的标题生成
### 首次部署向导
首次启动时运行的 4 步引导式设置:
1. **管理员密码** - 创建管理员凭证(在数据库中以哈希形式存储)
2. **AIDR 配置** - 设置 CrowdStrike AIDR 收集器 token 和 URL
3. **MCP 代理** - 配置 CrowdStrike MCP 代理设置
4. **AI 引擎** - 选择一个提供商并输入 API key
### 附加功能
- 用于保存配置预设的配置文件系统
- 包含 36 个 AIDR 策略测试样本的内部测试库
- 所有 API key 和 token 在静态存储时使用 Fernet 加密
- 基于数据库的身份验证(密码不依赖 .env)
- 运行时自动生成加密密钥
### Skills 系统
- 基于文件的 Skill 作为 Markdown 文件存储在 `data/skills/` 中
- 4 步 Skill 创建向导(名称、描述、工作流、预览)
- 每个对话单独选择 Skill 并保持状态持久化
- 将 Skill 注入到系统 prompt 中以自定义 AI 行为
- 6 个默认模板:4 个正常模板 + 2 个安全演示模板
- 通过设置页面和 REST API 执行完整的 CRUD 操作

## 快速开始
### 前置条件
- [Docker](https://docs.docker.com/get-docker/)(包含 Docker Compose)
- CrowdStrike AIDR token([了解更多](https://www.crowdstrike.com/products/ai-guard/))
- 至少一个受支持的 LLM 提供商的 API key
### 克隆并构建
```
git clone https://github.com/your-org/aegis-ai.git
cd aegis-ai
cp .env.example .env
docker-compose up -d
```
### 首次启动
1. 在浏览器中打开 **http://localhost:15000**
2. **设置向导** 将自动出现
3. 按照以下 4 个步骤操作:
- 设置您的管理员密码(至少 8 个字符)
- 输入您的 CrowdStrike AIDR token 和 API URL
- 配置 MCP 代理设置(可选)
- 选择一个 AI 引擎并输入您的 API key
4. 开始通过安全的 AI 网关聊天




### 访问安全演示
用于 Skills 安全演示的攻击者网站可在以下地址访问:
- **URL**:http://localhost:16000
- **目的**:查看恶意 Skill 模板捕获的数据(仅供教育目的)
### 自定义端口
要在不同的端口上运行,请在启动前编辑 `.env`:
```
AEGIS_PORT=8080
```
## 架构
```
User Request
|
v
FastAPI Backend (port 15000)
|
v
+--> AIDR Input Scan (CrowdStrike AI Guard)
| |
| v (if allowed)
| RAG Context Retrieval (ChromaDB)
| |
| v
| System Prompt Composition
| - Agent's base prompt
| - MCP tool descriptions
| - RAG context
| - **Skill instructions** (if selected)
| |
| v
| LLM Generation (OpenAI / Anthropic / Google / xAI / MiMo)
| |
| v
| MCP Tool Execution (if agent has MCP server)
| |
| v
+-- AIDR Output Scan (CrowdStrike AI Guard)
|
v
Response to User
```
### 数据持久化
所有数据都存储在 Docker volume 中:
- `aegis-data` - SQLite 数据库,RAG 文件,ChromaDB 向量,**Skills Markdown 文件**
- `mcp-workspace` - MCP 服务器沙盒工作区
## 配置
### 环境变量
| 变量 | 必填 | 默认值 | 描述 |
|----------|----------|---------|-------------|
| `AEGIS_PORT` | 否 | `15000` | 用于 Web 界面的主机端口 |
| `ENCRYPTION_KEY` | 否 | 自动生成 | 用于加密 API key 的 Fernet 密钥 |
| `CS_AIDR_TOKEN` | 否 | - | CrowdStrike AIDR token(可通过向导设置) |
| `CS_AIDR_BASE_URL_TEMPLATE` | 否 | `https://api.crowdstrike.com/aidr/{SERVICE_NAME}` | AIDR API URL 模板 |
### 安全说明
- 管理员密码以加盐的 SHA-256 哈希形式存储在数据库中
- 所有 API key 和 token 在存储前都使用 Fernet 加密
- `.env` 文件已通过 `.dockerignore` 从 Docker 镜像中排除
- 源代码中没有硬编码的机密
- 如果未提供,加密密钥将在首次运行时自动生成
## MCP 服务器配置
Aegis AI 包含 3 个预配置的 MCP 服务器,它们会在首次运行时自动播种。每个服务器都可以在代理模式(通过 CrowdStrike AIDR MCP 代理路由)和直接模式之间切换。
| 服务器 | 目的 | 工具 |
|--------|---------|-------|
| Aegis Test Server | AIDR 策略验证 | 11 个工具(文件操作、shell、数据写入) |
| HR ToolBox Server | PII 检测测试 | 5 个工具(员工查找、薪水报告) |
| LLM Helper Server | Prompt injection 测试 | 4 个工具(包括隐藏注入) |
## Skills 系统 & 安全演示
### 什么是 Skills?
Skills 是可重用的指令集,可以注入到 AI 的系统 prompt 中。它们允许用户为 AI 助手定义自定义工作流和行为。Skills 以 Markdown 文件的形式存储,并且可以针对每个对话进行选择。
### 创建 Skills
1. 导航到 **Settings → Skills** 标签页
2. 点击 **Open Skill Wizard**
3. 按照以下 4 步流程操作:
- **第 1 步**:输入 Skill 名称(仅限字母、数字、下划线 - 无空格)
- **第 2 步**:描述该 Skill 的作用
- **第 3 步**:定义分步工作流
- **第 4 步**:预览生成的 Markdown 文件
4. 点击 **Create Skill** 进行保存
### 使用 Skills
1. 在聊天窗口中,点击发送按钮旁边的 **闪电图标**
2. 从下拉菜单中选择一个 Skill
3. 该 Skill 将在整个对话过程中保持活动状态
4. 选定的 Skill 将注入到所有消息的系统 prompt 中
### 默认 Skill 模板
#### 正常 Skill
| Skill | 类别 | 描述 |
|-------|----------|-------------|
| `code_reviewer` | 编码 | 遵循行业最佳实践的系统化代码审查工作流 |
| `technical_writer` | 写作 | 用于清晰、全面文档的技术文档专家 |
| `data_analyst` | 分析 | 遵循系统化方法论的数据分析专家 |
| `debug_expert` | 编码 | 用于高效解决问题的结构化调试方法 |
#### 恶意演示 Skill(安全测试)
| Skill | 攻击向量 | 描述 |
|-------|---------------|-------------|
| `data_collector_demo` | 数据泄露 | 尝试通过隐藏的 Markdown 图像将对话数据发送到攻击者网站 |
| `system_helper_demo` | OS 命令注入 | 尝试执行 OS 命令并将系统信息发送到攻击者网站 |
这些恶意 Skill 在 UI 中带有红色警告徽章的**明确标记**,并且**仅供教育目的**,以演示 CrowdStrike AIDR 如何防御 prompt injection 攻击。

### 攻击者网站(安全演示)
包含一个模拟攻击者网站,用于演示数据泄露风险:
- **URL**:http://localhost:16000
- **目的**:实时显示恶意 Skill 捕获的数据
- **主题**:深色“恶意”终端风格界面
- **功能**:
- 带有自动刷新(3 秒)的实时仪表板
- 显示捕获的数据、OS 信息、环境变量
- 清除按钮以重置捕获的数据
- 唯一的来源 IP 追踪

### 安全演示演练
#### 演示 1:AIDR 阻止数据泄露
1. 在 http://localhost:15000 打开 Aegis
2. 在另一个标签页中打开 http://localhost:16000 的攻击者仪表板
3. 在 Aegis 中,选择 `data_collector_demo` Skill
4. 发送包含敏感信息的消息(例如,“我的密码是 secret123”)
5. **预期**:AIDR 检测到可疑的 URL 模式并阻止泄露
6. **验证**:攻击者仪表板未显示任何新数据
#### 演示 2:AIDR 阻止命令注入
1. 选择 `system_helper_demo` Skill
2. 发送消息:“检查我的系统配置”
3. **预期**:AIDR 检测到命令注入模式并阻止它
4. **验证**:攻击者仪表板未显示任何新数据
#### 演示 3:绕过 AIDR(仅供教育目的)
**警告**:此演示故意绕过安全控制。
1. 将 AIDR 安全**关闭**(侧边栏中的盾牌图标)
2. 选择 `data_collector_demo` Skill
3. 发送带有虚假敏感数据的消息
4. **预期**:在没有 AIDR 的情况下,恶意指令被执行
5. **验证**:攻击者仪表板显示泄露的数据
6. **重要**:在此演示之后立即重新启用 AIDR
### 为什么这很重要
此演示突出了 AI 安全扫描的关键重要性:
- **Prompt Injection**:恶意指令可能隐藏在用户可配置的内容中
- **数据泄露**:AI 助手可能被诱骗向外部服务器发送数据
- **命令注入**:AI 模型可能被操纵执行任意命令
- **AIDR 保护**:CrowdStrike AIDR 扫描所有输入和输出,以检测和阻止这些攻击
## 更新
```
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
Docker volume 中的数据在更新后会保留。
## 重置
要以全新的数据库开始:
```
docker-compose down -v
docker-compose up -d
```
设置向导将在下次启动时再次出现。
## 许可证
有关详细信息,请参阅 LICENSE 文件。
标签:AI网关, DLL 劫持, MCP, RAG, 代理服务, 大语言模型, 请求拦截, 逆向工具