TR7 WAF Log Format (HTTP)
Format Hakkında
TR7 WAF Log Format, yalnızca WAF (Web Application Firewall) olay bilgilerini içeren özelleşmiş bir log formatıdır. Profil formundaki Line Format listesinde TR7 WAF Log seçeneğiyle yer alır.
Bu format, güvenlik olaylarına odaklanır: yalnızca WAF tarafından engellenen istekler için log üretilir; temiz trafik ve yalnızca izlenen (monitor) istekler log üretmez. Tam erişim logu yerine yalnızca güvenlik olaylarını izlemek isteyen ortamlar için idealdir.
Kullanım senaryoları
- WAF-only güvenlik izleme.
- Güvenlik olayı korelasyonu.
- Düşük hacimli güvenlik logu.
- SOC ve güvenlik analitiği.
Uyarı
Bu format yalnızca WAF profili atanmış vService'lerde çalışır. WAF profili olmayan vService'lerde (L7 TCP dahil) bu format seçilse bile hiç log üretilmez; tanımlı log sunucularına da gönderim yapılmaz ve arayüzde uyarı verilmez.
Desteklenen Özellikler
Örnek Log
{
"uid": "AC10652A:D7236AA19B66:240002D",
"totalScore": 8,
"attacks": [
{
"payload": "/cmd.exe",
"id": 130005,
"score": 8,
"monitor": false,
"scope": "path"
}
],
"action": "block",
"wafTime": 1.485
}Alan Açıklamaları
Temel Alanlar
| Alan | Örnek | Açıklama |
|---|---|---|
uid | AC10652A:D7236AA19B66:240002D | Benzersiz olay tanımlayıcısı |
totalScore | 8 | Toplam saldırı skoru |
action | block | Uygulanan aksiyon: block · monitor · fpc. Bu formatta pratikte her zaman block'tur; diğer iki durumda kayıt zaten üretilmez. |
wafTime | 1.485 | WAF işlem süresi (milisaniye) |
Alanların sırası sabit değildir; JSON ayrıştırılırken anahtar adına göre okunmalıdır. score, scope, monitor ve payload alanları WAF profilindeki log alanı seçimine bağlıdır ve kapatılabilir; ek olarak severity ve kural meta bilgileri (name, desc, category, cwe, mitre, capec, owaspWeb, owaspApi, target) eklenebilir.
WAF zaman aşımı kaydı bu şemayı taşımaz
WAF taraması zaman aşımına uğradığında üretilen sentetik kayıtta uid ve action alanları bulunmaz; attacks girdisi de payload ve monitor taşımaz. Kayıt totalScore 100, id 369999 ve wafTime 2000 değerleriyle gelir. Sabit şema varsayan ayrıştırıcılar bu satırda hata verir.
attacks Dizisi
Her saldırı objesi şu alanları içerir:
| Alan | Örnek | Açıklama |
|---|---|---|
attacks | [...] | Tespit edilen eşleşmelerin listesi. Aynı istekte birden fazla kural eşleşebileceği gibi aynı kural birden çok kez de listeye girebilir. |
payload | /cmd.exe | Tespit edilen zararlı içerik. Kural payload üretmiyorsa yerine kuralın açıklaması yazılır; WAF profilinden tamamen kapatılabilir. |
id | 130005 | WAF kural ID'si. Koşulsuz basılan tek alandır. |
score | 8 | Bu kuralın skoru |
monitor | false | Kuralın kendi durumu: true ise bu kuralın skoru toplama katılmaz. Tek başına isteğin engellenip engellenmediğini göstermez. |
scope | path | Saldırının tespit edildiği bileşen: path · query · header · form · json · xml · raw |
uid Yapısı
Benzersiz olay tanımlayıcısı (uid), iki nokta işaretiyle üç gruba ayrılan beş bilginin onaltılık gösteriminden oluşur; iki nokta işaretleri bu bilgilerin sınırlarıyla hizalı değildir:
AC10652A : D7236AA19B66 : 240002D
│ │ │ │ │
│ │ │ │ └── İstek sayacı
│ │ │ └───── Milisaniye
│ │ └──────────── Unix zaman damgası (saniye)
│ └─────────────────── İstemci kaynak portu
└──────────────────────────── İstemci IP adresiÖrnekteki değerin çözümü:
| Parça | Hex | Karşılığı |
|---|---|---|
| İstemci IP adresi | AC10652A | AC=172, 10=16, 65=101, 2A=42 → 172.16.101.42 |
| İstemci kaynak portu | D723 | 55075 |
| Unix zaman damgası | 6AA19B66 | Kaydın üretildiği saniye |
| Milisaniye | 240 | 576 ms |
| İstek sayacı | 002D | 45 |
Bu yapı sayesinde:
- Aynı istemciden gelen saldırılar IP bileşeniyle gruplanabilir.
- Her kayıt benzersiz biçimde tanımlanabilir ve WAF Event Log ile eşleştirilebilir.
WARNING
Değer bir oturum kimliği taşımaz. Aynı istemcinin iki isteği, ancak aynı saniyede aynı kaynak porttan geldiğinde ortak bir orta bileşen paylaşır; pratikte her TCP bağlantısında değişir. Kaynak port (4 hane) ve zaman damgası (8 hane) sabit uzunluktadır; milisaniye (2-3 hane) ile istek sayacı (en az 4 hane) ayraçsız bitiştiği için son grup her zaman kesin olarak ayrıştırılamaz.
Skor Hesaplama
WAF, her kural için bir skor tanımlar. Toplam skor (totalScore), eşleşen kurallardan yalnızca izleme modunda olmayanların skorlarının toplamıdır:
totalScore = Σ (attacks[n].score) , attacks[n].monitor == false olanlarYukarıdaki örnek logda tek bir kural eşleşmiş ve monitor: false olduğu için toplam skor o kuralın skoruna eşittir:
Kural 130005: score = 8 (monitor: false)
──────────────────────────────────────────
totalScore = 8İzleme modundaki kurallar toplama katılmaz
monitor: true olan bir kural attacks listesinde gerçek skoruyla görünür, ancak totalScore'a eklenmez. Bu nedenle listedeki skorları toplamak, totalScore değerinden büyük bir sonuç verebilir. Öğrenme modunda ise hiçbir skor toplanmaz ve totalScore 0 kalır.
WAF profilinde tanımlı skor eşiğine ulaşıldığında ya da eşik aşıldığında istek bloklanır; örnekteki totalScore: 8 değeri, eşiğin 8 olduğu bir profilde tam olarak bu nedenle block üretmiştir.
Kullanım Örneği: Log Ayrıştırma
Örnekler ham log satırı varsayar
Aşağıdaki komutlar, dosyanın ham JSON satırlarından oluştuğunu varsayar. Log profilinde Log Standard olarak local (varsayılan), rfc3164, rfc5424 ya da priority seçiliyse her satırın başına syslog öneki eklenir ve jq satırı ayrıştıramaz. Bu durumda ya toplayıcının öneki ayıklaması ya da profilde raw seçilmesi gerekir.
# Yüksek skorlu saldırıları filtrele
cat waf.log | jq 'select(.totalScore >= 20)'
# Belirli bir kural ID'sini ara (kayıt başına tek kez basar)
cat waf.log | jq 'select(any(.attacks[]; .id == 130005))'
# Scope'a göre grupla (alan kapatılmışsa boş geçilir)
cat waf.log | jq -r '.attacks[] | select(.scope) | .scope' | sort | uniq -c