rizko-d/va-remediation-tracker
GitHub: rizko-d/va-remediation-tracker
一套基于 Excel/CSV 的漏洞评估修复跟踪模板,提供从发现到验证修复的完整生命周期管理,内置 SLA 强制执行、MITRE ATT&CK 映射和实时 Dashboard 指标。
Stars: 0 | Forks: 0
# VA Remediation 跟踪表
**漏洞评估修复跟踪器** — Excel/CSV 模板,用于跟踪从发现到验证修复的 VA 发现。专为需要具备 SLA 强制执行、MITRE ATT&CK 映射和 Dashboard 指标的且随时可供审计的跟踪功能的 Red/Blue 团队、渗透测试人员和检测工程师而构建。
## 📁 模板
| 文件 | 描述 | 最适用于 |
|------|-------------|----------|
| `templates/VA_Remediation_Tracker.xlsx` | 功能齐全的 Excel,包含下拉菜单、条件格式、公式、Dashboard、SLA 配置和说明 | Excel / LibreOffice / Office 365 |
| `templates/VA_Remediation_Tracker.csv` | 干净的 CSV 导入文件,适用于 Notion, Airtable, Google Sheets, Jira, ServiceNow | Notion / Airtable / Sheets / SIEM ingestion |
## ✨ 功能
### 发现记录表(36 列)
- **核心跟踪**:发现 ID、标题、严重程度(下拉菜单)、CVSS 4.0、资产/资源、资产类型、环境
- **来源与归属**:发现来源、扫描器/工具、状态(工作流下拉菜单)、所有者、分配日期
- **SLA 强制执行**:SLA 截止日期(根据严重程度自动计算)、实际修复日期、验证日期、开启天数(公式)、是否达到 SLA?(公式)
- **证据与上下文**:描述、PoC/证据链接、MITRE ATT&CK、CWE/CVE、合规性映射
- **修复细节**:根本原因、修复描述、修复类型(下拉菜单)、PR/Ticket 链接、回滚计划、测试步骤、验证证据
- **风险接受**:是否申请例外、原因、审批人、批准日期、到期日期、补偿控制
### Dashboard(实时公式)
- **汇总指标**:按状态、严重程度、SLA 合规性统计数量
- **严重程度 × 状态矩阵**:瓶颈可视化
- **老化区间**:0-7天、8-14天、15-30天、31-60天、61-90天、90天以上
- **所有者工作负载**:开启的发现、平均开启天数、SLA 违规(支持数据透视)
- **每月 SLA 趋势**:已开启 vs 已关闭 vs 已达到 SLA %
### SLA 配置
- 默认 SLA:Critical 7天、High 14天、Medium 30天、Low 90天、Info 180天
- 可编辑 — 根据具体任务自定义
- 用于 `SLA Due Date` 自动计算的公式参考
### 条件格式
- **严重程度**:🔴 Critical、🟠 High、🟡 Medium、🟢 Low、🔵 Info
- **状态**:颜色编码的工作流阶段
- **是否达到 SLA?**:✅ 绿色是、❌ 红色否、⚠️ 黄色待定
### 数据验证(下拉菜单)
所有类别列均强制执行有效值 — 杜绝拼写错误,确保报告一致性。
## 🚀 快速开始
### Excel / LibreOffice
```
# 1. 下载
cp templates/VA_Remediation_Tracker.xlsx VA-Tracker--.xlsx
# 2. 打开 → 启用编辑 → 启用内容(不需要宏)
# 3. 如果客户端有自定义 SLA,请更新 SLA Config 工作表
# 4. 开始在 Findings 工作表中添加 findings
```
### Notion / Airtable / Google Sheets
```
# 导入 CSV
# Notion: 新建 Database → 导入 → CSV → 映射列
# Airtable: 添加 Base → 导入数据 → CSV
# Sheets: 文件 → 导入 → 上传 CSV
```
### CSV → SIEM / SOAR / Jira / GitHub
```
import pandas as pd
df = pd.read_csv('templates/VA_Remediation_Tracker.csv')
# 转换 → 推送到 Jira API、GitHub Issues、ServiceNow、Splunk SOAR 等
```
## 📋 列参考(发现工作表)
| 列 | 类型 | 必填 | 备注 |
|--------|------|----------|-------|
| Finding ID | 文本 | ✅ | `VA-YYYY-NNN` |
| Title | 文本 | ✅ | 单行摘要 |
| Severity | 下拉菜单 | ✅ | 驱动 SLA 截止日期 |
| CVSS 4.0 Score | 数字 | | 0.0–10.0 |
| Asset / Resource | 文本 | ✅ | ARN、URL、主机名、Pod、ObjectId |
| Asset Type | 下拉菜单 | | Cloud/K8s/Web/AD/Network/Container/SaaS |
| Environment | 下拉菜单 | | Prod/Staging/Dev/Corp |
| Finding Source | 下拉菜单 | | Scanner/Manual/Bug Bounty/Red Team/Audit |
| Scanner/Tool | 文本 | | 工具 + 规则 ID |
| Status | 下拉菜单 | ✅ | 工作流:Open→Triaged→In Progress→Ready for Verification→Verified→Closed |
| Owner | 邮箱/文本 | ✅ | 修复所有者 |
| Assigned Date | 日期 | ✅ | 触发 SLA 截止日期 |
| SLA Due Date | 日期(公式) | | 自动:`Assigned Date + VLOOKUP(Severity, SLA Config)` |
| Actual Fix Date | 日期 | | 部署到目标环境的时间 |
| Verified Date | 日期 | | 安全确认修复的时间 |
| Days Open | 公式 | | 自动:`IF(Verified>0, Verified-Assigned, TODAY()-Assigned)` |
| SLA Met? | 公式 | | 自动:`IF(Fix Date>0, IF(Fix<=SLA,"Yes","No"),"Pending")` |
| Description | 长文本 | ✅ | 技术细节、影响、攻击路径 |
| PoC / Evidence | URL/文本 | | 截图、日志、扫描器链接 |
| MITRE ATT&CK | 文本 | | 以分号分隔的 TTP |
| CWE / CVE | 文本 | | 如适用 |
| Compliance Mapping | 文本 | | PCI-DSS、ISO 27001、SOC 2 等 |
| Root Cause | 文本 | | 发生原因 |
| Fix Description | 长文本 | | 更改内容 |
| Fix Type | 下拉菜单 | | Config/Code/Architecture/Compensating/WAF/Policy |
| PR / Ticket Link | URL | | Jira/GitHub/GitLab |
| Rollback Plan | 文本 | | 回归应急方案 |
| Testing Steps | 长文本 | | 验证流程 |
| Verification Evidence | URL/文本 | | 重新扫描证明 |
| Exception Requested? | 下拉菜单 | | 是/否 |
| Exception Reason | 文本 | | 如果是:业务理由 |
| Approver | 文本 | | 如果是:谁批准的 |
| Approval Date | 日期 | | 如果是 |
| Expiry Date | 日期 | | 如果是:最长 90-180 天 |
| Compensating Controls | 文本 | | 如果是:WAF、监控、隔离 |
## 📊 Dashboard 指标说明
| 指标 | 公式 | 目的 |
|--------|---------|---------|
| Total Findings | `COUNTA(Findings!A2:A1000)` | 数量基准 |
| By Status | `COUNTIF(Status, "X")` | 工作流健康度 |
| By Severity | `COUNTIF(Severity, "X")` | 风险态势 |
| SLA Met/Breached/Pending | `COUNTIF(SLA Met?, "X")` | 合规性跟踪 |
| Avg Days Open (Closed) | `AVERAGEIFS(Days Open, Status, "Closed")` | 修复速度 |
| Avg Days Open (Open) | `AVERAGEIFS(Days Open, Status, "<>Closed"...)` | 当前积压老化 |
| Overdue | `COUNTIFS(Status<>"Closed", SLA Due"Closed", Days Open, range)` | 陈旧发现筛查 |
## 🔧 自定义
### 添加自定义列
在 Findings 工作表中插入列 → 如有需要,更新 Dashboard 公式。
### 更改 SLA 天数
编辑 **SLA Config** 工作表(第 3–7 行) → Dashboard 将自动更新。
### 添加状态值
1. 编辑 `Findings!J:J`(Status 列)的数据验证
2. 为新状态颜色添加条件格式规则
3. 更新 Dashboard 的 COUNTIF 公式
### 连接到 CMDB/资产清单
添加 `Asset ID` 列 → VLOOKUP 到资产注册表 → 自动丰富资产类型、环境、所有者信息。
## 📦 集成示例
### Notion
```
# 1. 导入 CSV 到 Notion Database
# 2. 添加 Relations:Assets、Projects、Teams
# 3. 创建 Views:
# - Kanban:按 Status 分组
# - Calendar:按 SLA Due Date
# - Table:按 Owner 分组
# - List:筛选 Exception Requested = Yes
```
### Airtable
```
# 1. 导入 CSV → Base
# 2. Views:
# - Grid:所有 findings
# - Kanban:Status(拖放工作流)
# - Calendar:SLA Due Date
# - Form:“Submit New Finding”(预填充 Severity 下拉菜单)
# 3. Automations:
# - 当 Status = “Ready for Verification” 时 → Slack #sec-ops
# - 当 SLA Due Date = TODAY() + 1 时 → 发送邮件给 Owner
```
### Python 同步 (Jira/GitHub/ServiceNow)
```
from openpyxl import load_workbook
import requests
wb = load_workbook('VA-Tracker-Client-20250115.xlsx')
ws = wb['Findings']
for row in ws.iter_rows(min_row=2, values_only=True):
finding_id, title, severity, *_ = row
if finding_id and row[9] == 'In Progress': # Status column
# Push update to Jira/GitHub
pass
```
## 📝 最佳实践
1. **在交付报告后 24 小时内进行分配**
2. **在主动修复期间每天更新状态**
3. **在标记为 Verified/Closed 之前要求提供验证证据**
4. **风险接受 = 审批人 + 到期日期 + 补偿控制**(无一例外)
5. **每周与利益相关者一起审查 Dashboard**
6. **每月导出 CSV** 用于趋势分析 / 董事会汇报
7. **归档已关闭的评估任务** — 重命名文件,存放在证据柜中
## 📄 许可证
MIT License — 查看 [LICENSE](LICENSE)
**专为 VA/渗透测试/检测工程工作流而构建。**
有问题?Open 一个 issue 或联系我们。
标签:Excel模板, GPT, IT审计, Linux 内核安全, PB级数据处理, 安全运维, 漏洞管理, 逆向工具, 项目管理