engineeralialmasry/cedrus

GitHub: engineeralialmasry/cedrus

CEDRUS 是一个 Docker 化的企业级 AI 治理 Agent,帮助组织在红队与紫队网络安全演练前完成范围界定、风险评估、控制验证和 GRC 报告生成。

Stars: 0 | Forks: 0

# CEDRUS — 企业级红队与紫队治理 Agent 一个 Docker 化的、特定领域的 AI Agent,可帮助大型企业安全地规划、管理和验证红队和紫队演练。CEDRUS 将演练前的治理、风险评分、安全控制验证和 GRC 报告整合到一个单一的可解释决策支持系统中。 **当前版本:V17-8** — 这是一个注重性能、正确性和可观测性的版本。在本地 Ollama 7B 模型上运行。有关此版本的完整详细信息,请参阅 `OPTIMIZATION_REPORT.md` 和 `CHANGELOG_V17-8.md`。 ## 目录 - [概述](#overview) - [V17-8 中的新特性](#whats-new-in-v17-8) - [系统架构](#system-architecture) - [领域工具](#domain-tools) - [Agent 工作流](#agent-workflow) - [记忆与状态](#memory-and-state) - [数据层](#data-layer) - [安全、伦理与 GRC 边界](#safety-ethics-and-grc-boundaries) - [API 端点](#api-endpoints) - [入门指南](#getting-started) - [配置](#configuration) - [可观测性](#observability) - [测试](#testing) - [项目结构](#project-structure) - [局限性](#limitations) - [AI 开发工具披露](#ai-development-tools-disclosure) ## 概述 大型组织定期通过红队和紫队演练来测试其安全态势。如果在执行前没有明确定义范围、审批、交战规则、业务约束和安全控制,这些活动将带来真正的操作风险。在大多数企业中,技术测试、治理审批、风险评估和控制验证存在于由不同团队负责的独立文档中,从而导致责任分散。 CEDRUS 接收有关演练的结构化信息(范围、目标系统、业务关键性、现有控制、审批、约束),并生成带有依据的交战风险等级和执行/暂停决策、所需的审批矩阵、交战规则和安全限制、紫队演练计划、安全控制验证矩阵、带有补救路线图的 GRC 就绪管理报告,以及保存的、可审计的演练请求。 领域知识规模较小且基于规则,因此存储在结构化的本地文件和 SQLite 中,并通过确定性的工具进行访问,而不是使用 RAG pipeline。这使得系统更准确、更易于测试,并且完全可解释。 ## V17-8 中的新特性 此版本专注于延迟、正确性和可观测性,同时保留 Ollama 7B 模型并维持所有行为和输出质量。 性能:YAML/JSON 知识文件现在在启动时仅解析一次并进行缓存,而不是在每个请求时重新读取;移除了响应路径中冗余的知识库搜索;并添加了答案流式传输功能,以便在模型仍在生成时渲染出最初的单词。 可观测性:每请求监控现在会记录总耗时、router、LLM 和工具时间,以及 LLM 和工具调用计数,这些数据通过新的 `/api/metrics` 端点公开,并包含在每个聊天响应中。 正确性:强化了不安全请求过滤器,以捕获漏洞利用代码和绕过变体;演练创建不再因 Critical 关键性或 Testing 环境而崩溃;修复了两个调用了不存在后端路由的前端页面;并替换了已弃用的时间戳调用。测试套件从 32 个通过 / 7 个失败提升至 46 个通过 / 0 个失败。 ## 系统架构 CEDRUS 采用分层架构: | 层级 | 职责 | | --- | --- | | 聊天界面 | 由应用提供的 Web UI,带有流式传输的 copilot | | 编排层 | LangGraph 工作流、意图路由、停止条件、状态转换 | | LLM 推理核心 | 本地 Ollama 7B 模型;解释请求并编写最终答案 | | 工具层 | 用于查找、分析、操作和报告的强类型、确定性函数 | | 记忆层 | 短期对话上下文和显式工作状态 | | 数据层 | 结构化领域数据(YAML/JSON/CSV)和 SQLite 持久化 | | 容器层 | 包含 runtime、依赖项、健康检查和启动配置的 Docker 镜像 | ## 领域工具 每个工具都有明确的用途、输入 schema、输出 schema、确定性验证、显式错误行为和跟踪日志记录。 | 工具 | 类型 | 用途 | | --- | --- | --- | | `lookup_governance_policy()` | 信息 | 检索已批准的策略、交战规则、审批规则和控制基线 | | `assess_exercise_risk()` | 分析 | 根据关键性、暴露面、时间安排、数据敏感度和回滚准备情况计算演练风险 | | `validate_security_controls()` | 分析 | 评估选定控制措施相对于基线的有效性,并识别差距 | | `create_exercise_request()` | 操作 | 仅在明确确认后,在 SQLite 中创建或更新演练请求 | | `generate_governance_report()` | 报告 | 生成结构化的管理报告,包含范围、审批、限制、风险、控制和补救措施 | 其他工具支持合规差距分析和框架推荐。 ## Agent 工作流 该工作流是一个基于 router 的有界循环:按意图对请求进行分类(在置信度低时确定性地回退),收集任何缺失的必填字段,执行有界且经过验证的工具调用,应用安全网关以升级高风险或不受支持的请求,在任何状态更改操作之前要求明确确认,并在记录完整跟踪的同时生成最终答案。确定性的 router 在不调用 LLM 的情况下即可解决绝大多数轮次;模型仅在真正需要自然语言推理的地方使用。 ## 记忆与状态 短期记忆保留了当前的对话。工作记忆明确表示当前意图、已收集的字段、缺失的字段、待定的确认、最新的工具结果以及工作流状态,这可以防止 Agent 跳过审批、丢失字段或在确认之前创建记录。 ## 数据层 | 文件 / 表格 | 内容 | | --- | --- | | `governance_policies.yaml` | 审批规则、测试限制、生产安全要求、交战规则 | | `control_baseline.json` | MFA、日志记录、备份、网络隔离、特权访问和升级的控制预期 | | `risk_matrix.csv` | 可能性、影响、关键性、暴露面和风险等级映射 | | `exercise_templates.json` | 紫队规划模板、角色、成功标准、沟通计划 | | `compliance_frameworks.json`, `framework_selector.json` | 用于合规和推荐工具的框架目录 | | `cybersecurity_knowledge.json` | 结构化教育知识库 | | `exercises.db` (SQLite) | 已保存的演练请求、审批和结果 | ## 安全、伦理与 GRC 边界 CEDRUS 提供的是决策支持,而非授权。它不会生成漏洞利用代码、破坏性命令或未经授权的测试指令;它要求在创建或更新记录之前进行明确确认;它将高风险或不受支持的请求升级给人工授权人(CISO、GRC 官员或业务所有者);它记录工具调用、决策、错误、回退事件和审批,以确保可审计性;并且它将所有领域知识保留在结构化的本地数据中,说明每项建议的来源,并传达不确定性,而不是做出毫无根据的断言。 ## API 端点 | 方法 | 路径 | 用途 | | --- | --- | --- | | GET | `/health` | 服务健康检查 | | POST | `/api/chat` | Copilot 交互(JSON 响应) | | POST | `/api/chat/stream` | Copilot 交互,逐个 token 进行流式传输(V17-8) | | GET | `/api/metrics` | 最近请求的性能摘要(V17-8) | | POST | `/api/policies/lookup` | 治理策略查找 | | POST | `/api/risk/assess` | 演练风险评估 | | POST | `/api/controls/validate` | 安全控制验证 | | POST | `/api/exercises` | 创建演练请求(需要确认) | | GET | `/api/exercises` | 列出已保存的演练 | | GET | `/api/reports/{exercise_id}` | 为演练生成治理报告 | | GET | `/api/compliance/frameworks` | 列出合规框架 | | POST | `/api/compliance/assess` | 合规差距分析 | | POST | `/api/framework/recommend` | 根据公司概况推荐框架 | 应用运行时,可在 `/docs` 获取交互式 API 文档。 ## 入门指南 ### 前置条件 - Docker 和 Docker Compose(用于容器化运行),或 Python 3.13(用于本地运行) - [Ollama](https://ollama.com) 在本地运行并配备 7B 模型: ollama pull qwen2.5:7b ### 使用 Docker 运行(推荐) ``` git clone https://github.com/engineeralialmasry/cedrus.git cd cedrus cp .env.example .env # adjust values if needed docker compose up --build ``` 然后打开 `http://localhost:8000`。 ### 本地运行 ``` python -m venv .venv # Windows: .venv\Scripts\activate | macOS/Linux: source .venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --port 8000 ``` 然后打开 `http://localhost:8000`。 ## 配置 配置通过环境变量提供(参见 `.env.example`)。没有硬编码的密钥。 | 变量 | 描述 | | --- | --- | | `OLLAMA_BASE_URL` | Ollama 服务器 URL(默认为 `http://127.0.0.1:11434`) | | `OLLAMA_MODEL` | 模型标识符(默认为 `qwen2.5:7b`) | | `OLLAMA_TIMEOUT_SECONDS` | 模型的请求超时时间 | | `OLLAMA_KEEP_ALIVE` | 模型在内存中保持加载的时间(保持预热状态) | | `OLLAMA_NUM_CTX` | 上下文窗口大小 | | `CEDRUS_ALLOWED_ORIGINS` | 允许的 CORS 源 | ## 可观测性 每个请求都会记录一个 `request_performance` 跟踪,并且 `/api/chat` 响应带有一个 `performance` 对象,其中包含总耗时、router、LLM 和工具时间,以及 LLM 和工具调用次数。在任何聊天之后,`GET /api/metrics` 会返回最近一次请求的摘要,这对于现场演示和查看时间消耗在哪里非常方便。 ## 测试 ``` python -m pytest -q ``` 该套件涵盖了工具、数据库、工作流、安全路由、扩展的验证、缓存和指标层,以及流式传输和指标端点。预期结果:所有测试均通过。 ## 项目结构 ``` app/ api/ # FastAPI routes (chat, streaming, metrics, direct tools) core/ # logging and per-request performance metrics data/ # structured domain data (YAML/JSON/CSV) database/ # SQLAlchemy models and session memory/ # short-term and working memory models/ # Pydantic schemas services/ # Ollama client, routing, response generation, streaming tools/ # governance, risk, controls, exercises, reports, compliance workflow/ # LangGraph orchestration and streaming runner frontend/ # web UI and copilot evaluation/ # test cases and evaluation runner tests/ # pytest suite Dockerfile compose.yaml OPTIMIZATION_REPORT.md CHANGELOG_V17-8.md ``` ## 局限性 领域知识仅限于结构化的本地数据源;Agent 不会浏览外部存储库或访问实时信息。风险评分和控制验证是确定性的近似值,旨在用于决策支持,而非权威判断,并且在本项目范围内模拟了人工交接路径。任何演练的最终权力始终由负责的人类利益相关者掌握。 ## AI 开发工具披露 根据课程的学术规则,在构建和 V17-8 优化过程中使用了 AI 开发工具。所有更改均已通过测试套件的验证。
标签:AI智能体, AI风险缓解, Docker, GRC, 安全治理, 安全防御评估, 本地大模型, 版权保护, 紫队演练, 请求拦截, 逆向工具