Descripción general
La integración de Microsoft Defender XDR (INT-021) proporciona sincronización bidireccional entre CaseBender y la plataforma de detección y respuesta extendida de Microsoft, incluidos Microsoft Defender para Endpoint (MDE) y Microsoft Defender XDR.Ingesta entrante
Sincronización saliente
https://graph.microsoft.com/v1.0/security). Se autentica con una aplicación de Azure AD
(Entra ID) mediante el flujo de credenciales de cliente OAuth2.Capacidades
Requisitos previos
Acceso a Microsoft Defender / Entra ID
Salida de red
https://login.microsoftonline.com(endpoint de token OAuth2)https://graph.microsoft.com(API de seguridad de Graph)
Rol de administrador de CaseBender
Parte A — Registrar una aplicación de Azure AD
Crear el registro de la aplicación
CaseBender Defender Integration) y regístrela.Registrar los identificadores
Crear un secreto de cliente
Conceder permisos de la API de seguridad de Graph
Read.All. Los ámbitos
ReadWrite.All son necesarios solo para el cierre inverso de salida opcional
(syncCaseClose) — cerrar una alerta/incidente de Defender desde CaseBender. Dado que
ReadWrite.All también incluye acceso de lectura, conceder únicamente los dos ámbitos
ReadWrite.All cubre ambas direcciones.Parte B — Configurar la integración en CaseBender
Abrir el catálogo de integraciones
Introducir las credenciales de Azure AD
Habilitar el sondeo automático (recomendado)
Configurar las opciones de sincronización
syncCaseClose activado pero ambos conmutadores close…OnCaseClose desactivados,
CaseBender igualmente escribe la clasificación y el comentario de auditoría en Defender:
simplemente no cambia el estado de la entidad de Defender a resolved.Probar la conexión
GET /security/alerts_v2?$top=1.403 durante la prueba se considera correcta: confirma que la
autenticación funcionó incluso cuando la aplicación aún no tiene permiso de lectura en ese endpoint específico.Entrante (sondeo automático, recomendado)
Con el sondeo automático activado (en la tarjeta Sondeo automático de la integración), CaseBender llama periódicamente a la API de seguridad de Graph e ingiere los nuevos incidentes por sí solo, sin necesidad de una Logic App, una regla de automatización de Sentinel ni un reenviador de webhooks del lado de Microsoft. Solo se requiere el registro de aplicación de Azure AD de la Parte A.- Extracción programada — cada
pollingIntervalMinutes, CaseBender obtiene los incidentes conlastUpdateDateTime gt <cursor>y$expand=alerts, ordenados del más antiguo al más reciente. En la primera ejecución importa los incidentes actualizados dentro depollingInitialLookbackHours. - Cursor y deduplicación — un cursor por integración avanza hasta el incidente más reciente visto, y los incidentes se deduplican por ID de incidente de Defender, por lo que nada se ingiere dos veces.
- Normalización — cada incidente y sus alertas secundarias se convierten en una alerta de CaseBender con observables, activos y TTP de MITRE. El ID de incidente de Defender se registra en la alerta para que la sincronización de cierre saliente pueda localizarlo.
SecurityIncident.Read.All (incluido en SecurityIncident.ReadWrite.All). Con
autoCreateCases activado, cada incidente sondeado se convierte automáticamente en un
Caso (deduplicado por ID de incidente); si está desactivado, aparecen en la bandeja de
Alertas para promoción manual. En ambos casos el vínculo con Defender se conserva para
que al cerrar el caso se sincronice de vuelta.Entrante (webhook / envío)
Endpoint
Defender (o un intermediario como Logic Apps, Sentinel o un reenviador de webhooks) envía las cargas de alertas/incidentes al endpoint de ingesta de CaseBender:x-api-key (también se acepta el encabezado authorization: Bearer <clave>). Las claves de
API de webhook de Defender llevan el prefijo cbr_defender_.
Formatos de carga
Se admiten tanto el formato por lotes (arrayvalue[] de Graph) como un objeto de
alerta única.
202 Accepted:
Flujo de procesamiento
Proxy de ingesta
/api/v1/ingest/defender valida el origen y reenvía la solicitud al servicio de ingesta
(POST /v1/sources/defender).Publicación en cola
Normalización
Referencia de mapeo de datos
Mapeo de severidad (Defender → CaseBender 1–4):evidence[]):
defender, xdr, service:<serviceSource>,
category:<category>, incident (para incidentes) y una etiqueta mitre:<technique> por cada
técnica de MITRE. Los registros ingeridos usan por defecto TLP:2 y PAP:2.
Saliente: Sincronizar disposiciones de casos con Defender
Cuando se cierra un caso en CaseBender, el eventocase_closed se despacha al controlador de
Defender. Si el caso está vinculado a una alerta o incidente de Defender, CaseBender envía la
resolución a través de la API de seguridad de Graph.
Cómo se resuelve la entidad vinculada de Defender
El controlador busca los identificadores de Defender en este orden:extraData.defenderAlertId/extraData.defenderIncidentIden el casosourceRefcuandoextraData.source === "defender"- La(s) alerta(s) de Defender vinculada(s) al caso — el pipeline de ingesta registra el ID
de incidente/alerta de Defender en los
customFieldsde cada alerta, por lo que un caso promovido desde una alerta de Defender (sondeada o por webhook) se resuelve automáticamente, independientemente de cómo se creó.
Mapeo de resolución → clasificación
classification mapeada y agrega un comentario como:
status de la entidad de Defender en resolved cuando el conmutador
correspondiente (closeAlertsOnCaseClose para alertas, closeIncidentsOnCaseClose para
incidentes) está habilitado. El resultado se escribe en la línea de tiempo del caso para que
los analistas puedan confirmar la sincronización.
syncCaseClose es el interruptor principal de la sincronización saliente (activado por
defecto). Cuando está desactivado, no se realizan llamadas salientes. Las actualizaciones de
alertas usan el endpoint moderno /security/alerts_v2/{id}; las de incidentes usan
/security/incidents/{id}.Consideraciones de seguridad
- Manejo de secretos — el secreto de cliente se almacena en la configuración de la integración; rótelo según lo requiera su organización y actualice la integración al hacerlo.
- Privilegio mínimo — para implementaciones solo de entrada, conceda únicamente
SecurityAlert.Read.AllySecurityIncident.Read.All; agregue los ámbitosReadWrite.Allcorrespondientes solo si habilita el cierre inverso de salida. No agregue otros permisos de Graph. - Almacenamiento en caché de tokens — los tokens de acceso se almacenan en memoria por integración y se actualizan un minuto antes de expirar; no se guardan en disco.
- Claves de webhook — trate la clave de API
cbr_defender_como un secreto. Rótela si se expone y actualice la configuración del remitente. - Red — restrinja la salida a
login.microsoftonline.comygraph.microsoft.com.
Solución de problemas
La prueba de conexión falla con un error de OAuth2
La prueba de conexión falla con un error de OAuth2
tenantId, clientId y clientSecret. Confirme que el secreto de cliente no ha
expirado y que se concedió el consentimiento del administrador para los permisos de la aplicación de Graph.La ingesta devuelve 400 'No alerts in payload'
La ingesta devuelve 400 'No alerts in payload'
value[] ni un id de nivel superior. Envíe un objeto por
lotes de Graph o un objeto de alerta única.El sondeo está habilitado pero no aparecen incidentes
El sondeo está habilitado pero no aparecen incidentes
SecurityIncident.Read.All (o
ReadWrite.All) con consentimiento del administrador, que el servicio de sondeo pueda
alcanzar graph.microsoft.com (y su proxy, si lo hay), y que existan incidentes más
recientes que el cursor. En la primera ejecución solo se importan los incidentes dentro de
pollingInitialLookbackHours. Los incidentes sondeados aparecen en la bandeja de Alertas.Asegúrese de que todos los servicios de CaseBender estén en ejecución. Los incidentes los
obtiene el procesador en segundo plano y el worker en segundo plano los convierte en
alertas (y opcionalmente en casos). Si el worker no está en ejecución, los incidentes se
obtienen pero nunca aparecen. Con Docker, ejecute docker compose ps y confirme que los
servicios worker y misp-processor estén Up; si no, ejecute docker compose up -d. El
instalador estándar y la guía de inicio rápido configuran todo automáticamente: no necesita
configurar ningún ajuste de cola ni de Redis por su cuenta.El cierre del caso no actualiza Defender
El cierre del caso no actualiza Defender
syncCaseClose esté activado (es el interruptor principal). Para además
marcar la entidad de Defender como resolved, habilite closeAlertsOnCaseClose /
closeIncidentsOnCaseClose. El caso debe estar vinculado a una alerta/incidente de Defender
— al cerrar un caso promovido desde una alerta de Defender (sondeada o por webhook) el
vínculo se resuelve automáticamente. Revise la línea de tiempo del caso para ver el resultado.La actualización saliente devuelve 403 o 404
La actualización saliente devuelve 403 o 404
403 significa que la aplicación de Azure AD carece de permiso de escritura: confirme que
SecurityAlert.ReadWrite.All y SecurityIncident.ReadWrite.All estén concedidos con
consentimiento del administrador. Un 404 en la actualización de una alerta suele indicar un
endpoint heredado; CaseBender usa /security/alerts_v2/{id} para las alertas modernas de
Defender XDR.