Windows-blokkeer netwerkverkeer ophalen
Categories:
- Windows-blokkeer netwerkverkeer ophalen
Windows-blokkeer netwerkverkeer ophalen
- Windows-blokkeer netwerkverkeer ophalen
- Het is nodig om geblokkeerd verkeer te identificeren, inclusief uitgaande en inkomende richtingen.
- Er zijn twee vormen van blokkering, gebaseerd op verbinding (connection) en gebaseerd op pakket (packet). Het weggooien van pakketten gebeurt vrij vaak en is gebruikelijk, dus is het belangrijk om de reden van het weggooien te onderzoeken. Blokkering op basis van verbinding is meer in lijn met de blokkeringsscenario’s die daadwerkelijk relevant zijn.
- Veel normaal verwerkte berichten worden ook verwijderd, dus is het belangrijk om drop- en block-gedrag te onderscheiden. We richten ons voornamelijk op block-situaties.
Testproject opzetten
WFP werkt voornamelijk in usermode, met een ander deel in kernalmode, waar capaciteit wordt weergegeven in de vorm van een driver. De methode om een testomgeving op te zetten is vrij complex. De aanbevolen methode is om de testmachine te gebruiken als een andere fysieke machine, na compilatie op de ontwikkelmachine, en vervolgens op afstand te debuggen op de testmachine. Vanwege beperkingen kunnen we ook rechtstreeks lokaal debuggen.
- Microsoft WFP Sample project
- Focus only on: Windows-driver-samples\network\trans\WFPSampler
- WFPSampler project handleiding
Compileringsproblemen:
Andere problemen:
Blokgebeurtenis ophalen via audit
Standaard is audit voor WFP uitgeschakeld.
- U kunt audit inschakelen per categorie met behulp van de Group Policy Object Editor MMC-beheerconsole, de lokale beveiligingsbeleid MMC-beheerconsole of de auditpol.exe-opdracht.
- U kunt audit inschakelen per subcategorie met behulp van de auditpol.exe-opdracht.
- Gebruik GUID voor instellingen, anders zijn er lokale problemen in verschillende taalsystemen.
- Audit gebruikt circulaire logboeken van 128KB, geen zorgen over resourceverbruik.
Categorieën https://docs.microsoft.com/en-us/windows/win32/secauthz/auditing-constants
| Category/Subcategory | GUID |
|---|---|
| … | … |
| Object Access | {6997984A-797A-11D9-BED3-505054503030} |
| Policy Change | {6997984D-797A-11D9-BED3-505054503030} |
| … | … |
Object Access subcategorieën en bijbehorende GUID https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpac/77878370-0712-47cd-997d-b07053429f6d
| Object Access Subcategory | Subcategory GUID | Inclusion Setting |
|---|---|---|
| … | … | … |
| Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030} | No Auditing |
| Filtering Platform Connection | {0CCE9226-69AE-11D9-BED3-505054503030} | No Auditing |
| Other Object Access Events | {0CCE9227-69AE-11D9-BED3-505054503030} | No Auditing |
| … | … | … |
Policy Change subcategorieën en bijbehorende GUID:
| Policy Change Subcategory | Subcategory GUID |
|---|---|
| Audit Policy Change | {0CCE922F-69AE-11D9-BED3-505054503030} |
| Authentication Policy Change | {0CCE9230-69AE-11D9-BED3-505054503030} |
| Authorization Policy Change | {0CCE9231-69AE-11D9-BED3-505054503030} |
| MPSSVC Rule-Level Policy Change | {0CCE9232-69AE-11D9-BED3-505054503030} |
| Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030} |
| Other Policy Change Events | {0CCE9234-69AE-11D9-BED3-505054503030} |
# Raadpleeg de auditpol-handleiding: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# Dit gedeelte richt zich voornamelijk op de categorie 'Object Access'
# Haal de opvraagbare velden op
# -v toont GUID, -r toont CSV-rapport
auditpol /list /category /v
auditpol /list /subcategory:* /v
# Haal de auditinstellingen van een bepaalde subcategorie op
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# Zoek GUID
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# Zoek subcategorie
auditpol /list /subcategory:"Object Access","Policy Change" -v
# Back-up
auditpol /backup /file:d:\audit.bak
# Herstel
auditpol /restore /file:d:\audit.bak
# Beleid wijzigen
# **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
# Logboeken lezen
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
ForEach ($line in $($event.Message -split "`r`n")) {
Write-host $event.RecordId ':' $Line
break
}
}
Eventuele uitleg:
| Event ID | Explanation |
|---|---|
| 5031(F) | De Windows Firewall Service blokkeerde een applicatie van het accepteren van inkomende verbindingen op het netwerk. |
| 5150(-) | Het Windows Filtering Platform blokkeerde een pakket. |
| 5151(-) | Een meer restrictief Windows Filtering Platform-filter heeft een pakket geblokkeerd. |
| 5152(F) | Het Windows Filtering Platform heeft een pakket geblokkeerd. |
| 5153(S) | Een meer restrictief Windows Filtering Platform-filter heeft een pakket geblokkeerd. |
| 5154(S) | Het Windows Filtering Platform heeft een applicatie of service toegestaan om te luisteren op een poort voor inkomende verbindingen. |
| 5155(F) | Het Windows Filtering Platform heeft geblokkeerd dat een applicatie of service luistert op een poort voor inkomende verbindingen. |
| 5156(S) | Het Windows Filtering Platform heeft een verbinding toegestaan. |
| 5157(F) | Het Windows Filtering Platform heeft een verbinding geblokkeerd. |
| 5158(S) | Het Windows Filtering Platform heeft een binding toegestaan op een lokaal poort. |
| 5159(F) | Het Windows Filtering Platform heeft een binding geblokkeerd op een lokaal poort. |
Gedetailleerde uitleg van de gebeurtenissen van belang:
- Audit Filtering Platform Packet Drop
-
Dit type gebeurtenis produceert zeer grote hoeveelheden, het wordt aanbevolen om zich te richten op 5157-gebeurtenissen, die bijna dezelfde informatie vastleggen, maar op basis van verbindingen in plaats van op basis van pakketten.
-
Het aantal mislukkingen is meestal erg hoog voor deze subcategorie en wordt meestal gebruikt voor probleemoplossing. Als u geblokkeerde verbindingen moet volgen, is het beter om “5157(F): The Windows Filtering Platform heeft een verbinding geblokkeerd” te gebruiken, omdat het bijna dezelfde informatie bevat en per verbinding, niet per pakket genereert.

-
- Audit Filtering Platform Connection
- Richt zich alleen op mislukkingen, zoals geblokkeerde verbindingen, en volg toegestane verbindingen op verzoek.
- 5031
- Als u geen firewallregels (Allow of Deny) hebt in Windows Firewall voor specifieke toepassingen, krijgt u deze gebeurtenis van de Windows Filtering Platform laag, omdat deze laag standaard elke inkomende verbinding weigert.
51505151- 5155
- 5157
- 5159
Providerinformatie ophalen
# Haal providerinformatie met betrekking tot security op
Get-WinEvent -ListProvider "*Security*" | Select-Object providername,id
# Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
# Haal taakinformatie op die wordt geleverd door de provider
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 |
Blokkeergebeurtenis construeren
Let hierbij zeer op dat bij het construeren van een blokkeergebeurtenis, dit invloed kan hebben op de werking van andere software op de lokale machine!
U kunt op tijd .\WFPSampler.exe -clean gebruiken om de filters te wissen.
Stappen:
-
Schakel de audit-schakelaar in voor Filtering Platform Connection,
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable -
Open Event Viewer, maak een Custom View, maak een filter aan. We richten ons voorlopig alleen op de gebeurtenissen 5155, 5157, 5159.

-
Creëer een filter, gebruik WFPSampler.exe om een filter te maken dat luistert naar lokale poort 80,
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80 -
Gebruik een derde partij (niet IIS) http-server, hier gebruiken we nginx, dat standaard luistert op poort 80, dubbelklik om te starten, dit activeert gebeurtenis 5155

-
Filter herstellen,
.\WFPSampler.exe -clean -
Audit-schakelaar herstellen,
auditpol /set /category:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:disable
# 5155 blocked an application or service from listening on a port for incoming connections
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4
# 5157 blocked a connection
.\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, blocked a bind to a local port
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4
# Other
.\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
# To find a specific Windows Filtering Platform filter by ID, run the following command:
netsh wfp show filters
# To find a specific Windows Filtering Platform layer ID, you need to execute the following command:
netsh wfp show state
Netwerkevenementen (NET_EVENT) monitoren
- Netwerkevenementen ondersteunen enumeratie en abonnement.
- De enumeratiemethode ondersteunt aangepaste filtercriteria en haalt netwerkevenementen binnen een bepaalde periode op.
- De abonnementsmethode kan een callback-functie injecteren om realtime feedback te geven.
Ondersteunde gebeurtenistypes:
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;
Ondersteunde filtercriteria (FWPM_NET_EVENT_ENUM_TEMPLATE):
| Value | Meaning |
|---|---|
| FWPM_CONDITION_IP_PROTOCOL | Het IP-protocolnummer, zoals gespecificeerd in RFC 1700. |
| FWPM_CONDITION_IP_LOCAL_ADDRESS | Het lokale IP-adres. |
| FWPM_CONDITION_IP_REMOTE_ADDRESS | Het externe IP-adres. |
| FWPM_CONDITION_IP_LOCAL_PORT | Het lokale transportprotocol poortnummer. Voor ICMP, het berichttype. |
| FWPM_CONDITION_IP_REMOTE_PORT | Het externe transportprotocol poortnummer. Voor ICMP, de berichtcode. |
| FWPM_CONDITION_SCOPE_ID | De interface IPv6 scope-identificatie. Gereserveerd voor intern gebruik. |
| FWPM_CONDITION_ALE_APP_ID | Het volledige pad van de applicatie. |
| FWPM_CONDITION_ALE_USER_ID | De identificatie van de lokale gebruiker. |
Niet-driver aanroepen kunnen alleen standaard drop-gebeurtenissen ophalen.
Netwerkconnectie (NetConnection) monitoren
In vergelijking met het monitoren van netwerkevenementen, is voor het monitoren van connecties een hogere machtiging vereist. Callback-methode
De oproeper heeft FWPM_ACTRL_ENUM toegang nodig tot de connectieobjectcontainers en FWPM_ACTRL_READ toegang tot de connectieobjecten. Zie Access Control voor meer informatie.
Momenteel niet in geslaagd om netwerkconnecties te monitoren.
Zoek hetzelfde probleem, Receiving in/out traffic stats using WFP user-mode API, hetzelfde fenomeen als ik tijdens mijn onderzoek tegenkwam, de abonnementsfunctie ontvangt geen meldingen, ontvangt geen enkel event, geen foutmeldingen. Iemand wees erop dat in niet-kernmodus alleen drop-gebeurtenissen kunnen worden ontvangen, wat niet voldoet aan de behoefte om blokkeergebeurtenissen te verkrijgen.
Voorbeeld van het toevoegen van een security descriptor: https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports
Application Layer Enforcement (ALE) introductie
- ALE bevat een reeks filters in kernelmodus die stateful filtering ondersteunen.
- ALE-laagfilters kunnen de creatie van verbindingen, poorttoewijzing, socketbeheer, creatie van raw sockets en promiscuous mode ontvangst autoriseren.
- De classificatie van ALE-laagfilters is gebaseerd op verbindingen (connection) of op sockets (socket), terwijl filters op andere lagen alleen op pakketten (packet) kunnen worden geclassificeerd.
- ALE-filterreferenties ale-layers
- Meer filters te raadplegen filtering-layer-identifiers
Coderen
De meeste WFP-functies kunnen zowel in gebruikersmodus als in kernelmodus worden aangeroepen. Echter, functies in gebruikersmodus retourneren DWORD-waarden die Win32-foutcodes vertegenwoordigen, terwijl kernelmodusfuncties NTSTATUS-waarden retourneren die NT-statuscodes vertegenwoordigen. Daarom zijn de functienamen en semantiek hetzelfde tussen gebruikersmodus en kernelmodus, maar verschillen de functiehandtekeningen. Dit vereist afzonderlijke gebruikersmodus- en kernelmodus-specifieke headers. De bestandsnamen van de gebruikersmodus-header eindigen op “u” en de bestandsnamen van de kernelmodus-header eindigen op “k”.
Conclusie
De eis is alleen om te weten dat een gebeurtenis zich heeft voorgedaan, zonder dat deze direct moet worden verwerkt. Bovendien brengt het ontwikkelen van een driver grotere risico’s met zich mee. Daarom is besloten om gebruik te maken van gebeurtenisaudit, door logboekregistratiegebeurtenissen te monitoren om de blokkeergebeurtenissen te verkrijgen. Open een nieuwe thread om NotifyChangeEventLog te gebruiken om logboekregistratiegebeurtenissen te monitoren.
Appendix
WFP-architectuur
WFP (Windows Filter Platform) 
Gegevensstroom
Data flow:
- Een pakket komt binnen in de netwerkstack.
- De netwerkstack vindt en roept een shim aan.
- De shim roept het classificatieproces aan op een bepaalde laag.
- Tijdens classificatie worden filters vergeleken en wordt de resulterende actie uitgevoerd. (Zie Filter Arbitration.)
- Als er calloutfilters worden gematcht tijdens het classificatieproces, worden de bijbehorende callouts aangeroepen.
- De shim reageert op de definitieve filterbeslissing (bijvoorbeeld het pakket weggooien).