İçeriğe atla
0 XP 0
13 dkderinleşmeyle 15 dk60 XP6 etkinlik

Temel çizgi: normali ölçmek

Bu derste
  • Normalin sayısal fotoğrafını çıkarır; hacim, dağılım ve ilişki temel çizgilerini kabukta, Splunk'ta ve KQL'de kurup sapmayı ayırt edersin.
  • web01'in dört haftalık access.log kaydından ve Windows giriş olaylarından saatlik, nadir değer ve hesap-makine temel çizgileri çıkaracaksın.
  • Kabuk borusu, Splunk stats ve KQL make-series bu işin standart aletleridir.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Temel çizgi (baseline), sistemin sıkıcı hâlinin sayısal fotoğrafıdır. Sabah 09:00'da kaç istek gelir? Hangi beş adres trafiğin yarısını üretir?

404 oranı normalde yüzde kaçtır? Bu rakamlar olmadan sapma diye bir şey yoktur.

Tespit kararı hep bir karşılaştırmadır. Gece 02:00'de 40 istek görmek tek başına bir şey söylemez. Aynı saatte normalin 3 istek olduğunu bilirsen, aynı sayı on üç katlık bir sapmaya döner.

Sayı değişmez, anlamı değişir. Bu derste önce temel çizgi türlerini tanıyacak, sonra kabukta, Splunk'ta ve KQL'de ölçüm yapacaksın. En sonda kirli çizgi tuzağını ve çizginin bakımını öğreneceksin.

Temel çizgi türleri ve dönem

Temel çizgi tek bir sayı değildir. Beş türü vardır ve her biri farklı bir saldırıyı görünür kılar. Hacim çizgisi zaman başına olay sayısını ölçer: saatlik istek ya da günlük giriş.

Dağılım çizgisi değerlerin payını ölçer: durum kodlarının ya da giriş türlerinin oranı. İlişki çizgisi kim kiminle konuşur sorusunu cevaplar: hangi hesap hangi makineye girer. Süreç çizgisi ebeveyn ve çocuk süreç çiftlerini tutar; Word normalde PowerShell başlatmaz.

Ağ çizgisi içeriden dışarıya hangi hedeflere gidildiğini gösterir. Saldırgan çoğu zaman hacmi değil ilişkiyi bozar. Bu yüzden ilişki ve süreç çizgisi küçük ama anlamlı sapmaları yakalar.

Tür        Ne ölçer                        Örnek sapma
Hacim      zaman başına olay sayısı        gece 02:00'de 3 yerine 40 istek
Dağılım    değerlerin payı                 404 yanıtı %2'den %30'a
İlişki     hangi hesap hangi makineye      muhasebe hesabı veritabanı sunucusunda
Süreç      ebeveyn ve çocuk süreç çifti    winword.exe altından powershell.exe
Ağ         içeriden dışarıya hedefler      hiç görülmemiş dış adrese her dakika istek
Beş temel çizgi türü ve her birinin yakaladığı tipik sapma.

Ölçmeden önce dönemi seç. Bir gün çok kısadır, tek olay çizgiyi bozar. Bir ay bazen çok uzundur, yakın zamandaki değişimi yutar.

Çoğu ortam için bir ile dört hafta arası iyi çalışır. Hafta sonunu ve tatili ayrı çizgi olarak işaretle, çünkü bunlar gerçek ama farklı bir normaldir. Yeni sistemi çizgiye almadan önce de bir bekleme süresi tanı.

İlk iki hafta kurulum trafiği akar ve bu trafik normal değildir. Temel çizgiyi tek başına bir av yöntemi olarak da kullanırsın. Splunk'ın PEAK çerçevesi bunu temel çizgi avı, yani keşifsel veri analizi (EDA) olarak tanımlar: önce normali çıkarırsın, sonra ondan sapanı ararsın.

Derinleş:PEAK çerçevesi

PEAK, Prepare, Execute, and Act with Knowledge ifadesinin baş harflerinden oluşur. David Bianco ve Ryan Fetterman çerçeveyi Nisan 2023'te Splunk blogunda tanıttı. Bianco, Acı Piramidi'nin de yazarıdır. Çerçeve her avı üç aşamaya böler: hazırlan, uygula ve bilgiyle harekete geç.

Son aşama, avın sonucunu kalıcı bir tespite ya da belgeye dönüştürmeyi ister. PEAK üç av türü tanımlar. Hipotez güdümlü av belirli bir saldırı fikrini sınar. Temel çizgi avı normali çıkarıp sapmaları arar.

Model destekli av (M-ATH) ise makine öğrenmesi modellerinden yararlanır. Temel çizgi avının güzel yanı, hazır bir hipotez gerektirmemesidir. Veriyi tanımadan hipotez kurmak zordur.

Temel çizgi veriyi tanımanın en hızlı yoludur ve çoğu zaman bir sonraki hipotezi de doğurur. Bu avın çıktısı belgelenmiş bir temel çizgidir: alan sözlüğü, istatistik özetler ve bilinen zararsız aykırı değerlerin listesi. Bu çıktıdan otomatik tespitler ya da analistin elle izleyeceği rapor ve pano öğeleri doğar. Bu derste kuracağın saatlik tablo da böyle bir istatistik özettir.

Etkinlik 1 / 6

Her sapmayı ait olduğu temel çizgi türüyle eşleştir.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.

Saatlik temel çizgi: kabukta ve SIEM'de

En hızlı temel çizgi kabukta çıkar. web01'in access.log kaydı her istek için bir satır tutar. İlk alan istemci adresi, dördüncü alan tarih ve saat, dokuzuncu alan durum kodudur. awk bu alanları boşluktan böler ve istediğini keser.

sort aynı değerleri yan yana getirir, uniq -c yan yana duran aynı satırları sayar, sort -rn de sayıya göre büyükten küçüğe dizer. Aşağıdaki üç komut aynı dosyadan üç temel çizgi çıkarır. substr çağrısı tarih alanından yalnız saat parçasını keser. Dosya dört haftalıksa, saatlik sayıyı gün sayısına bölerek ortalama bir güne çevirirsin.

# Saatlik istek sayisi
awk '{print substr($4, 14, 2)}' access.log | sort | uniq -c | sort -rn

# En cok istek atan on adres
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# Durum kodu dagilimi
awk '{print $9}' access.log | sort | uniq -c | sort -rn
 181204 200
  12410 304
   3905 404
    612 301
     88 500
Üç satır, üç temel çizgi. Son komutun dört haftalık çıktısı da altında.

Bu satırlar üç ayrı soruya cevap verir. İlki saat saat yoğunluğu, ikincisi trafiği kimin ürettiğini gösterir; bot ve sağlık yoklaması genelde tepede oturur. Üçüncüsü durum kodu dağılımıdır. Örnek çıktıda dört haftada 3.905 tane 404 var, yani bütün isteklerin yüzde ikisi civarı.

Günlük 404 payını bilmeden ani bir artışı fark edemezsin. Kabuk tek dosya için iyidir; birden çok sunucu ve haftalarca veri için SIEM'e geçersin. Aşağıdaki Splunk sorgusu dört haftalık veriyi saatlik kovalara böler, hafta içi günleri ayırır ve her saat için ortalamayı, standart sapmayı ve yüzde 95'lik dilimi hesaplar.

Boş saatlere dikkat et. bin ve stats ikilisi yalnız olay olan kovalar için satır üretir; gece hiç istek gelmeyen saatler hesaba girmez ve ortalama şişer. timechart ise boş kovaları sıfırla doldurur, bu yüzden sorgu onunla başlar.

index=web host=web01 earliest=-28d@d latest=@d
| timechart span=1h count
| eval gun=tonumber(strftime(_time, "%w")), saat=strftime(_time, "%H")
| where gun>=1 AND gun<=5
| stats avg(count) as ort stdev(count) as sd perc95(count) as p95 by saat

saat     ort      sd     p95
02       3.0     1.5       6
09     412.6    38.2     471
14     355.0    41.7     420
21      96.4    17.9     127
Saate göre temel çizgi ve çıktısı. %w haftanın gününü verir: 0 pazar, 6 cumartesi.

Tabloyu oku. 09:00'da ortalama 412 istek gelir, yüzde 95'lik dilim 471'dir. Bu saatte 480 istek dilimin biraz üstündedir, ama her yirmi saatten biri zaten bu bölgeye düşer.

02:00'de ise ortalama 3, dilim 6'dır. Aynı saatte 40 istek görmek dilimin altı katından fazladır. Yüzdelik dilim uç değerlerin ortalamayı bozmasını da engeller. Değerlerin yüzde doksan beşini kapsayan sınırın üstünde kalan azınlık, incelemeye değer kümedir.

Ortalama tek başına yanıltır. Bir sayfa günde ortalama yüz istek alabilir, ama bu istekler sabah yoğunlaşıyorsa gece gelen on istek büyük bir sapmadır. Saat dilimlerine bölerek ölçmek düz ortalamadan daha iyi çalışır.

Etkinlik 2 / 6

access.log içinde en çok 404 üreten adresleri çoktan aza sıralayan boruyu kur.

Parçalara tıklayarak komutu soldan sağa kur.

$

Etkinlik 3 / 6

Saatlik istek sayısı temel çizgisi çıkarılırken tatil günleri ne yapılır?

Uzun kuyruk ve nadir değerler

Temel çizginin en verimli kullanımı nadir olanı bulmaktır. Buna yığın sayımı (stack counting) denir. Bir alanın bütün değerlerini sayar, en az görülenlere bakarsın.

Mantık basittir: yüz makinede aynı süreç çalışıyorsa o süreç büyük olasılıkla meşrudur. Tek makinede bir kez çalışmış bir süreç ise ya yeni bir yazılımdır ya da saldırganın aracıdır. Kabukta sıralamayı ters çevirmen yeter.

sort -rn yerine sort -n yazarsın ve en küçük sayılar başa gelir. Aynı işi Splunk'ta rare komutu yapar. rare, top komutunun tersidir ve varsayılan olarak en az görülen on değeri, sayısı ve yüzdesiyle döndürür.

# Kabukta: en nadir bes kullanici ajani
$ awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -n | head -5
      1 python-requests/2.31.0
      1 Mozilla/5.0 zgrab/0.x
      2 curl/8.5.0
      3 Go-http-client/1.1
      4 Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0

# Splunk: en az gorulen on ikili
index=sysmon EventCode=1 earliest=-28d
| rare limit=10 Image

# Ayni soru, makine sayisiyla birlikte
index=sysmon EventCode=1 earliest=-28d
| stats count dc(host) as makine by Image
| sort count
| head 10

Image                                 count   makine
C:\Users\Public\cu.exe                    1        1
C:\ProgramData\guncelle\svchost.exe       2        1
C:\Program Files\YeniAjan\ajan.exe       14       14
Yığın sayımı: kabukta ve Splunk'ta. Son tablo bir Sysmon kaydından.

Çıktıyı yorumlarken iki sayıya birlikte bak: kaç kez görüldü ve kaç makinede görüldü. Kabuk çıktısında zgrab kullanıcı ajanı tek istekte görünür. Bu ajan interneti baştan sona tarayan araçlara aittir; tek başına saldırı değildir ama dışarıdan kimin baktığını gösterir. Splunk tablosunun ilk satırı, tek makinede bir kez çalışmış bir certutil kopyasıdır.

İkinci satırda svchost.exe adı var ama yol ProgramData altında. Gerçek svchost.exe System32'den çalışır, bu satır ad taklidine benzer.

Üçüncü satır on dört makinede on dört kez görünür ve büyük olasılıkla yeni dağıtılan bir ajandır. En nadir olan çoğu zaman en ilginç olandır, ama her nadir değer kötü değildir. Nadir listesini değişiklik kayıtlarıyla karşılaştır; açıklanamayan satırı incele.

Etkinlik 4 / 6

uniq -c komutunun doğru çalışması için girdinin önce ____ edilmesi gerekir.

Otomatik sapma ve ilişki çizgisi

Microsoft Sentinel kullanan ekip aynı çizgiyi KQL ile kurar ve sapmayı araca buldurur. make-series seriyi kurar ve boş kovaya varsayılan olarak 0 yazar; boş saat sorunu burada yoktur. series_decompose_anomalies seriyi mevsimsellik, eğilim ve artık parçalarına ayırır. Günlük ve haftalık ritmi kendisi bulur, beklenen değerden çok sapan noktaları işaretler.

Bayrak 1 yukarı yönlü sapmayı, -1 aşağı yönlü sapmayı, 0 ise olağanı gösterir. Aşağıdaki sorgu yalnız yukarı yönlü sapan saatleri döndürür. Sapmayı ölçmenin mantığını bir sonraki derste, eşik ve anomali konusunda göreceksin. Şimdilik şunu bil: araç ne kadar akıllı olursa olsun, beslediğin veri kirliyse öğrendiği normal de kirlidir.

WebErisim_CL
| where TimeGenerated > ago(28d) and Computer == "web01"
| make-series Adet = count() default=0 on TimeGenerated from ago(28d) to now() step 1h
| extend (Bayrak, Puan, Taban) = series_decompose_anomalies(Adet)
| mv-expand TimeGenerated to typeof(datetime), Adet to typeof(long), Bayrak to typeof(int)
| where Bayrak == 1
KQL ile saatlik seri ve otomatik sapma bulma. WebErisim_CL, web erişim kayıtlarının aktarıldığı özel bir tablodur.
Derinleş:Aykırı değer testi: Tukey çiti

series_decompose_anomalies, artık seriyi Tukey çiti (Tukey's fence) testiyle puanlar. John Tukey'nin klasik yöntemi verinin alt ve üst çeyreklerini alır. Aradaki mesafeye çeyrekler arası açıklık denir. Üst çeyreğe açıklığın k katı eklenince üst çit, alt çeyrekten çıkarılınca alt çit bulunur.

Çitin dışındaki nokta aykırıdır. Kusto'nun varsayılan yöntemi ctukey adını taşır ve standart çeyrekler yerine yüzde 10 ile yüzde 90 dilimlerini kullanır. Varsayılan eşik k=1,5'tir ve ılımlı aykırılıkları da yakalar. Eşiği 2,5'e çıkarırsan yalnız güçlü sapmalar kalır.

Mevsimsellik varsayılan olarak otomatik bulunur. Saatlik seride haftalık döngü 168 kovadır ve bunu elle de verebilirsin. Eğilim varsayılan olarak ortalamadır; büyüyen bir trafikte linefit seçeneği taban çizgisini daha iyi oturtur. Bu parametreler, gürültü ile kaçırma arasındaki takasın KQL'deki ayar düğmeleridir.

İlişki çizgisi kim kiminle konuşur sorusunu cevaplar. Her Windows makinesi kendisine yapılan başarılı girişi 4624 olayıyla, giriş türüyle birlikte yazar. Bu olaylar SIEM'de toplanınca bütün ağın resmi çıkar.

Giriş türü 3 ağ üzerinden erişimi, 10 uzak masaüstünü gösterir. Aşağıdaki ilk sorgu otuz günlük veriden her hesap ve makine çifti için ilk görülme zamanını çıkarır ve sonucu bir arama tablosuna (lookup) yazar.

İkinci sorgu her saat çalışır. Son bir saatteki çiftleri tabloyla karşılaştırır ve tabloda olmayanı gösterir. Hesap başına kaç makineye girildiğini görmek istersen dc(Computer) values(Computer) by TargetUserName yeter. 4624'teki IpAddress alanıyla çifti kaynak ve hedef makine olarak da kurabilirsin.

index=wineventlog EventCode=4624 LogonType IN (3, 10) earliest=-30d@d latest=@d
| stats min(_time) as ilk_gorulme count by TargetUserName Computer
| outputlookup hesap_makine_temel.csv

index=wineventlog EventCode=4624 LogonType IN (3, 10) earliest=-1h
| stats count by TargetUserName Computer
| lookup hesap_makine_temel.csv TargetUserName Computer OUTPUT ilk_gorulme
| where isnull(ilk_gorulme)

TargetUserName   Computer               count
muhasebe07       db01.sirket.example        3
İlişki temel çizgisi: önce tabloyu kur, sonra ilk kez görülen çifti ara.

Çıktıdaki tek satır anlamlıdır. muhasebe07 hesabı otuz gün boyunca veritabanı sunucusuna hiç girmemiş, son bir saatte ise üç kez girmiştir. Muhasebe bilgisayarından veritabanı sunucusuna ilk bağlantı da aynı mantıkla yakalanır.

Giriş sayısı düşüktür, eşik kuralı bunu görmez. İlişki çizgisi ise ilk teması doğrudan gösterir. Bu tür ilk temaslar yanal hareketin en erken işaretleri arasındadır. Yine de her yeni çift saldırı değildir.

Yeni işe başlayan çalışan, görev değişikliği ya da yeni kurulan sunucu da yeni çift üretir. Bu yüzden ilk görülme alarmını, değişiklik ve personel kayıtlarıyla birlikte değerlendirirsin.

Etkinlik 5 / 6

Doğru mu, yanlış mı?

Muhasebe bilgisayarından veritabanı sunucusuna ilk kez bağlantı görülmesi, temel çizgi varsa tek başına incelemeye değer.

Kirli çizgi ve bakım

Temel çizgiyi zaten sızılmış bir ağda ölçersen, saldırganın trafiğini normal kabul edersin. Bir vaka düşün. ws-muhasebe-07 üç aydır her altmış saniyede bir dış adrese küçük bir istek atıyor. Bu bir komuta kontrol işaretçisidir (beacon).

Ekip ağ temel çizgisini tam bu dönemde çıkarır. İşaretçinin hedefi en sık görülen hedefler listesine girer ve normal sayılır. Sonraki kural bu hedefi hiçbir zaman sapma olarak görmez.

Çizgi kirlenmiştir ve kirli çizgi saldırganı korur. Kirli çizginin bedeli yalnız tek bir kaçırılmış olay değildir. O çizgiye dayanan bütün kurallar aynı körlüğü miras alır.

Bunu önlemek için çizgiyi çıkarmadan önce temizliği doğrula. Bilinen olay dönemlerini veriden çıkar.

En sık hedeflerin ve süreçlerin sahibini tek tek bul; sahibi olmayan satır çizgiye girmez. Düzenliliğe de bak. İnsan trafiği düzensizdir, işaretçi ise çoğu zaman saat gibi çalışır ve gece de, hafta sonu da durmaz. Aşağıdaki kayıtta aynı makineden gece gelen bağlantıları göreceksin.

İşaretçi tespitini "Beacon tespiti" dersinde ayrıntılı göreceksin. Burada amaç, temel çizgiye girmeden önce bu düzenliliği fark etmektir. Şüpheli satırları ayıkladıktan sonra çizgiyi yeniden hesapla.

Sık yapılan hataların çoğu küçük görünür. Tek bir ortalamayla bütün günü temsil etmek ilk hatadır. Hafta sonunu tatille aynı kefeye koymak ikincisidir; ikisi farklı normallerdir.

Üçüncüsü saat dilimidir. Kaynaklardan biri UTC, öteki yerel saat yazıyorsa saatlik dağılım üç saat kayar ve sabah yoğunluğu gece yoğunluğu gibi görünür. Dördüncüsü yeni sistemi erken ölçmektir.

Kullanıcıları gruplara ayırmayı da unutma. Muhasebe, geliştirme ve saha ekibi aynı ritimde çalışmaz; tek bir ortalama üçünü de yanlış temsil eder. Grup bazlı çizgi hem eşikleri gerçekçi yapar hem de alarm sayısını düşürür.

Çizgi tek seferlik iş değildir. Sistem değişir: yeni kampanya, yeni uygulama, büyüyen kullanıcı sayısı. Eski çizgiyle çalışan kural üç ay sonra ya kör olur ya boş alarm yağdırır.

Ölçümü otomatikleştir. Haftalık zamanlanmış bir arama çizgiyi yeniden hesaplasın ve sonucu aynı arama tablosuna yazsın. Tabloyu sürüm kontrolünde tut; böylece çizginin kendisinin nasıl kaydığını da görürsün.

Kampanya günü, göç gecesi ve büyük güncellemeler veride tepe üretir. Bu tepeleri silmek yerine not düşersin. Not düşülmüş tepe açıklanabilir, açıklanamayan tepe ise araştırılacak bir sorudur.

Etkinlik 6 / 6

ws-muhasebe-07'nin gece bağlantıları. Temel çizgiye girmeden önce ayıklanması gereken şüpheli satırları seç.

Şüpheli satırlara tıkla. Birden fazla olabilir.

Bu derste bir hata mı gördün? Bildir