OPEN BETA
OPEN BETA
TENANT-WEITE RISIKOORCHESTRIERUNG

Zenith Engine

Multi-Hop-Angriffspfad-Simulation über einen gerichteten, gewichteten Infrastrukturgraphen — mittels Negativ-Log-Dijkstra auf dem Maximum-Wahrscheinlichkeits-Kompromittierungspfad.

O(V log V)Dijkstra-Komplexität
12Risiko-Dimensionen
90kMonte-Carlo-Läufe
<2 sØ Rechenzeit
EPSSLive-CVE-Gewichtung

// Architektur-Überblick

Zenith überführt passive Scan-Daten in ein adversariales Graphmodell. Jedes Target wird zu einem Knoten; jedes gemeinsam genutzte Infrastrukturelement — IP, ASN, TLS-Zertifikat, CDN-Anbieter, DNS-Nameserver — wird zu einer gerichteten Kante mit einem assoziierten Kompromittierungsgewicht. Die Engine löst dann den optimalen Angriffspfad und berechnet die infrastrukturweiten Blast Radii.

Graphkonstruktion

Knoten entstehen aus Target-Datensätzen. Kanten werden abgeleitet aus:

  • Gemeinsamen /24- oder /16-IP-Subnetzen
  • Identischer ASN (BGP-Peer)
  • Gemeinsamem TLS-Zertifikat-Serial oder Aussteller
  • Gemeinsamem CDN-Edge-Node (Cloudflare, Fastly, Akamai Fingerprint)
  • Identischem DNS-Nameserver-Cluster
  • Gemeinsamer MX- oder SPF-Infrastruktur

Kantengewichtung

Jede Kante trägt ein Kompromittierungsgewicht w ∈ (0,1], berechnet aus:

  • EPSS-Score des höchsten CVE am Quellknoten
  • CVSS-Basiswert normalisiert auf [0,1]
  • Service-Exposition — öffentliche Port-Anzahl × 0,05
  • Zertifikats-Gültigkeit — abgelaufenes Zert = +0,3 Penalty
  • Security-Header-Abdeckung — fehlendes CSP = +0,15
  • WAF/CDN-Schutz — erkannter Schutz = −0,2

Ausgabe-Artefakte

  • Kritischer Pfad: geordnete Knotenliste mit kumulativem P(Kompromittierung)
  • Blast-Radius-Karte: pro Knoten Reichweite und Impact-Score
  • Chokepoint-Liste: Knoten, deren Entfernung den Pfad maximal verlängert
  • Resilience-Delta: simulierte Verbesserung je Remediation-Maßnahme
  • Executive Risk Score: einziger 0–100-Wert mit Trendhistorie

// Pfadfindung — Negativ-Log-Dijkstra

Den Pfad mit der maximalen zusammengesetzten Kompromittierungswahrscheinlichkeit zu finden ist äquivalent zum Finden des kürzesten Pfads im Negativ-Log-Gewichtsraum. Dies bildet das Problem auf Standard-Dijkstra ab — ohne Korrektheitsverlust und mit O(V log V + E) Laufzeit via Min-Heap.

Ziel: maximale zusammengesetzte Wahrscheinlichkeit P(Pfad) = ∏ wᵢ → äquivalent zu min(∑ −log(wᵢ))
Kantengewicht-Transformation vor Graphladen w_transformed(u→v) = −log(w_raw(u→v)) wobei w_raw ∈ (0, 1]
ParameterWertBegründung
Graph-BibliothekNetworkX 3.x + Custom-C-ExtensionDiGraph unterstützt gerichtete Pfade und Zentralitäts-Algorithmen
Heap-ImplementierungPython heapq (binärer Min-Heap)O(log V) Push/Pop, ausreichend für ≤10k Knoten
Max. Graphgröße50.000 Knoten / 500.000 KantenSpeicher-Cap: ~2 GB; größere Graphen werden gesampelt
Gewichts-Untergrenzew_raw ≥ 0,001Verhindert −log(0) = ∞; selbst gehärtete Hosts haben Restrisiko
Neuberechnungs-TriggerBei jedem ScanResult-ÄnderungseventGraph wird invalidiert und beim nächsten Zenith-Aufruf neu gebaut

// Monte-Carlo-Adversar-Simulation

Deterministische Pfadfindung liefert den optimalen Pfad unter Durchschnittsbedingungen. Monte-Carlo-Simulation fügt stochastischen Realismus hinzu: Angreifer-Skill-Varianz, Defender-Response-Latenz und Umgebungsrauschen werden über 90.000 unabhängige Läufe gesampelt.

DimensionDetail
Gesamt-Läufe90.000 (3 Personas × 3 Win-Conditions × 10.000 Iterationen)
Persona: OpportunistNutzt nur EPSS ≥ 0,7 CVEs; keine laterale Bewegung; bricht nach 2 fehlgeschlagenen Hops ab
Persona: Advanced Persistent ThreatVollständige laterale Bewegung; Zero-Day-Budget = 1 pro Simulation; Persistenz-Mechanismen modelliert
Persona: InsiderStartet von zufälligem internen Knoten; alle Kanten bidirektional; Credential-Reuse-Wahrscheinlichkeit 0,4
Win-Condition: DatenexfiltrationErreichung eines Knotens mit offenem S3/Blob-Storage oder exponiertem DB-Port
Win-Condition: RansomwareErreichung von ≥ 30 % aller Knoten mit erreichbarem RDP/SMB
Win-Condition: PersistenzErreichung eines Knotens mit CI/CD- oder Registry-Zugriff (Supply-Chain-Pivot)
AusgabeP(Win) pro Persona/Condition, Median-TTB (Time-to-Breach), 95. Perzentil der Pfadlänge

// Live-EPSS- und KEV-Integration

Statische CVSS-Scores sind ein schlechter Prädiktor für Exploitation-Aktivität. Zenith integriert Live-EPSS-Daten (Exploit Prediction Scoring System) von FIRST.org und CISA KEV (Known Exploited Vulnerabilities), um Kanten mit realer Exploitation-Wahrscheinlichkeit zu gewichten.

EPSS-Datenpipeline

  • Täglicher Pull von epss.cyentia.com/epss_scores-YYYY-MM-DD.csv.gz
  • Laden in lokalen SQLite-Cache mit TTL = 24 Std.
  • Komprimiertes CSV: ~10 MB / ~220k CVE-Einträge pro Tag
  • EPSS-Score = Wahrscheinlichkeit der Exploitation innerhalb 30 Tagen

CISA-KEV-Overlay

  • Jeder CVE im CISA-KEV-Katalog erhält EPSS-Untergrenze von 0,90
  • KEV-CVEs umgehen auch den EPSS-≥0,7-Schwellenwert beim Opportunisten
  • KEV-JSON wird alle 6 Std. gepullt und gecacht
  • Kantengewicht wird bei neuem KEV-Eintrag sofort neu berechnet

Kombinierte Gewichtsformel

w = clamp(0,001, 1,0,
  epss × 0,50
  + cvss_norm × 0,25
  + exposure_score × 0,15
  + age_penalty × 0,10)

// API-Endpunkte & Ausgabeformat

EndpunktMethodeBeschreibung
/analytics/zenith/runPOSTVollständige Zenith-Analyse für aktuellen Tenant auslösen
/analytics/zenith/resultGETLetztes gecachtes Ergebnis abrufen (oder 202 wenn noch nicht bereit)
/analytics/zenith/graphGETD3-kompatibles Node/Edge-JSON für Visualisierung
/analytics/zenith/chokepointsGETGeordnete Liste von SPOFs mit Remediation-Empfehlungen
/analytics/zenith/monte-carloGETMonte-Carlo-Simulationsergebnisse pro Persona/Win-Condition
Tenant-GrößeGraph-BuildDijkstraMonte Carlo (90k)Gesamt
Klein (≤50 Targets)~80 ms~5 ms~0,9 s~1,1 s
Mittel (≤500 Targets)~400 ms~35 ms~4,2 s~4,8 s
Groß (≤5.000 Targets)~2,8 s~280 ms~18 s~22 s
XL (≤50.000 Targets)~18 s~2,1 s~90 s*~112 s*