Sécurité
Microsoft Sentinel : Détecter et répondre aux incidents avec SIEM cloud-native et Playbooks SOAR

Microsoft Sentinel : Détecter et répondre aux incidents avec SIEM cloud-native et Playbooks SOAR

Qu'est-ce que Microsoft Sentinel ?

Microsoft Sentinel est un SIEM (Security Information and Event Management) et SOAR (Security Orchestration, Automation and Response) entièrement managé dans Azure. Il ingère des données depuis des centaines de sources, détecte les menaces avec des règles KQL et du Machine Learning, et automatise la réponse via des playbooks Logic Apps.

1. Activation et connecteurs de données essentiels

# Activer Sentinel sur un workspace Log Analytics existant
az sentinel onboarding-state create 
  --workspace-name "law-sentinel-prod" 
  --resource-group "rg-sentinel" 
  --name "default"

# Connecteurs à activer en priorité (portail Sentinel > Data Connectors) :
# ✅ Microsoft 365 Defender (MDO, MDI, MDE, MCAS unifiés)
# ✅ Azure Active Directory (Sign-in logs, Audit logs, Identity Protection)
# ✅ Azure Activity (opérations Control Plane Azure)
# ✅ Microsoft Defender for Cloud (alertes ASC)
# ✅ Windows Security Events via AMA (tous les DCs, serveurs critiques)
# ✅ Syslog / CEF pour équipements réseau (Palo Alto, Fortinet, Cisco ASA)

2. Règles d'analyse KQL : exemples avancés

// RÈGLE 1 : Impossible Travel — connexion depuis 2 pays différents en < 1 heure
let threshold_minutes = 60;
SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType == 0  // Connexion réussie
| project UserId, UserDisplayName, IPAddress, Location, TimeGenerated,
          City = tostring(LocationDetails.city),
          Country = tostring(LocationDetails.countryOrRegion)
| sort by UserId, TimeGenerated
| extend PrevCountry = prev(Country, 1),
          PrevTime   = prev(TimeGenerated, 1),
          PrevUser   = prev(UserId, 1)
| where UserId == PrevUser
| where Country != PrevCountry
| where datetime_diff("minute", TimeGenerated, PrevTime) < threshold_minutes
| project AlertTime = TimeGenerated, User = UserDisplayName,
          Country1 = PrevCountry, Country2 = Country, IPAddress,
          MinutesApart = datetime_diff("minute", TimeGenerated, PrevTime)

// RÈGLE 2 : Détection de DCSync (réplication forcée Active Directory — signe de Golden Ticket)
SecurityEvent
| where EventID == 4662
| where ObjectType =~ "%%14828"  // domainDNS
| where AccessMask == "0x100"    // replication-get-changes
| where SubjectUserName !endswith "$"  // Exclure les comptes machine légitimes
| summarize count() by SubjectUserName, IpAddress, Computer, bin(TimeGenerated, 5m)
| where count_ > 5
| project TimeGenerated, SuspectUser = SubjectUserName, SourceIP = IpAddress, DC = Computer

// RÈGLE 3 : Password spray (nombreux échecs sur des comptes distincts depuis 1 IP)
SigninLogs
| where TimeGenerated > ago(1h)
| where ResultType == 50126  // Invalid username or password
| summarize FailedAccounts = dcount(UserPrincipalName),
            Tentatives = count()
    by IPAddress, bin(TimeGenerated, 10m)
| where FailedAccounts > 10  // 10 comptes différents depuis la même IP
| order by FailedAccounts desc

3. Créer un Incident à partir d'une règle d'analyse

# Créer une règle d'analyse via az cli (format JSON simplifié)
az sentinel alert-rule create 
  --resource-group "rg-sentinel" 
  --workspace-name "law-sentinel-prod" 
  --rule-id "rule-impossible-travel" 
  --kind "Scheduled" 
  --display-name "Impossible Travel - Connexion multi-pays" 
  --description "Détecte une connexion depuis 2 pays différents en moins de 60 minutes" 
  --severity "Medium" 
  --enabled true 
  --query-frequency "PT1H" 
  --query-period "PT1H" 
  --trigger-operator "GreaterThan" 
  --trigger-threshold 0 
  --suppression-duration "PT5H" 
  --create-incident true 
  --incident-configuration "{ ... }"

4. Playbook SOAR : isolation automatique d'un endpoint compromis

Ce playbook Logic Apps se déclenche sur une alerte Sentinel "Compromission Endpoint" et :

  1. Récupère le nom de la machine depuis l'entité de l'incident
  2. Appelle Microsoft Defender for Endpoint via son API pour isoler la machine
  3. Désactive le compte Azure AD de l'utilisateur associé
  4. Envoie une notification Teams à l'équipe SOC avec les détails de l'incident
  5. Met à jour le commentaire de l'incident Sentinel avec les actions prises
# Paramètres du Playbook (Logic App) :
# Trigger : Microsoft Sentinel Alert
# Actions chaînées :
# 1. Parse JSON (incident entity)
# 2. HTTP POST → https://api.securitycenter.microsoft.com/api/machines/{id}/isolate
#    Body: { "Comment": "Auto-isolated by Sentinel Playbook", "IsolationType": "Full" }
# 3. HTTP PATCH → https://graph.microsoft.com/v1.0/users/{userId}
#    Body: { "accountEnabled": false }
# 4. Post message → Teams channel #soc-alerts
# 5. Add comment → Sentinel Incident

# Attacher le playbook à une règle d'analyse :
az sentinel alert-rule action create 
  --resource-group "rg-sentinel" 
  --workspace-name "law-sentinel-prod" 
  --rule-id "rule-compromised-endpoint" 
  --action-id "playbook-isolate-endpoint" 
  --logic-app-resource-id "/subscriptions/.../logicApps/la-isolate-endpoint"

5. Mesurer l'efficacité du SOC (KPIs)

// MTTD (Mean Time to Detect) : temps entre l'activité malveillante et l'incident Sentinel
SecurityIncident
| where TimeGenerated > ago(30d)
| where Status == "Closed"
| extend MTTD_hours = datetime_diff("hour", CreatedTime, FirstActivityTime)
| summarize avg_MTTD = avg(MTTD_hours), max_MTTD = max(MTTD_hours) by Severity

// MTTR (Mean Time to Respond) : temps de résolution par sévérité
SecurityIncident
| where TimeGenerated > ago(30d)
| where Status == "Closed"
| extend MTTR_hours = datetime_diff("hour", ClosedTime, CreatedTime)
| summarize avg_MTTR = avg(MTTR_hours) by Severity | order by Severity asc

// Taux de faux positifs par règle
SecurityIncident
| where TimeGenerated > ago(30d)
| extend IsFP = Classification == "FalsePositive"
| summarize Total = count(), FalsePositives = countif(IsFP)
    by AlertName = tostring(AlertIds[0])
| extend FP_Rate = round(100.0 * FalsePositives / Total, 1)
| where FP_Rate > 20  // Règles à affiner
| order by FP_Rate desc

6. MITRE ATT&CK coverage

Sentinel intègre une carte MITRE ATT&CK interactive qui visualise les techniques couvertes par vos règles d'analyse actives. Utilisez-la pour identifier les angles morts et prioriser vos investissements de détection.

Conclusion

Microsoft Sentinel transforme votre approche sécurité en la rendant proactive, automatisée et mesurable. Les règles KQL, les playbooks SOAR et l'intégration native avec l'écosystème Microsoft 365 Defender en font le SIEM le plus cohérent pour les organisations Microsoft-centric.

MAKHZOUM Hussein
Auteur
MAKHZOUM Hussein
Consultant Cloud & Infrastructure Engineer
Voir le profil

Articles similaires