Yapılandırılmış vs Yapılandırılmamış Log Verisi
Yapılandırılmış log verisi sabit şemalı, ayrıştırılması kolay formatlarda gelir. Aşağıdaki örnek bir Syslog satırından JSON'a dönüştürülmüş yapılandırılmış kayıttır: { "timestamp": "2024-01-15T08:23:11Z", "src_ip": "192.168.1.45", "dst_ip": "10.0.0.1", "port": 445, "action": "BLOCK" } Bu format SIEM tarafından doğrudan indekslenebilir.
Giris ve Temel Akis
Yapılandırılmış log verisi sabit şemalı, ayrıştırılması kolay formatlarda gelir. Aşağıdaki örnek bir Syslog satırından JSON'a dönüştürülmüş yapılandırılmış kayıttır: { "timestamp": "2024-01-15T08:23:11Z", "src_ip": "192.168.1.45", "dst_ip": "10.0.0.1", "port": 445, "action": "BLOCK" } Bu format SIEM tarafından doğrudan indekslenebilir.
Bu bölümün pratik akışı şu sırayla ilerler:
- index=firewall
- action=BLOCK
- port=445
- | stats count
- by src_ip
- | sort -count
Temel Kavram Eslesmeleri
Log formatları SOC araçlarının parse etme stratejisini belirler. Syslog, CEF, LEEF ve JSON en yaygın yapılandırılmış formatlardır. Örnek CEF satırı: CEF:0|Palo Alto|PAN-OS|9.1|threat|Threat Detected|7|src=10.1.1.5 dst=8.8.8.8 proto=TCP
- JSON: Anahtar-değer çiftleri, API entegrasyonuna uygun
- CEF: ArcSight standardı, pipe ile ayrılmış header
- LEEF: IBM QRadar standardı, tab ile ayrılmış alanlar
- Syslog RFC5424: Facility/Severity önekli, timestamp standartlı
Ilk Cekirdek Kavram
Bu bölümde öne çıkan çekirdek kavram 401 olarak verilir. Yapılandırılmamış log verisi serbest metin formatındadır ve regex ile parse edilmesi gerekir. Örnek Apache access log satırı: 192.168.1.10 - admin [15/Jan/2024:08:23:11 +0300] "POST /admin/login HTTP/1.1" 401 512 Bu satırdan HTTP status kodunu çekmek için kullanılan regex: "\S+ \S+ HTTP/\d.\d" (\d{3})
Arac, Komut veya Inceleme Akisi
Splunk'ta yapılandırılmamış log verisini parse etmek için rex komutu kullanılır:
| rex field=_raw "(?P
Bu bölümün pratik akışı şu sırayla ilerler:
- index=weblogs
- | rex field=_raw
- "(?P
\d+.\d+.\d+.\d+)" - | stats count by src_ip
- | sort -count
Kanit ve Bilesen Iliskileri
Python ile log parse işlemi SOC analistlerinin sık kullandığı bir tekniktir. re modülü ile yapılandırılmamış veri işlenir: import re pattern = r'(?P
- re.search(): Satırda ilk eşleşen örüntüyü bulur
- (?P
...) : İsimli yakalama grubu tanımlar - re.findall(): Tüm eşleşmeleri liste olarak döner
- re.compile(): Pattern'i önceden derleyerek performans artırır
Ikincil Odak Noktasi
Bu bölümde öne çıkan çekirdek kavram NUMBER olarak verilir. Elastic Stack'te yapılandırılmamış log verisi Logstash Grok filtresi ile parse edilir: filter { grok { match => { "message" => "%{IP:src_ip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] "%{WORD:method} %{URIPATHPARAM:uri} HTTP/%{NUMBER:http_version}" %{NUMBER:status}" } } } Bu pattern Apache Combined Log formatını ayrıştırır.
Operasyonel Dogrulama ve Raporlama
Log normalizasyonu farklı kaynaklardan gelen veriyi ortak şemaya dönüştürür. Elastic Common Schema (ECS) endüstri standardıdır: { "@timestamp": "2024-01-15T08:23:11Z", "source.ip": "192.168.1.45", "destination.port": 445, "event.action": "blocked", "event.category": "network" } ECS sayesinde farklı vendor logları tek sorguda korelasyon yapılabilir hale gelir.
Bu bölümün pratik akışı şu sırayla ilerler:
- ham logu parse et
- alan adlarını ECS'e eşle
- timestamp'i ISO8601'e çevir
- SIEM'e ilet
Cikti ve Kullanım Amaci
SOC'ta log verisi kalitesini değerlendirmek için farklı metrikler kullanılır. Düşük kaliteli log verisi tehdit tespitini doğrudan engeller. Örnek sorunlu log: [ERR] 1705304591 usr=? act=login res=?? Bu kayıtta timestamp epoch formatında, kullanıcı ve sonuç alanları belirsizdir.
- Eksik timestamp: Olay zaman çizelgesi kurulamaz
- Null kaynak IP: Saldırgan attributionu yapılamaz
- Tutarsız alan adları: Çapraz kaynak korelasyonu başarısız olur
- Epoch timestamp formatı: İnsan okunabilir analiz zorlaşır
Son Kavram ve Cikis
Bu bölümde öne çıkan çekirdek kavram sort_values olarak verilir. Pandas ile log analizi SOC veri madenciliğinde yaygın kullanılır: import pandas as pd df = pd.read_csv('firewall.log', sep='|', names=['timestamp','src_ip','dst_ip','port','action']) blocked = df[df['action'] == 'BLOCK'] .groupby('src_ip').size() .sort_values(ascending=False) print(blocked.head(10))
Bu Egitimden Ne Kazanirsiniz?
Bu icerik, Yapılandırılmış vs Yapılandırılmamış Log Verisi konusunu SOC L3 - İleri Tehdit Avcılığı - Veri Madenciliği ve Modelleme baglaminda parcali degil, butunlu bir ogrenme akisina donusturur. Yalnizca kavramlari ezberlemek yerine surec sirasini, bilesenler arasi iliskiyi ve hangi kanitin neden onemli oldugunu kavramayi hedefler.
Ozet
Bu ders kapsaminda one cikan basliklar: JSON, CEF, LEEF, Syslog RFC5424, re.search(), (?P