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ı.
- summarize —
count(),sum(),dcount()veyamake_set()ile veriyi topla; neredeyse her zamanbyile 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
TimeGeneratedfiltrelerini unutmak, yavaş, pahalı tam-tabel taramaları neden olmak.summarize'ıwhere'den önce kullanmak, bu da motoru filtrelenmemiş veriyi toplamaya zorlamak.- Tabloları birleştirirken eşleşmeyen sütun adları — her zaman
getschemaile ş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ı.
Bu, Korra Studio bilgi tabanından bir nottur — platform her konuyu 1-to-1 mentoring ile eşleştirir.
Ücretsiz başlaarrow_forward