Raccogliere i log di WatchGuard Fireware
Panoramica
Questo parser estrae i log di WatchGuard Fireware in formato JSON o chiave-valore (KV), trasformandoli in UDM. Gestisce i log "Traffico" ed "Evento" in modo diverso, utilizzando i filtri grok e kv per estrarre i campi e mapparli a UDM, con una logica specifica per vari valori msg_id
e nomi di eventi, gestione dei protocolli di rete, azioni utente, risultati di sicurezza e altri dettagli pertinenti. Inoltre, elabora un secondo gruppo di voci syslog, estraendo informazioni simili e mappandole al formato UDM.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi a Watchguard.
- Assicurati di avere Windows 2012 SP2 o versioni successive o un host Linux con systemd.
- Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.
Recupera il file di autenticazione di importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'importazione.
Ottenere l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa BindPlane Agent
- Per l'installazione su Windows, esegui il seguente script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
. - Per l'installazione su Linux, esegui il seguente script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
. - Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.
Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps
- Accedi al computer su cui è installato BindPlane.
Modifica il file
config.yaml
come segue:receivers: tcplog: # Replace the below port <54525> and IP (0.0.0.0) with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Riavviare BindPlane Agent per applicare le modifiche utilizzando il seguente comando:
sudo systemctl bindplane restart
Aggiungere la configurazione del server Syslog a Watchguard
- Accedi all'interfaccia utente di Watchguard.
- Seleziona Sistema > Logging.
- Fai clic sulla scheda Server Syslog.
- Seleziona la casella di controllo Invia messaggi di log a questi server syslog.
- Fai clic su Aggiungi.
Specifica i valori per i parametri di input nella finestra di dialogo Server Syslog:
- Indirizzo IP: digita l'indirizzo IP del server.
- Porta: per modificare la porta predefinita del server syslog (514), digita una porta diversa per il server.
- Formato log: seleziona Syslog dal menu a discesa.
- (Facoltativo) Descrizione: digita una descrizione per il server (ad esempio Esportazione Google SecOps).
- (Facoltativo) Il timestamp: seleziona la casella di controllo per includere la data e l'ora in cui si verifica l'evento su Firebox nei dettagli del messaggio di log.
- (Facoltativo) Il numero di serie del dispositivo seleziona la casella di controllo per includere il numero di serie di Firebox nei dettagli del messaggio di log.
- Strumento syslog: per ogni tipo di messaggio di log, seleziona una priorità dal menu a discesa (ad esempio, per i messaggi syslog ad alta priorità, come le allarmi, seleziona Local0).
- (Facoltativo) Ripristina i valori predefiniti: per ripristinare le impostazioni predefinite.
Fai clic su Salva.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
action |
security_result.action_details |
Il valore action del log non elaborato viene assegnato a security_result.action_details . |
action |
target.labels.value |
Il valore di action dal log non elaborato viene assegnato a target.labels.value , dove target.labels.key è "Azione sulla risorsa". |
arg |
target.file.full_path |
Il valore arg del log non elaborato viene assegnato a target.file.full_path . |
app_cat_id |
about.labels.value |
Il valore di app_cat_id dal log non elaborato viene assegnato a about.labels.value , dove about.labels.key è "app_cat_id". |
app_cat_name |
target.application |
Utilizzato in combinazione con app_name per formare il valore di target.application (ad es. "Google - Web services"). |
app_id |
about.labels.value |
Il valore di app_id dal log non elaborato viene assegnato a about.labels.value , dove about.labels.key è "app_id". |
app_name |
target.application |
Utilizzato in combinazione con app_cat_name per formare il valore di target.application (ad es. "Google - Web services"). |
cats |
security_result.category_details |
Il valore cats del log non elaborato viene assegnato a security_result.category_details . |
cert_issuer |
network.tls.server.certificate.issuer |
Il valore cert_issuer del log non elaborato viene assegnato a network.tls.server.certificate.issuer . |
cert_subject |
network.tls.server.certificate.subject |
Il valore cert_subject del log non elaborato viene assegnato a network.tls.server.certificate.subject . |
cn |
network.tls.server.certificate.subject |
Il valore cn del log non elaborato viene assegnato a network.tls.server.certificate.subject . |
conn_action |
security_result.action_details |
Il valore conn_action del log non elaborato viene assegnato a security_result.action_details . |
content_type |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
description |
metadata.description |
Il valore di description derivato dal log non elaborato viene assegnato a metadata.description . |
dhcp_type |
network.dhcp.type |
Il valore di dhcp_type dal log non elaborato viene mappato al tipo DHCP corrispondente in network.dhcp.type (ad es. "REQUEST", "ACK"). |
dst_host |
target.hostname |
Il valore dst_host del log non elaborato viene assegnato a target.hostname . |
dst_ip |
target.ip |
Il valore dst_ip del log non elaborato viene assegnato a target.ip . |
dst_mac |
target.mac |
Il valore dst_mac del log non elaborato viene assegnato a target.mac . |
dst_port |
target.port |
Il valore dst_port del log non elaborato viene assegnato a target.port . |
dst_user |
target.user.user_display_name |
Il valore dst_user del log non elaborato viene assegnato a target.user.user_display_name . |
dstname |
target.administrative_domain |
Il valore dstname del log non elaborato viene assegnato a target.administrative_domain . |
duration |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
elapsed_time |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
endpoint |
intermediary.labels.value |
Il valore di endpoint dal log non elaborato viene assegnato a intermediary.labels.value , con intermediary.labels.key che è "Gateway-Endpoint". |
event_name |
principal.application |
Il valore event_name del log non elaborato viene assegnato a principal.application . |
firewall_id |
intermediary.asset_id |
Al valore di firewall_id dal log non elaborato viene anteposto "ID firewall : " e assegnato a intermediary.asset_id . |
firewall_name |
principal.asset_id |
Al valore di firewall_name dal log non elaborato viene anteposto "Firewall: " e assegnato a principal.asset_id . |
firewallname |
intermediary.hostname |
Il valore firewallname del log non elaborato viene assegnato a intermediary.hostname . |
firewallname |
principal.hostname |
Il valore firewallname del log non elaborato viene assegnato a principal.hostname . |
fqdn_dst_match |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
geo |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
geo_dst |
target.location.country_or_region |
Il valore geo_dst del log non elaborato viene assegnato a target.location.country_or_region . |
geo_src |
principal.location.country_or_region |
Il valore geo_src del log non elaborato viene assegnato a principal.location.country_or_region . |
host |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
ike_policy |
security_result.rule_id |
Il valore ike_policy del log non elaborato viene assegnato a security_result.rule_id . |
ike_policy_version |
security_result.rule_version |
Il valore ike_policy_version del log non elaborato viene assegnato a security_result.rule_version . |
intermediary_host |
intermediary.hostname |
Il valore intermediary_host del log non elaborato viene assegnato a intermediary.hostname . |
ipaddress |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
ipsec_policy |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
ipsec_policy_version |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
keyword |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
line |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
log_message |
metadata.description |
Il valore di log_message dal log non elaborato viene assegnato a metadata.description quando non sono disponibili altre descrizioni più specifiche. |
log_reason |
security_result.summary |
Il valore log_reason del log non elaborato viene assegnato a security_result.summary . |
log_type |
metadata.log_type |
Il valore log_type del log non elaborato viene assegnato a metadata.log_type . Deve sempre essere impostato su "WATCHGUARD". |
msg |
security_result.summary |
Il valore msg del log non elaborato viene assegnato a security_result.summary . |
msg_id |
metadata.product_event_type |
Il valore msg_id del log non elaborato viene assegnato a metadata.product_event_type . |
new_action |
security_result.action_details |
Utilizzato con conn_action per formare il valore di security_result.action_details (ad es. "ProxyReplace: IP protocol - HTTPS-Client.DPI-Off"). |
op |
network.http.method |
Il valore op del log non elaborato viene assegnato a network.http.method . |
path |
target.url |
Il valore path del log non elaborato viene assegnato a target.url . |
pid |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
policy_name |
intermediary.resource.name |
Il valore policy_name del log non elaborato viene assegnato a intermediary.resource.name . |
policy_name |
security_result.rule_name |
Il valore policy_name del log non elaborato viene assegnato a security_result.rule_name . |
policyname_label.value |
security_result.rule_labels.value |
Il valore di policy_name dal log non elaborato viene assegnato a security_result.rule_labels.value , dove security_result.rule_labels.key è "PolicyName". |
prin_host |
principal.hostname |
Il valore prin_host del log non elaborato viene assegnato a principal.hostname . |
proc_id |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
protocol |
network.ip_protocol |
Il valore protocol del log non elaborato, convertito in maiuscolo, viene assegnato a network.ip_protocol . Trattamento speciale per "ICMP ESTERNO", che viene mappato a "ICMP". |
proxy_act |
security_result.rule_id |
Il valore proxy_act del log non elaborato viene assegnato a security_result.rule_id . |
proxy_act |
security_result.rule_name |
Il valore proxy_act del log non elaborato viene assegnato a security_result.rule_name . |
query_name |
network.dns.questions.name |
Il valore query_name del log non elaborato viene assegnato a network.dns.questions.name . |
query_type |
network.dns.questions.type |
Il valore query_type del log non elaborato viene assegnato a network.dns.questions.type . Trattamento speciale per i tipi di query numeriche e mappatura ai tipi di query DNS standard. |
rc |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
reason |
security_result.summary |
Il valore reason del log non elaborato viene assegnato a security_result.summary . |
record_type |
network.dns.answers.type |
Il valore di record_type dal log non elaborato viene mappato al tipo di record DNS corrispondente in network.dns.answers.type . |
redirect_action |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
reputation |
additional.fields.value.string_value |
Il valore di reputation dal log non elaborato viene assegnato a additional.fields.value.string_value , dove additional.fields.key è "reputation". |
response |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
response_code |
network.dns.response_code |
Il valore response_code del log non elaborato è mappato al codice di risposta DNS corrispondente in network.dns.response_code . |
route_type |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
rule_name |
security_result.rule_name |
Il valore rule_name del log non elaborato viene assegnato a security_result.rule_name . |
rcvd_bytes |
network.received_bytes |
Il valore rcvd_bytes del log non elaborato viene assegnato a network.received_bytes . |
sent_bytes |
network.sent_bytes |
Il valore sent_bytes del log non elaborato viene assegnato a network.sent_bytes . |
server_ssl |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
severity |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
sig_vers |
network.tls.server.certificate.version |
Il valore sig_vers del log non elaborato viene assegnato a network.tls.server.certificate.version . |
signature_cat |
additional.fields.value.string_value |
Il valore di signature_cat dal log non elaborato viene assegnato a additional.fields.value.string_value , con additional.fields.key che è "signature_cat". |
signature_id |
additional.fields.value.string_value |
Il valore di signature_id dal log non elaborato viene assegnato a additional.fields.value.string_value , dove additional.fields.key è "signature_id". |
signature_name |
additional.fields.value.string_value |
Il valore di signature_name dal log non elaborato viene assegnato a additional.fields.value.string_value , con additional.fields.key che è "signature_name". |
sni |
network.tls.client.server_name |
Il valore sni del log non elaborato viene assegnato a network.tls.client.server_name . |
src_ctid |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
src_host |
principal.hostname |
Il valore src_host del log non elaborato viene assegnato a principal.hostname . |
src_ip |
principal.ip |
Il valore src_ip del log non elaborato viene assegnato a principal.ip . |
src_ip_nat |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
src_mac |
principal.mac |
Il valore src_mac del log non elaborato viene assegnato a principal.mac . |
src_port |
principal.port |
Il valore src_port del log non elaborato viene assegnato a principal.port . |
src_user |
principal.user.user_display_name |
Il valore src_user del log non elaborato viene assegnato a principal.user.user_display_name . |
src_user_name |
principal.user.user_display_name |
Il valore src_user_name del log non elaborato viene assegnato a principal.user.user_display_name . |
src_vpn_ip |
principal.ip |
Il valore src_vpn_ip del log non elaborato viene assegnato a principal.ip . |
srv_ip |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
srv_port |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
ssl_offload |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
tcp_info |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
time |
metadata.event_timestamp.seconds , timestamp.seconds |
Il valore di time dal log non elaborato viene analizzato e utilizzato per compilare metadata.event_timestamp.seconds e timestamp.seconds . |
time1 |
metadata.event_timestamp.seconds , timestamp.seconds |
Il valore di time1 dal log non elaborato viene analizzato e utilizzato per compilare metadata.event_timestamp.seconds e timestamp.seconds . |
tls_profile |
about.labels.value |
Il valore di tls_profile dal log non elaborato viene assegnato a about.labels.value , con about.labels.key pari a "tls_profile". |
tls_version |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
user_name |
principal.user.userid , principal.user.user_display_name |
Il valore di user_name dal log non elaborato viene assegnato a principal.user.userid o principal.user.user_display_name a seconda del contesto. |
user_type |
Non mappato | Non mappato all'oggetto IDM negli esempi di UDM forniti. |
(N/A) | intermediary.resource.type |
Impostato sempre su "ACCESS_POLICY". |
(N/A) | metadata.event_type |
Determinato dalla logica dell'analizzatore sintattico in base a msg_id , log_type , event_name e altri campi. Può essere NETWORK_CONNECTION , SERVICE_MODIFICATION , NETWORK_SMTP , NETWORK_DNS , NETWORK_HTTP , USER_LOGIN , USER_LOGOUT , USER_RESOURCE_UPDATE_CONTENT , RESOURCE_PERMISSIONS_CHANGE , RESOURCE_CREATION , GENERIC_EVENT , STATUS_UPDATE o USER_UNCATEGORIZED . |
(N/A) | metadata.product_name |
È sempre impostato su "Fireware". |
(N/A) | metadata.vendor_name |
Impostato sempre su "Watchguard". |
(N/A) | security_result.action |
Determinato dalla logica del parser in base a disposition . Può essere "ALLOW" o "BLOCK". |
(N/A) | extensions.auth.type |
Impostato su "AUTHTYPE_UNSPECIFIED" per gli eventi di accesso/uscita degli utenti e su "VPN" per gli eventi di rete relativi alle VPN. |
(N/A) | network.application_protocol |
Determinato dalla logica del parser in base a msg_id e event_name . Può essere "DNS", "DHCP", "HTTP" o "HTTPS". |
(N/A) | network.dns.questions.type |
Impostato su 1 per le query sui record "A". |
(N/A) | target.labels.key |
Imposta su "Azione sulla risorsa" quando action è mappato a target.labels.value . |
(N/A) | intermediary.labels.key |
Imposta su "Nome membro del firewall" quando prin_host è mappato a intermediary.labels.value . |
(N/A) | intermediary.labels.key |
Imposta su "Gateway-Endpoint" quando endpoint è mappato a intermediary.labels.value . |
(N/A) | principal.labels.key |
Imposta su "Gateway" quando gateway è mappato a principal.labels.value . |
(N/A) | target.labels.key |
Imposta su "Gateway" quando gateway è mappato a target.labels.value . |
(N/A) | principal.labels.key |
Imposta su "state" quando status è mappato a principal.labels.value . |
(N/A) | target.labels.key |
Imposta su "Stato gateway" quando status è mappato a target.labels.value . |
(N/A) | additional.fields.key |
Impostato su "signature_name", "signature_cat", "signature_id" o "reputation" quando i valori corrispondenti vengono mappati dal log non elaborato. |
Modifiche
2023-12-03
- È stato modificato un pattern Grok per analizzare i nuovi campi.
- Sono stati modificati alcuni pattern Grok per analizzare nuovi pattern di "identified_log".
- È stato aggiunto un nuovo pattern Grok per analizzare "identified_log" con il valore "msg_id" pari a "1600-0066".
2023-11-27
- "signature_name" è stato mappato a "additional.fields" per i log con "msg_id" uguale a "3000-0150".
- "signature_id" e "signature_cat" sono stati mappati a "additional.fields".
2023-11-24
- Sono stati modificati alcuni pattern Grok per analizzare i nuovi campi.
- "firewallname" è stato mappato a "event.idm.read_only_udm.intermediary.hostname".
- "firewall_id" è stato mappato a "event.idm.read_only_udm.intermediary.asset_id".
- "prin_host" è stato mappato a "event.idm.read_only_udm.intermediary.labels"
2023-11-10
- Codice ridondante rimosso.
- "signature_name" è stato mappato a "additional.fields".
2023-09-28
- Correzione di bug:
- È stato modificato il filtro "data" in modo da supportare i seguenti formati: "yyyy-MM-dd HH:mm:ss", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601", "yyyy-MM-ddTHH:mm:ss".
2023-05-25
- Correzione di bug:
- È stata modificata la mappatura per il campo "src_vpn_ip" da "principal.ip" a "target.ip" per l'evento "Received DPD message from target host through gateway" (Messaggio DPD ricevuto dall'host target tramite gateway).
2023-05-04
- Miglioramento: sono stati aggiunti pattern Grok per gestire i log non analizzati con eventi "dnsmasq", "dhcpd", "iked", "admd".
2023-01-20
- Miglioramento: è stato aggiunto grok per gestire i log non analizzati.
- "dst_port" è stato mappato a target.port.
- "src_port" è stato mappato a principal.port.
- "rcvd_bytes" è stato mappato a network.received_bytes.
- "geo_src" è stato mappato a principal.location.country_or_region.
- "geo_dst" è stato mappato a target.location.country_or_region.
- "prin_host" è stato mappato a "principal.hostname".
- È stato aggiunto il controllo condizionale per "dhcp_type", "intermediary_host", "protocol"
- Per "msg_id" uguale a "1600-0066"
- È stato aggiunto il pattern Grok per "msg_id" uguale a "1600-0066".
- "description" è stato mappato a "metadeta.description".
- Per "msg_id" uguale a "2DFF-0000"
- "proxy_act" è stato mappato a "security_result.rule_name".
2022-12-17
- Miglioramento: il nome del firewall è stato mappato a "principal.asset_id" per i log contenenti il membro 1.
- "event_type" è stato modificato da "SERVICE_MODIFICATION" a "NETWORK_CONNECTION".
- "src_user" è stato mappato a "principal.user.email_addresses" se si tratta di un'email, altrimenti a "principal.user.user_display_name".
2022-12-16
- Miglioramento:
- È stato aggiunto un pattern grok per gestire i log non analizzati con event_name "firewall".
- Tipo GENERIC_EVENT ridotto.
2022-11-16
- Miglioramento: il campo "reason" è stato mappato a "security_result.action_details".
- È stato aggiunto un pattern grok per gestire i log non analizzati con event_name "firewall".
- Sono stati aggiunti blocchi condizionali aggiuntivi per analizzare i log con event_name "loggerd", "sigd", "sessiond", "admd", "iked".
2022-11-07
- Correzione di bug:
- Il percorso mappato specificato nell'intestazione HTTP da "target.file.full_path" a "target.url".
2022-06-17
- Miglioramento: log analizzati con eventi relativi a "firewall", "http-proxy", "https-proxy".