Reguli Sigma: Logica de detectare universală și conversie SIEM
În lumea securității cibernetice defensive, una dintre cele mai persistente probleme a fost întotdeauna cel fragmentarea limbajelor de detectare: Fiecare SIEM are propria sa sintaxă proprietară, fiecare platformă necesită interogări diferite și reguli scrise pentru Splunk nu funcționează pe Elastic, care la rândul său nu este compatibil cu Microsoft Sentinel. Rezultatul este că echipele SOC petrec enorm de mult timp rescriindu-le logica de detectare pentru fiecare instrument, în loc să ne concentrăm pe ceea ce contează cu adevărat: găsiți amenințări înainte ca acestea să provoace daune.
Le Regulile Sigma s-au născut tocmai pentru a rezolva această problemă. Introdus de Florian Roth și Thomas Patzke, Sigma este astăzi formatul standard de facto pentru a scrie reguli de detectare într-un mod portabil și independent de platformă. O regulă Sigma scrisă o singură dată poate fi convertită automat într-o interogare Splunk SPL, Elasticsearch KQL, Microsoft Sentinel KQL, IBM QRadar, Chronicle YARA-L, și peste 40 de alte ținte. În acest articol, explorăm în profunzime sintaxa Sigma, modele de cartografiere logsource, tehnici de editare și conversie și cum se integrează Sigma într-o conductă modernă Detection-as-Code.
Ce veți învăța în acest articol
- Structura completă a unei reguli Sigma: titlu, sursă de jurnal, detecție, condiție
- Maparea surselor de log: categorie, produs, serviciu și modul în care acestea se traduc în SIEM
- Modificatori avansați: conține, startswith, endswith, re, base64offset
- Condiții de agregare: număr, sumă, min, max pentru statistici de detecție
- Conversie automată cu sigma-cli în Splunk, Elastic și Sentinel
- Model pentru detectarea mișcării laterale, persistenței, exfiltrației
- Testarea și validarea regulilor Sigma cu date sintetice
- Managementul depozitului Sigma al companiei cu cele mai bune practici
Ce este Sigma și de ce a devenit Standardul
Sigma este un format deschis, bazat pe YAML, pentru descrierea tiparelor de detectare pe jurnalele de securitate într-un mod independent de platformă. Gândește-te la asta ca YARA pentru bușteni: la fel cum YARA vă permite să scrieți reguli pentru fișierele rău intenționate care funcționează pe orice scaner, Sigma vă permite să scrieți reguli de detectare care funcționează pe orice SIEM.
Proiectul SigmaHQ găzduiește astăzi mai multe 3.000 de reguli comunitare acoperit de întreținere continuă, mapat la cadrul MITRE ATT&CK și gata a fi convertit. Creșterea a fost explozivă: de la un instrument de nișă la vânători de amenințări, Sigma a devenit limbajul comun al inginerilor de detectare profesionisti. Principalele avantaje sunt trei:
- Portabilitate: scrieți o regulă, implementați-o în N SIEM-uri diferite
- Colaborare: regulile pot fi citite de oricine, indiferent de SIEM-ul utilizat
- Automatizare: conversia este complet automatizată în CI/CD
Anatomia unei reguli Sigma
O regulă Sigma și un fișier YAML cu câmpuri bine definite. Să vedem structura completați cu un exemplu real care notează utilizarea lui mimikatz prin Jurnalele de evenimente Windows:
title: Mimikatz Detection via Windows Security Events
id: 0d82df6e-0e4e-4fbb-a12b-6e7a00a9c7c3
status: stable
description: Detects mimikatz usage patterns via LSASS access events
and command-line indicators
references:
- https://github.com/gentilkiwi/mimikatz
- https://attack.mitre.org/techniques/T1003/001/
author: Federico Calo
date: 2026/03/01
modified: 2026/03/09
tags:
- attack.credential_access
- attack.t1003.001
- attack.defense_evasion
logsource:
category: process_access
product: windows
detection:
selection_lsass:
TargetImage|endswith: '\lsass.exe'
GrantedAccess|contains:
- '0x1010'
- '0x1038'
- '0x1400'
- '0x143a'
selection_mimikatz_cli:
CommandLine|contains|all:
- 'sekurlsa'
- 'logonpasswords'
filter_legitimate:
SourceImage|startswith:
- 'C:\Windows\System32\'
- 'C:\Program Files\Windows Defender\'
condition: (selection_lsass and not filter_legitimate) or selection_mimikatz_cli
falsepositives:
- Legitimate security tools performing LSASS inspection
- Antivirus and EDR solutions
level: high
Să analizăm fiecare secțiune în detaliu:
Câmpuri și metadate obligatorii
Blocul de metadate de la începutul regulii este pentru documentare aceea pentru automatizarea managementului:
- titlu: numele lizibil al regulii. Trebuie să fie unic si descriptive. Convenție: „Verb + Subiect + Context”
- id: UUID unic v4. Nu se schimbă niciodată în timp, permiteți urmărirea versiunilor și a rapoartelor fals pozitive
-
stare: ciclul de viață al regulii. Valorile valide sunt:
stable,test,experimental,deprecated,unsupported -
nivel: severitate. Valori:
informational,low,medium,high,critical -
etichete: Lista de etichete MITRE ATT&CK în format .
attack.t<ID>pentru tehnici sauattack.<tactic>pentru tactici
Logsource: inima portabilității
Blocul sursă de jurnal și magia care face ca Sigma să fie portabil. În loc să specifice un index specific SIEM sau un flux de date, acesta definește tipul de jurnal în mod abstract prin trei câmpuri:
# Esempio 1: Windows Security Events
logsource:
category: process_creation
product: windows
# Esempio 2: Linux Authentication
logsource:
category: process_creation
product: linux
# Esempio 3: Web Server Logs
logsource:
category: webserver
# nessun product specifico: generico
# Esempio 4: Log specifico di un servizio
logsource:
product: windows
service: security
# Esempio 5: Log di rete
logsource:
category: network_connection
product: windows
# Esempio 6: Cloud Trail
logsource:
product: aws
service: cloudtrail
Sistemul de conducte sigma-cli traduce aceste surse de jurnal abstracte în
trasee concrete ale fiecărui SIEM. De exemplu, category: process_creation
su product: windows devine:
| Țintă SIEM | Traducere logsource |
|---|---|
| Splunk | source="WinEventLog:Security" EventCode=4688 |
| Elasticsearch (ECS) | event.category:process AND event.type:start |
| Microsoft Sentinel (KQL) | SecurityEvent | where EventID == 4688 |
| Cronica (YARA-L) | $event.metadata.event_type = "PROCESS_LAUNCH" |
Detectare: selecții și condiții
Blocul detectare și unde este definită logica de detecție. Este format din două părți: cel selectii (filtrează pe câmpurile de jurnal) iar cel stare (Logica booleană care combină selecții).
detection:
# Selection con match esatto su campo singolo
selection_exact:
EventID: 4625
# Selection con lista di valori (OR implicito)
selection_multi_value:
CommandLine|contains:
- 'net user'
- 'net localgroup'
- 'whoami'
# Selection con match su tutti i valori (AND implicito con |all)
selection_and_all:
CommandLine|contains|all:
- '-enc'
- 'powershell'
# Selection con regex
selection_regex:
CommandLine|re: '(?i)(invoke-mimikatz|sekurlsa::)'
# Selection con wildcard
selection_wildcard:
TargetFilename|startswith: 'C:\Users\'
TargetFilename|endswith: '.exe'
# Filter per ridurre i falsi positivi
filter_system_processes:
ParentImage|startswith: 'C:\Windows\System32\'
# Condition: logica booleana
condition: selection_exact and (
selection_multi_value or selection_and_all
) and not filter_system_processes
Modificatori avansati
I modificatori sunt sufixe care sunt adăugate la numele câmpurilor
cu caracterul pipe | pentru a schimba tipul de potrivire.
Cunoașterea lor pe toate este esențială pentru a scrie reguli eficiente:
| Modificator | Descriere | Exemplu |
|---|---|---|
contains |
Potrivirea subșirurilor (caracterul metalic pe ambele părți) | CommandLine|contains: 'mimikatz' |
startswith |
Potrivire la începutul valorii | Image|startswith: 'C:\Users\' |
endswith |
Potrivire la sfârșitul valorii | Image|endswith: '\cmd.exe' |
re |
Regex PCRE | CommandLine|re: '(?i)sekurlsa' |
base64offset |
Decodare Base64 cu offset 0,1,2 | CommandLine|base64offset|contains: 'IEX' |
wide |
Potriviți pe șiruri largi Unicode | CommandLine|wide|contains: 'sekurlsa' |
all |
Toate valorile din listă trebuie să se potrivească | CommandLine|contains|all: ['-enc', 'bypass'] |
windash |
Potriviți atât liniuța cât și bara oblică | CommandLine|contains|windash: '-Enc' |
cidr |
Potrivire în intervalul CIDR pentru IP | DestinationIp|cidr: '10.0.0.0/8' |
lt, lte, gt, gte |
Comparații numerice | EventID|gte: 4624 |
Condiții de agregare: Detectare statistică
Unele detectări necesită numărarea evenimentelor într-un anumit interval de timp, să nu se potrivească cu un singur eveniment. Suportă Sigma conditii de agregare pentru aceste cazuri de utilizare:
# Rilevare brute force: più di 10 login falliti in 60 secondi
title: Windows Brute Force Login Attempt
logsource:
product: windows
service: security
detection:
selection:
EventID: 4625
LogonType: 3
condition: selection | count() > 10
timeframe: 60s
falsepositives:
- Users with expired passwords
level: medium
---
# Rilevare data exfiltration: upload anomalo per destinazione
title: Potential Data Exfiltration by Volume
logsource:
category: network_connection
product: windows
detection:
selection:
Initiated: 'true'
DestinationPort:
- 443
- 80
condition: selection | count(DestinationHostname) by SourceIp > 50
timeframe: 1h
level: high
---
# Port scan detection: molte porte diverse dallo stesso sorgente
title: Network Port Scan Detection
logsource:
category: network_connection
detection:
selection:
EventID: 5156
condition: selection | count(DestinationPort) by SourceAddress > 30
timeframe: 10m
level: medium
Conversie cu sigma-cli: Ghid practic
sigma-cli și instrumentul oficial pentru convertirea regulilor Sigma în limbaje de interogare SIEM. Instalare și utilizare de bază:
# Installazione
pip install sigma-cli
pip install pySigma-backend-splunk
pip install pySigma-backend-elasticsearch
pip install pySigma-backend-microsoft365defender
# Verifica backend disponibili
sigma list backends
# Conversione base: Sigma -> Splunk SPL
sigma convert -t splunk -p splunk_windows rules/mimikatz.yml
# Output atteso:
# (source="WinEventLog:Microsoft-Windows-Sysmon/Operational"
# EventCode=10 TargetImage="*\\lsass.exe"
# GrantedAccess IN ("0x1010", "0x1038", "0x1400", "0x143a"))
# NOT (SourceImage="C:\\Windows\\System32\\*"
# OR SourceImage="C:\\Program Files\\Windows Defender\\*")
# Conversione con pipeline personalizzata
sigma convert \
-t splunk \
-p splunk_windows \
-p my_custom_field_mapping.yml \
rules/
# Conversione per Elasticsearch con ECS
sigma convert \
-t elasticsearch \
-p ecs_windows \
-f lucene \
rules/credential_access/
# Conversione per Microsoft Sentinel (KQL)
sigma convert \
-t microsoft365defender \
-p microsoft365defender \
rules/lateral_movement/
# Output in formato JSON per automazione
sigma convert \
-t splunk \
-p splunk_windows \
--format-output json \
rules/ > converted_rules.json
Atenție: Pipeline and Field Mapping
Fiecare organizație are propria sa normalizare a jurnalului. Dacă jurnalele dvs nu urmați modelul standard (de exemplu, Sysmon pentru Windows), trebuie să creați un conductă personalizată care mapează câmpurile Sigma la câmpuri date reale ale SIEM-ului dvs. Fără această mapare, regulile convertite nu vor funcționa.
Creați conducte personalizate
Conductele Sigma definesc modul de mapare a câmpurilor abstracte Sigma la câmpuri elemente concrete ale SIEM-ului dumneavoastră. Iată cum să creați unul pentru o infrastructură pe care o utilizați un format de jurnal personalizat:
# custom_pipeline.yml
name: Custom Windows Pipeline
priority: 20
transformations:
# Rinominare campo Sigma -> campo reale nel SIEM
- id: field_mapping_process
type: field_name_mapping
mapping:
CommandLine: process.command_line
Image: process.executable
ParentImage: process.parent.executable
User: user.name
TargetImage: target.process.executable
GrantedAccess: target.process.granted_access
rule_conditions:
- type: logsource
category: process_creation
# Aggiungere condizioni all'index di destinazione
- id: index_condition
type: detection_item_keyword
keyword: 'index=windows_events'
rule_conditions:
- type: logsource
product: windows
# Sostituire valori nei campi
- id: winlog_channel_map
type: field_value_mapping
field_name: winlog.channel
mapping:
'Security': 'security'
'System': 'system'
'Application': 'application'
Modele de detectare pentru cazuri de utilizare obișnuită
Să vedem o colecție de reguli Sigma pregătite pentru cazuri de utilizare cu prioritate ridicată, mapat la cele mai exploatate tehnici MITRE ATT&CK:
Mișcare laterală: Pass-the-Hash
title: Pass-the-Hash Attack Pattern
id: 6571d552-4c16-4f50-b5f6-11ae9d1b0a38
status: stable
description: Detects Pass-the-Hash attacks via anomalous NTLM authentication
tags:
- attack.lateral_movement
- attack.t1550.002
logsource:
product: windows
service: security
detection:
selection:
EventID: 4624
LogonType: 3
AuthenticationPackageName: NTLM
KeyLength: 0
filter_local:
IpAddress:
- '127.0.0.1'
- '::1'
filter_machine:
SubjectUserName|endswith: '






