Claude 24f816b6a3
Consolidate 22 sibling repos into layered organism structure
Place useful parts of the surrounding repos into sica-fondt by layer, per the
body model (Ada = membrane; brain/endocrine/capabilities/knowledge non-Ada):

- brain/        LLM reasoning + providers (dapr, hermes, MoMoA)
- capabilities/ REPRAG sidecars: hermes tools/skills, dapr tools, parallel
                dispatch, A51 channels, and the OSINT cluster
- knowledge/    LORAG corpus: 754 cyber-skills, agency personas, secure-coding,
                MITRE ATT&CK data
- reference/    defensive threat-reference (C3, shhbruh doc) + AdaYaml parser

License handling: AGPL sources (worldosint, advanced_evolution, mercury,
Reticulum) and GPL DeTTECT are SPEC-only clean-room/port descriptions — no
copyleft code copied. MIT/Apache/data parts copied as working trees.

Safety: shhbruh escape/persistence material and C3 covert-C2 kept as reference
only, not wired into the running organism. See CONSOLIDATION.md.

https://claude.ai/code/session_01UehUqEXXJJCsHoA4voCU5c
2026-06-10 06:53:01 +00:00

222 lines
8.0 KiB
Python

#!/usr/bin/env python3
"""
SOC Escalation Matrix Builder and Simulator
Builds escalation matrices, simulates incident routing,
and tracks SLA compliance for SOC operations.
"""
import json
from datetime import datetime, timedelta
SEVERITY_CONFIG = {
"P1": {
"name": "Critical",
"initial_response_min": 15,
"escalation_to_tier2_min": 0,
"escalation_to_tier3_min": 0,
"escalation_to_mgmt_min": 30,
"resolution_target_hours": 4,
"update_interval_min": 30,
"assigned_tier": 3,
},
"P2": {
"name": "High",
"initial_response_min": 30,
"escalation_to_tier2_min": 30,
"escalation_to_tier3_min": 240,
"escalation_to_mgmt_min": 120,
"resolution_target_hours": 8,
"update_interval_min": 120,
"assigned_tier": 2,
},
"P3": {
"name": "Medium",
"initial_response_min": 240,
"escalation_to_tier2_min": 480,
"escalation_to_tier3_min": None,
"escalation_to_mgmt_min": None,
"resolution_target_hours": 24,
"update_interval_min": 1440,
"assigned_tier": 1,
},
"P4": {
"name": "Low",
"initial_response_min": 480,
"escalation_to_tier2_min": None,
"escalation_to_tier3_min": None,
"escalation_to_mgmt_min": None,
"resolution_target_hours": 72,
"update_interval_min": 10080,
"assigned_tier": 1,
},
}
ASSET_CRITICALITY_MAP = {
("critical", "critical"): "P1",
("critical", "high"): "P1",
("critical", "medium"): "P1",
("critical", "low"): "P2",
("high", "critical"): "P1",
("high", "high"): "P2",
("high", "medium"): "P2",
("high", "low"): "P3",
("medium", "critical"): "P2",
("medium", "high"): "P2",
("medium", "medium"): "P3",
("medium", "low"): "P4",
("low", "critical"): "P3",
("low", "high"): "P3",
("low", "medium"): "P4",
("low", "low"): "P4",
}
AUTO_ESCALATION_TRIGGERS = {
"ransomware_detected": "P1",
"domain_admin_compromise": "P1",
"active_data_exfiltration": "P1",
"multiple_hosts_malware": "P1",
"critical_infrastructure_alert": "P1",
"executive_account_anomaly": "P2",
"insider_threat_indicator": "P2",
"brute_force_success": "P2",
}
class Incident:
"""Represents a security incident with escalation tracking."""
def __init__(self, incident_id: str, title: str, severity_score: str,
asset_criticality: str, incident_type: str):
self.incident_id = incident_id
self.title = title
self.incident_type = incident_type
self.created = datetime.utcnow()
# Calculate priority
if incident_type in AUTO_ESCALATION_TRIGGERS:
self.priority = AUTO_ESCALATION_TRIGGERS[incident_type]
else:
self.priority = ASSET_CRITICALITY_MAP.get(
(severity_score, asset_criticality), "P3"
)
self.config = SEVERITY_CONFIG[self.priority]
self.current_tier = self.config["assigned_tier"]
self.status = "open"
self.escalation_history = []
self.resolved_at = None
def check_sla_compliance(self) -> dict:
now = datetime.utcnow()
elapsed_min = (now - self.created).total_seconds() / 60
response_sla_met = elapsed_min <= self.config["initial_response_min"] or self.status != "open"
resolution_target_min = self.config["resolution_target_hours"] * 60
if self.resolved_at:
resolution_min = (self.resolved_at - self.created).total_seconds() / 60
resolution_sla_met = resolution_min <= resolution_target_min
else:
resolution_sla_met = elapsed_min <= resolution_target_min
return {
"incident_id": self.incident_id,
"priority": self.priority,
"elapsed_minutes": round(elapsed_min, 1),
"response_sla_met": response_sla_met,
"resolution_sla_met": resolution_sla_met,
"response_sla_min": self.config["initial_response_min"],
"resolution_sla_min": resolution_target_min,
"needs_escalation": not resolution_sla_met and self.status == "open",
}
def escalate(self, to_tier: int, reason: str):
self.escalation_history.append({
"from_tier": self.current_tier,
"to_tier": to_tier,
"reason": reason,
"timestamp": datetime.utcnow().isoformat(),
})
self.current_tier = to_tier
def resolve(self):
self.status = "resolved"
self.resolved_at = datetime.utcnow()
class EscalationMatrix:
"""Manages the SOC escalation matrix and tracks incidents."""
def __init__(self):
self.incidents = []
def create_incident(self, incident_id: str, title: str, severity: str,
asset_criticality: str, incident_type: str) -> Incident:
incident = Incident(incident_id, title, severity, asset_criticality, incident_type)
self.incidents.append(incident)
return incident
def get_sla_report(self) -> dict:
report = {"total": len(self.incidents), "by_priority": {}, "sla_breaches": 0}
for priority in ["P1", "P2", "P3", "P4"]:
priority_incidents = [i for i in self.incidents if i.priority == priority]
breaches = sum(1 for i in priority_incidents if not i.check_sla_compliance()["resolution_sla_met"])
report["by_priority"][priority] = {
"count": len(priority_incidents),
"resolved": sum(1 for i in priority_incidents if i.status == "resolved"),
"open": sum(1 for i in priority_incidents if i.status == "open"),
"sla_breaches": breaches,
}
report["sla_breaches"] += breaches
return report
def get_escalation_summary(self) -> dict:
total_escalations = sum(len(i.escalation_history) for i in self.incidents)
tier_distribution = {1: 0, 2: 0, 3: 0}
for i in self.incidents:
if i.current_tier in tier_distribution:
tier_distribution[i.current_tier] += 1
return {
"total_incidents": len(self.incidents),
"total_escalations": total_escalations,
"current_tier_distribution": tier_distribution,
}
if __name__ == "__main__":
matrix = EscalationMatrix()
inc1 = matrix.create_incident("INC-001", "Ransomware on Finance Server", "critical", "critical", "ransomware_detected")
inc2 = matrix.create_incident("INC-002", "Failed Brute Force on VPN", "medium", "high", "brute_force_attempt")
inc3 = matrix.create_incident("INC-003", "Suspicious PowerShell on Workstation", "high", "medium", "suspicious_execution")
inc4 = matrix.create_incident("INC-004", "Expired SSL Certificate", "low", "low", "certificate_expiry")
inc5 = matrix.create_incident("INC-005", "Executive Email Compromise Attempt", "high", "critical", "executive_account_anomaly")
# Simulate escalations
inc1.escalate(3, "Ransomware auto-escalation to Tier 3")
inc3.escalate(2, "Analyst escalation - needs deeper investigation")
inc4.resolve()
print("=" * 70)
print("SOC ESCALATION MATRIX REPORT")
print("=" * 70)
for inc in matrix.incidents:
sla = inc.check_sla_compliance()
print(f"\n[{inc.priority}] {inc.incident_id}: {inc.title}")
print(f" Status: {inc.status} | Tier: {inc.current_tier} | Type: {inc.incident_type}")
print(f" Response SLA: {'MET' if sla['response_sla_met'] else 'BREACHED'} ({sla['response_sla_min']}min)")
print(f" Resolution SLA: {'MET' if sla['resolution_sla_met'] else 'AT RISK'} ({sla['resolution_sla_min']}min)")
if inc.escalation_history:
print(f" Escalations: {len(inc.escalation_history)}")
print(f"\n{'=' * 70}")
print("SLA COMPLIANCE REPORT")
print("=" * 70)
report = matrix.get_sla_report()
for priority, data in report["by_priority"].items():
if data["count"] > 0:
print(f" {priority}: {data['count']} incidents, {data['resolved']} resolved, {data['sla_breaches']} SLA breaches")