arrow_backAlan notlarına dön
BLUE TEAM Yayınlandı 10 Jul 2026

Her SOC Analisti Bilmesi Gereken KQL Temelleri

Microsoft Sentinel ve Defender'da tehditleri daha hızlı avlamak için SOC analistlerinin günlük kullandığı temel KQL söz dizimi ve sorgu desenlerini öğrenin.

Kusto Query Language (KQL), Microsoft Sentinel ve Microsoft Defender'da tehdit avcılığı ve uyarı önceliklendirilmesinin omurgasıdır. Bir SOC'de çalışıyorsanız, KQL akıcılığı hızlı "burada ne oldu?" sorusuna yanıt verebilen analistleri pano tıklamakta sıkışmış olanlardan ayırır. Bu tam bir dil referansı değil — vardiyada sürekli kullanılan pratik alt kümedir.

KQL'nin SOC'deki Önemi

KQL salt-okunur ve masif log veri setlerini hızlı sorgulamak için optimize edilmiştir. Sentinel, Defender for Endpoint, Azure Monitor ve Log Analytics hepsi bunu konuşur. Bir kez öğrendiğinizde, ürünler arasında pivot yapabilirsiniz: bir tabel seçin, filtreyin, çıktıyı şekillendirin. Her soruşturma — kimlik avı önceliklendirilmesi, yanal hareket avları, yanlış-pozitif ayarlaması — bir sorguyla başlar.

Pipe Herşeydir

KQL sorguları bir pipeline olarak inşa edilir. Bir tablodur başlayıp veriyi bir dizi operatörden geçirirsiniz; her biri önceki sonucu filtreler, dönüştürür veya özetler:

SecurityEvent
| where EventID == 4625
| where TimeGenerated > ago(24h)
| summarize FailedLogons = count() by Account, Computer
| sort by FailedLogons desc

Bunu yukarıdan aşağıya bir cümle gibi okuyun: SecurityEvent günlüklerinden başla, sadece başarısız oturumları tut (4625), son güne sınırla, hesap/bilgisayar başına hataları say, sonra sırala. Bu doğrusal okunabilirlik, ad hoc avlanma için KQL'nin SQL üzerindeki en büyük avantajıdır.

Ezberlemesi Gereken Temel Operatörler

  • where — birincil filtren. Pahalı operasyonlardan önce veri hacmini kesmek için erken ve sık kullan.
  • project — belirli sütunları seç ve adlandır; çıktıda istemediğin gürültüyü at.
  • extend — mevcut olanları silmeden hesaplanan sütunlar ekle; dizeler ayrıştırmak veya koşulları işaretlemek için faydalı.
  • summarizecount(), sum(), dcount() veya make_set() ile veriyi topla; neredeyse her zaman by ile eşleştirilir.
  • join — tablolar arasında ilişki kur; örneğin, yönetilmeyen cihaz oturum açışlarını tespit etmek için oturum açma günlüklerini cihaz envanteri ile bağla.
  • render — sonuçları sorgu editöründe doğrudan timechart veya barchart olarak görselleştir; ani artışları fark etmek için pratik.

Zaman Filtrelemesi Doğru Yapılı

AkkatilyaPipeline içinde mümkün olduğunca erken TimeGenerated (veya tablonun eşdeğer zaman damgası sütunu) üzerinde filtrele. KQL motorları zaman aralığı filtrelemeleri etrafında ağır optimize eder; | where TimeGenerated > ago(7d) sonda yerine başa yakın koymak, bir sorgunun saniyeler içinde dönmesi ile meşgul bir kiracı üzerinde zaman aşımına uğraması arasındaki fark olabilir.

SigninLogs
| where TimeGenerated > ago(1h)
| where ResultType != "0"
| where UserPrincipalName has "@yourdomain.com"

Dize Eşleştirmesi: has vs contains vs ==

Yaygın bir hata, her şey için contains'e varsayılan olarak gitmektir. has tam terimler eşleştirmeler ve bir terim indeksi kullanır, bu da onu büyük tablolarda çarpıcı biçimde hızlı kılar. contains'i yalnızca bir sözcüğün içinde alt dize eşleşmeleri gerektiğinde kullan (kısmi bir etki alanı parçası gibi), ve =='i EventID veya IPAddress gibi yapılandırılmış alanlar üzerinde tam eşleşmeler için kullan. Bu alışkanlık tek başına DeviceNetworkEvents veya CommonSecurityLog gibi yüksek hacimli tablolardaki avları dikkat çekici şekilde hızlandırır.

DeviceProcessEvents
| where ProcessCommandLine has "powershell"
| where ProcessCommandLine has_any ("-enc", "-EncodedCommand")

Yeniden Kullanılabilir Algılama Mantığı İnşa Etmek

Bir sorgu faydalı olduğunu kanıtladığında, bunu let ile bir işlev olarak sarla veya Sentinel Analytics Rule olarak zamanlanmış yürütme ile kaydet. Eşikleri parametrelendir (başarısız oturum açma sayısı gibi) böylece aynı mantık kiracılar arasında ölçeklenebilsin veya sıfırdan yeniden yazmadan ayarlanabilsin. Tek seferlik avlanma sorgularının SOC'u otomatik olarak çağıran duran tespit edişlere nasıl evrildikleri budur.

Yaygın Tuzaklar

  • TimeGenerated filtrelerini unutmak, yavaş, pahalı tam-tabel taramaları neden olmak.
  • summarizewhere'den önce kullanmak, bu da motoru filtrelenmemiş veriyi toplamaya zorlamak.
  • Tabloları birleştirirken eşleşmeyen sütun adları — her zaman getschema ile şema kontrol et.
  • contains'i aşırı kullanmak, indeksleme avantajlarını atlamak ve büyük ölçekli avları yavaşlatmak.

KQL, iç içe geçmiş alt sorgulardan ziyade pipeline'larda düşünen analistleri ödüllendirir. Her soruşturmaya dar bir zaman penceresinden ve belirli bir tablodan başla, sonra sadece gerektiğinde genişlet.

Bu size sağlam bir temel verdiyse, daha fazla uygulamalı SOC sorgusu izlenmeleri ve algılama geliştirme alıştırmaları için Korra Studio'daki Blue Team ve Digital Forensics bölümlerini keşfet.

AI yardımıyla yazıldı, Michal Pilch (CISSP), Korra Studio tarafından incelendi ve yayınlandı.

Daha ileri gitmek için hazır mısın?

Bu, Korra Studio bilgi tabanından bir nottur — platform her konuyu 1-to-1 mentoring ile eşleştirir.

Ücretsiz başlaarrow_forward