Selamlar, bu yazımda Splunk AI Toolkit ile Failed Login Anomali Tespiti ele alacağız. Şimdiden keyifli okumalar. 🙂  SIEM tarafında çoğu alarm sabit eşikler üzerinden çalışır. Örneğin 15 dakika içinde 50 başarısız oturum açma olayı oluşursa alarm üret gibi. Bu yaklaşım basit ve hızlıdır ancak her kurumun normal davranış profili aynı değildir. Bir ortam için 20 failed login olağan dışıyken başka bir ortamda bu değer günlük operasyonun parçası olabilir.

Splunk AI Toolkit ile bu problemi statik eşik yerine verinin kendi dağılımını öğrenerek ele almak mümkün. Bu yazıda Windows Security loglarındaki EventCode 4625 olaylarını kullanarak Smart Outlier Detection modeli oluşturacağız, modeli publish edeceğiz ve yeni veriye SPL üzerinden uygulayacağız.

Bu senaryoda LLM kullanılmıyor. Çalışma, AI Toolkit’in klasik machine learning tarafındaki DensityFunction algoritmasını kullanıyor; dolayısıyla OpenAI, Azure OpenAI, kurum içi LLM veya harici bir yapay zeka servisine ihtiyaç yok.

1. AI Toolkit Üzerinden Smart Outlier Detection

AI Toolkit içerisinde outlier detection, forecasting, clustering ve prediction gibi farklı machine learning operasyonları bulunuyor. Bu çalışma için kullanacağımız özellik Smart Outlier Detection.

2. Experiment Oluşturma

AI Toolkit > Experiments bölümünden yeni bir experiment oluşturuyoruz. Experiment Type olarak Smart Outlier Detection seçiliyor. Örnek çalışma adı olarak failed_login_count kullanılabilir.

3. Veriyi Model İçin Hazırlama

Modelin ham Windows eventlerini doğrudan öğrenmesi yerine, önce analize uygun sayısal bir feature üretmemiz gerekiyor. Bu nedenle başarısız login olaylarını 15 dakikalık periyotlarda sayıyoruz.

index=windows EventCode=4625 earliest=-7d
| timechart span=15m count AS failed_login_count

Bu sorgu son 7 günlük EventCode 4625 verisini 15 dakikalık zaman kovalarına böler ve her zaman dilimi için failed_login_count alanını üretir.

4. Analiz Edilecek Alanı Seçme

Learn Data ekranında Field to analyze alanı olarak failed_login_count seçiyoruz. İlk modelde Split by fields alanını boş bırakmak, tüm ortam için tek bir genel davranış modeli oluşturmamızı sağlar.

5. Outlier Detection Modelini Çalıştırma

Detect Outliers çalıştırıldığında AI Toolkit, failed_login_count değerlerinin dağılımını inceler ve uygun dağılım modelini otomatik olarak seçebilir. Lab ortamındaki örnekte Auto seçimi sonucunda Beta dağılımı kullanıldı.

6. Model Sonuçlarını Yorumlama

Review Experiment ekranı yalnızca kaç outlier bulunduğunu göstermez; aynı zamanda modelin veri setini nasıl yorumladığını anlamamızı sağlayan istatistikleri de sunar.

DeğerÖrnek SonuçAnlamı
DistributionAuto: BetaAI Toolkit veriye uygun dağılım olarak Beta dağılımını seçmiştir.
Cardinality673Modelin değerlendirdiği zaman kovası / gözlem sayısıdır.
Min0Bazı 15 dakikalık dilimlerde failed login bulunmadığını gösterir.
Max11Eğitim verisindeki en yüksek 15 dakikalık failed login sayısıdır.
Mean0’a yakınVeri sıfır ağırlıklı olduğu için ortalama oldukça düşüktür.
Std~1.61failed_login_count değerlerinin ortalama etrafındaki yayılımını gösterir.
Outliers19673 gözlem içerisinden modelin sıra dışı olarak işaretlediği kayıt sayısıdır.
Threshold0.0001Outlier hassasiyetini belirleyen tolerans/eşik değeridir.
DistanceWasserstein ~0.10Seçilen teorik dağılım ile gözlenen veri arasındaki uyuma ilişkin mesafe metriğidir.
Alpha / BetaModel parametreleriBeta dağılımının şeklini belirleyen fit parametreleridir.

Burada dikkat edilmesi gereken nokta, modelin çıktısını doğrudan saldırı olarak yorumlamamaktır. Outlier, normal davranıştan istatistiksel olarak sapmış bir gözlemi ifade eder. SOC tarafında bu sonuç, inceleme önceliği oluşturmak için kullanılabilir.

7. Modeli Operationalize Etme

Model sonuçları anlamlıysa Operationalize adımına geçiyoruz. Bu bölümde modeli publish etmek, alert oluşturmak veya model eğitimini zamanlamak mümkün.

SeçenekNe İşe Yarar?
Publish Outlier ModelsExperiment içinde oluşturulan modeli kalıcı hale getirir ve SPL üzerinde kullanılabilir yapar.
Create AlertModel çıktısına göre Splunk alert oluşturur.
Manage AlertsOluşturulan alarmların yönetimini sağlar.
Schedule Model TrainingModelin belirli periyotlarda yeniden eğitilmesini sağlar.
View Scheduled Training JobsPlanlanan eğitim job’larını görüntüler.

8. Modeli Publish Etme

Modeli publish ederken anlaşılır bir isim kullanmak sonraki SPL aramalarında işleri kolaylaştırır.

failed_login_outlier_model

Publish sonrasında Models ekranından modelin oluştuğunu doğrulayabiliriz. Örneğimizde algoritma DensityFunction ve feature variable failed_login_count olarak görünmektedir.

9. Modeli Yeni Veriye Uygulama

Publish edilen model artık normal Splunk Search ekranında apply komutu ile kullanılabilir.

index=windows EventCode=4625 earliest=-7d
| timechart span=15m count AS failed_login_count
| apply failed_login_outlier_model

apply sonrasında modele ait ek alanlar üretilir. Bunlar, her zaman kovasının normal mi yoksa outlier mı olduğunu değerlendirmek için kullanılır.

10. Model Çıktısındaki Alanlar

AlanÖrnekAçıklama
failed_login_count11İlgili 15 dakikalık zaman kovasındaki başarısız login sayısıdır.
IsOutlier(failed_login_count)1.01.0 ise model bu gözlemi outlier olarak işaretlemiştir; 0 ise normal kabul edilir.
ProbabilityDensity(failed_login_count)2.5e-81Gözlemin fitted dağılım üzerindeki olasılık yoğunluğudur. Çok düşük değer, gözlemin dağılım içinde nadir olduğunu gösterebilir.
BoundaryRangesModel sınırlarıModelin normal ve outlier bölgelerini ayırmak için hesapladığı sınır aralıklarını gösterir.
_time2026-09-10 09:00timechart tarafından oluşturulan zaman kovasının başlangıç zamanıdır.

11. Sadece Outlier Kayıtlarını Görüntüleme

IsOutlier alan adı parantez içerdiği için SPL içerisinde alan adını tek tırnak ile kullanmak en güvenli yöntemdir.

index=windows EventCode=4625 earliest=-7d
| timechart span=15m count AS failed_login_count
| apply failed_login_outlier_model
| where ‘IsOutlier(failed_login_count)’=1

SOC analisti için daha temiz bir çıktı üretmek istersek:

index=windows EventCode=4625 earliest=-7d
| timechart span=15m count AS failed_login_count
| apply failed_login_outlier_model
| where ‘IsOutlier(failed_login_count)’=1
| table _time failed_login_count “ProbabilityDensity(failed_login_count)” “BoundaryRanges”
| sort – failed_login_count

12. Alarm Mantığına Dönüştürme

Model stabil hale geldikten ve false positive davranışı gözlemlendikten sonra sonuç bir Splunk alert’e dönüştürülebilir.

index=windows EventCode=4625 earliest=-20m
| timechart span=15m count AS failed_login_count
| apply failed_login_outlier_model
| where ‘IsOutlier(failed_login_count)’=1
| table _time failed_login_count “ProbabilityDensity(failed_login_count)” “BoundaryRanges”

Alert AyarıÖneri
Schedule15 dakikada bir
Search windowSon 20 dakika
TriggerNumber of Results > 0
Throttleİhtiyaca göre 15-30 dakika
ActionEmail, webhook, notable veya kurum prosedürüne göre

13. Production Ortamında Dikkat Edilmesi Gerekenler

Lab ortamında 15 dakikalık bucket ve 7 günlük veri ile hızlı bir POC yaptık. Production ortamında ise modelin sağlıklı sonuç vermesi için veri hacmine göre eğitim penceresi ve bucket boyutu belirlenmeli.

Log HacmiÖnerilen BaşlangıçNeden?
Düşükearliest=-30d, span=1hSıfır ağırlığını azaltıp daha anlamlı bir davranış dağılımı oluşturabilir.
Ortaearliest=-30d, span=30mHassasiyet ile yeterli örnek sayısı arasında iyi bir denge sağlar.
Yüksekearliest=-14d veya -30d, span=15mKısa sürede oluşan failed login artışlarını daha hızlı görünür kılar.
Kritik kural: Model hangi aggregation ile eğitildiyse apply tarafında da aynı aggregation kullanılmalıdır. Örneğin eğitim span=15m ise production search de span=15m olmalıdır. Aksi durumda veri dağılımı değişir ve false positive/false negative riski artar.

14. Modelin Yeniden Eğitilmesi

Kurum davranışı zaman içinde değişebilir. Kullanıcı sayısı, vardiya düzeni, uygulama sayısı veya saldırı yüzeyi değiştikçe eski baseline güncelliğini kaybedebilir. Bu nedenle ilk üretim geçişinde modeli birkaç gün gözlemlemek, ardından ihtiyaca göre haftalık veya periyodik retraining planlamak daha sağlıklı olur.

Sonuç

Bu çalışma ile Windows EventCode 4625 failed login verilerini statik bir eşik yerine geçmiş davranışa dayalı olarak analiz eden bir anomali modeli oluşturduk. Splunk AI Toolkit’in Smart Outlier Detection özelliği, DensityFunction algoritması ile verinin dağılımını öğrendi; modeli publish ederek SPL içerisinde apply komutuyla tekrar kullanılabilir hale getirdik.

En önemli kazanım, ’50 failed login olursa alarm üret’ gibi sabit bir kural yerine ortamın kendi normalini öğrenen ve normalden sapmayı işaretleyen bir yaklaşım elde etmek. Bu yaklaşım tek başına saldırı kararı vermez; ancak SOC analistinin dikkatini gerçekten sıra dışı davranışlara yönlendiren güçlü bir ek sinyal sağlar.

Share this content:

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Explore More

THE HARVESTER (İNSAN KEŞFİ) NEDİR? NASIL KULLANILIR?

Herkese Selam! Bugün ele aldığımız konu theHarvester Nedir? Nasıl Kullanılır? , iyi okumalar 🙂  Hedef sisteme ait subdomain ve maillerin bulunmasında kullanılan bir araçtır. Örneğin araştırma yapmak istediğimiz şirketteki çalışanların

MAİL HEADER ANALİZİ

Herkese selam! Bu yazımda ele aldığım konuMAİL HEADER ANALİZİ , Keyifli Okumalar.  🙂 Siber saldırganların çevrimiçi kimlik avı aracılığıyla kullanıcılara saldırmaya daha fazla odaklanması doğaldır.  Bunun kim tarafından nasıl yapıldığını tespit

ADLİ BİLİŞİM NEDİR?

Herkese Selam! Bugün ele aldığımız konu adli bilişim nedir? İyi okumalar 🙂 Adli bilişim, bilişim sistemlerinde elektro manyetik vb. ortamlarda muhafaza edilen veya iletilen görüntü, ses ve veri gibi herhangi