01 - Detection Engineering: dalla Disciplina allo Script alla Pipeline
In un panorama di minacce informatiche in costante evoluzione, la capacità di rilevare attivita malevole prima che causino danni significativi rappresenta il vero differenziale tra un'organizzazione resiliente e una vulnerabile. Per decenni, il rilevamento delle minacce e stato affidato a regole scritte ad hoc, firme antivirus e intuizioni individuali degli analisti SOC. Oggi, questo approccio artigianale non e più sostenibile: il volume di log, la complessità delle infrastrutture cloud-native e la sofisticazione degli attaccanti richiedono un approccio ingegneristico e sistematico.
Nasce cosi la Detection Engineering: una disciplina che applica i principi dell'ingegneria del software al processo di creazione, test, distribuzione e manutenzione delle regole di rilevamento. Non si tratta più di scrivere query isolate in un SIEM, ma di costruire pipeline automatizzate, versionare le detection come codice, testarle con dati simulati e misurarle con metriche oggettive.
Cosa Imparerai in Questo Articolo
- Cos'è la Detection Engineering e perchè e diventata una disciplina autonoma
- L'evoluzione dagli script ad hoc alle pipeline CI/CD per le detection
- Il ciclo di vita completo di una detection: ipotesi, sviluppo, test, deploy, tuning
- I principali tipi di detection: signature-based, behavioral, anomaly-based
- Le metriche di qualità: True Positive Rate, False Positive Rate, MTTD, MTTR
- L'ecosistema SIEM/SOAR e le sorgenti dati fondamentali
- Il concetto di Detection-as-Code e le pipeline CI/CD per le regole di sicurezza
- Esempi pratici con regole Sigma, script Python e configurazioni YAML
Cos'è la Detection Engineering
La Detection Engineering e il processo sistematico di progettazione, sviluppo, test e manutenzione della logica che identifica attivita malevole all'interno della telemetria di un'organizzazione. Questa telemetria include log provenienti da endpoint, infrastruttura cloud, identity provider, applicazioni web, sistemi di rete e molto altro.
A differenza dell'approccio tradizionale, dove un analista SOC scriveva una query nel SIEM in risposta a un incidente specifico, la Detection Engineering adotta un workflow strutturato che ricorda lo sviluppo software moderno: versionamento del codice, code review, test automatizzati, deployment continuo e monitoraggio delle prestazioni in produzione.
"Detection Engineering is to SOC what Software Engineering is to coding: it transforms an ad-hoc, reactive activity into a systematic, measurable, and continuously improving discipline."
- SANS Institute, 2025 Detection Engineering Survey
I Tre Pilastri della Detection Engineering
La disciplina si fonda su tre pilastri interconnessi che ne definiscono la maturita:
- Threat Intelligence - Comprendere chi sono gli avversari, quali tecniche usano (MITRE ATT&CK), e quali asset dell'organizzazione sono a rischio. Senza una comprensione profonda delle minacce, le detection saranno generiche e poco efficaci.
- Data Engineering - Garantire che i log necessari siano raccolti, normalizzati e disponibili per l'analisi. Una detection perfetta e inutile se i dati su cui opera non sono presenti o sono di scarsa qualità.
- Software Engineering - Applicare le best practice dello sviluppo software: version control, testing, CI/CD, documentazione, metriche. Le detection devono essere trattate come codice di produzione.
L'Evoluzione: dagli Script Ad Hoc alla Disciplina Ingegneristica
Il percorso che ha portato alla Detection Engineering moderna può essere suddiviso in quattro fasi distinte, ciascuna caratterizzata da un livello crescente di maturita e automazione.
Fase 1: L'Era delle Firme (1990-2005)
Le prime forme di rilevamento si basavano su firme statiche: pattern noti di malware, hash di file malevoli, stringhe specifiche nei payload di rete. Ogni antivirus e IDS (Intrusion Detection System) manteneva un database di firme che veniva aggiornato periodicamente. L'approccio funzionava ragionevolmente bene con minacce note, ma era completamente cieco di fronte a varianti nuove o attacchi personalizzati.
Fase 2: L'Era degli Script SIEM (2005-2015)
Con la diffusione dei primi SIEM (Security Information and Event Management), gli analisti iniziarono a scrivere query e correlazioni personalizzate. Ogni analista aveva il proprio approccio, i propri script, le proprie naming convention. Le regole venivano create direttamente nell'interfaccia web del SIEM, senza versionamento, senza test, senza documentazione standardizzata. Quando un analista lasciava l'organizzazione, le sue detection spesso diventavano incomprensibili per i successori.
Fase 3: La Nascita della Detection Engineering (2015-2022)
Tra il 2015 e il 2022, la comunita di sicurezza inizia a riconoscere la necessità di un approccio più strutturato. Nascono formati standard come Sigma (2017) per le regole di detection, il framework MITRE ATT&CK diventa il riferimento universale per mappare le tecniche degli avversari, e i primi team dedicati di Detection Engineering compaiono nelle organizzazioni più mature.
Fase 4: Detection-as-Code e Pipeline CI/CD (2022-oggi)
Oggi, le organizzazioni più avanzate trattano le detection esattamente come codice software. Le regole sono scritte in formati dichiarativi (Sigma, YAML), versionate in repository Git, testate automaticamente con dati simulati, distribuite tramite pipeline CI/CD e monitorate con dashboard dedicate. Secondo il SANS 2025 Detection Engineering Survey, il 60% delle organizzazioni mantiene team dedicati di Detection Engineering, con il 70% delle enterprise con oltre 5.000 dipendenti che hanno già stabilito team strutturati.
| Fase | Periodo | Approccio | Strumenti | Limiti |
|---|---|---|---|---|
| Firme Statiche | 1990-2005 | Pattern matching su firme note | Antivirus, IDS (Snort) | Zero-day invisibili, alta latenza |
| Script SIEM | 2005-2015 | Query ad hoc nel SIEM | Splunk, ArcSight, QRadar | Non versionato, non testato, knowledge siloed |
| Detection Engineering | 2015-2022 | Workflow strutturato con standard | Sigma, ATT&CK, ELK | Ancora molti processi manuali |
| Detection-as-Code | 2022-oggi | Pipeline CI/CD, tutto versionato | Git, CI/CD, Sigma, SOAR | Richiede maturita organizzativa |
Il Ciclo di Vita di una Detection
Ogni detection segue un ciclo di vita ben definito che garantisce qualità, efficacia e manutenibilità nel tempo. Il ciclo si compone di sei fasi fondamentali, ciascuna con deliverable e criteri di qualità specifici.
1. Ipotesi (Hypothesis)
Tutto inizia con una ipotesi di minaccia. L'analista o il detection engineer identifica una tecnica di attacco specifica (ad esempio, "Un attaccante potrebbe usare PowerShell per scaricare ed eseguire payload malevoli") e formula un'ipotesi su come questa attivita si manifesterebbe nei log disponibili. Le fonti per le ipotesi includono:
- Threat Intelligence - Report su campagne attive, TTPs osservati
- MITRE ATT&CK - Tecniche mappate per tactic specifiche
- Incident post-mortem - Lezioni apprese da incidenti precedenti
- Red Team findings - Risultati di penetration test e purple teaming
- Gap analysis - Tecniche ATT&CK senza copertura di detection
2. Sviluppo (Development)
Con l'ipotesi definita, il detection engineer scrive la regola di rilevamento. Questo comporta la scelta del formato (Sigma, query nativa SIEM, script Python), la definizione dei log source necessari, la logica di selezione e filtraggio, e la documentazione dei metadati (autore, severita, mapping ATT&CK, false positive noti).
3. Test e Validazione (Testing)
Prima del deployment, la detection deve essere validata contro dati reali e simulati. Il testing include: true positive testing (la regola rileva l'attacco simulato?), false positive testing (la regola genera allarmi su attivita legittime?), e performance testing (la regola e sufficientemente performante sui volumi di log di produzione?).
4. Deployment
Il deployment avviene attraverso pipeline automatizzate che convertono la regola nel formato nativo del SIEM target, la distribuiscono all'ambiente di produzione e ne verificano il corretto funzionamento. In ambienti maturi, questo processo e completamente automatizzato tramite CI/CD.
5. Monitoraggio e Metriche
Una volta in produzione, la detection viene monitorata costantemente. Le metriche chiave includono il volume di alert generati, il rapporto true/false positive, il tempo medio di rilevamento (MTTD), e l'impatto sul carico degli analisti SOC.
6. Tuning e Manutenzione
Sulla base dei dati raccolti in produzione, la detection viene continuamente affinata. Il tuning può includere l'aggiunta di eccezioni per false positive ricorrenti, l'ampliamento della logica per coprire varianti della tecnica, o la deprecazione della regola se non più rilevante.
Best Practice: il Purple Teaming
Il purple teaming accelera significativamente il ciclo di feedback del detection lifecycle. Combinando le competenze offensive del Red Team con quelle difensive del Blue Team, e possibile simulare tecniche di attacco reali e validare le detection in tempo reale, riducendo il tempo tra ipotesi e detection validata da settimane a ore.
Tipi di Detection: dall'IOC al Comportamento
Le detection possono essere classificate in base alla logica di rilevamento utilizzata. Ogni tipo ha vantaggi e limiti specifici, e un programma di detection maturo li combina tutti in modo stratificato.
1. Signature-Based Detection
Il rilevamento basato su firme cerca pattern esatti nei dati: hash di file noti, stringhe specifiche nei comandi, indirizzi IP o domini malevoli noti (IOC - Indicators of Compromise). E il tipo più semplice e veloce, con bassissimo tasso di false positive, ma completamente inefficace contro minacce nuove o varianti.
title: Emotet Loader Hash Detection
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
status: stable
description: Detects known Emotet loader by file hash
author: Detection Engineering Team
date: 2025/10/15
references:
- https://attack.mitre.org/software/S0367/
logsource:
category: file_event
product: windows
detection:
selection:
Hashes|contains:
- 'SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
- 'SHA256=a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a'
- 'MD5=d41d8cd98f00b204e9800998ecf8427e'
condition: selection
falsepositives:
- Unlikely, known malicious hashes
level: critical
tags:
- attack.execution
- attack.t1204.002
2. Behavioral Detection
Le detection comportamentali cercano sequenze di azioni o pattern di comportamento che indicano attivita sospetta, indipendentemente dagli specifici IOC. Ad esempio, invece di cercare un hash specifico di Mimikatz, una detection comportamentale potrebbe cercare qualsiasi processo che accede alla memoria di LSASS per estrarre credenziali. Questo approccio e molto più resistente all'evasione, perchè gli attaccanti possono cambiare i propri strumenti ma difficilmente possono cambiare la tecnica sottostante.
title: Suspicious LSASS Process Access - Credential Dumping
id: b2c3d4e5-f6a7-8901-bcde-f12345678901
status: experimental
description: |
Detects process access to LSASS memory, a common technique
for credential dumping (T1003.001). Focuses on behavior
rather than specific tool signatures.
author: Federico Calo
date: 2025/11/20
references:
- https://attack.mitre.org/techniques/T1003/001/
logsource:
category: process_access
product: windows
detection:
selection:
TargetImage|endswith: '\lsass.exe'
GrantedAccess|contains:
- '0x1010' # PROCESS_QUERY_LIMITED_INFORMATION + PROCESS_VM_READ
- '0x1038' # Read memory access
- '0x1FFFFF' # PROCESS_ALL_ACCESS
filter_legitimate:
SourceImage|endswith:
- '\MsMpEng.exe' # Windows Defender
- '\csrss.exe' # Client Server Runtime
- '\wmiprvse.exe' # WMI Provider
- '\svchost.exe' # Service Host
filter_system:
SourceUser|contains: 'SYSTEM'
SourceImage|startswith: 'C:\Windows\System32\'
condition: selection and not filter_legitimate and not filter_system
falsepositives:
- Legitimate security tools performing memory scanning
- EDR solutions with high-privilege access
level: high
tags:
- attack.credential_access
- attack.t1003.001
3. Anomaly-Based Detection
Le detection basate su anomalie stabiliscono un baseline di normalita e segnalano le deviazioni significative. Ad esempio, se un utente accede tipicamente da una sede in Italia durante l'orario lavorativo, un login dalla Cina alle 3 di notte sarebbe un'anomalia. Questo approccio può rilevare minacce completamente sconosciute (zero-day), ma tende a generare più false positive, specialmente in ambienti dinamici.
4. Threat Hunting
Il Threat Hunting e un processo proattivo e guidato da ipotesi in cui gli analisti cercano attivamente minacce che potrebbero essere sfuggite alle detection automatiche. A differenza delle detection automatizzate, il threat hunting e esplorativo e spesso produce nuove detection che vengono poi codificate e automatizzate.
| Tipo di Detection | Precisione | Copertura Zero-Day | False Positive | Manutenzione | Esempio |
|---|---|---|---|---|---|
| Signature-Based | Molto alta | Nessuna | Molto bassi | Alta (aggiornare IOC) | Hash file, IP malevoli |
| Behavioral | Alta | Buona | Moderati | Media | Accesso LSASS, lateral movement |
| Anomaly-Based | Variabile | Ottima | Alti | Alta (tuning baseline) | Login anomalo, traffico insolito |
| Threat Hunting | Molto alta | Ottima | Minimi (manuale) | Alta (richiede analisti) | Analisi esplorativa, ipotesi |
Metriche di qualità per le Detection
Una detection non e utile se non e misurabile. Le metriche di qualità permettono di valutare l'efficacia delle regole di rilevamento, guidare il processo di tuning e giustificare gli investimenti nel programma di Detection Engineering.
Metriche Operative Fondamentali
| Metrica | Descrizione | Target | Come Migliorare |
|---|---|---|---|
| MTTD (Mean Time to Detect) | Tempo medio dal momento dell'attivita malevola alla generazione dell'alert | < 4 ore (top team: < 30 min) | Migliore copertura log, detection real-time |
| MTTR (Mean Time to Respond) | Tempo medio dalla detection alla contenimento/risoluzione | < 4 ore | Automazione SOAR, playbook definiti |
| True Positive Rate (TPR) | Percentuale di alert che corrispondono a minacce reali | > 80% per critical, > 60% per high | Tuning continuo, filtering avanzato |
| False Positive Rate (FPR) | Percentuale di alert generati per attivita legittime | < 25% per critical | Whitelist, contesto arricchito, correlazione |
| False Negative Rate (FNR) | Percentuale di minacce reali non rilevate | < 1% | Purple teaming, threat hunting |
| ATT&CK Coverage | Percentuale di tecniche MITRE ATT&CK coperte da almeno una detection | > 70% delle tecniche rilevanti | Gap analysis regolare, prioritizzazione |
Calcolo del Detection Score
Un approccio pratico per valutare la qualità complessiva del programma di detection e il Detection Maturity Score, che combina diverse metriche in un punteggio normalizzato. Ecco un esempio di calcolo in Python:
from dataclasses import dataclass
from typing import List
@dataclass(frozen=True)
class DetectionMetrics:
"""Immutable snapshot of detection performance metrics."""
rule_id: str
true_positives: int
false_positives: int
false_negatives: int
total_alerts: int
avg_detection_time_minutes: float # MTTD
avg_response_time_minutes: float # MTTR
@property
def precision(self) -> float:
"""TP / (TP + FP) - How many alerts are real threats."""
denominator = self.true_positives + self.false_positives
return self.true_positives / denominator if denominator > 0 else 0.0
@property
def recall(self) -> float:
"""TP / (TP + FN) - How many real threats are caught."""
denominator = self.true_positives + self.false_negatives
return self.true_positives / denominator if denominator > 0 else 0.0
@property
def f1_score(self) -> float:
"""Harmonic mean of precision and recall."""
p, r = self.precision, self.recall
return 2 * (p * r) / (p + r) if (p + r) > 0 else 0.0
def calculate_maturity_score(metrics_list: List[DetectionMetrics]) -> dict:
"""Calculate overall detection program maturity score.
Returns an immutable dict with aggregated metrics.
"""
if not metrics_list:
return {"score": 0, "grade": "F", "details": {}}
avg_precision = sum(m.precision for m in metrics_list) / len(metrics_list)
avg_recall = sum(m.recall for m in metrics_list) / len(metrics_list)
avg_f1 = sum(m.f1_score for m in metrics_list) / len(metrics_list)
avg_mttd = sum(m.avg_detection_time_minutes for m in metrics_list) / len(metrics_list)
avg_mttr = sum(m.avg_response_time_minutes for m in metrics_list) / len(metrics_list)
# Weighted maturity score (0-100)
precision_score = avg_precision * 25 # 25% weight
recall_score = avg_recall * 25 # 25% weight
f1_component = avg_f1 * 20 # 20% weight
mttd_score = max(0, (240 - avg_mttd) / 240) * 15 # 15% weight (240min = 4h target)
mttr_score = max(0, (240 - avg_mttr) / 240) * 15 # 15% weight
total_score = (precision_score + recall_score + f1_component
+ mttd_score + mttr_score) * 100
grade_thresholds = [
(90, "A"), (80, "B"), (70, "C"), (60, "D")
]
grade = next(
(g for threshold, g in grade_thresholds if total_score >= threshold),
"F"
)
return {
"score": round(total_score, 1),
"grade": grade,
"details": {
"avg_precision": round(avg_precision, 3),
"avg_recall": round(avg_recall, 3),
"avg_f1": round(avg_f1, 3),
"avg_mttd_minutes": round(avg_mttd, 1),
"avg_mttr_minutes": round(avg_mttr, 1),
"total_rules_evaluated": len(metrics_list),
},
}
# Esempio di utilizzo
sample_metrics = [
DetectionMetrics("SIGMA-001", 45, 5, 2, 50, 15.0, 35.0),
DetectionMetrics("SIGMA-002", 120, 30, 8, 150, 8.5, 22.0),
DetectionMetrics("SIGMA-003", 200, 15, 5, 215, 3.2, 12.0),
]
result = calculate_maturity_score(sample_metrics)
print(f"Detection Maturity Score: {result['score']} ({result['grade']})")
print(f"Details: {result['details']}")
Attenzione: le Metriche Vanitose
Evita di misurare il successo del tuo programma di detection con il numero totale di regole o il numero di alert generati. Queste sono metriche vanitose (vanity metrics) che possono mascherare problemi gravi. Un'organizzazione con 50 detection ad alta fedelta e di gran lunga più sicura di una con 5.000 regole che generano migliaia di false positive, causando alert fatigue negli analisti.
L'Ecosistema SIEM/SOAR
Il SIEM (Security Information and Event Management) e il cuore dell'infrastruttura di Detection Engineering. E la piattaforma che raccoglie, normalizza, correla e analizza i log provenienti da tutte le sorgenti dell'organizzazione. Il SOAR (Security Orchestration, Automation and Response) complementa il SIEM automatizzando le risposte agli alert tramite playbook predefiniti.
Panoramica delle Piattaforme SIEM Principali
| Piattaforma | Tipo | Linguaggio Query | Punti di Forza | Caso d'Uso Ideale |
|---|---|---|---|---|
| Splunk Enterprise | On-prem / Cloud | SPL | Maturita, ecosistema app, flessibilità | Enterprise complesse, SOC maturi |
| Elastic SIEM | Open Source / Cloud | KQL / EQL / ES|QL | Open source, scalabilità, costo | Team con budget limitato, cloud-native |
| Microsoft Sentinel | Cloud (Azure) | KQL | Integrazione Azure/M365, AI built-in | Organizzazioni Microsoft-centric |
| Google SecOps (Chronicle) | Cloud (GCP) | YARA-L | Retention illimitata, velocità | Grandi volumi di dati, GCP |
| CrowdStrike Falcon LogScale | Cloud | LogScale Query | Ingestione rapida, compressione | Organizzazioni CrowdStrike |
| Sumo Logic | Cloud | Sumo Logic Query | SaaS nativo, facilità d'uso | Cloud-first, SaaS-heavy |
Sorgenti Dati Fondamentali
La qualità delle detection dipende direttamente dalla qualità e completezza dei dati disponibili. Ecco le sorgenti dati fondamentali per un programma di detection efficace:
- Endpoint Telemetry - Log di processo, file system events, registry changes, network connections. Fonti: EDR (CrowdStrike, SentinelOne, Microsoft Defender), Sysmon
- Network Telemetry - NetFlow, DNS queries, HTTP/TLS metadata, PCAP selettivi. Fonti: firewall, IDS/IPS, proxy, DNS resolver
- Identity & Access - Authentication events, privilege escalation, group membership changes. Fonti: Active Directory, Entra ID, Okta, CyberArk
- Cloud Audit Logs - API calls, configuration changes, resource creation. Fonti: AWS CloudTrail, Azure Activity Log, GCP Audit Logs
- Application Logs - Web server access logs, application errors, WAF events. Fonti: Nginx, Apache, CloudFront, applicazioni custom
- Email Security - Phishing attempts, malicious attachments, BEC detection. Fonti: Microsoft Defender for O365, Proofpoint, Mimecast
Data Normalization: il Fondamento Invisibile
Senza normalizzazione dei dati, le detection sono fragili e non portabili.
Ogni SIEM e ogni sorgente usa formati diversi per gli stessi concetti: un "login fallito"
può apparire come EventID 4625 in Windows, sshd: Failed password
in Linux, o {"eventType": "user.session.start", "outcome": "FAILURE"}
in Okta. Adottare uno schema di normalizzazione come ECS (Elastic Common Schema),
OCSF (Open Cybersecurity Schema Framework) o il modello dati di Sigma permette
di scrivere detection una sola volta e applicarle su qualsiasi sorgente.
Detection-as-Code: il Paradigma Moderno
Detection-as-Code (DaC) e l'approccio che applica le pratiche di sviluppo software alla gestione delle regole di detection. Invece di creare e modificare regole tramite l'interfaccia grafica del SIEM, le detection vengono scritte come codice, versionate in repository Git, sottoposte a code review tramite pull request, testate automaticamente e distribuite attraverso pipeline CI/CD.
Vantaggi del Detection-as-Code
Rispetto all'Approccio Tradizionale
- Versionamento - Ogni modifica e tracciata in Git, con possibilità di rollback
- Code Review - Le detection passano per peer review prima del deploy
- Test Automatizzati - Validazione automatica con dati positivi e negativi
- Riproducibilità - L'intero stato delle detection e ricostruibile dal repository
Benefici Operativi
- Velocita - Le detection vanno in produzione in minuti, non giorni
- Coerenza - Standard di qualità applicati uniformemente
- Audit Trail - Tracciabilita completa per compliance
- Collaborazione - Più team possono contribuire allo stesso repository
Struttura di un Repository Detection-as-Code
detections/
rules/
credential_access/
lsass_memory_access.yml
brute_force_login.yml
kerberoasting.yml
execution/
powershell_encoded_command.yml
suspicious_wmi_execution.yml
lateral_movement/
psexec_usage.yml
rdp_from_unusual_source.yml
persistence/
scheduled_task_creation.yml
registry_run_key.yml
tests/
credential_access/
lsass_memory_access_test.json
brute_force_login_test.json
execution/
powershell_encoded_command_test.json
config/
sigma_config.yml
siem_mappings.yml
exclusions.yml
pipelines/
ci.yml
cd.yml
docs/
CONTRIBUTING.md
STYLE_GUIDE.md
REVIEW_CHECKLIST.md
README.md
Pipeline CI/CD per le Detection
La pipeline CI/CD per le detection automatizza l'intero processo dal commit alla produzione. Ecco un esempio di configurazione per GitHub Actions:
name: Detection CI/CD Pipeline
on:
pull_request:
paths: ['rules/**', 'tests/**']
push:
branches: [main]
paths: ['rules/**']
jobs:
validate:
name: Validate Sigma Rules
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install sigma-cli
run: pip install sigma-cli pySigma-backend-splunk pySigma-backend-elasticsearch
- name: Lint Sigma Rules
run: |
sigma check rules/ --validation-config config/sigma_config.yml
echo "All rules pass validation"
- name: Verify ATT&CK Mapping
run: |
python scripts/verify_attack_tags.py rules/
echo "All rules have valid ATT&CK mappings"
test:
name: Test Detection Logic
needs: validate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run True Positive Tests
run: |
python scripts/run_tests.py \
--rules-dir rules/ \
--tests-dir tests/ \
--test-type true_positive
- name: Run False Positive Tests
run: |
python scripts/run_tests.py \
--rules-dir rules/ \
--tests-dir tests/ \
--test-type false_positive
- name: Generate Coverage Report
run: python scripts/coverage_report.py --output reports/coverage.json
deploy:
name: Deploy to SIEM
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- name: Convert Sigma to Splunk SPL
run: |
sigma convert \
--target splunk \
--pipeline splunk_windows \
rules/ \
--output converted/splunk/
- name: Deploy to Splunk via API
env:
SPLUNK_TOKEN: ${{ secrets.SPLUNK_API_TOKEN }}
SPLUNK_URL: ${{ secrets.SPLUNK_URL }}
run: |
python scripts/deploy_splunk.py \
--rules-dir converted/splunk/ \
--splunk-url "$SPLUNK_URL" \
--token "$SPLUNK_TOKEN"
- name: Update ATT&CK Coverage Map
run: python scripts/update_attack_coverage.py
Il Flusso Completo Detection-as-Code
- Il detection engineer crea una nuova regola Sigma in un branch Git
- Apre una Pull Request con la regola e i relativi test
- La pipeline CI esegue validazione sintattica, test TP/FP, e verifica mapping ATT&CK
- Un peer reviewer approva la PR dopo aver verificato logica, documentazione e copertura
- Il merge in main attiva la pipeline CD che converte la regola e la distribuisce al SIEM
- Dashboard di monitoraggio tracciano le performance della detection in produzione
Scrivere Detection Efficaci: Principi e Pattern
La differenza tra una detection mediocre e una eccellente risiede nella profondità della comprensione della tecnica di attacco, nella qualità del filtraggio dei false positive e nella completezza della documentazione. Ecco i principi fondamentali.
Principio 1: Parti dalla Tecnica, Non dallo Strumento
Non scrivere una detection per "Mimikatz" - scrivi una detection per la tecnica di credential dumping via LSASS memory access (T1003.001). Questo approccio copre automaticamente tutti gli strumenti che implementano la stessa tecnica, inclusi quelli futuri non ancora noti.
Principio 2: Stratifica le Detection (Detection Pyramid)
Implementa detection a più livelli per la stessa tecnica. Una detection basata su hash (trivialmente evadibile) può comunque catturare attaccanti poco sofisticati, mentre una detection comportamentale cattura quelli più avanzati. Questo approccio stratificato e noto come Detection in Depth.
Principio 3: Documenta Sempre il Contesto
Ogni detection deve includere: la motivazione (perchè questa detection esiste), il mapping ATT&CK (quale tecnica copre), i false positive noti (quali attivita legittime possono triggherare la regola), e il playbook di risposta (cosa deve fare l'analista quando la detection scatta).
Esempio Completo: Detection con Log Analysis Python
"""
Brute Force Detection Module
MITRE ATT&CK: T1110.001 - Brute Force: Password Guessing
Detects multiple failed login attempts followed by a success.
"""
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from collections import defaultdict
from typing import Optional
@dataclass(frozen=True)
class LoginEvent:
"""Immutable representation of a login event."""
timestamp: datetime
username: str
source_ip: str
success: bool
service: str # 'ssh', 'rdp', 'web', 'vpn'
@dataclass(frozen=True)
class BruteForceAlert:
"""Immutable alert generated by the detector."""
username: str
source_ip: str
failed_count: int
time_window_minutes: int
first_attempt: datetime
last_attempt: datetime
successful_login: bool
severity: str # 'medium', 'high', 'critical'
mitre_technique: str = "T1110.001"
@dataclass(frozen=True)
class DetectionConfig:
"""Immutable configuration for brute force detection."""
failed_threshold: int = 5
time_window_minutes: int = 10
lockout_threshold: int = 20
whitelist_ips: tuple = ()
monitored_services: tuple = ('ssh', 'rdp', 'web', 'vpn')
class BruteForceDetector:
"""Stateless brute force detection engine.
Analyzes login events and produces alerts when
brute force patterns are detected.
"""
def __init__(self, config: Optional[DetectionConfig] = None):
self._config = config or DetectionConfig()
def analyze(self, events: list[LoginEvent]) -> list[BruteForceAlert]:
"""Analyze a batch of login events for brute force patterns.
Returns a new list of alerts (no mutation of input).
"""
# Group events by (source_ip, username)
grouped = defaultdict(list)
for event in events:
if (event.service in self._config.monitored_services
and event.source_ip not in self._config.whitelist_ips):
key = (event.source_ip, event.username)
grouped[key].append(event)
alerts = []
for (source_ip, username), user_events in grouped.items():
sorted_events = sorted(user_events, key=lambda e: e.timestamp)
alert = self._check_brute_force(source_ip, username, sorted_events)
if alert is not None:
alerts.append(alert)
return alerts
def _check_brute_force(
self, source_ip: str, username: str, events: list[LoginEvent]
) -> Optional[BruteForceAlert]:
"""Check if events match a brute force pattern."""
window = timedelta(minutes=self._config.time_window_minutes)
failed_events = [e for e in events if not e.success]
if len(failed_events) < self._config.failed_threshold:
return None
# Check if failures cluster within the time window
for i, start_event in enumerate(failed_events):
window_end = start_event.timestamp + window
window_failures = [
e for e in failed_events[i:]
if e.timestamp <= window_end
]
if len(window_failures) >= self._config.failed_threshold:
# Check for subsequent successful login
success_after = any(
e.success and e.timestamp >= start_event.timestamp
for e in events
)
severity = self._calculate_severity(
len(window_failures), success_after
)
return BruteForceAlert(
username=username,
source_ip=source_ip,
failed_count=len(window_failures),
time_window_minutes=self._config.time_window_minutes,
first_attempt=window_failures[0].timestamp,
last_attempt=window_failures[-1].timestamp,
successful_login=success_after,
severity=severity,
)
return None
def _calculate_severity(self, failed_count: int, success: bool) -> str:
"""Determine alert severity based on pattern characteristics."""
if success and failed_count >= self._config.lockout_threshold:
return "critical" # Many failures + success = likely compromised
if success:
return "high" # Fewer failures + success = suspicious
if failed_count >= self._config.lockout_threshold:
return "high" # Many failures = active attack
return "medium" # Moderate failures = possible attack
MITRE ATT&CK: il Framework di Riferimento
Il framework MITRE ATT&CK (Adversarial Tactics, Techniques, and Common Knowledge) e il riferimento universale per mappare e classificare le tecniche degli avversari. Per la Detection Engineering, ATT&CK fornisce un linguaggio comune per descrivere cosa cerchiamo e una matrice per misurare la copertura delle nostre detection.
Come Usare ATT&CK per la Detection Engineering
- Prioritizzazione - Non tutte le tecniche ATT&CK sono ugualmente rilevanti per la tua organizzazione. Identifica le tecniche più usate dagli avversari nel tuo settore (threat intelligence) e concentra le risorse su quelle.
- Gap Analysis - Mappa le detection esistenti sulle tecniche ATT&CK per visualizzare le aree scoperte. Usa il ATT&CK Navigator per creare heatmap che mostrano la copertura attuale.
-
Tagging - Ogni regola Sigma e detection deve includere i tag ATT&CK
corrispondenti (es.
attack.t1003.001). Questo permette di aggregare le metriche per tecnica e tactic. - Misurazione - Traccia la percentuale di tecniche coperte per ogni tactic (Initial Access, Execution, Persistence, etc.) e definisci obiettivi di copertura realistici.
| Tactic | Tecniche Esempio | Sorgenti Dati Chiave | Difficolta Detection |
|---|---|---|---|
| Initial Access | T1566 Phishing, T1190 Exploit Public App | Email, WAF, proxy | Media |
| Execution | T1059 Command-Line, T1204 User Execution | Sysmon, EDR, process logs | Bassa-Media |
| Persistence | T1053 Scheduled Task, T1547 Boot Autostart | Registry, file system, EDR | Media |
| Privilege Escalation | T1068 Exploitation, T1078 Valid Accounts | EDR, AD logs, cloud audit | Alta |
| Defense Evasion | T1070 Indicator Removal, T1027 Obfuscation | EDR, Sysmon, AMSI | Molto Alta |
| Credential Access | T1003 OS Credential Dumping, T1110 Brute Force | EDR, AD logs, auth logs | Media |
| Lateral Movement | T1021 Remote Services, T1570 Lateral Tool Transfer | Network, AD logs, EDR | Alta |
| Exfiltration | T1048 Exfiltration Over Alt Protocol, T1567 Web Service | DLP, proxy, DNS, NetFlow | Molto Alta |
Struttura del Team e Ruoli
Un programma di Detection Engineering efficace richiede una combinazione di competenze che raramente si trovano in un'unica persona. La struttura del team varia in base alla dimensione dell'organizzazione, ma i ruoli chiave sono ben definiti.
Ruoli Chiave
- Detection Engineer - Il ruolo centrale. Scrive, testa e mantiene le regole di detection. Richiede competenze in threat intelligence, linguaggi di query SIEM, scripting (Python), e familiarita con i log delle piattaforme target. Secondo il SANS Survey 2025, il 60% delle organizzazioni ha almeno un detection engineer dedicato.
- Threat Intelligence Analyst - Fornisce il contesto sulle minacce: quali gruppi APT sono attivi, quali tecniche usano, quali indicatori cercare. Alimenta le ipotesi di detection con intelligence actionable.
- Data Engineer / Log Architect - Si occupa della qualità e disponibilità dei dati: onboarding di nuove sorgenti log, normalizzazione, parsing, e gestione dell'infrastruttura di raccolta.
- SOC Analyst - L'utente finale delle detection. Fornisce feedback fondamentale sulla qualità degli alert: troppi false positive? Alert non actionable? Informazioni di contesto mancanti?
- Red Team / Purple Team - Simula le tecniche degli avversari per validare le detection. Il feedback del red team e il meccanismo più efficace per migliorare la copertura e la fedelta delle regole.
Organizzazione per Piccoli Team
Non tutte le organizzazioni possono permettersi un team dedicato di Detection Engineering. Per team di sicurezza più piccoli (3-5 persone), l'approccio consigliato e:
- Assegnare il 20-30% del tempo degli analisti SOC alla Detection Engineering
- Adottare regole Sigma della community come baseline (SigmaHQ repository)
- Implementare un processo di feedback strutturato dai triage degli alert
- Utilizzare Detection-as-Code anche con pipeline semplici (Git + script di deploy)
- Concentrarsi sulle 10-15 tecniche ATT&CK più rilevanti per il proprio settore
Caso Reale: dall'Incidente alla Detection Pipeline
Per rendere concreti i concetti discussi, vediamo un esempio realistico che illustra l'intero percorso dalla scoperta di una lacuna alla detection in produzione.
Scenario: Compromissione via PowerShell Encoded Command
Durante un esercizio di purple teaming, il Red Team riesce a eseguire un payload malevolo
utilizzando PowerShell con un comando codificato in Base64 (-EncodedCommand).
L'attacco non viene rilevato dalle detection esistenti perchè queste cercavano solo
specifiche stringhe di comandi PowerShell noti, non il pattern generico dell'encoding.
Step 1: Ipotesi e Analisi
Il detection engineer formula l'ipotesi: "Qualsiasi uso di PowerShell
-EncodedCommand in un ambiente enterprise dovrebbe essere considerato sospetto, perchè
il software legittimo raramente necessità di codificare i propri comandi." L'analisi
dei log degli ultimi 30 giorni conferma: su 50.000 esecuzioni PowerShell, solo 12 usano
-EncodedCommand, e tutte sono attribuibili a uno script di automazione IT noto.
Step 2: Regola Sigma
title: Suspicious PowerShell Encoded Command Execution
id: f4a3b2c1-d5e6-7890-abcd-ef0123456789
status: test
description: |
Detects execution of PowerShell with encoded commands (-enc,
-EncodedCommand). Legitimate use is rare in enterprise environments.
Attackers commonly use this to obfuscate malicious payloads.
author: Federico Calo
date: 2025/12/01
modified: 2025/12/15
references:
- https://attack.mitre.org/techniques/T1059/001/
- https://attack.mitre.org/techniques/T1027/010/
logsource:
category: process_creation
product: windows
detection:
selection_powershell:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
selection_encoded:
CommandLine|contains:
- '-enc '
- '-EncodedCommand'
- '-encodedcommand'
- '-ec '
filter_known_automation:
ParentImage|endswith: '\sccm_agent.exe'
User|contains: 'SVC_AUTOMATION'
condition: selection_powershell and selection_encoded and not filter_known_automation
falsepositives:
- SCCM automation scripts (filtered)
- Custom IT automation using encoded commands (add to filter)
level: high
tags:
- attack.execution
- attack.t1059.001
- attack.defense_evasion
- attack.t1027.010
Step 3: Test, Deploy e Risultati
La regola viene testata con 5 scenari true positive (varianti di encoded command) e 20 scenari false negative (esecuzioni PowerShell legittime). Dopo il deploy tramite pipeline CI/CD, nei primi 30 giorni la detection genera 8 alert: 6 true positive (script sospetti da analizzare), 1 false positive (nuovo script di automazione da aggiungere al filtro) e 1 true positive critico che porta alla scoperta di un accesso non autorizzato.
Risultati Misurabili
- Precision: 87.5% (7 TP su 8 alert totali)
- MTTD: ridotto da "non rilevato" a 4.2 minuti (tempo medio di generazione alert)
- Copertura ATT&CK: +2 tecniche (T1059.001, T1027.010) aggiunte alla mappa
- Impatto reale: 1 compromissione attiva scoperta e contenuta entro 45 minuti
Conclusioni e Prossimi Passi
La Detection Engineering rappresenta un cambio di paradigma fondamentale nella sicurezza operativa. Non si tratta semplicemente di scrivere regole migliori nel SIEM, ma di costruire un processo ingegneristico completo che abbraccia l'intero ciclo di vita delle detection: dall'ipotesi di minaccia alla validazione in produzione.
I punti chiave da ricordare:
- La qualità batte la quantità - 50 detection ad alta fedelta sono infinitamente più utili di 5.000 regole che generano alert noise.
- Tratta le detection come codice - Versionamento, code review, test automatizzati e pipeline CI/CD non sono optional, sono fondamentali.
- Misura tutto - MTTD, MTTR, precision, recall, copertura ATT&CK. Senza metriche, il miglioramento continuo e impossibile.
- Parti dalla tecnica - Mappa le detection su MITRE ATT&CK e concentra le risorse sulle tecniche più rilevanti per la tua organizzazione.
- Investi nella qualità dei dati - Una detection perfetta e inutile senza i dati su cui operare. La normalizzazione e l'onboarding delle sorgenti log sono il fondamento invisibile di tutto il programma.
Nel Prossimo Articolo
Nel prossimo articolo della serie approfondiremo le regole Sigma: il formato standard per la scrittura di detection portabili. Vedremo la sintassi completa, i modificatori avanzati, i backend di conversione per i principali SIEM, e costruiremo un set completo di regole per le tecniche ATT&CK più critiche.
Domande frequenti
Qual è il vero differenziale tra un'organizzazione resiliente e una vulnerabile?
La capacità di rilevare attività malevoli prima che causino danni significativi.
Cos'è la Detection Engineering?
Una disciplina che applica i principi dell'ingegneria del software al processo di creazione, test, distribuzione e manutenzione delle regole di rilevamento.
Qual è il ciclo di vita di una detection?
Il ciclo si compone di sei fasi fondamentali: ipotesi di minaccia, scrittura della regola, testing, deployment, monitoraggio e tuning.
Qual è l'approccio moderno per la gestione delle regole di detection?
L'approccio Detection-as-Code (DaC) che applica le pratiche di sviluppo software alla gestione delle regole di detection.

Commenti
Caricamento commenti...
Accedi per commentare