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, 仪表盘, 威胁情报, 安全运营, 开发者工具, 扫描框架, 无后门, 漏洞管理, 自定义脚本, 请求拦截, 逆向工具