Obtention du trafic réseau bloqué sous Windows
Categories:
- Obtention du trafic réseau bloqué sous Windows
Obtention du trafic réseau bloqué sous Windows
- Obtention du trafic réseau bloqué sous Windows
- Il est nécessaire d’identifier le trafic bloqué, qui comprend les directions entrante et sortante.
- Deux formes de blocage : basé sur la connexion (connection) et basé sur le paquet (packet). Le rejet de paquets est fréquent et courant, nécessitant une revue des raisons du rejet. Le blocage basé sur la connexion correspond mieux aux scénarios de blocage réels à surveiller.
- De nombreux paquets traités normalement sont également rejetés, il faut donc distinguer les actions drop et block. Nous nous concentrons principalement sur les cas de block.
Création d’un projet de test
WFP fonctionne principalement en mode utilisateur, avec une autre partie en mode noyau, dont les capacités se manifestent sous forme de pilotes. La méthode de configuration de l’environnement de test est assez complexe. La méthode recommandée consiste à utiliser une autre machine physique comme machine de test, compiler sur la machine de développement, puis envoyer pour débogage à distance. En raison de contraintes de conditions, nous pouvons également effectuer le débogage localement.
- Projet d’exemple Microsoft WFP
- Se concentrer uniquement sur : Windows-driver-samples\network\trans\WFPSampler
- Guide du projet WFPSampler
Problèmes de compilation:
Autres problèmes:
- Pilote impossible à exécuter
- Comment signer
- Préparation de la machine de test pour le déploiement du pilote
Obtention des événements block via audit
Par défaut, l’audit de WFP est désactivé.
- L’audit peut être activé par catégorie via l’unité de gestion du Gestionnaire d’objets de stratégie de groupe, l’unité de gestion de Stratégie de sécurité locale ou la commande auditpol.exe.
- L’audit peut être activé par sous-catégorie via la commande auditpol.exe.
- Il faut utiliser un GUID pour la configuration, sinon il y a des problèmes de localisation sur différents systèmes linguistiques.
- L’audit utilise des journaux circulaires de 128KB, pas besoin de se soucier de la consommation de ressources.
Catégories 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} |
| … | … |
Sous-catégories Object Access et GUID correspondants 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 |
| … | … | … |
Sous-catégories Policy Change et GUID correspondants :
| 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} |
# Voir le manuel auditpol : https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# Cette section se concentre principalement sur la catégorie 'Object Access'
# Obtenir les champs pouvant être interrogés
# -v affiche le GUID, -r affiche un rapport CSV
auditpol /list /category /v
auditpol /list /subcategory:* /v
# Obtenir les paramètres d'audit pour une sous-catégorie spécifique
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# Interroger le GUID
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# Rechercher la sous-catégorie
auditpol /list /subcategory:"Object Access","Policy Change" -v
# Sauvegarde
auditpol /backup /file:d:\audit.bak
# Restauration
auditpol /restore /file:d:\audit.bak
# Modifier la politique
# **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
# Lire les journaux
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
ForEach ($line in $($event.Message -split "`r`n")) {
Write-host $event.RecordId ':' $Line
break
}
}
Description des événements :
| Event ID | Explanation |
|---|---|
| 5031(F) | Le service Pare-feu Windows a bloqué une application pour accepter les connexions entrantes sur le réseau. |
| 5150(-) | La plateforme de filtrage Windows a bloqué un paquet. |
| 5151(-) | Un filtre plus restrictif de la plateforme de filtrage Windows a bloqué un paquet. |
| 5152(F) | La plateforme de filtrage Windows a bloqué un paquet. |
| 5153(S) | Un filtre plus restrictif de la plateforme de filtrage Windows a bloqué un paquet. |
| 5154(S) | La plateforme de filtrage Windows a autorisé une application ou un service à écouter sur un port pour les connexions entrantes. |
| 5155(F) | La plateforme de filtrage Windows a bloqué une application ou un service pour écouter sur un port pour les connexions entrantes. |
| 5156(S) | La plateforme de filtrage Windows a autorisé une connexion. |
| 5157(F) | La plateforme de filtrage Windows a bloqué une connexion. |
| 5158(S) | La plateforme de filtrage Windows a autorisé une liaison à un port local. |
| 5159(F) | La plateforme de filtrage Windows a bloqué une liaison à un port local. |
Description détaillée des événements à surveiller :
- Audit Filtering Platform Packet Drop
Ces événements se produisent très fréquemment, il est recommandé de se concentrer sur les événements 5157, qui enregistrent presque les mêmes informations, mais 5157 est enregistré par connexion plutôt que par paquet.
Le volume des événements d’échec est généralement très élevé pour cette sous-catégorie et est généralement utilisé pour le dépannage. Si vous devez surveiller les connexions bloquées, il est préférable d’utiliser « 5157(F) : La plateforme de filtrage Windows a bloqué une connexion », car elle contient presque les mêmes informations et se génère par connexion, pas par paquet.

- Audit Filtering Platform Connection
- Il est recommandé de ne surveiller que les événements d’échec, tels que les connexions bloquées, et de surveiller les connexions autorisées selon les besoins.
- 5031
- Si vous n’avez aucune règle de pare-feu (Autoriser ou Refuser) dans le Pare-feu Windows pour des applications spécifiques, vous recevrez cet événement de la couche de plateforme de filtrage Windows, car par défaut cette couche refuse toute connexion entrante.
51505151- 5155
- 5157
- 5159
Obtention des informations du provider
# Obtenir les informations du provider liées à la sécurité
Get-WinEvent -ListProvider "*Security*" | Select-Object providername,id
# Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
# Obtenir les informations sur les tâches fournies par le 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 |
Construction des événements block
Il est très important de noter que lors de la construction d’événements block, cela affectera le fonctionnement d’autres logiciels locaux !
Vous pouvez utiliser .\WFPSampler.exe -clean pour nettoyer les filtres rapidement.
Étapes opérationnelles :
Ouvrez l’audit pour Filtering Platform Connection,
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enableOuvrez Event Viewer, créez une Custom View, créez un filtre, nous ne surveillons temporairement que les événements 5155, 5157, 5159.

Créez un filtre, nous utilisons WFPSampler.exe pour créer un filtre, bloquant l’écoute du port 80 local,
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80Utilisez un serveur http tiers (non IIS), ici nginx, écoutant par défaut le port 80, double-cliquez pour lancer, ce qui déclenche l’événement 5155

Restaurez le filtre,
.\WFPSampler.exe -cleanRestaurez l’audit,
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
Surveillance des événements réseau (NET_EVENT)
- Les événements réseau prennent en charge l’énumération et l’abonnement.
- La méthode d’énumération prend en charge des conditions de filtrage personnalisées, permettant d’obtenir des événements réseau sur une période donnée.
- La méthode d’abonnement peut injecter une fonction de rappel pour un retour en temps réel.
Types d’événements pris en charge :
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;
Conditions de filtrage prises en charge (FWPM_NET_EVENT_ENUM_TEMPLATE) :
| Value | Meaning |
|---|---|
| FWPM_CONDITION_IP_PROTOCOL | Le numéro de protocole IP, tel que spécifié dans RFC 1700. |
| FWPM_CONDITION_IP_LOCAL_ADDRESS | L’adresse IP locale. |
| FWPM_CONDITION_IP_REMOTE_ADDRESS | L’adresse IP distante. |
| FWPM_CONDITION_IP_LOCAL_PORT | Le numéro de port du protocole de transport local. Pour ICMP, le type de message. |
| FWPM_CONDITION_IP_REMOTE_PORT | Le numéro de port du protocole de transport distant. Pour ICMP, le code de message. |
| FWPM_CONDITION_SCOPE_ID | L’identifiant de portée IPv6 de l’interface. Réservé pour usage interne. |
| FWPM_CONDITION_ALE_APP_ID | Le chemin complet de l’application. |
| FWPM_CONDITION_ALE_USER_ID | L’identification de l’utilisateur local. |
Les appels non pilotes ne peuvent obtenir que les événements drop ordinaires.
Surveillance des connexions réseau (NetConnection)
Par rapport à la surveillance des événements réseau, la surveillance des connexions nécessite des privilèges plus élevés. Mode de rappel
L’appelant a besoin d’un accès FWPM_ACTRL_ENUM aux conteneurs d’objets de connexion et d’un accès FWPM_ACTRL_READ aux objets de connexion. Voir Contrôle d’accès pour plus d’informations.
La surveillance des connexions réseau n’a pas encore été réussie.
J’ai trouvé le même problème, Receiving in/out traffic stats using WFP user-mode API, identique à ce que j’ai rencontré lors de mes recherches, la fonction d’abonnement ne reçoit aucun rapport, aucun événement, aucune erreur. Activer l’audit et augmenter les privilèges n’ont pas réussi. Quelqu’un a indiqué que le mode non noyau ne peut obtenir que les rapports d’événements drop, ce qui ne répond pas au besoin d’obtenir les événements de blocage.
Exemple d’ajout de descripteur de sécurité : https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports
Introduction à Application Layer Enforcement (ALE)
- ALE comprend une série de filtres en mode noyau, prenant en charge le filtrage d’état.
- Les filtres de la couche ALE peuvent autoriser la création de connexions, l’allocation de ports, la gestion de sockets, la création de sockets bruts et la réception en mode promiscuous.
- Les filtres de la couche ALE sont classés par connexion (connection) ou par socket, alors que les filtres des autres couches ne peuvent être classés que par paquet (packet).
- Pour plus de filtres ALE, voir ale-layers
- Pour plus de filtres, voir filtering-layer-identifiers
Codage
La plupart des fonctions WFP peuvent être appelées en mode utilisateur ou en mode noyau. Cependant, les fonctions en mode utilisateur retournent des valeurs DWORD représentant les codes d’erreur Win32, tandis que les fonctions en mode noyau retournent des valeurs NTSTATUS représentant les codes d’état NT. Par conséquent, les noms et la sémantique des fonctions sont identiques entre le mode utilisateur et le mode noyau, mais les signatures de fonctions diffèrent. Cela nécessite des en-têtes distincts spécifiques au mode utilisateur et au mode noyau pour les prototypes de fonctions. Les noms de fichiers d’en-tête en mode utilisateur se terminent par “u”, et les noms de fichiers d’en-tête en mode noyau se terminent par “k”.
Conclusion
Le besoin ne nécessite que de savoir quand un événement se produit, sans traitement instantané, et le développement de pilotes entraîne davantage de risques. Nous décidons donc d’utiliser l’audit des événements et de surveiller la génération d’événements dans les journaux.
Ouvrir un nouveau thread pour utiliser NotifyChangeEventLog afin de surveiller les événements de journalisation.
Annexe
Architecture WFP
WFP (Windows Filter Platform) 
Flux de données
Flux de données :
- Un paquet arrive dans la pile réseau.
- La pile réseau trouve et appelle un shim.
- Le shim invoque le processus de classification à une couche particulière.
- Pendant la classification, les filtres sont appariés et l’action résultante est prise. (Voir Arbitrage des filtres.)
- Si des filtres de callout sont appariés pendant le processus de classification, les callouts correspondants sont invoqués.
- Le shim agit sur la décision de filtrage finale (par exemple, supprimer le paquet).
Liens de référence
- Types de filtres
- Conditions de filtres disponibles à chaque couche de filtrage
- Codes d’erreur
- Codes d’erreur WFP