Raccogliere i log di OpenCanary
Panoramica
Questo parser estrae i campi dai log SYSLOG e JSON di OpenCanary, li normalizza nel formato UDM e arricchisce i dati con campi derivati come metadata.event_type
e security_result.severity
. Gestisce vari formati di log, esegue la convalida dell'indirizzo IP e mappa i campi agli oggetti UDM appropriati, come principal
, target
e network
.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Accesso privilegiato a OpenCanary.
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 OpenCanary Logs.
- Seleziona Webhook come Tipo di origine.
- Seleziona OpenCanary 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.
Configurazione di un webhook OpenCanary per Google SecOps
Trova il file di configurazione OpenCanary,
config.json
.Apri il file
config.json
con un editor di testo.Trova la sezione etichettata come alerters all'interno del file di configurazione.
Se esiste già un avviso
webhook
, modificalo. In caso contrario, aggiungi una nuova voce per l'autore dell'avvisowebhook
.Utilizza la seguente configurazione (sostituisci ENDPOINT_URL, SECRET e API_KEY con i tuoi valori):
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
- Salva il file
config.json
. - Riavvia il servizio OpenCanary per applicare le modifiche. ad esempio,
sudo systemctl restart opencanary
.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
dst_host |
target.asset.ip |
Il campo dst_host del log non elaborato è mappato a UDM. Mappato anche a target.ip . |
dst_host |
target.ip |
Il campo dst_host del log non elaborato è mappato a UDM. Mappato anche a target.asset.ip . |
dst_port |
target.port |
Il campo dst_port del log non elaborato viene convertito in una stringa, poi in un numero intero e mappato a UDM. |
local_time |
metadata.event_timestamp |
Il campo local_time del log non elaborato viene utilizzato per compilare metadata.event_timestamp in UDM. Il parser utilizza create_time dall'oggetto batch se il campo local_time non è presente. |
local_time_adjusted |
security_result.detection_fields |
Il campo local_time_adjusted del log non elaborato viene aggiunto come coppia chiave-valore all'array security_result.detection_fields nell'UDM. |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
Il campo logdata.COMMUNITY_STRING del log non elaborato viene aggiunto come coppia chiave-valore all'array security_result.detection_fields nell'UDM. |
logdata.DOMAIN |
principal.administrative_domain |
Il campo logdata.DOMAIN del log non elaborato è mappato a UDM. |
logdata.FILENAME |
target.file.full_path |
Il campo logdata.FILENAME del log non elaborato è mappato a UDM. |
logdata.HOSTNAME |
principal.asset.hostname |
Se il campo logdata.HOSTNAME non è un indirizzo IP, viene mappato all'UDM. Mappato anche a principal.hostname . |
logdata.HOSTNAME |
principal.asset.ip |
Se il campo logdata.HOSTNAME è un indirizzo IP, viene mappato a UDM. Mappato anche a principal.ip . |
logdata.HOSTNAME |
principal.hostname |
Se il campo logdata.HOSTNAME non è un indirizzo IP, viene mappato all'UDM. Mappato anche a principal.asset.hostname . |
logdata.HOSTNAME |
principal.ip |
Se il campo logdata.HOSTNAME è un indirizzo IP, viene mappato a UDM. Mappato anche a principal.asset.ip . |
logdata.LOCALNAME |
principal.asset.hostname |
Il campo logdata.LOCALNAME del log non elaborato è mappato a UDM. Mappato anche a principal.hostname . |
logdata.LOCALNAME |
principal.hostname |
Il campo logdata.LOCALNAME del log non elaborato è mappato a UDM. Mappato anche a principal.asset.hostname . |
logdata.LOCALVERSION |
principal.platform_version |
Il campo logdata.LOCALVERSION del log non elaborato è mappato a UDM. |
logdata.PASSWORD |
extensions.auth.mechanism |
La presenza del campo logdata.PASSWORD attiva l'analizzatore in modo che imposti extensions.auth.mechanism su USERNAME_PASSWORD nell'UDM. |
logdata.PATH |
network.http.referral_url |
Il campo logdata.PATH del log non elaborato è mappato a UDM. |
logdata.REMOTENAME |
target.asset.hostname |
Il campo logdata.REMOTENAME del log non elaborato è mappato a UDM. Mappato anche a target.hostname . |
logdata.REMOTENAME |
target.hostname |
Il campo logdata.REMOTENAME del log non elaborato è mappato a UDM. Mappato anche a target.asset.hostname . |
logdata.REMOTEVERSION |
target.platform_version |
Il campo logdata.REMOTEVERSION del log non elaborato è mappato a UDM. |
logdata.SMBVER |
network.application_protocol |
La presenza del campo logdata.SMBVER attiva l'analizzatore in modo che imposti network.application_protocol su SMB nell'UDM. |
logdata.USERAGENT |
network.http.parsed_user_agent |
Il campo logdata.USERAGENT del log non elaborato viene convertito in uno user agent analizzato e mappato all'UDM. |
logdata.USERAGENT |
network.http.user_agent |
Il campo logdata.USERAGENT del log non elaborato è mappato a UDM. |
logdata.USERNAME |
target.user.userid |
Il campo logdata.USERNAME del log non elaborato è mappato a UDM. |
loglevel |
security_result.severity |
Il campo loglevel del log non elaborato determina security_result.severity in UDM. WARNING corrisponde a HIGH , INFO /INFORMATION corrisponde a LOW . |
logtype |
security_result.detection_fields |
Il campo logtype del log non elaborato viene aggiunto come coppia chiave-valore all'array security_result.detection_fields nell'UDM. |
node_id |
principal.asset.asset_id |
Il campo node_id del log non elaborato è preceduto da "id:" e mappato a UDM. |
src_host |
principal.asset.ip |
Il campo src_host del log non elaborato è mappato a UDM. Mappato anche a principal.ip . |
src_host |
principal.ip |
Il campo src_host del log non elaborato è mappato a UDM. Mappato anche a principal.asset.ip . |
src_port |
principal.port |
Il campo src_port del log non elaborato viene convertito in un numero intero e mappato a UDM. |
utc_time |
security_result.detection_fields |
Il campo utc_time del log non elaborato viene aggiunto come coppia chiave-valore all'array security_result.detection_fields nell'UDM. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.