Panoramica
L’integrazione Microsoft Defender XDR (INT-021) fornisce sincronizzazione bidirezionale tra CaseBender e la piattaforma di rilevamento e risposta estesi di Microsoft, inclusi Microsoft Defender per endpoint (MDE) e Microsoft Defender XDR.Acquisizione in entrata
Sincronizzazione in uscita
https://graph.microsoft.com/v1.0/security). Si autentica con un’applicazione Azure AD
(Entra ID) tramite il flusso di credenziali client OAuth2.Funzionalità
Prerequisiti
Accesso a Microsoft Defender / Entra ID
Uscita di rete
https://login.microsoftonline.com(endpoint token OAuth2)https://graph.microsoft.com(API di sicurezza di Graph)
Ruolo di amministratore CaseBender
Parte A — Registrare un’applicazione Azure AD
Creare la registrazione dell'app
CaseBender Defender Integration) e registrala.Annotare gli identificatori
Creare un secret client
Concedere le autorizzazioni dell'API di sicurezza di Graph
Read.All. Gli ambiti ReadWrite.All
sono necessari solo per la chiusura inversa in uscita facoltativa (syncCaseClose) —
chiudere un avviso/incidente Defender da CaseBender. Poiché ReadWrite.All include anche
l’accesso in lettura, concedere solo i due ambiti ReadWrite.All copre entrambe le direzioni.Parte B — Configurare l’integrazione in CaseBender
Aprire il catalogo delle integrazioni
Inserire le credenziali Azure AD
Abilitare il polling automatico (consigliato)
Configurare le opzioni di sincronizzazione
syncCaseClose attivo ma entrambi gli interruttori close…OnCaseClose disattivati,
CaseBender scrive comunque la classificazione e il commento di audit in Defender:
semplicemente non porta l’entità Defender a resolved.Testare la connessione
GET /security/alerts_v2?$top=1.403 durante il test è considerata un successo: conferma che
l’autenticazione ha funzionato anche quando l’app non dispone ancora dell’ambito di
lettura su quello specifico endpoint.In entrata (polling automatico, consigliato)
Con il polling automatico attivato (nella scheda Polling automatico dell’integrazione), CaseBender chiama periodicamente l’API di sicurezza Graph e acquisisce da solo i nuovi incidenti — senza alcuna Logic App, regola di automazione di Sentinel o inoltro webhook sul lato Microsoft. È necessaria solo la registrazione dell’applicazione Azure AD della Parte A.- Estrazione pianificata — a ogni
pollingIntervalMinutes, CaseBender recupera gli incidenti conlastUpdateDateTime gt <cursor>e$expand=alerts, dal più vecchio al più recente. Alla prima esecuzione importa gli incidenti aggiornati entropollingInitialLookbackHours. - Cursore e deduplica — un cursore per integrazione avanza fino all’incidente più recente visto e gli incidenti vengono deduplicati per ID incidente di Defender, quindi nulla viene acquisito due volte.
- Normalizzazione — ogni incidente e i relativi avvisi figli diventano un avviso di CaseBender con osservabili, asset e TTP MITRE. L’ID incidente di Defender viene registrato sull’avviso in modo che la sincronizzazione di chiusura in uscita possa individuarlo.
SecurityIncident.Read.All (incluso in SecurityIncident.ReadWrite.All). Con
autoCreateCases attivato, ogni incidente acquisito tramite polling diventa
automaticamente un Caso (deduplicato per ID incidente); se disattivato, gli incidenti
compaiono nella casella Avvisi per la promozione manuale. In entrambi i casi il
collegamento con Defender viene conservato affinché la chiusura del caso possa sincronizzarsi
a ritroso.In entrata (webhook / push)
Endpoint
Defender (o un intermediario come Logic Apps, Sentinel o un forwarder di webhook) invia i payload di avvisi/incidenti all’endpoint di acquisizione di CaseBender:x-api-key (è accettato anche l’header authorization: Bearer <chiave>). Le chiavi API dei
webhook Defender hanno il prefisso cbr_defender_.
Formati del payload
Sono supportati sia il formato batch (arrayvalue[] di Graph) sia un oggetto di avviso
singolo.
202 Accepted:
Pipeline di elaborazione
Proxy di acquisizione
/api/v1/ingest/defender convalida la sorgente e inoltra la richiesta al servizio di
acquisizione (POST /v1/sources/defender).Pubblicazione in coda
Normalizzazione
Riferimento di mappatura dei dati
Mappatura della gravità (Defender → CaseBender 1–4):evidence[]):
defender, xdr, service:<serviceSource>,
category:<category>, incident (per gli incidenti) e un tag mitre:<technique> per ogni
tecnica MITRE. I record acquisiti usano per impostazione predefinita TLP:2 e PAP:2.
In uscita: Sincronizzare le disposizioni dei casi con Defender
Quando un caso viene chiuso in CaseBender, l’eventocase_closed viene inviato al gestore
Defender. Se il caso è collegato a un avviso o incidente Defender, CaseBender invia la
risoluzione tramite l’API di sicurezza di Graph.
Come viene risolta l’entità Defender collegata
Il gestore cerca gli identificatori Defender in questo ordine:extraData.defenderAlertId/extraData.defenderIncidentIdsul casosourceRefquandoextraData.source === "defender"- Gli avvisi Defender collegati al caso — il pipeline di acquisizione registra l’ID
incidente/avviso Defender nei
customFieldsdi ogni avviso, quindi un caso promosso da un avviso Defender (acquisito tramite polling o webhook) si risolve automaticamente, indipendentemente da come è stato creato.
Mappatura risoluzione → classificazione
classification mappata e aggiunge un commento come:
status dell’entità Defender su resolved quando è abilitato il relativo
interruttore (closeAlertsOnCaseClose per gli avvisi, closeIncidentsOnCaseClose per gli
incidenti). L’esito viene scritto nella cronologia del caso affinché gli analisti possano
confermare la sincronizzazione.
syncCaseClose è l’interruttore principale della sincronizzazione in uscita (attivo per
impostazione predefinita). Quando è disattivato, non viene effettuata alcuna chiamata in
uscita. Gli aggiornamenti degli avvisi usano l’endpoint moderno /security/alerts_v2/{id};
quelli degli incidenti usano /security/incidents/{id}.Considerazioni sulla sicurezza
- Gestione dei segreti — il secret client è memorizzato nelle impostazioni dell’integrazione; ruotalo secondo le esigenze della tua organizzazione e aggiorna l’integrazione.
- Privilegio minimo — per le distribuzioni solo in entrata concedi solo
SecurityAlert.Read.AlleSecurityIncident.Read.All; aggiungi i corrispondenti ambitiReadWrite.Allsolo se abiliti la chiusura inversa in uscita. Non aggiungere ambiti Graph più ampi. - Caching dei token — i token di accesso sono memorizzati in cache in memoria per integrazione e aggiornati un minuto prima della scadenza; nessun token viene persistito su disco.
- Chiavi webhook — tratta la chiave API
cbr_defender_come un segreto. Ruotala se esposta e aggiorna la configurazione del mittente. - Rete — limita l’uscita a
login.microsoftonline.comegraph.microsoft.com.
Risoluzione dei problemi
Il test di connessione fallisce con un errore OAuth2
Il test di connessione fallisce con un errore OAuth2
tenantId, clientId e clientSecret. Conferma che il secret client non sia
scaduto e che sia stato concesso il consenso dell’amministratore per le autorizzazioni dell’applicazione Graph.L'acquisizione restituisce 400 'No alerts in payload'
L'acquisizione restituisce 400 'No alerts in payload'
value[] né un id di primo livello. Invia un oggetto
batch di Graph o un oggetto di avviso singolo.Il polling è abilitato ma non compaiono incidenti
Il polling è abilitato ma non compaiono incidenti
SecurityIncident.Read.All (o ReadWrite.All) con
consenso dell’amministratore, che il servizio di polling possa raggiungere
graph.microsoft.com (e il tuo proxy, se presente) e che esistano incidenti più recenti del
cursore. Alla prima esecuzione vengono importati solo gli incidenti entro
pollingInitialLookbackHours. Gli incidenti acquisiti tramite polling compaiono nella
casella Avvisi.Assicurati che tutti i servizi di CaseBender siano in esecuzione. Gli incidenti vengono
recuperati dal processore in background e trasformati in avvisi (e facoltativamente in casi)
dal worker in background. Se il worker non è in esecuzione, gli incidenti vengono
recuperati ma non compaiono mai. Con Docker, esegui docker compose ps e verifica che i
servizi worker e misp-processor siano Up; in caso contrario esegui
docker compose up -d. L’installer standard e la guida rapida configurano tutto
automaticamente: non devi configurare alcuna impostazione di coda o Redis.La chiusura del caso non aggiorna Defender
La chiusura del caso non aggiorna Defender
syncCaseClose sia attivo (è l’interruttore principale). Per contrassegnare
anche l’entità Defender come resolved, abilita closeAlertsOnCaseClose /
closeIncidentsOnCaseClose. Il caso deve essere collegato a un avviso/incidente Defender —
la chiusura di un caso promosso da un avviso Defender (acquisito tramite polling o webhook)
risolve automaticamente il collegamento. Controlla la cronologia del caso per l’esito.L'aggiornamento in uscita restituisce 403 o 404
L'aggiornamento in uscita restituisce 403 o 404
403 significa che all’app Azure AD manca l’autorizzazione di scrittura: conferma che
SecurityAlert.ReadWrite.All e SecurityIncident.ReadWrite.All siano concessi con il
consenso dell’amministratore. Un 404 sull’aggiornamento di un avviso indica di solito un
endpoint legacy; CaseBender usa /security/alerts_v2/{id} per gli avvisi moderni di Defender XDR.