Communitygithub.com

règles-de-détection-avec-splunk-spl

Créez des règles de détection efficaces en utilisant le langage de recherche Splunk (SPL).

Qu'est-ce que règles-de-détection-avec-splunk-spl ?

Cette compétence explique comment construire des règles de détection de sécurité avec le Splunk Search Processing Language (SPL), le langage de requête principal de Splunk Enterprise Security. Elle couvre les modèles essentiels : détection par seuil, par séquence, par comparaison avec une ligne de base, détection de mouvements latents, d'exfiltration de données et d'exécutions PowerShell suspectes. La compétence guide l'utilisateur pas à pas dans la création de recherches de corrélation, l'enrichissement du contexte via des lookups et l'optimisation des performances avec `tstats` et les Data Models. Elle propose également des métriques de validation, un mapping MITRE ATT&CK détaillé et des références à la documentation officielle Splunk, rendant l'apprentissage à la fois théorique et immédiatement applicable.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/building-detection-rule-with-splunk-spl

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Construction de règles de détection avec Splunk SPL

Présentation

Le langage de recherche Splunk (SPL) est le langage de requête principal utilisé dans Splunk Enterprise Security pour créer des recherches de corrélation qui détectent des événements et des motifs suspects. Une règle de détection bien conçue agrège, corrèle et enrichit les événements de sécurité pour générer des événements notables exploitables pour les analystes SOC. En moyenne, les SIEM d'entreprise ne couvrent que 21 % des techniques MITRE ATT&CK, ce qui rend la rédaction experte de règles SPL essentielle pour combler les lacunes de détection.

Quand utiliser

  • Lors du déploiement ou de la configuration des capacités de création de règles de détection avec Splunk SPL dans votre environnement
  • Lors de la mise en place de contrôles de sécurité alignés sur les exigences de conformité
  • Lors de la construction ou de l'amélioration de l'architecture de sécurité pour ce domaine
  • Lors de la réalisation d'évaluations de sécurité nécessitant cette implémentation

Prérequis

  • Splunk Enterprise Security (ES) déployé et configuré
  • Accès à l'application Splunk Search & Reporting avec les rôles appropriés
  • Compréhension des modèles de données du Common Information Model (CIM)
  • Connaissance des techniques du framework MITRE ATT&CK
  • Connaissance des sources de logs et des flux de données de l'organisation

Modèles de règles de détection SPL de base

1. Détection basée sur un seuil

Détecte les événements dépassant un nombre défini dans une fenêtre de temps.

index=wineventlog sourcetype=WinEventLog:Security EventCode=4625
| stats count as failed_logins dc(TargetUserName) as unique_users by src_ip
| where failed_logins > 10 AND unique_users > 3
| eval severity="high"
| eval description="Brute force attack detected from ".src_ip." with ".failed_logins." failed logins across ".unique_users." accounts"

2. Détection basée sur une séquence (échec de connexion suivi d'un succès)

Corrèle une séquence d'événements indiquant une attaque par force brute réussie.

index=wineventlog sourcetype=WinEventLog:Security (EventCode=4625 OR EventCode=4624)
| eval login_status=case(EventCode=4625, "failure", EventCode=4624, "success")
| stats count(eval(login_status="failure")) as failures count(eval(login_status="success")) as successes latest(_time) as last_event by src_ip, TargetUserName
| where failures > 5 AND successes > 0
| eval description="Account ".TargetUserName." compromised via brute force from ".src_ip
| eval urgency="critical"

3. Détection d'anomalies avec comparaison à une ligne de base

Compare l'activité actuelle à une période de référence pour détecter des pics.

index=proxy sourcetype=squid
| bin _time span=1h
| stats count as current_count by src_ip, _time
| join src_ip type=left [
    search index=proxy sourcetype=squid earliest=-7d@d latest=-1d@d
    | stats avg(count) as avg_count stdev(count) as stdev_count by src_ip
]
| eval threshold=avg_count + (3 * stdev_count)
| where current_count > threshold
| eval deviation=round((current_count - avg_count) / stdev_count, 2)
| eval description="Anomalous web traffic from ".src_ip." - ".deviation." standard deviations above baseline"

4. Détection de mouvement latéral

Identifie les mouvements latéraux potentiels à l'aide des événements de connexion Windows.

index=wineventlog sourcetype=WinEventLog:Security EventCode=4624 Logon_Type=3
| where NOT match(TargetUserName, ".*\$$")
| stats dc(dest) as unique_hosts values(dest) as hosts by src_ip, TargetUserName
| where unique_hosts > 5
| eval severity=case(unique_hosts > 20, "critical", unique_hosts > 10, "high", true(), "medium")
| eval description=TargetUserName." accessed ".unique_hosts." unique hosts from ".src_ip." via network logon"

5. Détection d'exfiltration de données

Surveille les transferts de données sortants volumineux.

index=firewall sourcetype=pan:traffic action=allowed direction=outbound
| stats sum(bytes_out) as total_bytes_out dc(dest_ip) as unique_destinations by src_ip, user
| eval total_mb=round(total_bytes_out/1048576, 2)
| where total_mb > 500 OR unique_destinations > 50
| lookup asset_lookup ip as src_ip OUTPUT asset_category, asset_owner
| eval severity=case(total_mb > 2000, "critical", total_mb > 1000, "high", true(), "medium")
| eval description=user." transferred ".total_mb."MB to ".unique_destinations." unique destinations"

6. Détection d'exécution PowerShell suspecte

Détecte les commandes PowerShell encodées ou obfusquées.

index=wineventlog sourcetype=WinEventLog:Security EventCode=4104
| where match(ScriptBlockText, "(?i)(encodedcommand|invoke-expression|iex|downloadstring|frombase64string|net\.webclient|invoke-webrequest|bitstransfer|invoke-mimikatz|invoke-shellcode)")
| eval decoded_length=len(ScriptBlockText)
| stats count values(ScriptBlockText) as commands by Computer, UserName
| where count > 0
| eval severity="high"
| eval mitre_technique="T1059.001"
| eval description="Suspicious PowerShell execution on ".Computer." by ".UserName

Construction de recherches de corrélation dans Splunk ES

Processus étape par étape

  1. Définir le cas d'utilisation : Cartographier la technique MITRE ATT&CK et définir le comportement à détecter
  2. Identifier les sources de données : Déterminer les index et les sourcetypes contenant les événements pertinents
  3. Écrire la recherche de base : Construire le SPL qui extrait les événements pertinents
  4. Ajouter l'agrégation : Utiliser stats, eventstats ou streamstats pour résumer
  5. Appliquer les seuils : Définir des conditions avec where pour distinguer le normal de l'anormal
  6. Enrichir le contexte : Ajouter des lookups pour les informations d'actif, les données d'identité et le renseignement sur les menaces
  7. Configurer l'événement notable : Définir les champs de sévérité, d'urgence et de description
  8. Planifier et tester : Exécuter sur des données historiques et valider la précision de la détection

Modèle de configuration de recherche de corrélation

| tstats summariesonly=true count from datamodel=Authentication
    where Authentication.action=failure
    by Authentication.src, Authentication.user, _time span=5m
| rename "Authentication.*" as *
| stats count as total_failures dc(user) as unique_users values(user) as targeted_users by src
| where total_failures > 20 AND unique_users > 5
| lookup dnslookup clientip as src OUTPUT clienthost as src_dns
| lookup asset_lookup ip as src OUTPUT priority as asset_priority, category as asset_category
| eval urgency=case(asset_priority=="critical", "critical", asset_priority=="high", "high", true(), "medium")
| eval rule_name="Brute Force Against Multiple Accounts"
| eval rule_description="Multiple authentication failures from ".src." targeting ".unique_users." unique accounts"
| eval mitre_attack="T1110.001 - Password Guessing"

Bonnes pratiques d'enrichissement

| lookup identity_lookup identity as user OUTPUT department, manager, risk_score as user_risk
| lookup asset_lookup ip as src_ip OUTPUT asset_name, asset_category, asset_priority, asset_owner
| lookup threatintel_lookup ip as src_ip OUTPUT threat_type, threat_confidence, threat_source
| eval context=case(
    isnotnull(threat_type), "Known threat: ".threat_type,
    user_risk > 80, "High-risk user: risk score ".user_risk,
    asset_priority=="critical", "Critical asset: ".asset_name,
    true(), "Standard context"
)

Optimisation des performances

Utiliser les modèles de données avec tstats

| tstats summariesonly=true count from datamodel=Network_Traffic
    where All_Traffic.action=allowed
    by All_Traffic.src_ip, All_Traffic.dest_ip, All_Traffic.dest_port, _time span=1h
| rename "All_Traffic.*" as *

Limiter les plages de temps et utiliser les champs indexés

index=wineventlog source="WinEventLog:Security" EventCode=4688
    earliest=-15m latest=now()
| where NOT match(New_Process_Name, "(?i)(svchost|csrss|lsass|services)")

Utiliser l'indexation de résumé pour les lignes de base historiques

| tstats count from datamodel=Authentication where Authentication.action=failure by Authentication.src, _time span=1h
| collect index=summary source="auth_failure_baseline" marker="report_name=auth_failure_hourly"

Tests et validation

Tester avec des motifs d'attaque connus

| makeresults count=1
| eval src_ip="10.0.0.50", failed_logins=25, unique_users=8, severity="high"
| eval description="Test brute force detection"
| append [
    search index=wineventlog sourcetype=WinEventLog:Security EventCode=4625
    earliest=-24h latest=now()
    | stats count as failed_logins dc(TargetUserName) as unique_users by src_ip
    | where failed_logins > 10 AND unique_users > 3
    | eval severity="high"
]

Calculer les métriques de détection

index=notable
| search rule_name="Brute Force*"
| stats count as total_alerts count(eval(status_label="Closed - True Positive")) as true_positives count(eval(status_label="Closed - False Positive")) as false_positives by rule_name
| eval precision=round(true_positives / (true_positives + false_positives) * 100, 2)
| eval fpr=round(false_positives / total_alerts * 100, 2)

Cartographie MITRE ATT&CK

ID de techniqueNom de la techniqueApproche de détection SPL
T1110.001Devinette de mots de passeSeuil sur EventCode 4625 par src_ip
T1059.001PowerShellCorrespondance de motif sur EventCode 4104 ScriptBlockText
T1021.002SMB/Partages admin WindowsType de connexion 3 avec seuil dc(dest)
T1048Exfiltration via C2Agrégation de bytes_out sur une fenêtre de temps
T1053.005Tâche planifiéeEventCode 4698 avec motifs de commandes suspects
T1003.001Mémoire LSASSAccès processus à lsass.exe via Sysmon EventCode 10

Références

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

Skills associés