Raccogli i log del rilevatore di minacce DNS di Google Cloud
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 intelligence sulle minacce 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 disporre dei seguenti prerequisiti:
- Istanza Google SecOps.
- Progetto GCP con l'API Cloud Storage 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 ruoliroles/networksecurity.dnsThreatDetectorViewereroles/logging.viewer.
Creazione di 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, doppia regione, più regioni) 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 Detection in GCS
I log delle minacce DNS Armor vengono scritti in Cloud Logging. Devi configurare un sink di log per esportare questi log nel 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 service account Google SecOps
Google SecOps utilizza un service account univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo service account 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 univoca del service account, 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 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 service account Google SecOps
Il service account 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 service account Google SecOps.
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| record.jsonPayload.dnsQuery.responseCode, record.jsonPayload.dnsQuery.authAnswer, record.jsonPayload.dnsQuery.queryTime, record.jsonPayload.partnerId, record.jsonPayload.detectionTime, record.logName | additional.fields | Valori copiati nella mappa di aggiunta, quindi uniti come voci della mappa con value.string_value se non è vuoto |
| 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 corrisponde a (?i)Low, MEDIUM_CONFIDENCE se (?i)Medium, 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 | Impostato su "Google Cloud" | |
| metadata.product_name | Imposta su "Rilevatore di minacce DNS di Google Cloud" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.