Raccogliere i log degli avvisi di Microsoft Defender for Cloud
Panoramica
Questo parser estrae i dati degli avvisi di sicurezza dai log in formato JSON di Microsoft Defender for Cloud. Trasforma e mappa i campi dei log non elaborati nell'UDM di Google SecOps, gestendo vari tipi di dati e strutture nidificate, arricchendo al contempo i dati con contesto ed etichette aggiuntivi per una migliore analisi.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso con privilegi a Microsoft Defender for Cloud.
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed
- Hub dei contenuti > Pacchetti di contenuti
Configura i feed da Impostazioni SIEM > Feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log degli avvisi di Microsoft Defender for Cloud.
- Seleziona Webhook come Tipo di origine.
- Seleziona Microsoft Defender for Cloud come Tipo di log.
- Fai clic su Avanti.
- (Facoltativo) Specifica i valori per i seguenti parametri di input:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
.
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
- Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
- Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
- Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.
- Fai clic su Fine.
Configurare i feed dall'hub dei contenuti
Specifica i valori per i seguenti campi:
- Delimitatore di suddivisione: il delimitatore utilizzato per separare le righe di log, ad esempio
\n
.
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
- Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Fai clic su Genera chiave segreta per generare una chiave segreta per autenticare questo feed.
Copia e memorizza la chiave segreta. Non puoi visualizzare di nuovo questa chiave segreta. Se necessario, puoi rigenerare una nuova chiave segreta, ma questa azione rende obsoleta la chiave segreta precedente.
Nella scheda Dettagli, copia l'URL dell'endpoint del feed dal campo Informazioni sull'endpoint. Devi specificare questo URL dell'endpoint nell'applicazione client.
Crea una chiave API per il feed webhook
Vai alla console Google Cloud > Credenziali.
Fai clic su Crea credenziali e poi seleziona Chiave API.
Limita l'accesso della chiave API all'API Google Security Operations.
Specifica l'URL dell'endpoint
- Nella tua applicazione client, specifica l'URL dell'endpoint HTTPS fornito nel feed webhook.
Attiva l'autenticazione specificando la chiave API e la chiave segreta come parte dell'intestazione personalizzata nel seguente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Consiglio: specifica la chiave API come intestazione anziché nell'URL. Se il client webhook non supporta le intestazioni personalizzate, puoi specificare la chiave API e la chiave segreta utilizzando parametri di ricerca nel seguente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Sostituisci quanto segue:
ENDPOINT_URL
: l'URL dell'endpoint del feed.API_KEY
: la chiave API per l'autenticazione a Google Security Operations.SECRET
: la chiave segreta che hai generato per autenticare il feed.
Crea app per la logica di Azure
- Accedi al portale Azure (https://portal.azure.com).
- Fai clic su Crea una risorsa e cerca Logic App.
- Fai clic su Crea per avviare la procedura di deployment.
- Configura l'app per la logica:
- Nome: fornisci un nome descrittivo per l'app per la logica (ad esempio GoogleSecOpsWebhook).
- Abbonamento: seleziona l'abbonamento appropriato.
- Gruppo di risorse: scegli un gruppo di risorse esistente o creane uno nuovo.
- Posizione: scegli la posizione più vicina al tuo ambiente.
- Analisi dei log: attiva questa opzione se vuoi registrare i dati diagnostici per l'app per la logica.
- Fai clic su Rivedi e crea per creare l'app per la logica.
- Fai clic su Crea per eseguire il deployment dell'app per la logica.
Configura la connessione webhook di Azure Logic App
- Vai all'app per la logica creata nel passaggio precedente.
- Fai clic su Strumenti di sviluppo > Logic App Designer.
- Fai clic su Aggiungi un attivatore.
Cerca Microsoft Defender for Cloud > Quando viene creato o attivato un avviso di Microsoft Defender for Cloud come trigger.
Fai clic su Crea nuovo e segui le istruzioni per l'autenticazione.
Fai clic su Inserisci un nuovo passaggio per aggiungere un nuovo passaggio al flusso di lavoro.
Fai clic su Aggiungi un'azione.
Cerca HTT.
Seleziona HTTP come azione.
Configura l'azione HTTP:
- URI: qui inserirai l'URL dell'endpoint API Google SecOps.
- Metodo:
POST
- Aggiungi intestazione Content-Type: imposta
Content-Type
come chiave dell'intestazione eapplication/json
come valore dell'intestazione. Indica a Google SecOps il formato dei dati inviati. - Aggiungi la chiave API alle query: imposta
key
come prima chiave di query e<API_KEY>
come valore della query.API_KEY
è il valore della chiave API generato durante la configurazione del feed Google SecOps. - Aggiungi chiave segreta alle query: imposta
secret
come seconda chiave di query e<SECRET_KEY>
come valore della query.SECRET_KEY
è la chiave segreta generata durante la configurazione del feed Google SecOps. - Imposta corpo dal passaggio precedente: fai clic su Inserisci contenuti richiesta > fai clic su Inserisci i dati dei passaggi precedenti (pulsante con l'icona a forma di fulmine a sinistra del campo di input).
Fai clic su Salva.
Configura il webhook degli avvisi di Microsoft Defender Cloud
- Vai a Microsoft Defender for Cloud.
- Fai clic su Gestione > Automazione del flusso di lavoro.
- Fai clic su Aggiungi automazione del flusso di lavoro.
- Nome: fornisci un nome descrittivo per la regola di automazione (ad esempio, ForwardAlertsToGoogleSecOps).
- Gruppo di risorse: scegli un gruppo di risorse esistente.
- Tipo di dati Defender for Cloud: scegli Avviso di sicurezza.
- Gravità avviso: scegli Seleziona tutto.
- Mostra le istanze di Logic App dai seguenti abbonamenti: scegli l'abbonamento in cui è stata creata Logic App.
- Seleziona app per la logica: scegli l'app per la logica creata nei passaggi precedenti.
- Fai clic su Crea per salvare l'automazione del flusso di lavoro.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Mappato direttamente. |
AlertName |
security_result.rule_name |
Mappato direttamente. |
AlertSeverity |
security_result.severity |
Mappato direttamente se il valore è HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. In caso contrario, mappato a security_result.severity_details . Il valore viene convertito in maiuscolo prima del confronto. |
AlertType |
security_result.threat_name |
Mappato direttamente. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mappato direttamente. |
Description |
security_result.description |
Mappato direttamente. |
DisplayName |
security_result.summary |
Mappato direttamente. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Mappato direttamente. |
Entities[].Location.City |
principal.location.city |
Mappato direttamente. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Mappato direttamente. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Mappato direttamente. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Mappato direttamente. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Mappato direttamente. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Mappato direttamente. |
ExtendedProperties.Account Session Id |
network.session_id |
Mappato direttamente dopo la ridenominazione in accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Mappato direttamente dopo la ridenominazione in alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Mappato direttamente dopo la ridenominazione in authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Mappato direttamente dopo la ridenominazione in clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Mappato direttamente dopo la ridenominazione in clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Mappato direttamente dopo la ridenominazione in clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Mappato direttamente dopo la ridenominazione in clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Mappato direttamente dopo la ridenominazione in clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Mappato direttamente dopo la ridenominazione in clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Mappato direttamente dopo la ridenominazione in compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Mappato direttamente dopo la ridenominazione in suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Mappato direttamente dopo la ridenominazione in suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Mappato direttamente dopo la ridenominazione in suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Mappato direttamente dopo la ridenominazione in userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Mappato direttamente dopo la ridenominazione in userName . |
ExtendedProperties.resourceType |
principal.resource.name |
Mappato direttamente. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Mappato direttamente. Convertito in stringa. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Mappato direttamente. |
ProductName |
metadata.product_name |
Mappato direttamente. |
ResourceId |
principal.resource.product_object_id |
Mappato direttamente. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Mappato direttamente. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Mappato direttamente. |
Status |
security_result.detection_fields.Status.value |
Mappato direttamente. |
SystemAlertId |
metadata.product_log_id |
Mappato direttamente. |
Tactics |
security_result.attack_details.tactics.name |
Mappato direttamente. |
TenantId |
additional.fields.TenantId.string_value |
Mappato direttamente. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Mappato direttamente. |
VendorName |
metadata.vendor_name |
Mappato direttamente. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Mappato direttamente. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Mappato direttamente. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Mappato direttamente. |
properties.alertDisplayName |
security_result.rule_name |
Mappato direttamente. |
properties.alertType |
security_result.threat_name |
Mappato direttamente. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Mappato direttamente. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Mappato direttamente. |
properties.description |
security_result.description |
Mappato direttamente. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Mappato direttamente. |
properties.entities[].location.city |
principal.location.city |
Mappato direttamente. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Mappato direttamente. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Mappato direttamente. Convertita in numero in virgola mobile. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Mappato direttamente. Convertita in numero in virgola mobile. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Mappato direttamente. |
properties.extendedProperties.clientApplication |
principal.application |
Mappato direttamente. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Mappato direttamente. Analizzato come indirizzo IP. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Mappato direttamente. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Mappato direttamente. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mappato direttamente. |
properties.extendedProperties.resourceType |
principal.resource.name |
Mappato direttamente. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Mappato direttamente. Convertito in stringa. |
properties.productName |
metadata.product_name |
Mappato direttamente. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Mappato direttamente. Alle chiavi $id e type viene aggiunto l'indice dell'elemento nell'array. |
properties.severity |
security_result.severity |
Mappato direttamente se il valore è HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. In caso contrario, mappato a security_result.severity_details . Il valore viene convertito in maiuscolo prima del confronto. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Mappato direttamente. |
properties.status |
security_result.detection_fields.Status.value |
Mappato direttamente. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Mappato direttamente. Se non viene fornito nel log, il valore è "MICROSOFT_DEFENDER_CLOUD_ALERTS". Imposta il valore su "MICROSOFT_DEFENDER_CLOUD_ALERTS". Impostato su "USER_RESOURCE_ACCESS" se sono presenti l'entità o la destinazione, altrimenti impostato su "GENERIC_EVENT". |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.