Windows-Netzwerkverkehr blockieren und abrufen

  • Windows-Netzwerkverkehr blockieren und abrufen

Windows Netzwerkverkehr blockieren und abrufen

  • Es ist notwendig, den blockierten Datenverkehr zu identifizieren, einschließlich eingehender und ausgehender Richtungen.
  • Blockierung erfolgt in zwei Formen: basierend auf Verbindungen (connection) und basierend auf Paketen (packet). Paketverwerfung ist häufiger und üblich, daher muss der Verwerfungsgrund überprüft werden. Blockierung auf Verbindungsebene entspricht eher den tatsächlichen Blockierungsszenarien, die beachtet werden müssen.
  • Viele normale Pakete werden ebenfalls verworfen, daher müssen Drop- und Block-Aktionen unterschieden werden. Wir konzentrieren uns hauptsächlich auf Block-Szenarien.

Testprojekt einrichten

WFP arbeitet hauptsächlich im Usermode, ein Teil davon im Kernelmode, wobei die Fähigkeiten in Form von Treibern bereitgestellt werden. Die Einrichtung einer Testumgebung ist komplex. Die empfohlene Methode ist, eine andere physische Maschine als Testgerät zu verwenden, nachdem auf der Entwicklermaschine kompiliert wurde, Remote-Debugging auf dem Testgerät durchzuführen. Aufgrund von Einschränkungen können wir auch lokal debuggen.

Kompilierungsprobleme:

Andere Probleme:

Block-Ereignisse über Audit abrufen

Standardmäßig ist das Audit für WFP deaktiviert.

  • Das Audit kann pro Kategorie über die Gruppenrichtlinien-Editor MMC-Verwaltungseinheit, die lokale Sicherheitsrichtlinien MMC-Verwaltungseinheit oder den Befehl auditpol.exe aktiviert werden.
  • Das Audit kann pro Unterkategorie über den Befehl auditpol.exe aktiviert werden.
  • GUIDs sollten für die Einstellungen verwendet werden, um Probleme mit Lokalisierung in Systemen unterschiedlicher Sprachen zu vermeiden.
  • Audit verwendet zirkuläres Logging, 128KB, daher keine Bedenken hinsichtlich Ressourcenverbrauch.

Kategorienhttps://docs.microsoft.com/en-us/windows/win32/secauthz/auditing-constants

Category/Subcategory GUID
Objektzugriff {6997984A-797A-11D9-BED3-505054503030}
Richtlinienänderung {6997984D-797A-11D9-BED3-505054503030}

Objektzugriff Unterkategorien und entsprechende GUIDs https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpac/77878370-0712-47cd-997d-b07053429f6d

Objektzugriff Unterkategorie Unterkategorie GUID Einschluss-Einstellung
Filterplattform Paketverwerfung {0CCE9225-69AE-11D9-BED3-505054503030} Kein Audit
Filterplattform Verbindung {0CCE9226-69AE-11D9-BED3-505054503030} Kein Audit
Andere Objektzugriffsereignisse {0CCE9227-69AE-11D9-BED3-505054503030} Kein Audit

Richtlinienänderung Unterkategorien und entsprechende GUIDs:

Richtlinienänderung Unterkategorie Unterkategorie GUID
Audit-Richtlinienänderung {0CCE922F-69AE-11D9-BED3-505054503030}
Authentifizierungsrichtlinienänderung {0CCE9230-69AE-11D9-BED3-505054503030}
Autorisierungsrichtlinienänderung {0CCE9231-69AE-11D9-BED3-505054503030}
MPSSVC Regelniveau-Richtlinienänderung {0CCE9232-69AE-11D9-BED3-505054503030}
Filterplattform-Richtlinienänderung {0CCE9233-69AE-11D9-BED3-505054503030}
Andere Richtlinienänderungsereignisse {0CCE9234-69AE-11D9-BED3-505054503030}
# Handbuch zu auditpol: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# Dieser Abschnitt konzentriert sich hauptsächlich auf die Kategorie 'Objektzugriff'
# Verfügbare Felder abrufen
# -v zeigt GUIDs an, -r zeigt CSV-Bericht
auditpol /list /category /v
auditpol /list /subcategory:* /v
# Einstellungen einer bestimmten Unterkategorie abrufen
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# GUID abfragen
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# Unterkategorie suchen
auditpol /list /subcategory:"Object Access","Policy Change" -v
# Backup
auditpol /backup /file:d:\audit.bak
# Wiederherstellen
auditpol /restore /file:d:\audit.bak
# Richtlinie ändern
# **Policy Change**    | {6997984D-797A-11D9-BED3-505054503030}
auditpol /set /category:"{6997984D-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9233-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable

# **Object Access**    | {6997984A-797A-11D9-BED3-505054503030}
auditpol /get /category:"{6997984A-797A-11D9-BED3-505054503030}"
auditpol /set /category:"{6997984A-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9225-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# Filtering Platform Connection  | {0CCE9226-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# Ereignisse lesen
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
    ForEach ($line in $($event.Message -split "`r`n")) {
        Write-host $event.RecordId ':' $Line
        break
    }
}

Ereigniserklärungen:

Event ID Erklärung
5031(F) Der Windows Firewall Service blockierte eine Anwendung beim Annahme eingehender Verbindungen im Netzwerk.
5150(-) Die Windows Filtering Platform blockierte ein Paket.
5151(-) Ein restriktiverer Windows Filtering Platform Filter hat ein Paket blockiert.
5152(F) Die Windows Filtering Platform hat ein Paket blockiert.
5153(S) Ein restriktiverer Windows Filtering Platform Filter hat ein Paket blockiert.
5154(S) Die Windows Filtering Platform hat es einer Anwendung oder einem Dienst erlaubt, auf einem Port auf eingehende Verbindungen zu lauschen.
5155(F) Die Windows Filtering Platform hat blockiert, dass eine Anwendung oder ein Dienst auf einem Port auf eingehende Verbindungen lauscht.
5156(S) Die Windows Filtering Platform hat eine Verbindung erlaubt.
5157(F) Die Windows Filtering Platform hat eine Verbindung blockiert.
5158(S) Die Windows Filtering Platform hat ein Binden an einen lokalen Port erlaubt.
5159(F) Die Windows Filtering Platform hat ein Binden an einen lokalen Port blockiert.

Detaillierte Erklärungen der Ereignisse, auf die wir achten:

  • Audit Filtering Platform Packet Drop
    • Diese Ereignisse werden in sehr großer Menge erzeugt. Es wird empfohlen, das Ereignis 5157 zu beachten, da es nahezu die gleichen Informationen aufzeichnet, aber pro Verbindung und nicht pro Paket.

    • Die Menge der Fehlerereignisse ist für diese Unterkategorie in der Regel sehr hoch und wird typischerweise für die Fehlersuche verwendet. Wenn Sie blockierte Verbindungen überwachen müssen, ist es besser, „5157(F): Die Windows Filtering Platform hat eine Verbindung blockiert“, zu verwenden, da es fast die gleichen Informationen enthält und pro Verbindung und nicht pro Paket generiert wird. Empfehlung 5157

    • 5152

    • 5153

  • Audit Filtering Platform Connection
    • Es wird empfohlen, nur Fehlerereignisse zu beachten, wie blockierte Verbindungen, und je nach Bedarf erlaubte Verbindungen.
    • 5031
      • Wenn Sie keine Firewallregeln (Allow oder Deny) in Windows Firewall für bestimmte Anwendungen haben, erhalten Sie dieses Ereignis aus der Windows Filtering Platform-Schicht, da diese Schicht standardmäßig alle eingehenden Verbindungen blockiert.
    • 5150
    • 5151
    • 5155
    • 5157
    • 5159

Provider-Informationen abrufen

# Sicherheitsbezogene Provider-Informationen abrufen
Get-WinEvent -ListProvider "*Security*"  | Select-Object providername,id
# Microsoft-Windows-Security-Auditing                             54849625-5478-4994-a5ba-3e3b0328c30d
# Provider bereitgestellte Task-Informationen abrufen
Get-WinEvent -ListProvider "Microsoft-Windows-Security-Auditing"  | Select-Object -ExpandProperty tasks
# SE_ADT_OBJECTACCESS_FIREWALLCONNECTION       12810 Filtering Platform Connection          00000000-0000-0000-0000-000000000000
ProviderName Id
Security Account Manager 00000000-0000-0000-0000-000000000000
Security 00000000-0000-0000-0000-000000000000
SecurityCenter 00000000-0000-0000-0000-000000000000
Microsoft-Windows-Security-SPP-UX-GenuineCenter-Logging fb829150-cd7d-44c3-af5b-711a3c31cedc
Microsoft-Windows-Security-Mitigations fae10392-f0af-4ac0-b8ff-9f4d920c3cdf
Microsoft-Windows-VerifyHardwareSecurity f3f53c76-b06d-4f15-b412-61164a0d2b73
Microsoft-Windows-SecurityMitigationsBroker ea8cd8a5-78ff-4418-b292-aadc6a7181df
Microsoft-Windows-Security-Adminless ea216962-877b-5b73-f7c5-8aef5375959e
Microsoft-Windows-Security-Vault e6c92fb8-89d7-4d1f-be46-d56e59804783
Microsoft-Windows-Security-Netlogon e5ba83f6-07d0-46b1-8bc7-7e669a1d31dc
Microsoft-Windows-Security-SPP e23b33b0-c8c9-472c-a5f9-f2bdfea0f156
Microsoft-Windows-Windows Firewall With Advanced Security d1bc9aff-2abf-4d71-9146-ecb2a986eb85
Microsoft-Windows-Security-SPP-UX-Notifications c4efc9bb-2570-4821-8923-1bad317d2d4b
Microsoft-Windows-Security-SPP-UX-GC bbbdd6a3-f35e-449b-a471-4d830c8eda1f
Microsoft-Windows-Security-Kerberos 98e6cfcb-ee0a-41e0-a57b-622d4e1b30b1
Microsoft-Windows-Security-ExchangeActiveSyncProvisioning 9249d0d0-f034-402f-a29b-92fa8853d9f3
Microsoft-Windows-NetworkSecurity 7b702970-90bc-4584-8b20-c0799086ee5a
Microsoft-Windows-Security-SPP-UX 6bdadc96-673e-468c-9f5b-f382f95b2832
Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
Microsoft-Windows-Security-LessPrivilegedAppContainer 45eec9e5-4a1b-5446-7ad8-a4ab1313c437
Microsoft-Windows-Security-UserConsentVerifier 40783728-8921-45d0-b231-919037b4b4fd
Microsoft-Windows-Security-IdentityListener 3c6c422b-019b-4f48-b67b-f79a3fa8b4ed
Microsoft-Windows-Security-EnterpriseData-FileRevocationManager 2cd58181-0bb6-463e-828a-056ff837f966
Microsoft-Windows-Security-Audit-Configuration-Client 08466062-aed4-4834-8b04-cddb414504e5
Microsoft-Windows-Security-IdentityStore 00b7e1df-b469-4c69-9c41-53a6576e3dad

Block-Ereignisse erzeugen

Es ist sehr wichtig darauf zu achten, dass beim Erzeugen von Block-Ereignissen der Betrieb anderer Software auf dem lokalen Rechner beeinträchtigt wird! Sie können .\WFPSampler.exe -clean verwenden, um Filter zu bereinigen.

Vorgehensweise:

  1. Aktivieren Sie den Audit-Schalter für Filtering Platform Connection: auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable

  2. Öffnen Sie den Ereignisanzeiger, erstellen Sie eine benutzerdefinierte Ansicht und ein Filter. Wir konzentrieren uns vorerst nur auf die Ereignisse 5155, 5157 und 5159. Beispiel Filter

  3. Erstellen Sie einen Filter, wir verwenden WFPSampler.exe, um einen Filter zu erzeugen, der das Lauschen auf Port 80 blockiert: .\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80

  4. Verwenden Sie einen Drittanbieter-HTTP-Server (nicht IIS), hier nginx, das standardmäßig Port 80 lauscht. Doppelklicken Sie zum Starten, um das Ereignis 5155 auszulösen Beispiel für ausgelöstes Audit-Ereignis

  5. Filter zurücksetzen: .\WFPSampler.exe -clean

  6. Audit-Schalter zurücksetzen: auditpol /set /category:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:disable

# 5155 blockierte eine Anwendung oder einen Dienst beim Lauschen auf einen Port für eingehende Verbindungen
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4
# 5157 blockierte eine Verbindung
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4
# 5159 blockierte ein Binden an einen lokalen Port
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4

# Sonstiges
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD

# Um einen bestimmten Windows Filtering Platform-Filter anhand der ID zu finden, führen Sie den folgenden Befehl aus:
netsh wfp show filters
# Um eine bestimmte Windows Filtering Platform Layer-ID zu finden, müssen Sie den folgenden Befehl ausführen:
netsh wfp show state

Netzwerkevents (NET_EVENT) überwachen

  • Netzwerkevents unterstützen Enumeration und Abonnement.
  • Enumerationsweise unterstützt benutzerdefinierte Filterbedingungen und erhält Netzwerkevents innerhalb eines bestimmten Zeitraums.
  • Abonnementweise kann eine Callback-Funktion injizieren, die Echtzeit-Feedback liefert.

Unterstützte Ereignistypen:

typedef enum FWPM_NET_EVENT_TYPE_ {
  FWPM_NET_EVENT_TYPE_IKEEXT_MM_FAILURE = 0,
  FWPM_NET_EVENT_TYPE_IKEEXT_QM_FAILURE,
  FWPM_NET_EVENT_TYPE_IKEEXT_EM_FAILURE,
  FWPM_NET_EVENT_TYPE_CLASSIFY_DROP,
  FWPM_NET_EVENT_TYPE_IPSEC_KERNEL_DROP,
  FWPM_NET_EVENT_TYPE_IPSEC_DOSP_DROP,
  FWPM_NET_EVENT_TYPE_CLASSIFY_ALLOW,
  FWPM_NET_EVENT_TYPE_CAPABILITY_DROP,
  FWPM_NET_EVENT_TYPE_CAPABILITY_ALLOW,
  FWPM_NET_EVENT_TYPE_CLASSIFY_DROP_MAC,
  FWPM_NET_EVENT_TYPE_LPM_PACKET_ARRIVAL,
  FWPM_NET_EVENT_TYPE_MAX
} FWPM_NET_EVENT_TYPE;

Unterstützte Filterbedingungen (FWPM_NET_EVENT_ENUM_TEMPLATE):

Wert Bedeutung
FWPM_CONDITION_IP_PROTOCOL Die IP-Protokollnummer, wie in RFC 1700 angegeben.
FWPM_CONDITION_IP_LOCAL_ADDRESS Die lokale IP-Adresse.
FWPM_CONDITION_IP_REMOTE_ADDRESS Die entfernte IP-Adresse.
FWPM_CONDITION_IP_LOCAL_PORT Die lokale Transportprotokoll-Portnummer. Für ICMP den Nachrichtentyp.
FWPM_CONDITION_IP_REMOTE_PORT Die entfernte Transportprotokoll-Portnummer. Für ICMP den Nachrichtencode.
FWPM_CONDITION_SCOPE_ID Der Schnittstellen-IPv6-Bereichsbezeichner. Für internen Gebrauch reserviert.
FWPM_CONDITION_ALE_APP_ID Der vollständige Pfad der Anwendung.
FWPM_CONDITION_ALE_USER_ID Die Identifikation des lokalen Benutzers.

Nicht-Treiber-Aufrufe können nur normale Drop-Ereignisse erhalten.

Netzwerkverbindungen (NetConnection) überwachen

Im Vergleich zur Überwachung von Netzwerkevents erfordert die Überwachung von Verbindungen höhere Berechtigungen. Callback-Verfahren

Der Aufrufer benötigt FWPM_ACTRL_ENUM-Zugriff auf die Container der Verbindungsobjekte und FWPM_ACTRL_READ-Zugriff auf die Verbindungsobjekte. Weitere Informationen finden Sie unter Access Control.

Überwachung von Netzwerkverbindungen war bisher nicht erfolgreich.

Gleiche Probleme gefunden, Receiving in/out traffic stats using WFP user-mode API, gleiche Phänomene wie in meiner Untersuchung, die Abonnementfunktion erhält keine Rückmeldungen, keine Ereignisse, keine Fehler. Jemand hat darauf hingewiesen, dass im Nicht-Kernelmodus nur Drop-Ereignisse gemeldet werden können, was nicht ausreicht, um Blockierungsereignisse zu erhalten.

Beispiel zum Hinzufügen von Sicherheitsdeskriptoren: https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports

Application Layer Enforcement (ALE) Einführung

  • ALE umfasst eine Reihe von Filtern im Kernelmodus, die Zustandsfilterung unterstützen.
  • ALE-Ebene Filter können die Erstellung von Verbindungen, Portzuweisungen, Socket-Management, Raw-Socket-Erstellung und promiskuitiven Empfang autorisieren.
  • ALE-Ebene Filter werden entweder nach Verbindung (connection) oder nach Socket klassifiziert, während Filter auf anderen Ebenen nur nach Paket klassifiziert werden können.
  • ALE-Filter-Referenz ale-layers

Codierung

Die meisten WFP-Funktionen können sowohl aus Usermode als auch aus Kernelmode aufgerufen werden. Allerdings geben Usermode-Funktionen DWORD-Werte zurück, die Win32-Fehlercodes darstellen, während Kernelmode-Funktionen NTSTATUS-Werte zurückgeben, die NT-Statuscodes darstellen. Daher sind Funktionsnamen und Semantik zwischen Usermode und Kernelmode gleich, aber die Funktions-Signaturen unterscheiden sich. Dies erfordert separate Header für Usermode und Kernelmode-spezifische Funktionsprototypen. Usermode-Header enden mit “u”, Kernelmode-Header mit “k”.

Fazit

Die Anforderung erfordert nur das Wissen um das Eintreten von Ereignissen, nicht die sofortige Verarbeitung von Ereignissen. Außerdem bringt die Entwicklung von Treibern ein höheres Risiko mit sich. Daher wird beschlossen, die Ereignisüberwachung zu verwenden und Ereignisse durch Überwachung von Protokollaufzeichnungen zu erhalten. Ein neuer Thread wird erstellt, um NotifyChangeEventLog zu verwenden, um Protokollaufzeichnungsereignisse zu überwachen.

Anhang

WFP-Architektur

WFP (Windows Filter Platform) Grundlegende Architektur der Windows Filter Plattform

Datenfluss

Datenfluss:

  1. Ein Paket kommt in den Netzwerkstapel.
  2. Der Netzwerkstapel findet und ruft ein Shim auf.
  3. Das Shim ruft den Klassifizierungsprozess auf einer bestimmten Ebene auf.
  4. Während der Klassifizierung werden Filter abgeglichen und die resultierende Aktion ausgeführt. (Siehe Filterarbitrierung.)
  5. Wenn während des Klassifizierungsprozesses Callout-Filter abgeglichen werden, werden die entsprechenden Callouts aufgerufen.
  6. Das Shim agiert entsprechend der endgültigen Filterentscheidung (z. B. Paket verwerfen).