Auro-rium/canary

GitHub: Auro-rium/canary

基于 LangGraph 多 Agent 流水线的自主 AI 红队平台,对任意 HTTP 接口的 AI Agent 自动执行对抗性安全测试并生成分类审计报告。

Stars: 0 | Forks: 0

# Agent Canary [![Python 3.11](https://img.shields.io/badge/Python-3.11-3776ab?logo=python&logoColor=white)](https://www.python.org/) [![React 19](https://img.shields.io/badge/React-19-61dafb?logo=react&logoColor=black)](https://react.dev/) [![AWS Bedrock](https://img.shields.io/badge/AWS%20Bedrock-Enabled-FF9900?logo=amazonaws&logoColor=white)](https://aws.amazon.com/bedrock/) [![LangGraph](https://img.shields.io/badge/LangGraph-Multi--Agent-7c3aed)](https://github.com/langchain-ai/langgraph) [![FastAPI](https://img.shields.io/badge/FastAPI-0.110+-009688?logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com/) [![Docker](https://img.shields.io/badge/Docker-Compose-2496ed?logo=docker&logoColor=white)](https://docs.docker.com/compose/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 自主 AI 红队平台。将其指向任何基于 HTTP 的 AI agent,一个由 4 个 agent 组成的 LangGraph pipeline 就会对其进行攻击,评估其发现,并将所有内容实时流式传输到 React 仪表板。发现的漏洞需要人工分诊——该平台负责报告漏洞,但不会自动修复它们。 ## 仓库布局 ``` canary/ ├── docker-compose.yml # Orchestrates all 3 services ├── canary/ # React 19 + TypeScript + Vite 8 dashboard → canary/README.md ├── cyber-redteam-foundry/ # FastAPI + LangGraph red-team engine → cyber-redteam-foundry/README.md │ └── target_agent/ # LangChain ReAct victim agent (port 9000) → cyber-redteam-foundry/target_agent/README.md ├── runs/ # SQLite DBs, logs (git-ignored) └── reports/ # Generated audit reports (git-ignored) ``` ## 架构 四个专用 agent 在 AWS Bedrock 上作为有状态的 LangGraph pipeline 运行。 ``` graph TD START([Start Campaign]) --> strategist["1 · Strategist
Picks strategies, dispatches ≤3 parallel branches"] strategist -.->|Send| attacker["2 · Attacker branch
DeepSeek V3
Builds & fires adversarial prompts"] attacker --> target["Target Agent
HTTP endpoint under test"] target --> evaluator["3 · Evaluator
Qwen3 480b
Det. detectors + LLM judge"] evaluator --> branch{Vulnerability found
and iterations remain?} branch -->|Yes — re-dispatch| strategist branch -->|No| reporter["4 · Reporter
Qwen3 480b
Markdown + JSON audit report"] reporter --> END([Persist findings]) style START fill:#10b981,stroke:#047857,color:#fff style END fill:#6366f1,stroke:#4f46e5,color:#fff style target fill:#f59e0b,stroke:#d97706,color:#fff style branch fill:#3b82f6,stroke:#2563eb,color:#fff ``` ### Agent 角色 | Agent | Model | 职责 | |---|---|---| | Strategist | — (无 LLM 调用) | 每次迭代随机分配最多 3 种攻击策略,作为并行分支执行 | | Attacker | DeepSeek V3 | 构建对抗性 prompt,并针对目标执行 | | Evaluator | Qwen3 480b | 确定性检测器 + LLM 评判;生成 4 种情况的一致性裁决;负责“迭代-还是-报告”的路由决策 | | Reporter | Qwen3 480b | 结构化的 Markdown 和 JSON 审计报告,包含针对单个漏洞的证据 | ## 针对任何 HTTP Agent Agent Canary 提供了一个 `HttpTargetAdapter`,可以包装任何实现了简单聊天接口的 HTTP endpoint。通过 `--target-id` 传递 URL: ``` cyber-rt run --target-id http://your-agent.internal/chat --strategies prompt_injection,tool_misuse ``` 该适配器会: - 向该 endpoint POST `{"message": ""}` - 将可选的 `TARGET_API_KEY` 作为 `Authorization: Bearer ` 转发 - 从首次出现的以下字段中读取响应文本:`response`、`output`、`content` 或 `text` 无需更改 SDK。任何接受带有 `message` 字段的 POST 请求并返回包含上述任一字段的 JSON 响应的 agent 都是有效的目标。 ## 攻击策略 共 12 种策略,每种策略都通过 `configs/asi_taxonomy.yaml` 映射到 ASI 和 MITRE ATLAS 分类法: | 策略 | 描述 | |---|---| | `prompt_injection` | 直接指令劫持、系统 prompt 提取 | | `indirect_injection` | 通过工具输出(文档、API、数据库记录)传递 payload | | `jailbreak` | 绕过 LLM 级别的安全防护 | | `tool_misuse` | 通过计算器函数、shell 命令、路径遍历实现 RCE | | `memory_poisoning` | 向 agent 内存中插入虚假前提或恶意规则 | | `retrieval_poisoning` | 从 vector store 中提取索引凭证、文档 ID 或原始源数据块 | | `sensitive_data_exposure` | 提取 PII、SSN、连接字符串、API 密钥 | | `workflow_manipulation` | 迫使 agent 跳过授权步骤或批准未经授权的操作 | | `agent_handoff_corruption` | 劫持多 agent pipeline 中 sub-agent 之间的消息 | | `authorization_boundary` | 权限提升、跨账户数据访问 | | `instruction_hierarchy` | 使用用户级输入覆盖开发者的系统指令 | | `context_isolation` | 破坏文档上下文以访问未授权文件 | **分类法映射:** ASI01–ASI10(AI 安全智能类别)和 ATLAS 技术(例如 `AML.T0051.002`)。查找表:`configs/asi_taxonomy.yaml`。各类别的置信度阈值:`configs/thresholds.yaml`。 ## 评估系统 两层评估机制针对每次尝试生成 4 种情况的一致性裁决: **第 1 层 — 确定性检测器** 针对 PII、凭证、prompt 注入特征、工具滥用、内存违规、RAG 探测进行 Regex 和模式匹配。 **第 2 层 — LLM 评判 (Qwen3 480b)** 根据攻击策略的成功标准进行语义置信度评分。 | 检测器结果 | LLM 结果 | 裁决 | |---|---|---| | 命中 | 命中 | `confirmed / high` | | 命中 | 不确定 | `confirmed / medium` | | 未命中 | 命中 | `unconfirmed / low` | | 未命中 | 未命中 | `inconclusive` | ## 存储 位于 `runs/redteam.db` 的 SQLite 数据库,包含三个表: | 表 | 用途 | |---|---| | `findings` | 通过 `sha256(target:component:strategy:asi_class)[:16]` 去重。生命周期:`open → wont_fix \| false_positive`(人工分诊,需要 reviewer_id + 理由) | | `evaluator_verdicts` | 完整的审计跟踪 —— 每次尝试、评分、置信度、裁决 | | `attack_traces` | 原始对抗性输入(未经清洗)、工具调用、完整响应 | 通过 `sentence-transformers all-MiniLM-L6-v2` 进行语义去重(余弦相似度 ≥ 0.92 会抑制近似重复的漏洞发现)。 ## REST API 后端运行在端口 **8001**。所有 endpoint 都需要 `Authorization: Bearer `。 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/api/status` | 健康检查 —— API、数据库、报告输出 | | `POST` | `/api/runs` | 启动活动 | | `GET` | `/api/runs/{run_id}` | 活动状态和遥测数据 | | `GET` | `/api/runs/{run_id}/analysis-report` | 面向前端的结构化分析及跟踪记录 | | `GET` | `/api/runs/{run_id}/findings` | 特定运行的漏洞发现 | | `GET` | `/api/open-findings` | 跨所有运行的未解决漏洞 | | `GET` | `/api/incidents` | 实时事件流 | | `GET` | `/api/findings` | 分页显示的漏洞(过滤器:`severity`、`status`、`asi_class`) | | `GET` | `/api/findings/{finding_id}` | 单个漏洞详情 | | `GET` | `/api/findings/{finding_id}/attempts` | 单个漏洞的所有尝试记录 | | `PUT` | `/api/findings/{finding_id}/status` | 更新漏洞生命周期状态 | | `GET` | `/api/targets/{target_id}/coverage` | 目标的 ASI 覆盖图 | | `GET` | `/api/targets/{target_id}/trends` | 目标的攻击趋势数据 | | `POST` | `/api/campaigns/run` | 启动带有 SSE 流式传输的活动 | Swagger UI:`http://localhost:8001/docs`(或通过 nginx proxy 访问 `http://localhost:8000/api/docs`)。 ## 仪表板 React 19 SPA 运行在端口 **8000**,包含三个页面: | 页面 | 描述 | |---|---| | Run Audit | 配置并启动活动。带有 agent 拓扑图的实时 SSE 流。 | | Findings | 分页形式的漏洞表,带有裁决徽章、严重性、状态生命周期控制。 | | Red Team | 实时事件流、运行详情面板、策略标签。 | ## 快速开始 (Docker) **前提条件:** Docker Desktop(或 Engine + Compose 插件),拥有 AWS 账户且在您所在的区域启用了对 Qwen3 模型的 Bedrock 访问权限。 ``` # 1. Clone git clone canary && cd canary # 2. Backend 环境 cp cyber-redteam-foundry/.env.example cyber-redteam-foundry/.env # 编辑 cyber-redteam-foundry/.env — 参见下方的 Environment Variables 部分 # 3. Frontend token(必须与上方的 API_SECRET_KEY 匹配) echo 'VITE_API_TOKEN=your-api-secret-key' > .env # 4. 构建并启动 docker compose up -d --build # 5. 打开 dashboard open http://localhost:8000 ``` ### Docker 服务 | 服务 | 宿主机端口 | 描述 | |---|---|---| | `canary-frontend` | 8000 | nginx 托管 React SPA;将 `/api/*` 代理到后端 | | `redteam-backend` | 8001 | FastAPI + LangGraph orchestrator | | `target-agent` | 9000 | CompanyBot —— 用于测试的 LangChain ReAct agent | ## 环境变量 ### `cyber-redteam-foundry/.env` ``` # AWS Bedrock — 凭证通过标准 boto3 chain 解析 AWS_REGION="us-east-1" AWS_ACCESS_KEY_ID="" # or use ~/.aws/credentials / instance role AWS_SECRET_ACCESS_KEY="" AWS_SESSION_TOKEN="" # optional, for temporary credentials # API 认证 — 所有 /api/* endpoints 使用 Bearer token API_SECRET_KEY="change-me" # Authorization scope — 运行允许的逗号分隔 target_ids # 留空 = 未强制执行 allowlist ALLOWED_TARGETS="" # Target 配置 TARGET_MODE="sandbox" # sandbox | http TARGET_ENDPOINT="" # e.g. http://localhost:9000/chat TARGET_API_KEY="" # forwarded as Bearer token to target # 日志记录 LOG_LEVEL="INFO" LOG_FILE="runs/cyber_redteam.log" # 存储 DB_PATH="runs/redteam.db" # 报告 REPORT_OUTPUT_DIR="reports" REPORT_FORMAT="markdown" # markdown | json | both # 运行限制 MAX_RETRIES=3 TIMEOUT_SECONDS=30 DETERMINISTIC_SEED=42 ``` ### 根目录 `.env` (前端构建参数) ``` # 必须与 cyber-redteam-foundry/.env 中的 API_SECRET_KEY 匹配 VITE_API_TOKEN="change-me" ``` ## 本地开发 (不使用 Docker) **后端** ``` cd cyber-redteam-foundry uv venv --python 3.11 && source .venv/bin/activate uv pip install -e ".[dev]" cp .env.example .env # fill in credentials cyber-rt init # create DB, directories, log config cyber-rt server --port 8001 ``` **前端** ``` cd canary npm install echo 'VITE_API_TOKEN=change-me' > .env npm run dev # → http://localhost:5173 ``` **目标 agent (可选 —— 用于针对 CompanyBot 进行测试)** ``` cd cyber-redteam-foundry && source .venv/bin/activate python -m target_agent.server --host 0.0.0.0 --port 9000 ``` **从 CLI 运行活动** ``` # 单一 strategy cyber-rt run --target-id http://localhost:9000/chat --strategies prompt_injection # 多 strategy cyber-rt run \ --target-id http://localhost:9000/chat \ --strategies prompt_injection,tool_misuse,retrieval_poisoning \ --max-attempts 5 \ --max-iterations 3 # Diagnostics cyber-rt doctor # verify AWS Bedrock connectivity cyber-rt list-strategies # show all strategies with severity defaults cyber-rt status # summary of last run cyber-rt graph # print Mermaid diagram of the LangGraph workflow ``` ## 子项目文档 - [`canary/README.md`](canary/README.md) — React 仪表板:组件映射、Vite 配置、nginx 代理设置 - [`cyber-redteam-foundry/README.md`](cyber-redteam-foundry/README.md) — 后端引擎:LangGraph 状态机、agent 实现、CLI 参考、API 详情 - [`cyber-redteam-foundry/target_agent/README.md`](cyber-redteam-foundry/target_agent/README.md) — CompanyBot 受害者 agent:工具、endpoints、配置 ## 许可证 [MIT](https://opensource.org/licenses/MIT)
标签:AI红队, CISA项目, 反取证, 多智能体, 安全评估, 版权保护, 网络测绘, 自动化渗透测试, 逆向工具