
9 détections KQL mappées sur MITRE ATT&CK dans un environnement Microsoft Sentinel + Defender XDR en production (plan de contrôle, point de terminaison, identité), avec un pipeline Detection-as-Code validé par PR (GitHub Actions, OIDC), des playbooks SOAR et une cartographie des contrôles SOC 2.
Ingénierie de détection sur un environnement Microsoft Sentinel et Defender XDR en production que j'exploite. Neuf règles d'analyse personnalisées couvrent trois plans, chacune mappée à MITRE ATT&CK et validée de bout en bout : une action contrôlée déclenche la règle, la règle génère un incident, et l'incident est investigué et documenté. Sept surveillent le plan de contrôle Azure (AzureActivity), dont une corrélation multi-étapes et une règle de contenu basée sur ARG ; une surveille l'endpoint (Defender for Endpoint), avec Defender Vulnerability Management alimentant une bibliothèque de chasse ; une surveille l'identité (Entra ID SigninLogs). Toutes sont déployées par le même pipeline contrôlé par PR.

Un environnement mono-locataire en production que j'exploite de bout en bout. Les identifiants de locataire et d'abonnement ainsi que toute donnée à caractère personnel (PII) sont masqués dans toutes les captures d'écran.
Les chiffres sont traçables : la couverture vers la couche ATT&CK, la validation vers RESULTS.md. Il n'y a délibérément aucun badge de taux de faux positifs : un environnement mono-locataire ne peut pas produire un taux de FP significatif, le dépôt rapporte donc des faux déclenchements mesurés sur un lot bénin réel plutôt qu'un pourcentage inventé (metrics.yaml le précise en entier).
Exécutez les tests unitaires de détection sur un fork, aucun Azure requis. Le KQL réel de chaque règle s'exécute contre des fixtures synthétiques dans un émulateur Kusto local, afin que la logique de détection soit vérifiable sans mon locataire :
git clone https://github.com/ibondarenko1/azure-sentinel-detection-engineering
cd azure-sentinel-detection-engineering
docker run -d --rm -p 8080:8080 -e ACCEPT_EULA=Y mcr.microsoft.com/azuredataexplorer/kustainer-linux:latest
pip install pyyaml
python tests/run-detection-tests.py
C'est exactement le contrôle que la CI exécute sur chaque pull request (detection-tests) : elle vérifie que chaque règle se déclenche sur les fixtures malveillantes et reste silencieuse sur les bénignes. Le harnais en conditions réelles dans validation/ va plus loin, en pilotant un lot réel bénin et d'attaque dans un locataire et en mesurant les vrais positifs et les faux déclenchements, mais celui-ci nécessite votre propre abonnement Azure et az login (voir validation/README), il n'est donc pas « local ». Pipeline de déploiement : docs/03. Contribuer une règle : CONTRIBUTING.
Une détection n'est crédible que lorsqu'on peut la voir se déclencher. Ce dépôt ferme la boucle sur trois plans — le plan de contrôle Azure, l'endpoint et l'identité : logique de règle, déclenchement contrôlé, incident généré, investigation et mapping MITRE. Il va au-delà des règles à événement unique avec une corrélation multi-étapes (octroi puis déploiement) et une règle sensible au contenu qui joint la posture Azure Resource Graph à l'événement de modification. Ce sont des règles d'analyse Sentinel, du KQL et de la réponse à incident sur de la télémétrie réelle plutôt que des échantillons synthétiques.
Les règles ne sont pas créées par clics dans le portail. Ce sont des YAML versionnés déployés par un pipeline contrôlé par PR. Modifier une détection signifie ouvrir une pull request ; la CI la valide, un relecteur l'approuve, et le merge vers main la déploie dans Sentinel via OIDC (aucun secret stocké), de manière idempotente par GUID de règle (API 2025-09-01).
flowchart LR
D[Edit rule YAML] --> PR[Pull request] --> V[CI validate] -->|review| M[Merge main] --> CD[OIDC deploy] --> S[Sentinel sc200-ws]detections/rules/*.yaml · Pipeline : .github/workflows/deploy-detections.yml · Déployeur/validateur : cicd/ · Détails : docs/03-cicd.md
Un vrai changement l'a emprunté : la PR #1 a resserré le seuil de DET-001 (de 10 à 8) ; la CI l'a validée, et le merge l'a déployée sur la règle en production sc200-ws. Cette étape — des règles déployées automatiquement depuis git par une PR relue — est ce qui distingue un ingénieur de détection d'un analyste qui a terminé un cours.
flowchart LR
subgraph Sources
A[Microsoft Defender XDR<br/>Email · Endpoint]
B[Azure subscription<br/>Activity Log]
C[Entra ID<br/>sign-ins]
end
A --> W[Log Analytics workspace<br/>sc200-ws]
B --> W
C --> W
W --> R[9 scheduled<br/>analytics rules]
R --> I[Incidents]
I --> V[Investigation<br/>+ MITRE mapping]
| ID | Détection | Gravité | Tactique MITRE | Technique |
|---|---|---|---|---|
| DET-001 | Pic d'opérations échouées dans le journal d'activité | Moyenne | Découverte | T1087 Account Discovery |
| DET-002 | Règle de groupe de sécurité réseau modifiée | Moyenne | Évitement de la défense | T1562 Impair Defenses |
| DET-003 | Modifications d'attribution de rôle RBAC | Moyenne | Élévation de privilèges / Persistance | T1098 Account Manipulation |
| DET-004 | Suppression massive de ressources | Élevée | Impact | T1485 Data Destruction |
| DET-005 | Déploiement de ressource suspect par un non-propriétaire | Moyenne | Persistance | T1098 Account Manipulation |
| DET-006 | Accès aux identifiants LSASS (endpoint) | Élevée | Accès aux identifiants | T1003.001 LSASS Memory |
| DET-007 |

Chaque détection a été déclenchée par une action administrative contrôlée et auto-réversible, et a produit un incident réel :

État opérationnel actuel de l'espace de travail : 10 règles d'analyse activées, 4 connecteurs de données actifs, une règle d'automatisation et des données réelles qui circulent en continu. Les 10 règles activées sont les neuf règles planifiées personnalisées [DET] de ce catalogue plus la règle Fusion intégrée de Microsoft (Advanced Multistage Attack Detection), activée par défaut et non écrite ici ; le chiffre de neuf cité ailleurs dans ce README ne compte que les règles personnalisées.

Cinq incidents sont documentés sous forme d'investigations complètes :
Au-delà des déclenchements ponctuels, un harnais de validation pilote un lot réel bénin + attaque dans le locataire et fait passer le KQL de chaque règle dessus, de sorte que les faux positifs sont mesurés, pas supposés. Dernière exécution (résultats) : 5/5 scénarios d'attaque déclenchés (DET-002/003/004/007/009) et 0 faux déclenchement sur le flux bénin (déploiement propriétaire sur liste blanche, suppressions sous le seuil, déploiement sans octroi). Il ne simule pas un volume de production ; il convertit un « 0 % de FP à N=1 » en un « 0 faux déclenchement sur un lot bénin réel » mesuré.
Une carte de couverture avec des lacunes explicites est plus honnête qu'une liste de règles. La couche ATT&CK Navigator (comment la charger) montre les deux :
| Couvert (règle déployée) | Lacune connue, suivie dans une issue |
|---|---|
| T1087 Account Discovery (DET-001) | T1530 Data from Cloud Storage, détection sur le plan de données |
| T1562.007 Disable/Modify Cloud Firewall (DET-002 / DET-009) | T1496 Resource Hijacking, anomalie de dépenses/minage |
| T1098 Account Manipulation (DET-003 / DET-005 / DET-007) | T1526 Cloud Service Discovery, renforcer l'heuristique |
| T1485 Data Destruction (DET-004) | |
| T1003.001 LSASS Memory (DET-006) | |
| T1110 Brute Force / T1078 Valid Accounts (DET-008) |
Les lacunes ne sont pas du texte statique. Chacune est un issue detection-gap vivant, ce qui fait de la feuille de route un backlog cliquable.
Pourquoi ces règles et pas d'autres : docs/08, stratégie de détection et modèle de menace mappe le catalogue sur une kill chain cloud et classe les lacunes par risque. Comment une règle est ajustée : docs/09, une boucle d'ajustement mesurée pour DET-005 fait passer une règle de « se déclenche à chaque écriture » à zéro faux positif mesuré sur le harnais de validation.
La détection de plus haute gravité ferme la boucle de la détection vers la réponse. Une règle d'automatisation Sentinel exécute un playbook Logic App sur chaque incident DET-004 (suppression massive) : il publie un commentaire d'enrichissement avec le confinement recommandé (désactiver l'appelant, verrouiller les groupes de ressources, restaurer, chasser). Le playbook s'authentifie avec sa propre identité managée directement auprès de l'API ARM, sans secret ni connecteur externe.
Un deuxième playbook étend la boucle en détecter → répondre → investiguer par IA avec Microsoft Security Copilot : un promptbook + Logic App invoque un promptbook Copilot sur le même incident DET-004 et publie un résumé d'investigation IA en commentaire. Il se construit et se déploie sans unités de calcul ; la capture du résumé IA en conditions réelles s'exécute dans une fenêtre payante unique à coût borné (~4 $) et n'est pas revendiquée tant qu'elle n'est pas capturée. Runbook de coût et de démantèlement : docs/06.
Les détections commencent sur le plan de contrôle Azure ; cette phase ajoute le plan endpoint. Un capteur Defender for Endpoint sur un hôte Windows alimente le même espace de travail, de sorte que le pipeline Detection-as-Code déploie une règle endpoint, DET-006 Accès aux identifiants LSASS, à côté des règles du plan de contrôle. DET-006 est multi-source et attestée : trois techniques de dump d'identifiants ont été exécutées contre le capteur, l'hôte durci (LSASS RunAsPPL, AMSI, protection comportementale) a bloqué chacune d'elles, et la règle s'est déclenchée sur les alertes Defender résultantes pour générer un incident (INV-03). Defender Vulnerability Management ajoute un second apport : une bibliothèque de chasse qui remonte les CVE critiques par logiciel exposé, les baselines de configuration sécurisée non respectées et les actifs vulnérables sous alerte active. Les tables DeviceTvm* n'existent que dans la chasse avancée de Defender, ces corrélations sont donc des chasses, pas des règles déployées, et le dépôt indique où chaque requête s'exécute réellement. Architecture et flux de données : docs/07.


Les détections surveillent les attaques ; cette phase lit le score de posture du locataire lui-même, corrige ce qu'il signale, puis prouve que le chiffre a bougé. La baseline du Secure Score de Defender for Cloud est extraite sous forme de capture lisible par machine par collect-posture.ps1, de sorte que l'avant/après est un diff de fichiers, pas une comparaison de captures d'écran. Au départ, le score est de 68,81 % (21,33 / 31), et la décomposition par contrôle place la totalité de l'écart de 9,67 points dans quatre contrôles (chiffrement au repos, accès et autorisations, accès réseau, audit). La remédiation est ordonnée par rayon d'explosion, avec les correctifs additifs d'abord, et chaque élément est mappé à la règle du catalogue qui détecte sa régression (exposition du stockage vers DET-002 / DET-009, prolifération RBAC vers DET-003 / DET-007, perte de journalisation vers l'ensemble du catalogue). Trois correctifs ont été appliqués lors de cette passe et vérifiés au niveau des ressources : le contact de sécurité et les notifications d'alerte, la journalisation diagnostique sur les deux playbooks SOAR (+1 audit), et le chiffrement sur l'hôte de la VM capteur (+4 chiffrement au repos). Defender for Cloud réévalue et recalcule le score dans les 24 à 72 heures suivantes, le score post-correction est donc documenté comme un suivi plutôt qu'affirmé dès maintenant. Méthode complète, plan ordonné et tableau de liaison des détections : docs/10, remédiation de posture.


Ce travail s'appuie sur un cadre de contrôle reconnu, et le dépôt indique où. Chaque partie du catalogue correspond à un critère des services de confiance SOC 2 : le catalogue de neuf règles et les incidents à la série « surveiller et répondre » (CC7.2 à CC7.4), les playbooks SOAR à la réponse à incident (CC7.4), le pipeline Detection-as-Code contrôlé par PR à la gestion des changements (CC8.1), et le harnais de validation ainsi que l'avant/après de posture à l'efficacité opérationnelle des contrôles (CC4.1). C'est présenté comme un mapping, pas une déclaration de conformité : il s'agit d'un locataire que j'exploite, pas d'une organisation auditée, le document mappe donc les activités de contrôle techniques et précise explicitement l'enveloppe de gouvernance qu'un vrai rapport SOC 2 exige et qu'un dépôt de détections ne porte pas. Tableau complet critère par critère et note sur la lecture en audit : docs/11, mapping des contrôles SOC 2.
detections/rules rule source-of-truth (Sentinel YAML, deployed by CI)
detections/*.md one card per rule: logic, MITRE, trigger, evidence
detections/metrics.yaml per-detection metrics (volume, FP rate, TP, MTTD)
tests/ synthetic-log unit tests (Kusto emulator, fork-runnable)
validation/ live mixed-activity harness: benign + attack streams, measured TP/FP
cicd/ + .github Detection-as-Code pipeline (deploy, validate, regression)
sigma/ vendor-neutral Sigma conversions (portable to any SIEM)
kql/ analytics-rule queries + hunting library
investigations/ end-to-end incident write-ups
simulations/ exact atomic-aligned trigger steps
navigator/ ATT&CK coverage layer (covered + gaps)
posture/ Secure Score baseline collector + JSON snapshots + remediation script
playbooks/ SOAR response (Logic App + automation rule)
docs/ architecture, methodology, cicd, validation, data-dictionary, endpoint+TVM, detection-strategy, tuning case study, posture remediation, SOC 2 control mapping
screenshots/ visual evidence
KQL · règles d'analyse planifiées Microsoft Sentinel · règles de corrélation multi-étapes · détection d'identité Entra ID (SigninLogs) · watchlists de liste blanche (_GetWatchlist) · posture Azure Resource Graph en tant que contenu (Action planifiée) · Microsoft Defender XDR · Microsoft Defender for Endpoint · Defender Vulnerability Management (TVM) · chasse avancée (tables Device / DeviceTvm) · Microsoft Secure Score · remédiation de posture Defender for Cloud (CSPM, MCSB) · mapping des contrôles SOC 2 Common Criteria · Detection-as-Code (GitHub Actions, OIDC) · SOAR (règles d'automatisation Logic Apps) · Sigma (indépendant du fournisseur) · validation Atomic Red Team · triage et investigation d'incidents · mapping MITRE ATT&CK · surveillance du plan de contrôle Azure (journal d'activité).
C'est un portfolio personnel, mais il est structuré pour qu'une modification de détection soit une pull request examinable, pas un clic dans le portail. Si vous le forkez ou souhaitez proposer une règle, CONTRIBUTING.md couvre le workflow : modifier le YAML de la règle, régénérer le miroir KQL, étendre la fixture de test, exécuter les tests unitaires en local, et ouvrir une PR que les mêmes contrôles CI vérifient.
Microsoft Certified: Security Operations Analyst Associate (SC-200).
Un environnement que j'exploite, pas un locataire de production d'un employeur ou d'un tiers. Les détections sont validées par des actions administratives contrôlées et auto-réversibles sur mes propres ressources ; aucun système de production et aucun tiers n'est impliqué. Les identifiants de locataire et d'abonnement ainsi que les PII sont masqués dans toutes les captures d'écran.
| Octroi de privilège suivi d'un déploiement (corrélation) |
| Élevée |
| Élévation de privilèges / Persistance |
| T1098 Account Manipulation |
| DET-008 | Connexion réussie après échecs répétés (identité) | Moyenne | Accès aux identifiants / Accès initial | T1110 Brute Force, T1078 Valid Accounts |
| DET-009 | Modification de règle NSG exposant le trafic entrant depuis Any (contenu ARG) | Élevée | Évitement de la défense | T1562.007 Disable/Modify Cloud Firewall |