Skip to main content

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

Gli avvisi e gli incidenti di Defender vengono acquisiti in CaseBender, normalizzati, arricchiti con osservabili e tecniche MITRE ATT&CK e trasformati in avvisi/casi.

Sincronizzazione in uscita

Quando un caso di CaseBender viene chiuso, l’avviso/incidente Defender collegato viene aggiornato con stato, classificazione e un commento di audit tramite Microsoft Graph.
Questa integrazione utilizza l’API di sicurezza di Microsoft Graph (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

1

Accesso a Microsoft Defender / Entra ID

Un tenant Microsoft Entra ID (Azure AD) con Microsoft Defender XDR o Microsoft Defender per endpoint concesso in licenza e abilitato. È necessario il permesso per registrare applicazioni e concedere il consenso dell’amministratore.
2

Uscita di rete

Il deployment di CaseBender deve poter raggiungere:
  • https://login.microsoftonline.com (endpoint token OAuth2)
  • https://graph.microsoft.com (API di sicurezza di Graph)
3

Ruolo di amministratore CaseBender

Devi poter creare e gestire integrazioni in Impostazioni → Integrazioni.

Parte A — Registrare un’applicazione Azure AD

1

Creare la registrazione dell'app

Nel centro di amministrazione Microsoft Entra, vai a Identità → Applicazioni → Registrazioni app → Nuova registrazione. Assegnale un nome (es. CaseBender Defender Integration) e registrala.
2

Annotare gli identificatori

Dalla Panoramica dell’applicazione, copia l’ID applicazione (client) e l’ID directory (tenant). Li inserirai in CaseBender.
3

Creare un secret client

In Certificati e segreti → Nuovo secret client, crea un secret e copia subito il suo Valore (viene mostrato una sola volta).
4

Concedere le autorizzazioni dell'API di sicurezza di Graph

In Autorizzazioni API → Aggiungi autorizzazione → Microsoft Graph → Autorizzazioni applicazione, aggiungi gli ambiti per la direzione o le direzioni necessarie e poi fai clic su Concedi consenso amministratore:
L’accesso in sola lettura è sufficiente per il polling. Se estrai solo incidenti/avvisi in CaseBender, concedi i due ambiti 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.
Usa autorizzazioni di Applicazione (non delegate). L’integrazione viene eseguita senza interazione con il flusso di credenziali client e richiede il consenso dell’amministratore del tenant.

Parte B — Configurare l’integrazione in CaseBender

1

Aprire il catalogo delle integrazioni

Vai a Impostazioni → Integrazioni → Crea, quindi scegli Microsoft Defender XDR dalla categoria EDR/XDR.
2

Inserire le credenziali Azure AD

Fornisci i valori acquisiti nella Parte A:
3

Abilitare il polling automatico (consigliato)

Nella scheda Polling automatico, attiva Abilita il polling automatico e imposta:Consulta Polling automatico per il funzionamento.
4

Configurare le opzioni di sincronizzazione

Abilita i comportamenti necessari:
Con 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.
5

Testare la connessione

Usa Testa connessione per convalidare. CaseBender richiede un token OAuth2 e chiama GET /security/alerts_v2?$top=1.
Una risposta 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 con lastUpdateDateTime gt <cursor> e $expand=alerts, dal più vecchio al più recente. Alla prima esecuzione importa gli incidenti aggiornati entro pollingInitialLookbackHours.
  • 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.
Richiede 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:
Le richieste vengono autenticate con una chiave API di integrazione nell’header 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 (array value[] di Graph) sia un oggetto di avviso singolo.
Una richiesta riuscita restituisce HTTP 202 Accepted:

Pipeline di elaborazione

1

Proxy di acquisizione

/api/v1/ingest/defender convalida la sorgente e inoltra la richiesta al servizio di acquisizione (POST /v1/sources/defender).
2

Pubblicazione in coda

Il servizio di acquisizione autentica la chiave API, convalida il payload e pubblica ogni avviso nella coda di elaborazione.
3

Normalizzazione

Il processore Defender normalizza ogni record in un avviso CaseBender: mappa la gravità, costruisce titolo/descrizione, estrae osservabili e asset del dispositivo e genera i TTP MITRE.

Riferimento di mappatura dei dati

Mappatura della gravità (Defender → CaseBender 1–4): Estrazione degli osservabili (da evidence[]): I tag applicati all’acquisizione includono 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’evento case_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:
  1. extraData.defenderAlertId / extraData.defenderIncidentId sul caso
  2. sourceRef quando extraData.source === "defender"
  3. Gli avvisi Defender collegati al caso — il pipeline di acquisizione registra l’ID incidente/avviso Defender nei customFields di ogni avviso, quindi un caso promosso da un avviso Defender (acquisito tramite polling o webhook) si risolve automaticamente, indipendentemente da come è stato creato.
Se non viene trovato alcun ID di avviso o incidente, la chiusura del caso viene ignorata per questa integrazione.

Mappatura risoluzione → classificazione

Alla chiusura, CaseBender applica la classification mappata e aggiunge un commento come:
Imposta inoltre lo 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.All e SecurityIncident.Read.All; aggiungi i corrispondenti ambiti ReadWrite.All solo 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.com e graph.microsoft.com.

Risoluzione dei problemi

Verifica 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’header x-api-key è mancante o non valido. Conferma di inviare la chiave cbr_defender_ che corrisponde alla chiave API webhook configurata dell’integrazione.
Il payload non conteneva né un array value[] né un id di primo livello. Invia un oggetto batch di Graph o un oggetto di avviso singolo.
Conferma che Abilita il polling automatico sia attivo e che il test di connessione abbia successo. Verifica che l’app abbia 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.
Assicurati che 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.
Un 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.

Documentazione correlata