Graphentheorie für Security-Architekten: Angriffspfade verstehen

Stell dir vor, du sollst einem Vorstand erklären, warum und wie gerade dieser eine Server der irgendwo in einem Rechenzentrum steht und von dem niemand wusste, dass er überhaupt existiert, dafür gesorgt hat, dass Angreifer bis zu den Unternehmens-Kronjuwelen vorgedrungen sind. Da hilft dir bei der Antwort ein Konzept, das Mathematiker seit dem 18. Jahrhundert kennen: Die Graphentheorie.

Und bevor du jetzt denkst „Noch mehr Mathe, die ich nicht brauche“: Die Graphentheorie ist wahrscheinlich das intuitivste, mathematische Werkzeug, das du je für Security nutzen wirst. Du benutzt sie bereits – du nennst es nur nicht so.

Ein Graph ist erstaunlich simpel: Er besteht aus Knoten (Nodes) und Kanten (Edges). Die Knoten sind Dinge, die Kanten sind Verbindungen zwischen diesen Dingen. Fertig.
Dein Netzwerk ist ein Graph. Jeder Server, jeder Client, jeder Benutzer ist ein Knoten. Jede Netzwerkverbindung, jede Berechtigung, jede Vertrauensbeziehung ist eine Kante. Wenn du ein Netzwerkdiagramm zeichnest, zeichnest du einen Graphen.
Der Unterschied ist: Wenn du einen Graphen mathematisch behandelst, kannst du Fragen stellen und beantworten, die du mit einem hübschen Visio-Diagramm nicht beantworten kannst.

Ein Angreifer beginnt irgendwo. Sagen wir, mit einem kompromittierten Benutzer-Account nach einem erfolgreichen Phishing-Angriff. Von dort will er zu seinem Ziel: dem Domain Admin Rechten oder zu der Datenbank mit Kundendaten oder zu dem Quellcode-Repository.
Der Weg dorthin ist ein Pfad durch den Graphen. Jeder Schritt nutzt eine Kante z.B. eine Berechtigung, eine Schwachstelle, eine Vertrauensbeziehung. Der Angreifer sucht den Pfad mit dem geringsten Widerstand bzw. die geringsten Kosten für ihn.
Und hier wird es interessant: Die Graphentheorie gibt uns die Werkzeuge, um diese Pfade zu analysieren, bevor der Angreifer sie nutzt.

Eine der nützlichsten Metriken ist die Zentralität. Sie misst, wie „wichtig“ ein Knoten im Graphen ist. Es gibt verschiedene Arten von Zentralität, und jede erzählt eine andere Geschichte.

Betweenness Centrality misst, wie oft ein Knoten auf den kürzesten Wegen zwischen anderen Knoten liegt. Ein Server mit hoher Betweenness Centrality ist ein Nadelöhr – viele Pfade führen durch ihn hindurch. Wenn ein Angreifer diesen Server kontrolliert, kontrolliert er viele mögliche Angriffspfade gleichzeitig.
Das ist oft der Server, den niemand auf dem Radar hatte. Kein Kronjuwel, kein kritisches System nach klassischer Definition. Aber ein Knotenpunkt, durch den alles fließt. Der perfekte Pivot-Point für laterale Bewegung.

Closeness Centrality misst, wie schnell ein Knoten alle anderen erreichen kann. Ein System mit hoher Closeness ist in den falschen Händen sehr gefährlich, weil es kurze Wege zu vielen Zielen bietet.

Degree Centrality ist die einfachste: Wie viele Verbindungen hat ein Knoten? Ein System mit hundert Verbindungen hat eine größere Angriffsfläche als eines mit fünf – aber es kann auch ein legitimer Hub sein, den du nicht einfach isolieren kannst.

In der Security-Forschung gibt es ein eigenes Feld namens Attack Graph Analysis. Die Idee: Man modelliert alle möglichen Angriffspfade als gerichteten Graphen. Jeder Knoten repräsentiert einen Systemzustand oder eine Berechtigung, jede Kante einen möglichen Angriffsschritt.
Aus diesem Graphen kann man dann ableiten: Welche Schwachstellen müssen in welcher Kombination ausgenutzt werden, um ein bestimmtes Ziel zu erreichen? Welche Systeme sind kritisch, weil sie auf vielen Angriffspfaden liegen? Wo würde eine einzelne Härtungsmaßnahme die meisten Pfade unterbrechen?
Tools wie BloodHound für Active Directory machen genau das – sie bauen einen Graphen der Berechtigungsbeziehungen und zeigen dir, wie ein Angreifer vom kompromittierten User zum Domain Admin gelangen kann. Wenn du BloodHound noch nicht kennst: Das ist Graphentheorie in Aktion, verpackt in ein benutzerfreundliches Interface.

Hier wird die Graphentheorie praktisch. Du hast ein begrenztes Budget für Härtungsmaßnahmen. Wo investierst du?

Die naive Antwort: Bei den kritischen Systemen. Das Problem: Was ist „kritisch“? Nach klassischer Definition sind es die Kronjuwelen – die Datenbank mit den Kundendaten, der Domain Controller, das ERP-System.

Die graphentheoretische Antwort ist subtiler: Kritisch sind die Systeme mit hoher Betweenness Centrality auf Pfaden zu den Kronjuwelen. Das können ganz andere Systeme sein – Jumpserver, Management-Interfaces, veraltete Applikationen, die zufällig zu viele Berechtigungen haben.

Wenn du einen Knoten mit hoher Betweenness härtst, unterbrichst du viele Pfade gleichzeitig. Das ist effizienter, als jeden einzelnen Endpunkt zu härten.

Natürlich ist ein Graph eine Vereinfachung der Realität. Nicht jede Verbindung ist gleich einfach zu nutzen. Nicht jeder Angriffspfad ist gleich wahrscheinlich. Ein Graph ohne Gewichtung behandelt alle Kanten gleich – das ist unrealistisch.
Deshalb arbeiten fortgeschrittene Modelle mit gewichteten Graphen. Die Gewichtung kann die Schwierigkeit eines Angriffsschritts repräsentieren, die Wahrscheinlichkeit einer erfolgreichen Exploitation, die Zeit, die ein Angreifer braucht. Mit diesen Gewichtungen werden die Analysen realistischer aber auch komplexer.
Ein weiteres Problem: Der Graph ist nur so gut wie die Daten, die ihn füttern. Wenn du nicht weißt, welche Verbindungen existieren, welche Berechtigungen vergeben sind, welche Schwachstellen offen sind, dann ist dein Graph unvollständig. Graphentheorie ersetzt nicht die grundlegende Arbeit der Inventarisierung und Dokumentation. Es gilt wie immer: Garbage in – Garbage out. 

Hier sind fünf Fragen, die du mit einem graphentheoretischen Ansatz beantworten kannst.

Welche Systeme liegen auf den kürzesten Wegen zwischen dem Internet und meinen Kronjuwelen? Das sind deine kritischen Pfade. Jedes dieser Systeme verdient besondere Aufmerksamkeit.

Welche Systeme haben die höchste Betweenness Centrality? Das sind deine Nadelöhre. Wenn eines davon kompromittiert wird, öffnen sich viele Türen.

Gibt es alternative Pfade, wenn ich einen Knoten entferne? Wenn die Antwort ja ist, bringt das Härten dieses Knotens weniger als gedacht. Du musst die Alternativen mitbetrachten.

Welche Kombination von Schwachstellen führt zum Ziel? Einzelne Schwachstellen sind oft nicht kritisch. Aber in Kombination, entlang eines Pfades, werden sie zum Problem.

Wie verändert sich der Graph, wenn ich eine neue Anwendung einführe? Jede neue Komponente fügt Knoten und Kanten hinzu. Die Frage ist, ob sie neue Pfade zu kritischen Zielen öffnet.

Du musst nicht bei null anfangen. Es gibt Werkzeuge, die dir helfen.
BloodHound ist der Klassiker für Active Directory-Umgebungen. Es visualisiert Berechtigungsbeziehungen und findet Angriffspfade automatisch. Wenn du ein Windows-Netzwerk betreibst und BloodHound nicht kennst, ist heute ein guter Tag, das zu ändern.
Graph-Datenbanken wie Neo4j sind das Backend vieler Security-Analyse-Tools. Sie sind darauf optimiert, Beziehungen zu speichern und Pfade zu finden.
Für die mathematischen Algorithmen selbst gibt es Bibliotheken in jeder gängigen Programmiersprache. NetworkX für Python, igraph für R, JGraphT für Java. Du musst die Algorithmen nicht selbst implementieren.

Das Wichtigste an der Graphentheorie für Security ist nicht die Mathematik selbst. Es ist die Denkweise.
Wenn du anfängst, dein Netzwerk als Graph zu sehen, stellst du andere Fragen. Du fragst nicht nur: Ist dieses System sicher? Du fragst: Wie verbindet sich dieses System mit anderen? Welche Pfade ermöglicht es? Welche Pfade unterbricht es?
Diese Denkweise macht dich zu einem besseren Architekten. Sie hilft dir, die Konsequenzen von Entscheidungen zu sehen, bevor du sie triffst. Sie gibt dir ein mentales Modell, das über einzelne Komponenten hinausgeht.

Und wenn der Vorstand das nächste Mal fragt, warum dieser eine Server so kritisch war: Du hast eine Antwort. Er lag auf dem kürzesten Pfad zum Ziel. Er hatte die höchste Betweenness Centrality. Er war das Nadelöhr, durch das der Angreifer musste und durch das er auch schlussendlich gegangen ist.

Das ist keine Ausrede. Das ist eine Erklärung. Und noch wichtiger: Es ist eine Grundlage, um es beim nächsten Mal besser zu machen.

Weiterführend: Das Paper „Tools for Generating and Analyzing Attack Graphs“ von Sheyner et al. ist ein Klassiker. Für praktische Anwendung empfehle ich, mit BloodHound zu experimentieren – auch wenn du denkst, dein AD sei gut aufgestellt.