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 などのフレームワークに準拠しながら、受容したリスクを可視化できます。

使用する場面

  • 環境に建物の脆弱性例外追跡システムの機能を導入または設定する場合
  • コンプライアンス要件に沿ったセキュリティ制御を確立する場合
  • この分野のセキュリティアーキテクチャを構築または改善する場合
  • この実装を必要とするセキュリティ評価を実施する場合

前提条件

  • flask、sqlalchemy、requests、jinja2 を含む Python 3.9 以降
  • PostgreSQL または SQLite データベース
  • 承認通知用のメール/Slack 連携
  • 脆弱性管理プラットフォームの API(DefectDojo、Qualys、Tenable)

例外申請ワークフロー

例外のカテゴリ
カテゴリ説明最大期間承認者レベル
修正の遅延パッチは利用可能だが、導入が妨げられている30 日チームリード + セキュリティ
修正プログラムなしベンダーがパッチをリリースしていない90 日セキュリティディレクター
ビジネス上の重要性停止せずにシステムへパッチを適用できない60 日VP of Engineering + 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. 監視:制御の有効性を維持するために、どのような継続的監視を行いますか?

参考資料

コメント