Collecter les journaux du pare-feu WatchGuard

Compatible avec:

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

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion.

Obtenir le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.

Installer l'agent BindPlane

  1. 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.
  2. 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.
  3. 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

  1. Accédez à la machine sur laquelle BindPlane est installé.
  2. 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
    
  3. 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

  1. Connectez-vous à l'interface utilisateur de Watchguard.
  2. Sélectionnez System (Système) > Logging (Journalisation).
  3. Cliquez sur l'onglet Serveur Syslog.
  4. Cochez la case Envoyer des messages de journal à ces serveurs syslog.
  5. Cliquez sur Ajouter.
  6. 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.
  7. 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".