Collecter les journaux du pare-feu WatchGuard
Présentation
Cet analyseur extrait les journaux WatchGuard Fireware au format JSON ou clé-valeur (KV), et les transforme en UDM. Il gère les journaux "Traffic" (Trafic) et "Event" (Événement) différemment, à l'aide de filtres grok et kv pour extraire des champs et les mapper sur UDM, avec une logique spécifique pour différentes valeurs msg_id
et noms d'événements, en gérant les protocoles réseau, les actions des utilisateurs, les résultats de sécurité et d'autres informations pertinentes. Il traite également un deuxième groupe d'entrées syslog, en extrayant des informations similaires et en les mappant au format UDM.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à Watchguard.
- Assurez-vous de disposer d'un hôte Windows 2012 SP2 ou version ultérieure ou Linux avec systemd.
- Si vous exécutez l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
Obtenir le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
- Pour l'installation sous Windows, exécutez le script suivant:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
. - Pour l'installation sous Linux, exécutez le script suivant:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
. - Pour en savoir plus sur les options d'installation, consultez ce guide d'installation.
Configurer l'agent BindPlane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez à la machine sur laquelle BindPlane est installé.
Modifiez le fichier
config.yaml
comme suit :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
Redémarrez l'agent BindPlane pour appliquer les modifications à l'aide de la commande suivante :
sudo systemctl bindplane restart
Ajouter la configuration du serveur Syslog à Watchguard
- Connectez-vous à l'interface utilisateur de Watchguard.
- Sélectionnez System (Système) > Logging (Journalisation).
- Cliquez sur l'onglet Serveur Syslog.
- Cochez la case Envoyer des messages de journal à ces serveurs syslog.
- Cliquez sur Ajouter.
Spécifiez des valeurs pour les paramètres d'entrée dans la boîte de dialogue Serveur Syslog:
- Adresse IP: saisissez l'adresse IP du serveur.
- Port: modifiez le port par défaut du serveur syslog (514). Saisissez un autre port pour votre serveur.
- Format de journal: sélectionnez Syslog dans le menu déroulant.
- Facultatif: Description: saisissez une description du serveur (par exemple, Exportation Google SecOps).
- Facultatif: Code temporel: cochez la case pour inclure la date et l'heure de l'événement sur votre Firebox dans les détails du message de journal.
- Facultatif : Numéro de série de l'appareil : cochez cette case pour inclure le numéro de série du Firebox dans les détails du message de journal.
- Syslog facility (Fonctionnalité Syslog) : pour chaque type de message de journal, sélectionnez une priorité dans le menu déroulant (par exemple, pour les messages Syslog de priorité élevée, tels que les alarmes, sélectionnez Local0).
- Facultatif: Restaurer les paramètres par défaut: pour rétablir les paramètres par défaut.
Cliquez sur Enregistrer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
action |
security_result.action_details |
La valeur de action du journal brut est attribuée à security_result.action_details . |
action |
target.labels.value |
La valeur de action du journal brut est attribuée à target.labels.value , target.labels.key étant "Action sur la ressource". |
arg |
target.file.full_path |
La valeur de arg du journal brut est attribuée à target.file.full_path . |
app_cat_id |
about.labels.value |
La valeur de app_cat_id du journal brut est attribuée à about.labels.value , about.labels.key étant "app_cat_id". |
app_cat_name |
target.application |
À utiliser avec app_name pour former la valeur de target.application (par exemple, "Google - Services Web"). |
app_id |
about.labels.value |
La valeur de app_id du journal brut est attribuée à about.labels.value , about.labels.key étant "app_id". |
app_name |
target.application |
À utiliser avec app_cat_name pour former la valeur de target.application (par exemple, "Google - Services Web"). |
cats |
security_result.category_details |
La valeur de cats du journal brut est attribuée à security_result.category_details . |
cert_issuer |
network.tls.server.certificate.issuer |
La valeur de cert_issuer du journal brut est attribuée à network.tls.server.certificate.issuer . |
cert_subject |
network.tls.server.certificate.subject |
La valeur de cert_subject du journal brut est attribuée à network.tls.server.certificate.subject . |
cn |
network.tls.server.certificate.subject |
La valeur de cn du journal brut est attribuée à network.tls.server.certificate.subject . |
conn_action |
security_result.action_details |
La valeur de conn_action du journal brut est attribuée à security_result.action_details . |
content_type |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
description |
metadata.description |
La valeur de description dérivée du journal brut est attribuée à metadata.description . |
dhcp_type |
network.dhcp.type |
La valeur de dhcp_type dans le journal brut est mappée sur le type DHCP correspondant dans network.dhcp.type (par exemple, "REQUEST", "ACK"). |
dst_host |
target.hostname |
La valeur de dst_host du journal brut est attribuée à target.hostname . |
dst_ip |
target.ip |
La valeur de dst_ip du journal brut est attribuée à target.ip . |
dst_mac |
target.mac |
La valeur de dst_mac du journal brut est attribuée à target.mac . |
dst_port |
target.port |
La valeur de dst_port du journal brut est attribuée à target.port . |
dst_user |
target.user.user_display_name |
La valeur de dst_user du journal brut est attribuée à target.user.user_display_name . |
dstname |
target.administrative_domain |
La valeur de dstname du journal brut est attribuée à target.administrative_domain . |
duration |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
elapsed_time |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
endpoint |
intermediary.labels.value |
La valeur de endpoint du journal brut est attribuée à intermediary.labels.value , intermediary.labels.key étant "Gateway-Endpoint". |
event_name |
principal.application |
La valeur de event_name du journal brut est attribuée à principal.application . |
firewall_id |
intermediary.asset_id |
La valeur de firewall_id du journal brut est précédée de "ID du pare-feu : " et attribuée à intermediary.asset_id . |
firewall_name |
principal.asset_id |
La valeur de firewall_name du journal brut est précédée de "Firewall: " et attribuée à principal.asset_id . |
firewallname |
intermediary.hostname |
La valeur de firewallname du journal brut est attribuée à intermediary.hostname . |
firewallname |
principal.hostname |
La valeur de firewallname du journal brut est attribuée à principal.hostname . |
fqdn_dst_match |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
geo |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
geo_dst |
target.location.country_or_region |
La valeur de geo_dst du journal brut est attribuée à target.location.country_or_region . |
geo_src |
principal.location.country_or_region |
La valeur de geo_src du journal brut est attribuée à principal.location.country_or_region . |
host |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
ike_policy |
security_result.rule_id |
La valeur de ike_policy du journal brut est attribuée à security_result.rule_id . |
ike_policy_version |
security_result.rule_version |
La valeur de ike_policy_version du journal brut est attribuée à security_result.rule_version . |
intermediary_host |
intermediary.hostname |
La valeur de intermediary_host du journal brut est attribuée à intermediary.hostname . |
ipaddress |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
ipsec_policy |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
ipsec_policy_version |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
keyword |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
line |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
log_message |
metadata.description |
La valeur log_message du journal brut est attribuée à metadata.description lorsque d'autres descriptions plus spécifiques ne sont pas disponibles. |
log_reason |
security_result.summary |
La valeur de log_reason du journal brut est attribuée à security_result.summary . |
log_type |
metadata.log_type |
La valeur de log_type du journal brut est attribuée à metadata.log_type . Toujours défini sur "WATCHGUARD". |
msg |
security_result.summary |
La valeur de msg du journal brut est attribuée à security_result.summary . |
msg_id |
metadata.product_event_type |
La valeur de msg_id du journal brut est attribuée à metadata.product_event_type . |
new_action |
security_result.action_details |
Utilisé avec conn_action pour former la valeur de security_result.action_details (par exemple, "ProxyReplace: IP protocol - HTTPS-Client.DPI-Off"). |
op |
network.http.method |
La valeur de op du journal brut est attribuée à network.http.method . |
path |
target.url |
La valeur de path du journal brut est attribuée à target.url . |
pid |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
policy_name |
intermediary.resource.name |
La valeur de policy_name du journal brut est attribuée à intermediary.resource.name . |
policy_name |
security_result.rule_name |
La valeur de policy_name du journal brut est attribuée à security_result.rule_name . |
policyname_label.value |
security_result.rule_labels.value |
La valeur de policy_name du journal brut est attribuée à security_result.rule_labels.value , security_result.rule_labels.key étant "PolicyName". |
prin_host |
principal.hostname |
La valeur de prin_host du journal brut est attribuée à principal.hostname . |
proc_id |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
protocol |
network.ip_protocol |
La valeur de protocol du journal brut, convertie en majuscules, est attribuée à network.ip_protocol . Traitement spécial pour "ICMP EXTERNE", qui est mappé sur "ICMP". |
proxy_act |
security_result.rule_id |
La valeur de proxy_act du journal brut est attribuée à security_result.rule_id . |
proxy_act |
security_result.rule_name |
La valeur de proxy_act du journal brut est attribuée à security_result.rule_name . |
query_name |
network.dns.questions.name |
La valeur de query_name du journal brut est attribuée à network.dns.questions.name . |
query_type |
network.dns.questions.type |
La valeur de query_type du journal brut est attribuée à network.dns.questions.type . Traitement spécial des types de requêtes numériques et mappage sur les types de requêtes DNS standards. |
rc |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
reason |
security_result.summary |
La valeur de reason du journal brut est attribuée à security_result.summary . |
record_type |
network.dns.answers.type |
La valeur de record_type du journal brut est mappée sur le type d'enregistrement DNS correspondant dans network.dns.answers.type . |
redirect_action |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
reputation |
additional.fields.value.string_value |
La valeur de reputation du journal brut est attribuée à additional.fields.value.string_value , additional.fields.key étant "reputation". |
response |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
response_code |
network.dns.response_code |
La valeur de response_code du journal brut est mappée sur le code de réponse DNS correspondant dans network.dns.response_code . |
route_type |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
rule_name |
security_result.rule_name |
La valeur de rule_name du journal brut est attribuée à security_result.rule_name . |
rcvd_bytes |
network.received_bytes |
La valeur de rcvd_bytes du journal brut est attribuée à network.received_bytes . |
sent_bytes |
network.sent_bytes |
La valeur de sent_bytes du journal brut est attribuée à network.sent_bytes . |
server_ssl |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
severity |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
sig_vers |
network.tls.server.certificate.version |
La valeur de sig_vers du journal brut est attribuée à network.tls.server.certificate.version . |
signature_cat |
additional.fields.value.string_value |
La valeur de signature_cat du journal brut est attribuée à additional.fields.value.string_value , additional.fields.key étant "signature_cat". |
signature_id |
additional.fields.value.string_value |
La valeur de signature_id du journal brut est attribuée à additional.fields.value.string_value , additional.fields.key étant "signature_id". |
signature_name |
additional.fields.value.string_value |
La valeur de signature_name du journal brut est attribuée à additional.fields.value.string_value , additional.fields.key étant "signature_name". |
sni |
network.tls.client.server_name |
La valeur de sni du journal brut est attribuée à network.tls.client.server_name . |
src_ctid |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
src_host |
principal.hostname |
La valeur de src_host du journal brut est attribuée à principal.hostname . |
src_ip |
principal.ip |
La valeur de src_ip du journal brut est attribuée à principal.ip . |
src_ip_nat |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
src_mac |
principal.mac |
La valeur de src_mac du journal brut est attribuée à principal.mac . |
src_port |
principal.port |
La valeur de src_port du journal brut est attribuée à principal.port . |
src_user |
principal.user.user_display_name |
La valeur de src_user du journal brut est attribuée à principal.user.user_display_name . |
src_user_name |
principal.user.user_display_name |
La valeur de src_user_name du journal brut est attribuée à principal.user.user_display_name . |
src_vpn_ip |
principal.ip |
La valeur de src_vpn_ip du journal brut est attribuée à principal.ip . |
srv_ip |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
srv_port |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
ssl_offload |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
tcp_info |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
time |
metadata.event_timestamp.seconds , timestamp.seconds |
La valeur de time du journal brut est analysée et utilisée pour renseigner metadata.event_timestamp.seconds et timestamp.seconds . |
time1 |
metadata.event_timestamp.seconds , timestamp.seconds |
La valeur de time1 du journal brut est analysée et utilisée pour renseigner metadata.event_timestamp.seconds et timestamp.seconds . |
tls_profile |
about.labels.value |
La valeur de tls_profile du journal brut est attribuée à about.labels.value , about.labels.key étant "tls_profile". |
tls_version |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
user_name |
principal.user.userid , principal.user.user_display_name |
La valeur de user_name du journal brut est attribuée à principal.user.userid ou principal.user.user_display_name en fonction du contexte. |
user_type |
Non mappé | Non mappé à l'objet IDM dans les exemples de UDM fournis. |
(N/A) | intermediary.resource.type |
Toujours défini sur "ACCESS_POLICY". |
(N/A) | metadata.event_type |
Déterminé par la logique de l'analyseur en fonction de msg_id , log_type , event_name et d'autres champs. Il peut s'agir de 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 ou USER_UNCATEGORIZED . |
(N/A) | metadata.product_name |
Toujours défini sur "Fireware". |
(N/A) | metadata.vendor_name |
Toujours défini sur "Watchguard". |
(N/A) | security_result.action |
Déterminé par la logique de l'analyseur basée sur disposition . Valeurs possibles : "ALLOW" ou "BLOCK". |
(N/A) | extensions.auth.type |
Définissez cette valeur sur "AUTHTYPE_UNSPECIFIED" pour les événements de connexion/déconnexion des utilisateurs et sur "VPN" pour les événements réseau liés aux VPN. |
(N/A) | network.application_protocol |
Déterminé par la logique de l'analyseur basée sur msg_id et event_name . Valeurs possibles : "DNS", "DHCP", "HTTP" ou "HTTPS". |
(N/A) | network.dns.questions.type |
Définissez cette valeur sur 1 pour les requêtes d'enregistrements A. |
(N/A) | target.labels.key |
Définissez cette valeur sur "Action sur la ressource" lorsque action est mappé sur target.labels.value . |
(N/A) | intermediary.labels.key |
Défini sur "Nom du membre du pare-feu" lorsque prin_host est mappé sur intermediary.labels.value . |
(N/A) | intermediary.labels.key |
Défini sur "Gateway-Endpoint" lorsque endpoint est mappé sur intermediary.labels.value . |
(N/A) | principal.labels.key |
Définissez cette valeur sur "Gateway" (Passerelle) lorsque gateway est mappé sur principal.labels.value . |
(N/A) | target.labels.key |
Définissez cette valeur sur "Gateway" (Passerelle) lorsque gateway est mappé sur target.labels.value . |
(N/A) | principal.labels.key |
Définissez cette valeur sur "state" lorsque status est mappé sur principal.labels.value . |
(N/A) | target.labels.key |
Définissez cette valeur sur "État de la passerelle" lorsque status est mappé sur target.labels.value . |
(N/A) | additional.fields.key |
Défini sur "signature_name", "signature_cat", "signature_id" ou "reputation" lorsque les valeurs correspondantes sont mappées à partir du journal brut. |
Modifications
2023-12-03
- Modification d'un modèle Grok pour analyser de nouveaux champs.
- Modification de quelques modèles Grok pour analyser de nouveaux modèles de "identified_log".
- Ajout d'un nouveau format Grok pour analyser "identified_log" avec la valeur "msg_id" de "1600-0066".
2023-11-27
- Mappage de "signature_name" sur "additional.fields" pour les journaux dont "msg_id" est égal à "3000-0150".
- Mappage de "signature_id" et "signature_cat" sur "additional.fields".
2023-11-24
- Modification de quelques modèles Grok pour analyser de nouveaux champs.
- "firewallname" a été mappé sur "event.idm.read_only_udm.intermediary.hostname".
- "firewall_id" a été mappé sur "event.idm.read_only_udm.intermediary.asset_id".
- Mappage de "prin_host" sur "event.idm.read_only_udm.intermediary.labels"
2023-11-10
- Suppression du code redondant.
- "signature_name" a été mappé sur "additional.fields".
2023-09-28
- Correction de bug:
- Modification du filtre "date" pour qu'il accepte les formats suivants : "aaaa-MM-jj HH:mm:ss", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601", "aaaa-MM-jjTHH:mm:ss".
2023-05-25
- Correction de bug:
- Modification de la mise en correspondance du champ "src_vpn_ip" de "principal.ip" à "target.ip" pour l'événement "Message DPD reçu de l'hôte cible via la passerelle".
2023-05-04
- Amélioration : ajout de modèles Grok pour gérer les journaux non analysés avec les événements "dnsmasq", "dhcpd", "iked" et "admd".
2023-01-20
- Amélioration : ajout de grok pour gérer les journaux non analysés.
- Mappage de "dst_port" sur target.port.
- "src_port" a été mappé sur principal.port.
- "rcvd_bytes" a été mappé sur network.received_bytes.
- Mappage de "geo_src" sur principal.location.country_or_region.
- Mappage de "geo_dst" sur target.location.country_or_region.
- Mappage de "prin_host" sur "principal.hostname".
- Ajout d'une vérification conditionnelle pour "dhcp_type", "intermediary_host" et "protocol"
- Pour "msg_id" égal à "1600-0066"
- Ajout d'un modèle Grok pour "msg_id" égal à "1600-0066".
- "description" a été mappé sur "metadeta.description".
- Pour "msg_id" égal à "2DFF-0000"
- "proxy_act" a été mappé sur "security_result.rule_name".
2022-12-17
- Amélioration : le nom du pare-feu a été mappé sur "principal.asset_id" pour les journaux contenant Member1.
- Modification de "event_type" de "SERVICE_MODIFICATION" à "NETWORK_CONNECTION".
- "src_user" a été mappé sur "principal.user.email_addresses" s'il s'agit d'une adresse e-mail, sinon sur "principal.user.user_display_name".
2022-12-16
- Amélioration :
- Ajout de grok pour gérer le journal non analysé avec le nom d'événement "firewall".
- Réduction du type GENERIC_EVENT.
2022-11-16
- Amélioration : mise en correspondance du champ "reason" avec "security_result.action_details".
- Ajout de grok pour gérer le journal non analysé avec le nom d'événement "firewall".
- Ajout de blocs conditionnels supplémentaires pour analyser les journaux avec le nom d'événement "loggerd", "sigd", "sessiond", "admd" et "iked".
2022-11-07
- Correction de bug:
- Le chemin mappé indiqué dans l'en-tête HTTP est passé de "target.file.full_path" à "target.url".
2022-06-17
- Amélioration : analyse des journaux avec des événements liés à "firewall", "http-proxy" et "https-proxy".