Zappsec/warroom-agent

GitHub: Zappsec/warroom-agent

AI 驱动的安全事件响应编排平台,通过 Claude 大模型实现自动分类和操作规划,并利用 Auth0 CIBA 实现敏感修复操作的人工审批闭环。

Stars: 0 | Forks: 1

# WarRoom Agent 由 AI 驱动的安全事件作战室,可协调检测、分类、团队协作和修复工作,并使用 Auth0 CIBA(客户端发起的后端认证)实现敏感操作的人工审批。 为 **Auth0 黑客松** 构建。 ## 目录 - [功能说明](#what-it-does) - [技术栈](#tech-stack) - [前置条件](#prerequisites) - [本地开发环境搭建](#local-development-setup) - [EC2 部署(Amazon Linux 2023)](#ec2-deployment-amazon-linux-2023) - [环境变量](#environment-variables) - [API 端点](#api-endpoints) - [项目结构](#project-structure) - [许可证](#license) ## 功能说明 WarRoom Agent 监控 Slack 频道中的安全事件,使用 Claude AI 对事件进行分类并规划响应操作,通过 Slack/Zoom/日历/邮件协调团队,并执行修复工作。在接触敏感系统(如 GitHub 仓库)之前,需要通过带外人工审批(使用 Auth0 CIBA)。 ### 核心功能 - **AI 事件分类** - Claude LLM 分析原始事件文本,确定严重程度(P1/P2/P3)、受影响域、受影响系统和置信度分数 - **自动响应人匹配** - 根据事件域、专业知识和可用性匹配值班响应人 - **已知问题匹配** - 在历史知识库中搜索类似的过去事件,并建议修复步骤 - **AI 操作规划** - 生成协调操作:Zoom 作战室、日历桥接、Slack 私信、邮件升级和 GitHub 配置修复 - **Auth0 CIBA 审批流程** - 敏感的 GitHub 修复操作会触发后端推送通知,发送给修复负责人进行带外审批后再执行 - **Auth0 FGA(细粒度授权)** - 基于角色的访问检查,用于审批和执行操作 - **交互式 AI 聊天** - 面向事件的聊天助手,提供运维手册、诊断和根因分析 - **完整审计追踪** - 记录每一个 AI 决策、人工审批和操作执行 - **演示控制台** - 注入测试事件以完整演示工作流程 ### CIBA 流程 ``` Operator approves sensitive action --> Backend initiates Auth0 CIBA backchannel request --> Auth0 sends push notification to remediation owner --> Owner approves out-of-band (phone/email) --> Backend receives token, validates scopes --> Action executes with approved owner's context --> Full audit trail recorded ``` ## 技术栈 | 层级 | 技术 | |-------|-----------| | **前端** | React 18, TypeScript, Vite, TailwindCSS, Radix UI (shadcn) | | **后端** | FastAPI (Python), SQLAlchemy, SQLite | | **AI/LLM** | Anthropic Claude (claude-sonnet-4-5), LangGraph 工作流编排 | | **认证** | Auth0 (OAuth2/OIDC), Auth0 CIBA, Auth0 FGA | | **集成** | Slack, Zoom, Google Calendar, Gmail SMTP, GitHub | | **部署** | GitHub Actions CI/CD, AWS EC2, Nginx, systemd | ## 前置条件 - [**Node.js** 20+](https://nodejs.org/en/download/) - [**Python** 3.12+](https://www.python.org/downloads/) - [**npm** 9+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)(随 Node.js 一起提供) - [**Git**](https://git-scm.com/downloads) 需要以下外部账户(详细设置指南见 [integrations-setup.md](integrations-setup.md)): - Auth0 租户(已配置 CIBA 和 FGA) - Anthropic API 密钥 - Slack 工作区 + 机器人应用 - Zoom 服务端到服务端 OAuth 应用 - Google Cloud 服务账号(日历 API) - Gmail 应用密码(或其它 SMTP 提供商) - GitHub 个人访问令牌 ## 本地开发环境搭建 ### 1. 克隆仓库 ``` git clone git@github.com:Zappsec/warroom-agent.git cd warroom-agent ``` ### 2. 前端设置 ``` npm install ``` 在项目根目录创建 `.env.local` 文件(此文件会被 git 忽略,供 Vite 本地开发使用): ``` cp .env.example .env.local nano .env.local ``` ``` VITE_AUTH0_DOMAIN=dev-xxxxxxxxxxxx.us.auth0.com VITE_AUTH0_CLIENT_ID= VITE_AUTH0_AUDIENCE= VITE_AUTH0_SCOPE=openid profile email offline_access read:incidents read:audit read:integrations approve:actions execute:actions admin:config ``` 启动开发服务器: ``` npm run dev ``` 前端将在 `http://localhost:8080` 可访问。 ### 3. 后端设置 #### 创建 Python 虚拟环境 ``` cd backend python3.12 -m venv venv ``` #### 激活并安装依赖 ``` source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ``` #### 配置环境变量 复制示例文件创建 `backend/.env`,并填写您的密钥: ``` cp .env.example .env nano .env ``` 获取每个密钥的方法见 [integrations-setup.md](integrations-setup.md)。完整的环境变量列表见下文[环境变量](#environment-variables)部分。 ### 4. 初始化数据库并启动后端 ``` # 在 backend/ 目录下,激活 venv python -m scripts.seed_data uvicorn app.main:app --reload --port 8000 ``` 后端 API 将在 `http://localhost:8000` 可访问。 ### 5. 验证 - 打开 `http://localhost:8080` - 您应该看到登录页面 - 使用 Auth0 登录 - 导航到演示控制台(`/demo`)注入测试事件 - 观察 AI 分类、规划操作并通过审批流程 ## EC2 部署(Amazon Linux 2023) 本节提供可选的便捷脚本,用于简化在运行 **Amazon Linux 2023** 的 AWS EC2 实例上部署 WarRoom Agent。这些脚本会安装所有基础依赖(Node.js、Python、Nginx 等),配置 systemd 服务,设置 SSL,并为通过 GitHub Actions CI/CD 管道进行自动部署做好准备。如果您要部署到不同的环境,可以将这些脚本作为参考。 ### 一次性服务器设置 1. **启动 EC2 实例**(Amazon Linux 2023,t3.small 或更大) 2. **配置安全组** - 允许入站端口:**22**(SSH)、**80**(HTTP)、**443**(HTTPS) 3. **在 `scripts/ec2-setup-ssl.sh`(第 16 行)更新 EC2 IP**,填入您实例的公网 IP 4. **SSH 登录并运行设置脚本:** ``` ssh -i your-key.pem ec2-user@ # 先上传脚本(或克隆 repo) cd ~/warroom/scripts chmod +x ec2-setup.sh ec2-setup-ssl.sh # 步骤 1:基础安装 - 安装 Node.js、Python、Nginx,创建 venv,配置 systemd 服务 sudo ./ec2-setup.sh # 步骤 2:SSL + Nginx 反向代理(Auth0 SPA SDK 需要) sudo ./ec2-setup-ssl.sh ``` 5. **在服务器上填写 `.env` 文件:** ``` nano ~/warroom/backend/.env nano ~/warroom/.env ``` 6. **初始化数据库:** ``` cd ~/warroom/backend source venv/bin/activate python -m scripts.seed_data ``` 7. **启动服务:** ``` sudo systemctl start warroom-backend sudo systemctl restart nginx ``` 8. **在 Auth0 仪表板更新您的 EC2 URL:** - 允许的回调 URL:`https:///integrations` - 允许的登出 URL:`https://` - 允许的 Web 来源:`https://` ### CI/CD 管道(自动部署) 每次推送到 `main` 分支都会触发 GitHub Actions 管道(`.github/workflows/deploy.yml`),自动执行以下操作: 1. 使用 Vite 构建前端(从 GitHub Secrets 注入 Auth0 环境变量) 2. 从 `BACKEND_SECRET` 写入 `backend/.env` 3. 通过 rsync 将代码和构建的 `dist/` 同步到 EC2 4. 在虚拟环境中安装/更新 Python 依赖 5. 重启 `warroom-backend` 和 `nginx` **必需的 GitHub Secrets**(设置 > Secrets 和变量 > Actions): | Secret | 说明 | |--------|------------| | `EC2_SSH_PRIVATE_KEY` | 您的 `.pem` 密钥文件内容 | | `EC2_HOST` | EC2 公网 IP 地址 | | `EC2_USER` | `ec2-user` | | `VITE_AUTH0_DOMAIN` | Auth0 租户域(例如 `dev-xxxxx.us.auth0.com`) | | `VITE_AUTH0_CLIENT_ID` | Auth0 SPA 应用客户端 ID | | `VITE_AUTH0_AUDIENCE` | `https://warroom-api` | | `VITE_AUTH0_SCOPE` | `openid profile email offline_access read:incidents read:audit read:integrations approve:actions execute:actions admin:config` | | `BACKEND_ENV` | `backend/.env` 的完整内容(所有密钥) | ### 常用 EC2 命令 ``` # 检查服务状态 sudo systemctl status warroom-backend sudo systemctl status nginx # 查看后端日志 journalctl -u warroom-backend -f # 健康检查 curl -k https://localhost/health # 修改配置后重启 sudo systemctl restart warroom-backend sudo systemctl restart nginx ``` ## 环境变量 ### 前端(`.env.local` 用于本地开发,GitHub Secrets 用于 CI/CD) | 变量 | 说明 | |----------|------------| | `VITE_AUTH0_DOMAIN` | Auth0 租户域(例如 `dev-xxxxx.us.auth0.com`) | | `VITE_AUTH0_CLIENT_ID` | Auth0 SPA 应用客户端 ID | | `VITE_AUTH0_AUDIENCE` | Auth0 API 标识符(例如 `https://warroom-api`) | | `VITE_AUTH0_SCOPE` | Auth0 作用域:`openid profile email offline_access read:incidents readaudit read:integrations approve:actions execute:actions admin:config` | ### 后端(`backend/.env`) | 变量 | 说明 | |----------|------------| | **数据库** | | | `DATABASE_URL` | 数据库连接字符串(默认:`sqlite:///./warroom.db`) | | **应用** | | | `APP_ENV` | `development` 或 `production` | | `LOG_LEVEL` | 日志级别(默认:`INFO`) | | `JWT_SECRET` | JWT 签名的随机密钥 | | **Anthropic Claude** | | | `ANTHROPIC_API_KEY` | Anthropic API 密钥 | | `ANTHROPIC_MODEL` | 模型名称(默认:`claude-sonnet-4-5`) | | **Slack** | | | `SLACK_BOT_TOKEN` | Slack 机器人令牌(`xoxb-...`) | | `SLACK_SIGNING_SECRET` | Slack webhook 签名密钥 | | `SLACK_CHANNEL_ID` | 用于轮询事件的频道 ID | | `SLACK_POLL_INTERVAL` | 轮询间隔秒数(默认:`10`) | | **Zoom** | | | `ZOOM_CLIENT_ID` | Zoom 服务端到服务端 OAuth 客户端 ID | | `ZOOM_CLIENT_SECRET` | Zoom 服务端到服务端 OAuth 客户端密钥 | | `ZOOM_ACCOUNT_ID` | Zoom 账户 ID | | **Google 日历** | | | `GOOGLE_SERVICE_ACCOUNT_KEY` | Google 服务账号 JSON 密钥文件路径 | | **邮件(SMTP)** | | | `SMTP_HOST` | SMTP 服务器(默认:`smtp.gmail.com`) | | `SMTP_PORT` | SMTP 端口(默认:`587`) | | `SMTP_USER` | SMTP 用户名/邮箱 | | `SMTP_PASS` | SMTP 密码或应用密码 | | **Auth0 核心** | | | `AUTH0_DOMAIN` | Auth0 租户域 | | `AUTH0_CLIENT_ID` | Auth0 M2M 应用客户端 ID | | `AUTH0_CLIENT_SECRET` | Auth0 M2M 应用客户端密钥 | | `AUTH0_AUDIENCE` | Auth0 API 受众 | | **Auth0 Token Vault** | | | `AUTH0_CUSTOM_API_CLIENT_ID` | 自定义 API 客户端 ID | | `AUTH0_CUSTOM_API_CLIENT_SECRET` | 自定义 API 客户端密钥 | | `AUTH0_TOKEN_ENDPOINT` | Auth0 令牌端点 URL | | **Auth0 Connections** | | | `AUTH0_SLACK_CONNECTION_NAME` | Slack 社交连接名称 | | `AUTH0_GOOGLE_CONNECTION_NAME` | Google 社交连接名称 | | `AUTH0_GITHUB_CONNECTION_NAME` | GitHub 社交连接名称 | | **Auth0 FGA** | | | `FGA_API_URL` | FGA API URL | | `FGA_STORE_ID` | FGA 存储 ID | | `FGA_MODEL_ID` | FGA 授权模型 ID | | `FGA_CLIENT_ID` | FGA 客户端 ID | | `FGA_CLIENT_SECRET` | FGA 客户端密钥 | | `FGA_API_TOKEN_ISSUER` | FGA 令牌发行者 | | `FGA_API_AUDIENCE` | FGA API 受众 | | **Auth0 CIBA** | | | `AUTH0_CIBA_ENABLED` | 启用/禁用 CIBA(`true`/`false`) | | `AUTH0_CIBA_CLIENT_ID` | CIBA 应用客户端 ID | | `AUTH0_CIBA_CLIENT_SECRET` | CIBA 应用客户端密钥 | | `AUTH0_CIBA_AUDIENCE` | CIBA 受众 | | `AUTH0_CIBA_SCOPE` | CIBA 作用域(默认:`openid execute:remediation`) | | `AUTH0_CIBA_REQUESTED_EXPIRY` | CIBA 请求过期秒数(默认:`300`) | | `AUTH0_CIBA_DEFAULT_POLL_INTERVAL` | 轮询间隔秒数(默认:`5`) | | `AUTH0_APP_REMEDIATION_OWNER_SUB` | 应用修复负责人的 Auth0 用户 ID | | `AUTH0_NETWORK_REMEDIATION_OWNER_SUB` | 网络修复负责人的 Auth0 用户 ID | | **GitHub 修复** | | | `GITHUB_APP_REMEDIATION_REPO` | 应用配置修复仓库(`org/repo`) | | `GITHUB_APP_REMEDIATION_PATH` | 应用修复仓库中的文件路径 | | `GITHUB_NETWORK_REMEDIATION_REPO` | 网络策略修复仓库(`org/repo`) | | `GITHUB_NETWORK_REMEDIATION_PATH` | 网络修复仓库中的文件路径 | | **CORS** | | | `CORS_ORIGINS` | 允许的来源 JSON 数组 | ## API 端点 | 方法 | 路径 | 说明 | |--------|------|-------------| | `GET` | `/api/incidents` | 列出事件(按严重程度、状态、搜索筛选) | | `GET` | `/api/incidents/{id}` | 获取事件的完整上下文 | | `POST` | `/api/incidents/inject` | 注入演示事件 | | `GET` | `/api/actions` | 列出计划操作 | | `POST` | `/api/actions/{id}/approve` | 审批操作(FGA 门控) | | `POST` | `/api/actions/{id}/deny` | 拒绝操作(FGA 门控) | | `POST` | `/api/actions/{id}/prepare-execute` | 准备执行(敏感操作会路由到 CIBA) | | `POST` | `/api/actions/{id}/ciba/start` | 启动 CIBA 后端认证 | | `GET` | `/api/actions/{id}/ciba/status` | 轮询 CIBA 审批状态 | | `GET` | `/api/audit` | 审计追踪(按事件、操作者、事件筛选) | | `GET` | `/api/integrations` | 列出集成连接 | | `POST` | `/api/integrations/{id}/reconnect` | 重新连接集成 | | `POST` | `/api/chat` | 面向事件的 AI 聊天 | | `GET` | `/health` | 健康检查 | ## 项目结构 ``` warroom-agent/ ├── .github/workflows/ │ └── deploy.yml # CI/CD pipeline ├── backend/ │ ├── app/ │ │ ├── agents/ # LangGraph workflow orchestration │ │ ├── api/ # FastAPI route handlers │ │ ├── integrations/ # Slack, Zoom, Calendar, Email, GitHub, Auth0 adapters │ │ ├── models/ # SQLAlchemy models │ │ ├── security/ # JWT verification, FGA checks, CIBA enforcement │ │ ├── services/ # Business logic (classifier, planner, CIBA, etc.) │ │ └── main.py # FastAPI app entry point │ ├── scripts/ # DB seed scripts │ └── requirements.txt ├── src/ # React frontend (TypeScript) │ ├── components/ # UI components (shadcn + custom) │ ├── pages/ # Route pages │ ├── hooks/ # Custom React hooks │ └── lib/ # API client, Auth0 config ├── scripts/ │ ├── ec2-setup.sh # EC2 base setup │ └── ec2-setup-ssl.sh # Nginx + SSL setup ├── package.json ├── vite.config.ts └── tailwind.config.js ``` ## 许可证 MIT
标签:AI安全, Amazon Linux 2023, API集成, Auth0 CIBA, Auth0 FGA, Chat Copilot, Claude AI, Client Initiated Backchannel Authentication, DLL 劫持, EC2部署, GitHub运维, HITL, Human-in-the-Loop, LLM安全应用, Python后端, Slack集成, SOAR, Zoom集成, 事件管理, 人工智能驱动安全, 人类在环, 可观测性, 大语言模型, 安全事件分诊, 安全事件响应, 安全编排自动化响应, 安全运营中心, 实时通知, 审批工作流, 审计日志, 细粒度授权, 网络映射, 自动化协调, 自动化攻击, 逆向工具