Vue d’ensemble
L’intégration Microsoft Defender XDR (INT-021) assure une synchronisation bidirectionnelle entre CaseBender et la plateforme de détection et de réponse étendues de Microsoft, y compris Microsoft Defender pour point de terminaison (MDE) et Microsoft Defender XDR.Ingestion entrante
Synchronisation sortante
https://graph.microsoft.com/v1.0/security). Elle s’authentifie avec une application
Azure AD (Entra ID) via le flux d’identifiants client OAuth2.Fonctionnalités
Prérequis
Accès à Microsoft Defender / Entra ID
Sortie réseau
https://login.microsoftonline.com(endpoint de jeton OAuth2)https://graph.microsoft.com(API de sécurité Graph)
Rôle administrateur CaseBender
Partie A — Enregistrer une application Azure AD
Créer l'enregistrement d'application
CaseBender Defender Integration) et enregistrez-la.Noter les identifiants
Créer un secret client
Accorder les autorisations de l'API de sécurité Graph
Read.All. Les portées
ReadWrite.All ne sont requises que pour la clôture inverse sortante optionnelle
(syncCaseClose) — clôturer une alerte/incident Defender depuis CaseBender. Comme
ReadWrite.All inclut également l’accès en lecture, accorder uniquement les deux portées
ReadWrite.All couvre les deux directions.Partie B — Configurer l’intégration dans CaseBender
Ouvrir le catalogue d'intégrations
Saisir les identifiants Azure AD
Activer l'interrogation automatique (recommandé)
Configurer les options de synchronisation
syncCaseClose activé mais les deux commutateurs close…OnCaseClose désactivés,
CaseBender écrit tout de même la classification et le commentaire d’audit dans Defender :
il ne fait simplement pas passer l’entité Defender à resolved.Tester la connexion
GET /security/alerts_v2?$top=1.403 pendant le test est considérée comme un succès : elle confirme que
l’authentification a fonctionné même lorsque l’application n’a pas encore obtenu la portée
de lecture sur cet endpoint précis.Entrant (interrogation automatique, recommandé)
Lorsque l’interrogation automatique est activée (dans la carte Interrogation automatique de l’intégration), CaseBender appelle périodiquement l’API de sécurité Graph et ingère lui-même les nouveaux incidents — sans Logic App, règle d’automatisation Sentinel ni transitaire de webhook du côté Microsoft. Seul l’enregistrement d’application Azure AD de la Partie A est nécessaire.- Extraction planifiée — à chaque
pollingIntervalMinutes, CaseBender récupère les incidents aveclastUpdateDateTime gt <cursor>et$expand=alerts, du plus ancien au plus récent. Lors de la première exécution, il importe les incidents mis à jour dans la fenêtrepollingInitialLookbackHours. - Curseur et déduplication — un curseur par intégration avance jusqu’au dernier incident vu, et les incidents sont dédupliqués par ID d’incident Defender, de sorte que rien n’est ingéré deux fois.
- Normalisation — chaque incident et ses alertes enfants deviennent une alerte CaseBender avec observables, actifs et TTP MITRE. L’ID d’incident Defender est inscrit sur l’alerte afin que la synchronisation de clôture sortante puisse le retrouver.
SecurityIncident.Read.All (couvert par SecurityIncident.ReadWrite.All). Avec
autoCreateCases activé, chaque incident interrogé devient automatiquement un dossier
(dédupliqué par ID d’incident) ; s’il est désactivé, les incidents arrivent dans la boîte de
réception des Alertes pour une promotion manuelle. Dans les deux cas, le lien Defender est
conservé afin que la clôture du dossier puisse se synchroniser en retour.Entrant (webhook / envoi)
Endpoint
Defender (ou un intermédiaire tel que Logic Apps, Sentinel ou un relais de webhooks) envoie les charges utiles d’alertes/incidents à l’endpoint d’ingestion CaseBender :x-api-key (l’en-tête authorization: Bearer <clé> est également accepté). Les clés d’API de
webhook Defender ont le préfixe cbr_defender_.
Formats de charge utile
Le format par lots (tableauvalue[] de Graph) et l’objet d’alerte unique sont tous
deux pris en charge.
202 Accepted :
Pipeline de traitement
Proxy d'ingestion
/api/v1/ingest/defender valide la source et transmet la requête au service d’ingestion
(POST /v1/sources/defender).Publication en file d'attente
Normalisation
Référence de mappage des données
Mappage de la gravité (Defender → CaseBender 1–4) :evidence[]) :
defender, xdr, service:<serviceSource>,
category:<category>, incident (pour les incidents) et une étiquette mitre:<technique> par
technique MITRE. Les enregistrements ingérés utilisent par défaut TLP:2 et PAP:2.
Sortant : Synchroniser les dispositions de dossiers vers Defender
Lorsqu’un dossier est clôturé dans CaseBender, l’événementcase_closed est envoyé au
gestionnaire Defender. Si le dossier est lié à une alerte ou un incident Defender, CaseBender
renvoie la résolution via l’API de sécurité Graph.
Comment l’entité Defender liée est résolue
Le gestionnaire recherche les identifiants Defender dans cet ordre :extraData.defenderAlertId/extraData.defenderIncidentIdsur le dossiersourceReflorsqueextraData.source === "defender"- La ou les alertes Defender liées au dossier — le pipeline d’ingestion inscrit l’ID
d’incident/d’alerte Defender dans les
customFieldsde chaque alerte ; un dossier promu depuis une alerte Defender (interrogée ou par webhook) est donc résolu automatiquement, quelle que soit la façon dont il a été créé.
Mappage résolution → classification
classification mappée et ajoute un commentaire tel que :
status de l’entité Defender sur resolved lorsque le commutateur
correspondant (closeAlertsOnCaseClose pour les alertes, closeIncidentsOnCaseClose pour les
incidents) est activé. Le résultat est écrit dans la chronologie du dossier afin que les
analystes puissent confirmer la synchronisation.
syncCaseClose est le commutateur principal de la synchronisation sortante (activé par
défaut). Lorsqu’il est désactivé, aucun appel sortant n’est effectué. Les mises à jour
d’alertes utilisent l’endpoint moderne /security/alerts_v2/{id} ; celles d’incidents
utilisent /security/incidents/{id}.Considérations de sécurité
- Gestion des secrets — le secret client est stocké dans les paramètres de l’intégration ; faites-le pivoter selon les exigences de votre organisation et mettez à jour l’intégration.
- Moindre privilège — pour les déploiements en entrée uniquement, accordez seulement
SecurityAlert.Read.AlletSecurityIncident.Read.All; ajoutez les portéesReadWrite.Allcorrespondantes uniquement si vous activez la clôture inverse sortante. N’ajoutez pas d’autres portées Graph. - Mise en cache des jetons — les jetons d’accès sont mis en cache en mémoire par intégration et actualisés une minute avant expiration ; aucun jeton n’est persisté sur disque.
- Clés de webhook — traitez la clé d’API
cbr_defender_comme un secret. Faites-la pivoter en cas d’exposition et mettez à jour la configuration de l’expéditeur. - Réseau — limitez la sortie à
login.microsoftonline.cometgraph.microsoft.com.
Dépannage
Le test de connexion échoue avec une erreur OAuth2
Le test de connexion échoue avec une erreur OAuth2
tenantId, clientId et clientSecret. Confirmez que le secret client n’a pas
expiré et que le consentement administrateur a été accordé pour les autorisations d’application Graph.L'ingestion renvoie 400 'No alerts in payload'
L'ingestion renvoie 400 'No alerts in payload'
value[] ni id de premier niveau. Envoyez un
objet par lots Graph ou un objet d’alerte unique.L'interrogation est activée mais aucun incident n'apparaît
L'interrogation est activée mais aucun incident n'apparaît
SecurityIncident.Read.All (ou
ReadWrite.All) avec consentement administrateur, que le service d’interrogation peut
atteindre graph.microsoft.com (et votre proxy le cas échéant), et qu’il existe des
incidents plus récents que le curseur. À la première exécution, seuls les incidents dans
pollingInitialLookbackHours sont importés. Les incidents interrogés arrivent dans la boîte
de réception des Alertes.Assurez-vous que tous les services CaseBender sont en cours d’exécution. Les incidents sont
récupérés par le processeur en arrière-plan puis transformés en alertes (et éventuellement en
dossiers) par le worker en arrière-plan. Si le worker n’est pas en cours d’exécution, les
incidents sont récupérés mais n’apparaissent jamais. Avec Docker, exécutez docker compose ps
et vérifiez que les services worker et misp-processor sont Up ; sinon, exécutez
docker compose up -d. L’installateur standard et le guide de démarrage rapide configurent
tout automatiquement : vous n’avez aucun paramètre de file d’attente ou Redis à configurer
vous-même.La clôture du dossier ne met pas à jour Defender
La clôture du dossier ne met pas à jour Defender
syncCaseClose est activé (c’est le commutateur principal). Pour marquer
aussi l’entité Defender comme resolved, activez closeAlertsOnCaseClose /
closeIncidentsOnCaseClose. Le dossier doit être lié à une alerte/incident Defender — la
clôture d’un dossier promu depuis une alerte Defender (interrogée ou par webhook) résout le
lien automatiquement. Consultez la chronologie du dossier pour le résultat.La mise à jour sortante renvoie 403 ou 404
La mise à jour sortante renvoie 403 ou 404
403 signifie que l’application Azure AD n’a pas d’autorisation d’écriture — confirmez que
SecurityAlert.ReadWrite.All et SecurityIncident.ReadWrite.All sont accordés avec le
consentement administrateur. Un 404 sur la mise à jour d’une alerte indique généralement un
endpoint hérité ; CaseBender utilise /security/alerts_v2/{id} pour les alertes modernes de
Defender XDR.