mcpField
B
building-vulnerability-exception-tracking-system

building-vulnerability-exception-tracking-system

github.com/mukul975安全35.2k188 次安装8 周前更新
代码仓库

关于 building-vulnerability-exception-tracking-system

面向安全团队的漏洞例外跟踪系统实施指南,适用于无法按 SLA 时限完成修复的情况。内容说明申请数据、审批流程、补偿性控制、到期检查及报告。

主要功能

  1. 01例外申请工作流
  2. 02按类别设置有效期与审批人
  3. 03记录补偿性控制
  4. 04每日检查到期例外
  5. 05生成月度例外报告

适用场景

  1. 01记录等待修复的漏洞
  2. 02将风险例外提交审批
  3. 03跟踪补偿性控制及有效期
  4. 04通过报告复核已到期例外

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill building-vulnerability-exception-tracking-system

安装后在 Claude Code 中输入/building-vulnerability-exception-tracking-system确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

构建漏洞例外跟踪系统

概述

漏洞例外跟踪系统用于管理无法在 SLA 时限内修复的漏洞情况。它提供结构化的工作流,用于申请例外、记录补偿性控制措施、获取风险接受审批,并在有效期结束时自动使例外失效。这确保组织在接受风险时保持可见性,同时符合 PCI DSS、SOC 2 和 NIST CSF 等框架要求。

何时使用

  • 在您的环境中部署或配置构建漏洞例外跟踪系统能力时
  • 在建立与合规要求一致的安全控制时
  • 在为该领域构建或改进安全架构时
  • 在进行需要此实施的安全评估时

先决条件

  • Python 3.9+,包含 flask、sqlalchemy、requests、jinja2
  • PostgreSQL 或 SQLite 数据库
  • 用于审批通知的 Email/Slack 集成
  • 漏洞管理平台 API(DefectDojo、Qualys、Tenable)

例外请求工作流

例外类别
类别描述最长时长审批人级别
修复延迟补丁可用但部署受阻30 天团队负责人 + 安全
无可用修复供应商尚未发布补丁90 天安全总监
业务关键系统无法在不中断的情况下打补丁60 天工程副总裁 + CISO
误报发现结果不是真实漏洞永久安全分析师
补偿性控制已实施替代缓解措施180 天安全架构师
例外请求的必填字段
exception_schema = {
    "cve_id": "CVE-2024-XXXX",
    "finding_id": "unique-finding-reference",
    "asset_hostname": "prod-db-01.corp.local",
    "severity": "high",
    "cvss_score": 8.1,
    "category": "remediation_delay",
    "justification": "Database upgrade required before patch can be applied",
    "compensating_controls": [
        "WAF rule blocking exploit pattern deployed",
        "Network segmentation restricting access to trusted VLANs only",
        "Enhanced monitoring via Splunk alert for exploitation indicators"
    ],
    "requested_expiration": "2024-06-15",
    "requestor_email": "[email protected]",
    "approver_emails": ["[email protected]", "[email protected]"],
    "risk_rating": "medium",
}

数据库架构

CREATE TABLE vulnerability_exceptions (
    id SERIAL PRIMARY KEY,
    cve_id VARCHAR(20) NOT NULL,
    finding_id VARCHAR(100) NOT NULL,
    asset_hostname VARCHAR(255),
    severity VARCHAR(20),
    cvss_score DECIMAL(3,1),
    category VARCHAR(50) NOT NULL,
    justification TEXT NOT NULL,
    compensating_controls TEXT,
    status VARCHAR(20) DEFAULT 'pending',
    requested_by VARCHAR(255) NOT NULL,
    approved_by VARCHAR(255),
    requested_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    approved_at TIMESTAMP,
    expires_at TIMESTAMP NOT NULL,
    expired BOOLEAN DEFAULT FALSE,
    risk_rating VARCHAR(20),
    review_notes TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE exception_audit_log (
    id SERIAL PRIMARY KEY,
    exception_id INTEGER REFERENCES vulnerability_exceptions(id),
    action VARCHAR(50) NOT NULL,
    actor VARCHAR(255) NOT NULL,
    details TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_exception_status ON vulnerability_exceptions(status);
CREATE INDEX idx_exception_expires ON vulnerability_exceptions(expires_at);
CREATE INDEX idx_exception_cve ON vulnerability_exceptions(cve_id);

实施

例外请求 API
from flask import Flask, request, jsonify
from datetime import datetime, timezone
import json

app = Flask(__name__)

@app.route("/api/exceptions", methods=["POST"])
def create_exception():
    data = request.json
    required = ["cve_id", "finding_id", "category", "justification", "expires_at", "requestor_email"]
    for field in required:
        if field not in data:
            return jsonify({"error": f"Missing required field: {field}"}), 400

    # Validate expiration does not exceed category maximum
    max_days = {"remediation_delay": 30, "no_fix": 90, "business_critical": 60,
                "false_positive": 365, "compensating_control": 180}
    # Insert into database and notify approvers
    return jsonify({"status": "pending", "id": "exc-12345"})

@app.route("/api/exceptions/<exc_id>/approve", methods=["POST"])
def approve_exception(exc_id):
    approver = request.json.get("approver_email")
    notes = request.json.get("notes", "")
    # Update status to approved, record approver and timestamp
    return jsonify({"status": "approved"})

@app.route("/api/exceptions/<exc_id>/reject", methods=["POST"])
def reject_exception(exc_id):
    reviewer = request.json.get("reviewer_email")
    reason = request.json.get("reason")
    # Update status to rejected, record reviewer and reason
    return jsonify({"status": "rejected"})
过期检查器(每日 Cron)
# Check for expired exceptions daily
python3 scripts/process.py --check-expirations

# Generate monthly exception report
python3 scripts/process.py --report --output exception_report.json

补偿性控制文档

对于每个例外,补偿性控制必须涵盖:

  1. 检测:将如何检测利用尝试?
  2. 预防:哪些屏障可降低利用可能性?
  3. 响应:已有哪些事件响应程序?
  4. 监控:哪些持续监控可确保控制措施保持有效?

参考资料

评论

支持 Markdown