NSG- und VNet-Flow-Logs analysieren: Exfiltration erkennen
NSG- und VNet-Flow-Logs in der Incident Response analysieren: Tupelformate, Bytes und Flow-Zustände, Exfiltration, Mining, Angreifer-IPs und blinde Flecken.
Kurz gesagt. Flow-Logs sind Layer-4-Aufzeichnungen jedes Flows durch Ihre NSGs (NSG-Flow-Logs) oder VNets (VNet-Flow-Logs), die jede Minute als Tupel in ein Speicherkonto geschrieben werden: Zeitstempel, Quelle, Ziel, Ports, Protokoll, Richtung, Entscheidung oder Zustand und – bei NSG v2 und VNet-Flow-Logs – Pakete und Bytes je Richtung. In der Incident Response beantworten sie drei Fragen: Hat eine kompromittierte VM mit der IP des Angreifers gesprochen, sind viele Daten an eine einzelne Adresse abgeflossen, und erreicht etwas Mining-Pools oder Verwaltungsports? NSG-Flow-Logs werden am 30. September 2027 eingestellt; VNet-Flow-Logs ersetzen sie. Internet-Clients, die direkt aus einem Speicherkonto herunterladen, sehen Flow-Logs nicht.
Flow-Logs sind das unscheinbarste Azure-Log und oft das, das den Fall abschließt. Das Activity Log sagt „Run Command um 02:19“; das Flow-Log sagt „um 02:20 hat die VM 46 KB von der Angreifer-IP über Port 80 geladen“. Das ist der Unterschied zwischen Verdacht und Bestätigung.
Zwei Formate, eine Idee
| NSG-Flow-Logs | VNet-Flow-Logs | |
|---|---|---|
| Umfang | Eine Netzwerksicherheitsgruppe | Ein ganzes virtuelles Netzwerk (Subnetze, NICs) |
| Status | Einstellung am 2027-09-30; keine Neuanlage mehr möglich | Aktuell |
| Speichercontainer | insights-logs-networksecuritygroupflowevent | insights-logs-flowlogflowevent |
| Datensatzkategorie | NetworkSecurityGroupFlowEvent | FlowLogFlowEvent |
| Zeitstempel im Tupel | Unix-Sekunden | Unix-Millisekunden |
| Protokoll | T / U | IANA-Nummer (6 = TCP, 17 = UDP) |
| Entscheidung | Eigenes Feld A / D | Flow-Zustand D für abgelehnt |
| Bytes / Pakete | Nur Version 2 | Ja, zusätzlich Verschlüsselungsstatus |
Beide werden in Intervallen von einer Minute geschrieben (NSG-Flow-Logs, VNet-Flow-Logs). Ein NSG-Tupel der Version 2:
1542110379,10.5.16.4,203.0.113.117,59932,443,T,O,A,E,1,66,1,66
bedeutet: Zeit, Quell-IP, Ziel-IP, Quellport, Zielport, TCP, ausgehend, erlaubt, Flow beendet, 1 Paket / 66 Bytes gesendet, 1 Paket / 66 Bytes empfangen. Ein VNet-Tupel:
1663146003606,10.0.0.6,192.0.2.180,23956,443,6,O,E,NX,3,767,2,1580
ergänzt den Verschlüsselungsstatus (NX = unverschlüsselt) und nutzt Millisekunden und IANA-Protokollnummern.
Bytes richtig zählen
Die Flow-Zustände sind B (Beginn, keine Zähler), C (Fortsetzung, bei langen Flows Zähler alle fünf Minuten) und E (Ende, finale Zähler); VNet-Flow-Logs ergänzen D (abgelehnt). Microsoft gibt an, dass die C- und E-Zähler seit dem vorherigen Tupel des Flows kumuliert sind – die Summe einer Konversation ist also die Summe aller C- und E-Tupel, nicht das letzte. Wer das ignoriert, zählt doppelt oder zu wenig.
Zwei weitere Fallen aus Microsofts Dokumentation:
- Bei NSG-Flow-Logs werden Flows, die nicht standardmäßige eingehende TCP-Regeln treffen, zustandslos behandelt, und ihre Byte- und Paketzähler werden nicht erfasst; VNet-Flow-Logs unterstützen Bytes und Pakete auch bei zustandslosen Flows.
- VMs ohne öffentliche IP können trotzdem eingehende Tupel von Internetadressen auf SNAT-Ports zeigen; der Versuch wird protokolliert, obwohl Azure ihn nicht zustellt.
Wonach Sie suchen
| Muster | Warum es wichtig ist | Regel des Analyzers |
|---|---|---|
| Jeder Flow zwischen einer VM und einer IP, die schon in anderen Befunden vorkommt (die IP, die Run Command ausgeführt, den Tresor gelesen hat …) | Verbindet den Angreifer auf der Steuerungsebene mit der Aktivität auf der VM: zweite Stufe, C2, Exfiltration | AZ-NET-004, hoch |
| Mehr als 500 MB ausgehend aus dem Netzwerk an eine einzelne öffentliche IP | Kandidat für Exfiltration (T1048) | AZ-NET-003, mittel |
| Ausgehend zu Ports, die für Mining-Pools typisch sind (3333, 4444, 5555, 7777, 14433, 14444, 45560, 45700) | Kryptomining (T1496) | AZ-NET-002, hoch |
| Erlaubter eingehender Verkehr von öffentlichen IPs auf 22, 3389, 5985, 5986 | Offene Verwaltungsports (T1133) | AZ-NET-001, mittel |
| Abgelehnte eingehende Scans | Hintergrundrauschen auf jeder öffentlichen IP | — (nur Kontext) |
AZ-NET-004 ist am wertvollsten, weil sie keinen Schwellenwert braucht: Sobald der Analyzer eine Angreifer-IP aus dem Activity Log, Key Vault oder den Storage-Logs kennt, ist jeder Flow zu oder von dieser IP ein Beleg. Die Mining-Portliste ist eine Heuristik; Dienste, die diese Ports legitim nutzen, greifen ebenfalls.
Wie der Analyzer mit dem Volumen umgeht
Ein aktives Subnetz schreibt Millionen Tupel pro Tag. Der Azure Forensics Analyzer speichert sie nie einzeln: Er aggregiert je Konversation (Quelle, Ziel, Zielport, Protokoll, Richtung, Entscheidung) mit erstem und letztem Auftreten, Tupelanzahl sowie summierten Paketen und Bytes. Der Reiter Entitäten zeigt dann je IP die gesendeten und empfangenen Summen – der schnellste Weg, „die eine Adresse, die 40 GB empfangen hat“, zu finden.
Seien Sie beim Export trotzdem wählerisch: Laden Sie nur die Stunden des Vorfalls und die betroffenen VNets oder NSGs herunter. Der Exportleitfaden nennt die Pfade.
Was Flow-Logs nicht sehen
- Direkten Zugriff auf PaaS-Endpunkte von außen. Ein Angreifer, der Blobs mit einer SAS über das Internet herunterlädt, berührt Ihr VNet nie. Nutzen Sie die Storage-Logs.
- Nutzdaten. Flow-Logs sind reine Metadaten: keine URLs, keine TLS-Servernamen, kein Inhalt.
- Verkehr am privaten Endpunkt selbst. Laut Microsoft lässt er sich nur an der Quell-VM erfassen.
- Nicht unterstützte Dienste. Microsoft listet Dienste ohne Flow-Log-Unterstützung, darunter App Service, Azure Functions, Logic Apps und Container Instances.
- Alles vor der Aktivierung der Flow-Logs und alles, was die Aufbewahrung des Speicherkontos bereits gelöscht hat.
Ein kommentiertes Beispiel
Im fiktiven Beispiel der Website startet um 02:19:40 UTC ein Run Command auf vm-app-01. Das VNet-Flow-Log zeigt, wie die VM (10.10.1.4) um 02:20:05 eine Verbindung zur Angreifer-IP über Port 80 öffnet – 812 Bytes gesendet, 46.338 empfangen, die Größe eines kleinen Skripts – und vier Sekunden später über Port 443. Keiner der beiden Flows würde für sich auffallen; beide werden zu Befunden mit hohem Schweregrad, weil die IP bereits im Run-Command-Ereignis vorkommt. Der Fall Schritt für Schritt zeigt die vollständige Kette.
FAQ
Werden NSG-Flow-Logs eingestellt?
Ja. Laut Microsoft werden NSG-Flow-Logs am 30. September 2027 eingestellt, und neue NSG-Flow-Logs können nicht mehr erstellt werden. Flow-Logs für virtuelle Netzwerke (VNet) sind der Ersatz.
Zeigen Flow-Logs, wie viele Daten eine VM verlassen haben?
NSG-Flow-Logs Version 2 und VNet-Flow-Logs enthalten Pakete und Bytes je Richtung in den Fortsetzungs- (C) und End-Tupeln (E). Ihre Summe je Konversation ergibt das Volumen. NSG-Flow-Logs Version 1 haben keine Byte-Zähler.
Zeigen Flow-Logs Downloads aus einem Speicherkonto durch einen externen Angreifer?
Nein. Flow-Logs erfassen den Verkehr der Netzwerkschnittstellen in Ihren virtuellen Netzwerken. Ein Angreifer, der Blobs direkt über das Internet vom Storage-Endpunkt herunterlädt, durchquert Ihr VNet nie; dafür sind die Storage-Ressourcenlogs zuständig.