| name | splunk-reference-expert |
| description | GetirFinans Splunk ortamı için org-spesifik referans. gf_pdks (PDKS kapı-turnike) ve waf-traffic (F5 BIG-IP ASM/Bot) indexlerinin alan sözlükleri, kritik tuzaklar ve çalışan SPL pattern'leri. Splunk sorgusu yazarken, alan adı doğrularken, ya da index/sourcetype seçerken tetikle. Tetikleyiciler: "splunk sorgusu", "spl yaz", "gf_pdks", "waf-traffic", "f5 log", "pdks sorgu", "kapı geçiş", "waf analiz", "splunk-reference-expert".
|
Splunk Reference Expert — GetirFinans
Bu skill, GetirFinans Splunk ortamındaki iki ana index için org-spesifik referanstır.
Genel SPL syntax bilgisi burada yoktur — o bilgi zaten mevcut; burada yalnızca bu
organizasyona özgü alan adları, tuzaklar ve doğrulanmış sorgu pattern'leri bulunur.
0. Ortam Genel Bakış
| Parametre | Değer |
|---|
| Splunk host | svmsecsshprd004.getirfinans.local:8089 |
| Erişilebilir index | Sadece gf_pdks (murat için doğrulanmış) |
| WAF index | waf-traffic |
| Erişim kontrolü | list_indexes katalog gösterir ≠ arama yetkisi var demek |
| Gerçek yetki kontrolü | | tstats count where index=* by index |
1. gf_pdks — PDKS Kapı-Turnike
Index: gf_pdks · Sourcetype: kapi-turnike-data
Veri: Ofis kapı-turnike giriş/çıkış kayıtları
Alan Sözlüğü
| Alan | Tip | Açıklama | Örnek |
|---|
"Email" | string | Çalışan e-postası — BOM + tırnaklı, düz kullanılamaz | murat.aydogan@getirfinans.com |
Ad | string | Çalışan adı — sonda boşluk olabilir | Murat |
Soyad | string | Çalışan soyadı | Aydoğan |
EventTime | string | Olay zamanı string formatında | 23.06.2026 13:26:35 |
TerminalName | string | Kapı/terminal tam adı — lokasyon + yön bilgisi | ARGE GIRIS (1 KAT SOL KAPI GIRIS Yeni cihaz 3) |
checkInOrCheckout | string | Giriş/çıkış yönü | GIRIS · CIKIS |
_time | timestamp | Splunk iç zamanı (UTC+3) — zaman filtrelerinde kullan | ISO 8601 |
Kritik Tuzaklar
TUZAK 1 — Email alanı BOM + tırnaklı
search Email=x veya where Email="x" her zaman boş döner.
Tek doğru yol — rex ile _raw'dan çek:
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
Sonra email alanını kullan.
TUZAK 2 — EventTime string, strptime gerekir
Format: DD.MM.YYYY HH:MM:SS
| eval gun=strftime(strptime(EventTime, "%d.%m.%Y %H:%M:%S"), "%F")
TUZAK 3 — dc() içine hesaplanmış ifade giremez
# YANLIŞ:
| stats dc(strftime(strptime(EventTime,"%d.%m.%Y %H:%M:%S"),"%F")) AS gun_sayisi
# DOĞRU: önce eval, sonra dc
| eval gun=strftime(strptime(EventTime, "%d.%m.%Y %H:%M:%S"), "%F")
| stats dc(gun) AS gun_sayisi
TUZAK 4 — Ad alanında sonda boşluk
| eval Ad=trim(Ad)
SPL Pattern'leri
P1 — Kişinin N günde işe geldiği gün sayısı
index=gf_pdks sourcetype="kapi-turnike-data" checkInOrCheckout=GIRIS
earliest=-7d@d latest=@d
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
| search email="ad.soyad@getirfinans.com"
| eval gun=strftime(strptime(EventTime, "%d.%m.%Y %H:%M:%S"), "%F")
| stats dc(gun) AS gun_sayisi
P2 — Kişinin tüm giriş/çıkış kayıtları
index=gf_pdks sourcetype="kapi-turnike-data" earliest=-7d@d latest=@d
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
| search email="ad.soyad@getirfinans.com"
| eval Ad=trim(Ad)
| table _time Ad Soyad email checkInOrCheckout TerminalName EventTime
| sort _time
P3 — Bugün işe gelen çalışanlar
index=gf_pdks sourcetype="kapi-turnike-data" checkInOrCheckout=GIRIS
earliest=@d latest=now
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
| eval Ad=trim(Ad)
| dedup email
| table email Ad Soyad TerminalName EventTime
| sort EventTime
P4 — Kişinin giriş saatleri
index=gf_pdks sourcetype="kapi-turnike-data" checkInOrCheckout=GIRIS
earliest=-30d@d latest=@d
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
| search email="ad.soyad@getirfinans.com"
| eval tarih=strftime(strptime(EventTime,"%d.%m.%Y %H:%M:%S"),"%F")
| eval saat=strftime(strptime(EventTime,"%d.%m.%Y %H:%M:%S"),"%H:%M")
| table tarih saat TerminalName
| sort tarih saat
P5 — Haftalık devam özeti (tüm çalışanlar)
index=gf_pdks sourcetype="kapi-turnike-data" checkInOrCheckout=GIRIS
earliest=-7d@d latest=@d
| rex field=_raw "\"Email\":\"(?<email>[^\"]+)\""
| eval gun=strftime(strptime(EventTime,"%d.%m.%Y %H:%M:%S"),"%F")
| eval Ad=trim(Ad)
| stats dc(gun) AS gun_sayisi values(Ad) AS ad values(Soyad) AS soyad BY email
| sort -gun_sayisi
P6 — Kapı bazlı trafik
index=gf_pdks sourcetype="kapi-turnike-data" earliest=-1d@d latest=@d
| stats count BY TerminalName checkInOrCheckout
| sort -count
2. waf-traffic — F5 BIG-IP WAF
Index: waf-traffic
Sourcetype Haritası
| Sourcetype | Source | İçerik |
|---|
f5:bigip:asm:syslog | waf_asm_logs | HTTP saldırı/engelleme (XSS, SQLi, SSRF…) |
f5:bigip:bot:syslog | waf_bot | Bot tespiti ve rate-limit kararları |
f5:bigip:ltm:ssl:error | syslog | SSL/TLS el sıkışma hataları |
f5:bigip:syslog | syslog | F5 cihaz sistem olayları |
ASM Alan Sözlüğü (f5:bigip:asm:syslog)
Karar alanları:
| Alan | Değerler | Not |
|---|
action | blocked · allowed · alerted | Tercih et |
request_status | blocked · alerted · legal | action ile aynı içerik |
severity | high · medium · low · informational | CIM normalize — F5 ham: Error→high |
violation_rating | 1–5 | Sayısal önem |
support_id | string | Benzersiz olay ID |
Saldırı alanları:
| Alan | Açıklama | Not |
|---|
attack_type | Saldırı tipi — virgülle ayrılmış | like(attack_type, "%XSS%") ile ara |
violations | Tetiklenen ihlal kuralı | Virgülle ayrılmış |
sig_ids | İmza ID'leri | N/A ise tetiklenmemiş |
sig_names | İmza adları | N/A ise tetiklenmemiş |
sig_cves | Eşleşen CVE'ler | N/A ise yok |
threat_campaign_names | Tehdit kampanyası | N/A ise yok |
Kaynak/Hedef:
| Alan | Açıklama | Not |
|---|
src_ip | Kaynak IP — tercih | src ve ip_client ile aynı |
geo_location | Ülke kodu ISO 3166-1 | US · TR · CN |
hostname | Hedef uygulama alan adı — tercih | |
dest_ip | Hedef backend IP | |
x_forwarded_for_header_value | Proxy arkası gerçek IP; N/A ise yok | |
HTTP:
| Alan | Açıklama | Not |
|---|
http_method | HTTP metodu — tercih | method ile aynı |
uri | İstek URI decode edilmiş — tercih | uri_path ile aynı |
query_string | Sorgu parametresi | N/A ise yok |
url_length | URI uzunluğu karakter | |
response_code | HTTP yanıt kodu | 0 = engellendi |
user_agent | User-agent — küçük harf tercih | User_Agent büyük varyantı da var |
Bot Defense Alan Sözlüğü (f5:bigip:bot:syslog)
| Alan | Açıklama | Değerler |
|---|
action | Bot kararı | alarm · block · pass |
actual_mitigation_action | Uygulanan aksiyon | Alarm · Block · Pass |
configured_mitigation_action | Politikada tanımlı | Rate Limit · Block · CAPTCHA |
class | Bot sınıfı | Unknown · Malicious Bot · Benign Bot · Human |
client_type | İstemci türü | Malicious Bot · Uncategorized · Browser |
bot_name | Bot adı | Googlebot · Undefined |
client_ip | Kaynak IP — bot'ta bu (ASM'deki src_ip değil) | |
client_ip_geo_location | Ülke kodu | |
client_request_uri | İstek URI | |
request_status | İstek tipi | legal · illegal |
profile_name | Bot Defense profili | /Common/Bot_Defense_FX |
Kritik Tuzaklar (WAF)
TUZAK 1 — N/A string
Boş alanlar null değil "N/A". Filtre: | where sig_ids!="N/A"
TUZAK 2 — attack_type virgüllü
| where like(attack_type, "%SQL Injection%")
TUZAK 3 — ASM vs Bot IP alanı farklı
- ASM → kaynak IP:
src_ip
- Bot → kaynak IP:
client_ip
- İkisini birleştirmek için:
| eval ip=coalesce(src_ip, client_ip)
TUZAK 4 — response_code=0 engellendi demek
WAF engellediğinde response_code=0, geçen istekler response_code!=0.
TUZAK 5 — severity CIM dönüşümü
F5 ham: severity="Error" → Splunk CIM: severity=high. Sorgularda high kullan.
SPL Pattern'leri (WAF)
W1 — 24 saat engelleme özeti
index=waf-traffic sourcetype="f5:bigip:asm:syslog" action=blocked
earliest=-24h latest=now
| stats count BY hostname attack_type severity
| sort -count
W2 — Top saldırgan IP'ler
index=waf-traffic sourcetype="f5:bigip:asm:syslog" action=blocked
earliest=-24h latest=now
| stats count BY src_ip geo_location
| sort -count | head 20
W3 — Belirli IP aktivitesi
index=waf-traffic sourcetype="f5:bigip:asm:syslog"
src_ip="<IP>" earliest=-7d@d latest=@d
| table _time action attack_type hostname uri http_method severity sig_names support_id
| sort _time
W4 — Geçen ama saldırı tespit edilen (false negative adayları)
index=waf-traffic sourcetype="f5:bigip:asm:syslog"
action!=blocked attack_type!="N/A" earliest=-24h latest=now
| table _time src_ip hostname action attack_type uri response_code support_id
| sort -_time
W5 — Bot rate-limit tetikleyenler
index=waf-traffic sourcetype="f5:bigip:bot:syslog"
configured_mitigation_action="Rate Limit" earliest=-24h latest=now
| stats count BY client_ip client_ip_geo_location client_request_uri
| sort -count | head 20
W6 — SSL handshake hataları
index=waf-traffic sourcetype="f5:bigip:ltm:ssl:error"
earliest=-24h latest=now
| stats count BY src_ip dest_ip dest_port
| sort -count
W7 — Saatlik saldırı trendi
index=waf-traffic sourcetype="f5:bigip:asm:syslog" action=blocked
earliest=-24h latest=now
| timechart span=1h count BY attack_type
W8 — Destek ID ile olay detayı
index=waf-traffic sourcetype="f5:bigip:asm:syslog"
support_id="<ID>"
| table _time src_ip hostname action attack_type violations sig_names uri request support_id
W9 — Çapraz sourcetype: aynı IP'nin ASM + Bot aktivitesi
index=waf-traffic (sourcetype="f5:bigip:asm:syslog" OR sourcetype="f5:bigip:bot:syslog")
earliest=-24h latest=now
| eval ip=coalesce(src_ip, client_ip)
| stats count BY ip sourcetype
| sort ip sourcetype
3. Zaman Filtresi Referansı
| Filtre | Anlamı |
|---|
earliest=@d latest=now | Bugün (gece 00:00'dan şu ana) |
earliest=-1d@d latest=@d | Dün (tam gün) |
earliest=-7d@d latest=@d | Son 7 tam gün |
earliest=-30d@d latest=@d | Son 30 tam gün |
earliest=-24h latest=now | Kayan son 24 saat |
earliest=-1h latest=now | Kayan son 1 saat |
_time alanı UTC+3 ile gelir. @d snap yerel gece 00:00'a snap eder.
4. Kullanım Kuralları
- gf_pdks sorgusunda Email filtresi varsa daima
rex field=_raw kullan — düz Email= boş döner.
- EventTime üzerinde işlem yaparken önce
strptime ile parse et, sonra strftime ile formatlı string çıkar.
- waf-traffic sorgusunda önce sourcetype belirle; ASM ve Bot alanları birbirinden farklı.
- Boş alan kontrolünde
isnull() değil !="N/A" kullan.
- Zaman filtresini her sorguda belirt — belirtilmezse Splunk varsayılan aralığı alır.