Windows'ta Ağ Trafik Engelleme İzleme
Categories:
- Windows’ta Ağ Trafik Engelleme İzleme
Windows’ta Ağ Trafik Engelleme İzleme
- Engellenen trafiği tanımlamak gerekir, hem giden hem de gelen yönlerdeki trafiği içerir.
- Engelleme iki şekilde olur, bağlantı (connection) bazlı ve paket (packet) bazlıdır. Paketlerin düşürülmesi sık görülür ve düşürülme nedeni incelenmelidir. Bağlantı bazlı engelleme ise daha çok ilgilenmemiz gereken senaryolara uygundur.
- Birçok normal paket de düşürülebilir, bu yüzden drop ve block davranışlarını ayırt etmek gerekir. Biz özellikle block durumuna odaklanıyoruz.
Test Ortamı Oluşturma
WFP temel olarak usermode’da çalışır, bir kısmı da kernelmode’da çalışır ve sürücü şeklinde yetenek sunar. Test ortamı kurmak oldukça karmaşık bir iştir. Önerilen yöntem, test makinesi olarak başka bir fiziksel makine kullanmaktır. Geliştirme makinesinde derleme yapıp, test makinesinde uzaktan hata ayıklama yapmaktır. Koşullar kısıtlı olduğundan, doğrudan yerelde hata ayıklama yapabiliriz.
- Microsoft WFP Sample projesi
- Sadece şu klasöre odaklanın: Windows-driver-samples\network\trans\WFPSampler
- WFPSampler proje rehberi
Derleme sorunları:
Diğer sorunlar:
Audit ile block olaylarını izleme
Öntanımlı olarak WFP için audit devre dışı bırakılmıştır.
- Grup politikası nesnesi düzenleyicisi MMC yönetim birimi, yerel güvenlik politikası MMC yönetim birimi veya auditpol.exe komutu ile kategori bazlı audit etkinleştirilebilir.
- auditpol.exe komutu ile alt kategori bazlı audit etkinleştirilebilir.
- Ayarlar için GUID kullanılmalıdır, aksi takdirde farklı dil sistemlerinde yerelleştirme sorunları olur.
- Audit döngüsel günlük kullanır, 128KB olduğundan kaynak tüketimi endişesi yoktur.
Kategori 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 alt kategorileri ve karşılık gelen GUID’ler 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 alt kategorileri ve karşılık gelen GUID’ler:
| 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} |
# auditpol kullanım kılavuzu için: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# Bu bölüm öncelikle 'Object Access' kategorisine odaklanır
# Sorgulanabilecek alanları alın
# -v GUID gösterir, -r csv raporu gösterir
auditpol /list /category /v
auditpol /list /subcategory:* /v
# Belirli bir alt kategori audit ayarını alın
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# GUID sorgula
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# Subcategory ara
auditpol /list /subcategory:"Object Access","Policy Change" -v
# Yedekle
auditpol /backup /file:d:\audit.bak
# Geri yükle
auditpol /restore /file:d:\audit.bak
# Politika değiştir
# **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
# Günlüğü oku
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
ForEach ($line in $($event.Message -split "`r`n")) {
Write-host $event.RecordId ':' $Line
break
}
}
Olay açıklamaları:
| Event ID | Açıklama |
|---|---|
| 5031(F) | Windows Firewall Service blocked an application from accepting incoming connections on the network. |
| 5150(-) | The Windows Filtering Platform blocked a packet. |
| 5151(-) | A more restrictive Windows Filtering Platform filter has blocked a packet. |
| 5152(F) | The Windows Filtering Platform blocked a packet. |
| 5153(S) | A more restrictive Windows Filtering Platform filter has blocked a packet. |
| 5154(S) | The Windows Filtering Platform has permitted an application or service to listen on a port for incoming connections. |
| 5155(F) | The Windows Filtering Platform has blocked an application or service from listening on a port for incoming connections. |
| 5156(S) | The Windows Filtering Platform has permitted a connection. |
| 5157(F) | The Windows Filtering Platform has blocked a connection. |
| 5158(S) | The Windows Filtering Platform has permitted a bind to a local port. |
| 5159(F) | The Windows Filtering Platform has blocked a bind to a local port. |
İlgilenilen olayların ayrıntılı açıklamaları:
- Audit Filtering Platform Packet Drop
-
Bu tür olayların üretimi çok fazladır, 5157 olayına odaklanmanız önerilir, neredeyse aynı bilgileri kaydeder, ancak paket bazlı değil bağlantı bazlıdır.
-
Failure events volume typically is very high for this subcategory and typically used for troubleshooting. If you need to monitor blocked connections, it is better to use “5157(F): The Windows Filtering Platform has blocked a connection,” because it contains almost the same information and generates per-connection, not per-packet.

-
- Audit Filtering Platform Connection
- Başarısız olaylara odaklanmanız önerilir, örneğin engellenen bağlantılar, izin verilen bağlantılara ihtiyacınız varsa odaklanabilirsiniz.
- 5031
- If you don’t have any firewall rules (Allow or Deny) in Windows Firewall for specific applications, you will get this event from Windows Filtering Platform layer, because by default this layer is denying any incoming connections.
51505151- 5155
- 5157
- 5159
Provider bilgisini elde etme
# security ile ilgili provider bilgisini alın
Get-WinEvent -ListProvider "*Security*" | Select-Object providername,id
# Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
# Provider tarafından sunulan task bilgisini alın
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-448c-8b20-c0799086ee5a |
| 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 olayı oluşturma
Block olayı oluştururken, yereldeki diğer yazılımların çalışmasını etkileyebileceğine çok dikkat edin!
Gerektiğinde .\WFPSampler.exe -clean komutu ile filtreleri temizleyebilirsiniz.
İşlem adımları:
-
Filtering Platform Connection audit ayarını açın,
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable -
Event Viewer’ı açın, bir Custom View oluşturun, bir filtre oluşturun, şimdilik 5155, 5157, 5159 olaylarına odaklanıyoruz.

-
Bir filtre oluşturun, WFPSampler.exe kullanarak filtre oluşturuyoruz, yerel 80 portunu engelleyen bir filtre oluşturuyoruz,
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80 -
Üçüncü bir taraf (IIS değil) http sunucu kullanın, burada nginx kullandık, varsayılan olarak 80 portunu dinler, çift tıklayarak başlatınca 5155 olayı tetiklenir

-
Filtreyi geri alın,
.\WFPSampler.exe -clean -
Audit ayarını geri alın,
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
Network Event (NET_EVENT) İzleme
- Network event izleme, enum ve subscribe desteği sunar.
- Enum yöntemi, filtreleme koşullarını özelleştirmenize ve belirli bir zaman dilimindeki network eventleri almanızı sağlar.
- Subscribe yöntemi, bir callback fonksiyonu ekleyebilir, gerçek zamanlı geri bildirim sağlar.
Desteklenen event türleri:
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;
Desteklenen filtreleme koşulları (FWPM_NET_EVENT_ENUM_TEMPLATE):
| Value | Anlamı |
|---|---|
| FWPM_CONDITION_IP_PROTOCOL | RFC 1700’da belirtildiği gibi IP protokol numarası. |
| FWPM_CONDITION_IP_LOCAL_ADDRESS | Yerel IP adresi. |
| FWPM_CONDITION_IP_REMOTE_ADDRESS | Uzak IP adresi. |
| FWPM_CONDITION_IP_LOCAL_PORT | Yerel transport protokol port numarası. ICMP için mesaj tipi. |
| FWPM_CONDITION_IP_REMOTE_PORT | Uzak transport protokol port numarası. ICMP için mesaj kodu. |
| FWPM_CONDITION_SCOPE_ID | Interface IPv6 scope identifier. İç kullanım için ayrılmıştır. |
| FWPM_CONDITION_ALE_APP_ID | Uygulamanın tam yolu. |
| FWPM_CONDITION_ALE_USER_ID | Yerel kullanıcının kimliği. |
Non driver çağrısı sadece normal drop eventlerini alabilir.
NetConnection İzleme
Network event izlemeye kıyasla, NetConnection izlemesi daha yüksek izin gerektirir. callback yöntemi
Çağırıcı, bağlantı nesnelerinin konteynerlerine FWPM_ACTRL_ENUM erişimine ve bağlantı nesnelerine FWPM_ACTRL_READ erişimine ihtiyaç duyar. Daha fazla bilgi için Access Control bölümüne bakın.
Şu anda NetConnection izlemeyi başarıyla gerçekleştiremedik.
Aynı sorunu bulduk, Receiving in/out traffic stats using WFP user-mode API, araştırmamda karşılaştığım fenomenle aynı, abonelik fonksiyonu hiçbir bildirim almaz, hiçbir event alamaz, hata mesajı vermez. Kimse non-kernel mode’da sadece drop eventlerinin raporlanabileceğini söylüyor, bu da engellenen eventleri elde etme ihtiyacını karşılayamaz.
Security descriptor ekleme örneği: https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports
Application Layer Enforcement (ALE) Açıklaması
- ALE, durum filtrelemeyi destekleyen, kernel mode’da çalışan bir dizi filtreden oluşur.
- ALE katmanı filtreleri, bağlantı oluşturma, port atama, soket yönetimi, raw soket oluşturma ve promiscuous mode alımı için yetkilendirme sağlar.
- ALE katmanı filtreleri, bağlantı (connection) veya soket (socket) bazlı sınıflandırma yapabilir, diğer katman filtreleri sadece paket (packet) bazlı sınıflandırma yapabilir.
- ALE filtreleri için referans ale-layers
- Daha fazla filtre için referans filtering-layer-identifiers
Kodlama
Çoğu WFP fonksiyonu kullanıcı modundan veya kernel modundan çağrılabilir. Ancak, kullanıcı modu fonksiyonları Win32 hata kodlarını temsil eden DWORD değerlerini döndürürken, kernel modu fonksiyonları NT durum kodlarını temsil eden NTSTATUS değerlerini döndürür. Bu yüzden fonksiyon adları ve anlamları kullanıcı modu ve kernel modu arasında aynıdır, ancak fonksiyon imzaları farklıdır. Bu, fonksiyon prototiplerinin ayrı kullanıcı modu ve kernel modu başlıklarını gerektirir. Kullanıcı modu başlık dosya adları “u” ile biter, kernel modu başlık dosya adları “k” ile biter.
Sonuç
İhtiyacımız sadece eventin gerçekleştiğini bilmek, eventi anında işlemek değil, ayrıca driver geliştirme daha büyük riskler getirir, bu yüzden event audit kullanmaya karar verdik, günlük kayıtlarını izleyerek event oluşturma yöntemiyle engellenen eventleri elde ettik. Yeni bir thread açarak NotifyChangeEventLog kullanarak günlük kayıtlarını izleyeceğiz.
Ek
WFP Mimarisi
WFP (Windows Filter Platform) 
Veri Akışı
Data flow:
- Bir paket ağ yığınına gelir.
- Ağ yığını bir shim bulur ve çağırır.
- Shim, belirli bir katmanda sınıflandırmayı çağırır.
- Sınıflandırma sırasında filtreler eşleştirilir ve sonuç eylemi alınır. (Filter Arbitration bölümüne bakın.)
- Sınıflandırma sürecinde bir callout filtre eşleşirse, ilgili callout’lar çağırılır.
- Shim, nihai filtreleme kararına göre hareket eder (örneğin, paketi düşürmek).