#!/usr/bin/env python3 """ Post-Breach Remediation Tracker Manages remediation actions, tracks progress, calculates completion metrics, and generates status reports for regulatory and board reporting. """ import json from datetime import datetime, timezone, timedelta from enum import Enum class RemediationPriority(Enum): CRITICAL = "critical" HIGH = "high" MEDIUM = "medium" LOW = "low" class RemediationStatus(Enum): PLANNED = "planned" IN_PROGRESS = "in_progress" COMPLETED = "completed" VERIFIED = "verified" OVERDUE = "overdue" def create_remediation_plan(breach_reference: str, root_causes: list) -> dict: """Create a structured remediation plan from root causes and investigation findings.""" actions = [] action_templates = { "stale_privileged_account": [ { "description": "Decommission all stale service accounts identified during investigation", "priority": "critical", "category": "technical", "timeline_days": 7, }, { "description": "Implement automated service account lifecycle management with 90-day review cycle", "priority": "high", "category": "technical", "timeline_days": 90, }, { "description": "Include service accounts in quarterly access certification review scope", "priority": "high", "category": "procedural", "timeline_days": 30, }, ], "phishing_vulnerability": [ { "description": "Deploy phishing-resistant MFA (FIDO2/WebAuthn) for all privileged accounts", "priority": "critical", "category": "technical", "timeline_days": 30, }, { "description": "Implement push-fatigue detection alerting (3+ prompts in 5 minutes)", "priority": "high", "category": "monitoring", "timeline_days": 30, }, { "description": "Deliver organization-wide phishing awareness training with scenario based on actual attack", "priority": "medium", "category": "training", "timeline_days": 60, }, ], "network_segmentation_gap": [ { "description": "Implement database-tier network segmentation with bastion host access only", "priority": "high", "category": "technical", "timeline_days": 60, }, { "description": "Deploy session recording for all bastion host connections", "priority": "medium", "category": "technical", "timeline_days": 60, }, ], "inadequate_monitoring": [ { "description": "Deploy SIEM correlation rule for service account usage outside batch windows", "priority": "high", "category": "monitoring", "timeline_days": 30, }, { "description": "Block authentication from known Tor exit nodes on production systems", "priority": "high", "category": "technical", "timeline_days": 14, }, { "description": "Establish network flow baseline for database VLAN with anomaly alerting", "priority": "medium", "category": "monitoring", "timeline_days": 60, }, ], } action_counter = 1 start_date = datetime.now(timezone.utc) for root_cause in root_causes: templates = action_templates.get(root_cause, []) for template in templates: target_date = start_date + timedelta(days=template["timeline_days"]) actions.append({ "action_id": f"{breach_reference}-REM-{action_counter:03d}", "breach_reference": breach_reference, "description": template["description"], "root_cause_addressed": root_cause, "category": template["category"], "priority": template["priority"], "owner": "Assigned at plan approval", "target_date": target_date.strftime("%Y-%m-%d"), "actual_completion_date": None, "status": RemediationStatus.PLANNED.value, "evidence": None, "verified_by": None, }) action_counter += 1 return { "breach_reference": breach_reference, "plan_created": start_date.isoformat(), "root_causes": root_causes, "total_actions": len(actions), "actions": actions, } def calculate_remediation_metrics(plan: dict) -> dict: """Calculate progress metrics for a remediation plan.""" actions = plan["actions"] total = len(actions) completed = sum(1 for a in actions if a["status"] in ("completed", "verified")) in_progress = sum(1 for a in actions if a["status"] == "in_progress") overdue = sum(1 for a in actions if a["status"] == "overdue") planned = sum(1 for a in actions if a["status"] == "planned") by_priority = {} for priority in ["critical", "high", "medium", "low"]: priority_actions = [a for a in actions if a["priority"] == priority] priority_completed = sum(1 for a in priority_actions if a["status"] in ("completed", "verified")) by_priority[priority] = { "total": len(priority_actions), "completed": priority_completed, "completion_rate": f"{(priority_completed / len(priority_actions)) * 100:.0f}%" if priority_actions else "N/A", } by_category = {} for action in actions: cat = action["category"] if cat not in by_category: by_category[cat] = {"total": 0, "completed": 0} by_category[cat]["total"] += 1 if action["status"] in ("completed", "verified"): by_category[cat]["completed"] += 1 return { "breach_reference": plan["breach_reference"], "overall": { "total_actions": total, "completed": completed, "in_progress": in_progress, "overdue": overdue, "planned": planned, "completion_rate": f"{(completed / total) * 100:.0f}%" if total else "N/A", }, "by_priority": by_priority, "by_category": by_category, } def main(): print("=" * 70) print("POST-BREACH REMEDIATION PLAN") print("=" * 70) plan = create_remediation_plan( breach_reference="SPG-BREACH-2026-003", root_causes=[ "stale_privileged_account", "phishing_vulnerability", "network_segmentation_gap", "inadequate_monitoring", ], ) print(json.dumps(plan, indent=2)) print("\n" + "=" * 70) print("REMEDIATION METRICS") print("=" * 70) metrics = calculate_remediation_metrics(plan) print(json.dumps(metrics, indent=2)) if __name__ == "__main__": main()