Raccogli i log del rilevatore di minacce DNS di Google Cloud
Parser Version: 1.0
Questo documento spiega come importare i log di Google Cloud DNS Threat Detector in Google Security Operations utilizzando Google Cloud Storage V2.
DNS Armor, basato su Infoblox, è un servizio completamente gestito che fornisce sicurezza a livello di DNS per i tuoi carichi di lavoro Google Cloud. Il suo rilevatore delle minacce avanzato è progettato per rilevare attività dannose al punto iniziale della catena di attacco, ovvero la query DNS, senza aggiungere complessità operativa o overhead delle prestazioni. Una volta rilevata una minaccia, puoi ottenere informazioni strategiche sulle minacce DNS tramite Cloud Logging.
Quando abiliti un rilevatore di minacce DNS per un progetto, DNS Armor invia in modo sicuro i log delle query DNS su internet al motore di analisi basato su Google Cloud fornito da Infoblox. Questo motore utilizza una combinazione di feed di threat intelligence e analisi comportamentale basata sull'AI per identificare le minacce. Qualsiasi attività dannosa rilevata genera un log delle minacce DNS Armor, che viene poi inviato al tuo progetto e scritto in Cloud Logging per consentirti di visualizzarlo e intervenire.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Progetto GCP con l'API Storage di Cloud abilitata.
- Autorizzazioni per creare e gestire bucket GCS.
- Autorizzazioni per gestire le policy IAM nei bucket GCS.
- API Network Security abilitata nel tuo progetto.
- Ruoli IAM richiesti per abilitare un rilevatore di minacce DNS.
- Autorizzazioni per visualizzare i log delle minacce DNS:
resourcemanager.projects.get,resourcemanager.projects.list,networksecurity.dnsThreatDetectors.get,networksecurity.dnsThreatDetectors.listo i ruoliroles/networksecurity.dnsThreatDetectorViewereroles/logging.viewer.
Crea un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio dns-threat-detector-logs).Tipo di località Scegli in base alle tue esigenze (regione singola, a due regioni, multiregionale) Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente) Controllo dell'accesso Uniforme (consigliato) Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Crea un rilevatore di minacce DNS
Questa sezione descrive come creare un rilevatore di minacce DNS per monitorare le reti VPC e identificare attività DNS dannose dirette a internet.
Puoi attivare un solo rilevatore di minacce DNS per progetto.
Utilizzo di Google Cloud Console
- Nella console Google Cloud, vai alla pagina Rilevamento avanzato delle minacce.
- Fai clic su Crea rilevatore di minacce DNS.
- Inserisci un nome per il rilevatore di minacce DNS.
- Seleziona Tutte le reti VPC nel progetto.
- Fai clic su Crea.
Utilizzo dello strumento a riga di comando gcloud
In alternativa, crea un rilevatore di minacce DNS utilizzando il comando gcloud:
gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--project=PROJECT_ID \
--provider="infoblox"
Sostituisci:
- my-dns-threat-detector: il nome del rilevatore di minacce DNS.
- PROJECT_ID: il tuo ID progetto.
Configura Cloud Logging per esportare i log di DNS Threat Detector in GCS
I log delle minacce DNS Armor vengono scritti in Cloud Logging. Devi configurare un sink di log per esportare questi log nel tuo bucket GCS.
- Nella console Google Cloud, vai a Logging > Router log.
- Fai clic su Crea sink.
- Fornisci i seguenti dettagli di configurazione:
- Nome sink: inserisci un nome descrittivo, ad esempio
dns-threat-detector-to-gcs. - Descrizione sink: descrizione facoltativa.
- Nome sink: inserisci un nome descrittivo, ad esempio
- Fai clic su Avanti.
- Nella sezione Seleziona il servizio sink:
- Servizio sink: seleziona Bucket Cloud Storage.
- Seleziona bucket Cloud Storage: seleziona il bucket (ad esempio
dns-threat-detector-logs) dal menu a discesa.
- Fai clic su Avanti.
Nella sezione Scegli i log da includere nel sink, inserisci la seguente query di filtro:
resource.type="networksecurity.googleapis.com/DnsThreatDetector" logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"
Sostituisci PROJECT_ID con l'ID progetto GCP.
- Fai clic su Avanti.
- Rivedi la configurazione e fai clic su Crea sink.
Utilizzo dello strumento a riga di comando gcloud
In alternativa, crea un sink di log utilizzando il comando gcloud:
gcloud logging sinks create dns-threat-detector-to-gcs \
gs://dns-threat-detector-logs \
--log-filter='resource.type="networksecurity.googleapis.com/DnsThreatDetector" AND logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"' \
--project=PROJECT_ID
Sostituisci:
- dns-threat-detector-logs: il nome del bucket GCS.
- PROJECT_ID: il tuo ID progetto GCP.
Recuperare il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Configura un feed in Google SecOps per importare i log di Google Cloud DNS Threat Detector
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
GCP DNS Threat Detector Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
Seleziona Google Cloud DNS Threat Detector come Tipo di log.
Fai clic su Ottieni service account.
Verrà visualizzata un'email del account di servizio univoca, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://dns-threat-detector-logs/Sostituisci:
dns-threat-detector-logs: il nome del bucket GCS.
- Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina i file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
dns-threat-detector-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps.
- Assegna ruoli: seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | mapping UDM | Logica |
|---|---|---|
| record.jsonPayload.dnsQuery.responseCode, record.jsonPayload.dnsQuery.authAnswer, record.jsonPayload.dnsQuery.queryTime, record.jsonPayload.partnerId, record.jsonPayload.detectionTime, record.logName | additional.fields | Values copied to addition map, then merged as map entries with value.string_value if not empty |
| record.receiveTimestamp | metadata.collected_timestamp | Analizzato come timestamp ISO8601 |
| metadata.event_type | Impostato su "NETWORK_CONNECTION" se has_principal e has_target, "STATUS_UPDATE" se has_principal, altrimenti "GENERIC_EVENT" | |
| record.timestamp | metadata.event_timestamp | Analizzato come timestamp ISO8601 |
| record.insertId | metadata.product_log_id | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.rdata | network.dns.answers | Valore copiato in answer.data, poi unito come array se non è vuoto |
| record.jsonPayload.dnsQuery.queryName, record.jsonPayload.dnsQuery.queryType | network.dns.questions | questions.name da queryName, questions.type mappato dalla stringa queryType a un numero intero, quindi unito come array se non è vuoto |
| record.jsonPayload.dnsQuery.responseCode | network.dns.response_code | Mappato da stringa a numero intero utilizzando una tabella predefinita |
| record.jsonPayload.dnsQuery.protocol | network.ip_protocol | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.sourceIp | principal.asset.ip | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.sourceIp | principal.ip | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.location | principal.location.country_or_region | Valore copiato direttamente se non è vuoto |
| record.resource.labels.location | principal.location.name | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.vmProjectNumber, record.jsonPayload.dnsQuery.projectNumber | principal.resource.attribute.labels | Valori copiati nella mappa di aggiunta, poi uniti come voci della mappa se non sono vuoti |
| record.jsonPayload.dnsQuery.vmInstanceId | principal.resource.id | Valore copiato direttamente se non è vuoto |
| record.resource.labels.id | principal.resource.product_object_id | Valore copiato direttamente se non è vuoto |
| record.resource.type | principal.resource.type | Valore copiato direttamente se non è vuoto |
| security_result | Unito dalla mappa security_result integrata | |
| record.jsonPayload.threatInfo.confidence | security_result.confidence | Mappato su LOW_CONFIDENCE se le corrispondenze sono (?i)Low, su MEDIUM_CONFIDENCE se (?i)Medium e su HIGH_CONFIDENCE se (?i)High |
| record.jsonPayload.threatInfo.threatDescription | security_result.description | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.threatInfo.threatIndicatorType, record.jsonPayload.threatInfo.threatIndicator, record.jsonPayload.threatInfo.threatFeed, record.jsonPayload.threatInfo.category, record.jsonPayload.threatInfo.type, record.jsonPayload.threatInfo.threat, record.jsonPayload.threatInfo.severity, record.resource.labels.resource_container | security_result.detection_fields | Valori copiati nella mappa di aggiunta, poi uniti come voci della mappa se non sono vuoti |
| record.severity | security_result.severity | Mappato su LOW se (?i)Low, INFORMATIONAL se (?i)(Informational|Info), MEDIUM se (?i)Medium, CRITICAL se (?i)Critical, HIGH se (?i)High |
| record.jsonPayload.threatInfo.threatId | security_result.threat_id | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.destinationIp | target.asset.ip | Valore copiato direttamente se non è vuoto |
| record.jsonPayload.dnsQuery.destinationIp | target.ip | Valore copiato direttamente se non è vuoto |
| metadata.vendor_name | Imposta su "Google Cloud" | |
| metadata.product_name | Imposta su "Rilevatore di minacce DNS di Google Cloud" |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.