Windows'ta Ağ Trafik Engelleme İzleme

  • 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.

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. Öneri5157

    • 5152

    • 5153

  • 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.
    • 5150
    • 5151
    • 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ı:

  1. Filtering Platform Connection audit ayarını açın, auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable

  2. Event Viewer’ı açın, bir Custom View oluşturun, bir filtre oluşturun, şimdilik 5155, 5157, 5159 olaylarına odaklanıyoruz. filter example

  3. 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

  4. Üçü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 trigger audit event example

  5. Filtreyi geri alın, .\WFPSampler.exe -clean

  6. 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

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) Windows Filtering Platform’un temel mimarisi

Veri Akışı

Data flow:

  1. Bir paket ağ yığınına gelir.
  2. Ağ yığını bir shim bulur ve çağırır.
  3. Shim, belirli bir katmanda sınıflandırmayı çağırır.
  4. 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.)
  5. Sınıflandırma sürecinde bir callout filtre eşleşirse, ilgili callout’lar çağırılır.
  6. Shim, nihai filtreleme kararına göre hareket eder (örneğin, paketi düşürmek).

Referans Bağlantıları