Vai al contenuto principale

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à

FunzionalitàDirezioneDescrizione
Acquisizione avvisiIn entrataGli avvisi Defender vengono normalizzati in avvisi CaseBender
Acquisizione incidentiIn entrataVengono acquisiti gli incidenti Defender (con avvisi figli)
Estrazione osservabiliIn entrataIP, URL, hash di file, nomi file, hostname e account utente vengono estratti dalle prove
Estrazione assetIn entrataHostname, IP e piattaforma OS del dispositivo vengono acquisiti da devices[]
Correlazione MITRE ATT&CKIn entrataGli ID tecnica vengono aggiunti come tag e TTP (es. mitre:T1078)
Sincronizzazione avvisiIn uscitastatus, classification, determination e commenti vengono inviati alla chiusura del caso
Sincronizzazione incidentiIn uscitastatus, classification, determination e commenti vengono inviati alla chiusura del caso
Test di connessioneBidirezionaleConvalida le credenziali OAuth2 e l’accesso all’API di sicurezza di Graph

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 quanto segue e poi fai clic su Concedi consenso amministratore:
AutorizzazioneScopo
SecurityAlert.ReadWrite.AllLeggere e aggiornare gli avvisi Defender
SecurityIncident.ReadWrite.AllLeggere e aggiornare gli incidenti Defender
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:
CampoDescrizione
tenantIdID directory (tenant)
clientIdID applicazione (client)
clientSecretValore del secret client
3

Configurare le opzioni di sincronizzazione

Abilita i comportamenti necessari:
OpzioneEffetto
syncCaseUpdatesInviare gli aggiornamenti del caso a Defender
syncCaseCloseInviare la chiusura del caso a Defender
autoCreateCasesCreare automaticamente casi dagli incidenti Defender acquisiti
closeAlertsOnCaseCloseRisolvere l’avviso Defender collegato alla chiusura di un caso
closeIncidentsOnCaseCloseRisolvere l’incidente Defender collegato alla chiusura di un caso
4

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: Acquisizione di avvisi e incidenti Defender

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:
POST https://<il-tuo-dominio-casebender>/api/v1/ingest/defender
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 sk_def_.

Formati del payload

Sono supportati sia il formato batch (array value[] di Graph) sia un oggetto di avviso singolo.
curl -X POST "https://<il-tuo-dominio-casebender>/api/v1/ingest/defender" \
  -H "x-api-key: sk_def_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "value": [
      {
        "id": "da637...",
        "incidentId": "12345",
        "title": "Esecuzione sospetta di PowerShell",
        "severity": "high",
        "status": "new",
        "classification": "unknown",
        "createdDateTime": "2026-07-03T18:20:00Z",
        "mitreTechniques": ["T1059.001"],
        "evidence": [
          { "@odata.type": "#microsoft.graph.security.fileEvidence",
            "sha256": "9f2b...", "fileName": "payload.ps1" }
        ]
      }
    ]
  }'
Una richiesta riuscita restituisce HTTP 202 Accepted:
{ "success": true, "processed": 1, "failed": 0 }

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):
Gravità DefenderGravità CaseBender
high1
medium2
low3
informational4
unknown3
Estrazione degli osservabili (da evidence[]):
Campo provaTipo di osservabile
ipAddressip
urlurl
sha256hash
fileNamefilename
deviceDnsNamehostname
userAccountuser (DOMINIO\account)
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
  2. sourceRef quando extraData.source === "defender"
  3. sourceRef quando sembra un riferimento di avviso Defender (prefisso da)
Se non viene trovato alcun ID di avviso o incidente, la chiusura del caso viene ignorata per questa integrazione.

Mappatura risoluzione → classificazione

Risoluzione CaseBenderClassificazione Defender
TruePositivetruePositive
FalsePositivefalsePositive
DuplicateinformationalExpectedActivity
NoImpactinformationalExpectedActivity
(altra / nessuna)truePositive (predefinito)
Alla chiusura, CaseBender imposta lo status dell’avviso/incidente su resolved, applica la classification mappata e aggiunge un commento come:
Case <id-caso> closed in CaseBender with resolution: <risoluzione>
Gli aggiornamenti in uscita degli avvisi richiedono che closeAlertsOnCaseClose sia abilitato; quelli degli incidenti richiedono closeIncidentsOnCaseClose. Se nessuno dei due è abilitato, non avviene alcuna sincronizzazione in uscita.

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 — concedi solo SecurityAlert.ReadWrite.All e SecurityIncident.ReadWrite.All. 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 sk_def_ 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 sk_def_ 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.
Assicurati che closeAlertsOnCaseClose / closeIncidentsOnCaseClose sia abilitato e che il caso abbia un ID avviso/incidente Defender (tramite extraData o sourceRef).
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.

Documentazione correlata