Mr-AkshatBhatnagar/IVAR

GitHub: Mr-AkshatBhatnagar/IVAR

IVAR 是一个整合 Qualys VMDR 数据并利用 AI 提供实时漏洞仪表板、自动化报告生成和工单流转的企业级漏洞管理、检测与响应平台。

Stars: 0 | Forks: 0

# IVAR — 智能漏洞评估与响应 IVAR 是一个由 AI 驱动的漏洞管理、检测与响应 (VMDR) 平台。它连接到 Qualys,提供实时漏洞仪表板、AI 聊天助手 (VUBU)、自动化威胁情报报告、ServiceNow 工单以及 Excel 分析报告。 ## 功能 - **实时漏洞仪表板**,支持按客户配置小部件 - **AI 驱动的执行摘要**、趋势洞察和聊天 (VUBU) - **每月威胁情报报告** (PDF),包含 CISA KEV 交叉参考 - **分析报告** (XLSX),采用 AI 驱动的 OS/应用程序分类和 IVAR 风险引擎优先级排序 - **ServiceNow 工单自动化**,附带 CSV 报告附件 - **多客户支持**,支持按客户划分的 Qualys 订阅 - 按客户提供**排除潜在漏洞**选项 - 按客户提供**排除特定 QID** 功能 - **客户门户模式**(带有数据隔离的 Entra ID 来宾访问) - 每 2 小时**自动刷新** - **深色/浅色主题** - **PPT 报告生成**(双周/每月) ## 架构 ``` ┌─────────────────────────────────────────────────────┐ │ Azure App Service │ │ (Linux Container) │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Docker Container │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ Node.js │ │ Python │ │ SQLite │ │ │ │ │ │ Express │ │ Scheduler│ │ DB │ │ │ │ │ │ (API) │ │ (Qualys) │ │ (Config) │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ │ ┌──────────────────────────────────────┐ │ │ │ │ │ Static Frontend (HTML/JS/CSS) │ │ │ │ │ └──────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────┘ │ │ │ │ Persistent Storage: /data (SQLite DB + cache) │ └─────────────────────────────────────────────────────┘ │ │ │ ▼ ▼ ▼ Azure Entra ID Azure AI Qualys API (SSO Auth) (GPT) (VMDR Data) │ ▼ ServiceNow API (Ticketing) ``` | 组件 | 技术 | 用途 | |-----------|-----------|---------| | 后端 | Node.js + Express | REST API、编排 | | 前端 | Vanilla JS、Chart.js | 仪表板、报告 | | 数据引擎 | Python (lxml) | Qualys API 调用、XML 数据聚合 | | 数据库 | SQLite (better-sqlite3) | 客户配置、用户帐户、工单 | | AI | Azure AI Foundry (GPT) | 聊天、摘要、报告 | | 身份验证 | Azure Entra ID (Easy Auth) | 带 MFA 的 SSO | | 容器 | Docker | 打包 | | 注册表 | Azure Container Registry | 镜像存储 | | 托管 | Azure App Service (B1 Linux) | 运行容器 | ## 前置条件 - **Azure 订阅**(用于 App Service + AI) - 带有 API 访问权限的 **Qualys VMDR 订阅** - 带有 GPT 模型部署的 **Azure AI 资源** -(可选)用于工单管理的 **ServiceNow 实例** -(可选)用于 SSO 的 **Microsoft Entra ID** ## 本地开发 1. 安装 **Node.js 20+** 2. 安装带有 pip 的 **Python 3.10+** 3. 安装后端依赖项: cd backend npm install 4. 安装 Python 依赖项: pip install requests lxml pyyaml cryptography 5. 将 `.env.example` 复制到 `.env` 并填入相应值: cp backend/.env.example backend/.env 6. 启动服务器: node backend/server.js 或者在 Windows 上使用 `START.bat`。 7. 打开 http://localhost:3001 ## 部署 (Azure) IVAR 旨在作为单个 Docker 容器在 Azure App Service (Linux) 上运行。 ### 工作原理 1. **构建** — Azure Container Registry (ACR) 在云端构建 Docker 镜像(无需本地 Docker) 2. **部署** — Azure App Service 从 ACR 中拉取镜像并运行 3. **持久化** — 挂载在 `/data` 的存储保存 SQLite 数据库和 JSON 缓存文件 4. **身份验证** — Azure Easy Auth (Entra ID) 在请求到达应用程序之前处理 SSO ### 自动化部署 使用 `deploy.ps1` 进行一键部署: ``` # 首先编辑 deploy.ps1 来设置你的 $TENANT_ID cd IVAR .\deploy.ps1 ``` 该脚本将: - 创建资源组、ACR、App Service 计划和 Web 应用 - 在云端构建容器镜像 - 从您的 `.env` 文件中设置环境变量 - 输出实时 URL ### 手动步骤 1. `az login --tenant YOUR_TENANT_ID` 2. `az group create --name ivar-rg --location uksouth` 3. `az acr create --name YOUR_ACR_NAME --resource-group ivar-rg --sku Basic --admin-enabled true` 4. `az acr build --registry YOUR_ACR_NAME --image ivar:latest --file Dockerfile .` 5. 创建 App Service 计划 + Web 应用(参见 `docs/DEPLOYMENT-COMMANDS.md`) 6. 在 App Service 上设置环境变量 7. 在 `/data` 处挂载持久化存储 ### 持久化存储 将 Azure 存储 File Share 挂载到 App Service 上的 `/data` 处。它保存: - `ivar.db` — SQLite 数据库(客户配置、用户、工单) - `cache/*.json` — 每个客户的 Qualys 数据缓存 ### 环境变量 (App Service) 在您的 Azure App Service 上将这些设置为应用程序设置: | 变量 | 描述 | |----------|-------------| | `AI_ENDPOINT` | Azure OpenAI 端点 URL | | `AI_API_KEY` | Azure OpenAI API 密钥 | | `AI_DEPLOYMENT_NAME` | GPT 模型部署名称 | | `VUBU_ASSISTANT_ID` | (可选)用于 VUBU 聊天的 Assistants API 助手 ID | | `VUBU_VECTOR_STORE_ID` | (可选)用于文件搜索的向量存储 ID | | `PORT` | 在 Azure 上设置为 `8080` | | `WEBSITES_PORT` | 在 Azure 上设置为 `8080` | | `IVAR_ENC_KEY` | 用于存储凭证的加密密钥(必填) | | `IVAR_HASH_SALT` | 密码哈希的 Salt(必填) | | `IVAR_ADMIN_PASSWORD` | 初始管理员密码(可选,未设置则为随机) | | `IVAR_INTERNAL_DOMAINS` | 用于管理员访问的逗号分隔的电子邮件域名 | | `NODE_ENV` | `production` | ### Entra ID 身份验证 (Easy Auth) 1. 转到 Azure 门户 → App Service → 身份验证 2. 添加 Microsoft 身份提供程序 3. 配置:要求身份验证,将未经验证的请求重定向到登录页面 4. 应用程序读取已登录用户的电子邮件的 `x-ms-client-principal-name` 标头 5. 内部域用户(在 `server.js` 中的 `INTERNAL_DOMAINS` 数组中配置)将获得管理员访问权限 6. 外部用户只能看到其映射的客户数据 ## 配置 ### 管理面板 导航到“管理”选项卡(仅对内部域用户可见)。 每个客户的配置包括: - **Qualys API 凭证**(基础 URL、用户名、密码、模板 ID) - **环境/标签** — 定义环境的 Qualys 资产标签 - **ServiceNow** — 实例 URL、凭证、按团队路由 - **仪表板小部件** — 要显示的图表 - **报告幻灯片** — 要包含在 PPT 报告中的幻灯片 - **排除的 QID** — 要在仪表板和报告中隐藏的 QID - **允许的电子邮件** — 用于客户门户访问的外部 Entra 来宾电子邮件/域 - **PPT 受众** — 显示在封面幻灯片上的名称 ### 内部域 设置 `IVAR_INTERNAL_DOMAINS` 环境变量(以逗号分隔)以控制哪些电子邮件域获得管理员访问权限: ``` IVAR_INTERNAL_DOMAINS=yourdomain.com,partner.com ``` ## API 参考 | 方法 | 端点 | 描述 | |--------|----------|-------------| | GET | `/api/live/vmdr?customer=X` | 客户的仪表板数据 | | GET | `/api/live/customers` | 列出具有缓存数据的客户 | | POST | `/api/live/refresh` | 触发所有客户的全面刷新 | | POST | `/api/live/refresh-single` | 刷新单个客户 | | GET | `/api/live/refresh-status` | 轮询刷新进度 | | POST | `/api/ai/chat` | VUBU 聊天 (Assistants API) | | POST | `/api/ai/summary` | 执行摘要 | | POST | `/api/ai/insights` | 趋势洞察 | | POST | `/api/reports/threat-intel` | 每月威胁报告 (JSON) | | POST | `/api/reports/analysis` | 分析 XLSX 报告 | | POST | `/api/reports/pull` | 从 Qualys 提取 CSV | | GET | `/api/reports/list?customer=X` | 列出可用报告 | | GET | `/api/reports/download/:customer/:file` | 下载报告 | | POST | `/api/tickets/create` | 创建 ServiceNow 工单 | | GET | `/api/tickets/status?customer=X` | 来自 SNOW 的工单状态 | | GET | `/api/admin/config` | 管理员:获取所有客户配置 | | POST | `/api/admin/config` | 管理员:保存客户配置 | | GET | `/api/admin/users` | 管理员:列出用户 | | POST | `/api/admin/users` | 管理员:创建用户 | | DELETE | `/api/admin/users/:id` | 管理员:删除用户 | | GET | `/api/config/customer?customer=X` | 公开:仪表板小部件配置 | | GET | `/auth/me` | 当前用户信息(角色、客户) | ## 工作原理(数据流) 1. **管理员配置**具有 Qualys 凭证和环境标签的客户 2. **刷新**触发 `scheduler_once.py`,它会从 Qualys API 中提取资产、检测和知识库 3. **Python 聚合器** (`vmdr.py`) 将原始 XML 处理为综合指标:严重性计数、趋势、MTTR、SLA 违规、可利用性、威胁情报类别 4. **JSON 缓存**被写入 `/data/cache/CustomerName.json` 5. **前端请求**仪表板数据 → 后端利用实时的 QID 过滤从缓存中提供数据 6. **AI 功能**使用缓存数据作为 GPT 的上下文(摘要、洞察、聊天) 7. **报告**按需从 Qualys 提取最新的 CSV,然后利用 AI 分类进行丰富 8. **工单**提取最新的报告,创建 ServiceNow 事件,并附上 CSV ## 项目结构 ``` IVAR/ ├── backend/ │ ├── server.js # Main Express app (API + static serving) │ ├── db.js # SQLite database (config, users, tickets) │ ├── package.json # Node.js dependencies │ ├── .env.example # Environment variable template │ └── qualys/ │ ├── qualys_client.py # Qualys API client │ ├── scheduler_once.py # Pulls all customers in parallel │ ├── single_refresh.py # Pulls one customer │ ├── requirements.txt # Python dependencies │ └── aggregators/ │ └── vmdr.py # XML → metrics aggregation engine ├── frontend/ │ ├── index.html # Single-page app shell │ ├── app.js # Dashboard, charts, VUBU, reports │ ├── admin.js # Admin panel UI │ └── *.png # Assets (favicon, backgrounds) ├── docs/ │ ├── DEPLOYMENT-ARCHITECTURE.md │ └── DEPLOYMENT-COMMANDS.md ├── Dockerfile # Container definition ├── .dockerignore ├── deploy.ps1 # Automated Azure deployment script ├── START.bat # Windows local development launcher ├── .gitignore └── README.md ``` ## 许可证 MIT ## 免责声明 本工具按原样提供。不隶属于 Qualys、ServiceNow 或 Microsoft。您需对保护您的部署安全、轮换凭证以及遵守您组织的安全策略负责。
标签:AI助手, GNU通用公共许可证, GPT, MITM代理, Node.js, Python, 仪表盘, 威胁情报, 安全运营, 开发者工具, 扫描框架, 无后门, 漏洞管理, 自定义脚本, 请求拦截, 逆向工具