Collecter les journaux Palo Alto Networks Traps

Compatible avec :

Ce document explique comment collecter les journaux Palo Alto Networks Traps dans Google Security Operations à l'aide de Bindplane. L'analyseur traite les journaux aux formats CSV et clé-valeur, puis les transforme en UDM. Il utilise l'analyse grok et CSV pour extraire les champs, effectue une logique conditionnelle basée sur des messages de journaux ou des valeurs de champ spécifiques pour mapper les champs UDM et gère différents types d'événements tels que les mises à jour d'état, les analyses réseau et les créations de processus.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google Security Operations.
  • Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec systemd.
  • Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès privilégié à Cortex XDR.

Obtenir des identifiants Google SecOps pour l'agent BindPlane

Pour authentifier l'agent Bindplane auprès de Google SecOps, choisissez l'une des méthodes suivantes :

  • Nouveaux déploiements : utilisez l'API Chronicle (option 1).
  • Anciens déploiements : continuez à utiliser le fichier d'authentification d'ingestion (option 2) jusqu'à l'arrêt de l'API Ingestion le 20 juillet 2027.
  1. Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
  2. Accédez à IAM et administration > Comptes de service.
  3. Cliquez sur Créer un compte de service.
  4. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez un nom pour le compte (par exemple, bindplane-ingest).
    • Description du compte de service : saisissez une description (par exemple, Bindplane agent log ingestion).
  5. Cliquez sur Créer et continuer.
  6. Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
  7. Cliquez sur Continue (Continuer), puis sur Done (OK).
  8. Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
  9. Cliquez sur Ajouter une clé > Créer une clé.
  10. Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
  11. Enregistrez le fichier de clé sous le nom ingestion-auth.json dans le répertoire du collecteur BindPlane (/opt/observiq-otel-collector/ingestion-auth.json sous Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json sous Windows), ou mettez à jour creds_file_path dans config.yaml pour qu'il corresponde au chemin d'accès où vous l'enregistrez.
  12. Accédez à IAM et administration > Paramètres, puis copiez le numéro du projet. Vous en aurez besoin pour la configuration de l'exportateur.

Option 2 : Télécharger le fichier d'authentification d'ingestion (ancienne méthode)

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion.
  4. Enregistrez le fichier de manière sécurisée sur le système sur lequel l'agent Bindplane sera installé.

Obtenir l'ID client Google SecOps

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

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec des droits d'accès racine ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Autres ressources d'installation

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :

    1. Trouvez le fichier config.yaml. En général, il se trouve dans le répertoire /opt/observiq-otel-collector/ sous Linux ou dans le répertoire d'installation sous Windows.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou Notepad).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            protocol: https
            # Region of your instance, for example us, europe, asia-southeast1
            location: <LOCATION>
            # Project number of the Google Cloud project linked to the instance
            project: '<PROJECT_NUMBER>'
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: chronicle.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: PAN_EDR
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <LOCATION> par la région de votre instance Google SecOps (par exemple, us, europe ou asia-southeast1). L'exportateur ajoute cette valeur en préfixe à chronicle.googleapis.com.

  5. Remplacez <PROJECT_NUMBER> par le numéro de projet indiqué dans IAM et administration > Paramètres.

  6. Remplacez <customer_id> par le numéro client réel.

  7. Remplacez /path/to/ingestion-authentication-file.json par le chemin d'accès où le fichier de clé du compte de service (option 1) a été enregistré dans la section Obtenir les identifiants Google SecOps pour l'agent Bindplane.

Ancien exportateur d'API d'ingestion

  • Si vous utilisez le fichier d'authentification d'ingestion de l'option 2, remplacez le bloc exporters par ce qui suit. Définissez creds sur le chemin d'accès au fichier d'authentification de l'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacez malachiteingestion-pa.googleapis.com par votre point de terminaison régional (par exemple, europe-malachiteingestion-pa.googleapis.com).

    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: PAN_EDR
                raw_log_field: body
    

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Pour redémarrer l'agent BindPlane sous Linux, exécutez la commande suivante :

    sudo systemctl restart bindplane-agent
    
  • Pour redémarrer l'agent BindPlane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurer Palo Alto Networks Traps

  1. Connectez-vous à la console Cortex XDR ESM.
  2. Sélectionnez Settings>ESM> Syslog.
  3. Cochez la case Activer syslog.
  4. Fournissez les informations de configuration suivantes :
    • Serveur Syslog : saisissez l'adresse IP de l'agent Bindplane.
    • Port Syslog : saisissez le numéro de port configuré dans Bindplane, par exemple 514.
    • Protocole Syslog : sélectionnez CEF.
    • Définissez le délai avant expiration du message keep-alive sur 0.
    • Protocole de communication : sélectionnez UDP.
  5. Dans la section Événements de sécurité, cochez les cases suivantes :
    • Événement de prévention
    • Événement de notification
    • Événement post-détection
  6. Cliquez sur Vérifier la connectivité > Enregistrer.

Table de mappage UDM

Champ du journal Mappage UDM Logique
agentId event.idm.read_only_udm.additional.fields.value.string_value La valeur de agentId du journal brut est mappée au champ string_value dans une structure imbriquée sous additional.fields. La valeur key de ce champ est définie sur Agent ID.
agentIp event.idm.read_only_udm.target.ip La valeur de agentIp du journal brut est mappée au champ target.ip.
cat event.idm.read_only_udm.security_result.rule_name La valeur de cat du journal brut est mappée au champ security_result.rule_name.
class event.idm.read_only_udm.security_result.category_details Utilisé avec subClass pour renseigner security_result.category_details au format class: subClass.
cs1 event.idm.read_only_udm.principal.application, event.idm.read_only_udm.principal.user.email_addresses Si cs1Label est défini sur email et que cs1 est une adresse e-mail valide, il est mappé sur principal.user.email_addresses. Si cs1Label est défini sur Initiated by, il est mappé sur principal.application.
cs2 event.idm.read_only_udm.principal.process.command_line, event.idm.read_only_udm.security_result.description Si cs2Label est défini sur subtype, il est mappé sur security_result.description. Si cs2Label est défini sur Initiator CMD, il est mappé sur principal.process.command_line.
cs3 event.idm.read_only_udm.security_result.action_details Si cs3Label est défini sur result, il est mappé sur security_result.action_details.
customerId event.idm.read_only_udm.additional.fields.value.string_value La valeur de customerId du journal brut est mappée au champ string_value dans une structure imbriquée sous additional.fields. La valeur key de ce champ est définie sur Customer ID.
date_time event.idm.read_only_udm.metadata.event_timestamp.seconds Analysé et converti en code temporel, puis mappé à metadata.event_timestamp.seconds.
desc event.idm.read_only_udm.metadata.description La valeur de desc du journal brut est mappée au champ metadata.description.
deviceName event.idm.read_only_udm.target.hostname La valeur de deviceName du journal brut est mappée au champ target.hostname.
email_receiver event.idm.read_only_udm.network.email.to Extrait du champ msg s'il contient une adresse e-mail et mappé sur network.email.to.
endpoint_desc event.idm.read_only_udm.target.resource.attribute.labels.value Dérivé de isEndpoint : Yes, host is an endpoint. si isEndpoint est égal à 1, No, host is not an endpoint si isEndpoint est égal à 0. La valeur de key est définie sur Is Endpoint.
eventType event.idm.read_only_udm.metadata.product_event_type, event.idm.read_only_udm.metadata.event_type La valeur de eventType du journal brut est mappée au champ metadata.product_event_type. Il permet également de déduire metadata.event_type en fonction de sa valeur (par exemple, Management Audit Logs donne EMAIL_TRANSACTION, XDR Analytics BIOC ou Behavioral Threat donne SCAN_NETWORK).
facility event.idm.read_only_udm.additional.fields.value.string_value La valeur de facility du journal brut est mappée au champ string_value dans une structure imbriquée sous additional.fields. La valeur key de ce champ est définie sur Facility.
fileHash event.idm.read_only_udm.principal.process.file.sha256 La valeur de fileHash du journal brut, convertie en minuscules, est mappée au champ principal.process.file.sha256.
filePath event.idm.read_only_udm.principal.process.file.full_path La valeur de filePath du journal brut est mappée au champ principal.process.file.full_path.
friendlyName event.idm.read_only_udm.metadata.description La valeur de friendlyName du journal brut est mappée au champ metadata.description.
interm_ip event.idm.read_only_udm.intermediary.ip La valeur de interm_ip du journal brut est mappée au champ intermediary.ip.
isEndpoint event.idm.read_only_udm.target.resource.attribute.labels.value Utilisé pour dériver target.resource.attribute.labels.value.
isVdi event.idm.read_only_udm.target.resource.resource_type Si isVdi est défini sur 1, target.resource.resource_type est défini sur VIRTUAL_MACHINE.
msg event.idm.read_only_udm.security_result.summary La valeur de msg du journal brut est mappée au champ security_result.summary. Également utilisé pour extraire email_receiver.
msgTextEn event.idm.read_only_udm.security_result.description La valeur de msgTextEn du journal brut est mappée au champ security_result.description.
osType event.idm.read_only_udm.target.platform, event.idm.read_only_udm.target.resource.attribute.labels.value Si osType est défini sur 1, target.platform est défini sur WINDOWS. Si osType est défini sur 2, target.platform est défini sur MAC. Si osType est égal à 4, target.platform est défini sur LINUX. Si osType est défini sur 3, sa valeur est mappée sur target.resource.attribute.labels.value avec key OS.
osVersion event.idm.read_only_udm.target.platform_version La valeur de osVersion du journal brut est mappée au champ target.platform_version.
product_version event.idm.read_only_udm.metadata.product_version La valeur de product_version du journal brut est mappée au champ metadata.product_version.
proto event.idm.read_only_udm.network.ip_protocol Si proto est udp, network.ip_protocol est défini sur UDP.
recordType event.idm.read_only_udm.additional.fields.value.string_value La valeur de recordType du journal brut est mappée au champ string_value dans une structure imbriquée sous additional.fields. La valeur key de ce champ est définie sur Record Type.
regionId event.idm.read_only_udm.principal.location.country_or_region Si regionId est défini sur 10, principal.location.country_or_region est défini sur Americas (N. Virginia). Si regionId est défini sur 70, principal.location.country_or_region est défini sur EMEA (Frankfurt).
request event.idm.read_only_udm.target.url La valeur de request du journal brut est mappée au champ target.url.
sec_category_details event.idm.read_only_udm.security_result.category_details La valeur de sec_category_details du journal brut est mappée au champ security_result.category_details.
sec_desc event.idm.read_only_udm.security_result.description La valeur de sec_desc du journal brut est mappée au champ security_result.description.
serverHost event.idm.read_only_udm.principal.hostname La valeur de serverHost du journal brut est mappée au champ principal.hostname.
severity event.idm.read_only_udm.security_result.severity Mappé sur security_result.severity avec la logique suivante : 2 -> CRITICAL, 3 -> ERROR, 4 -> MEDIUM, 5 -> LOW, 6 -> INFORMATIONAL.
severity_val event.idm.read_only_udm.security_result.severity, event.idm.read_only_udm.security_result.severity_details Si severity_val est défini sur 0, security_result.severity_details est défini sur UNKNOWN_SEVERITY. Sinon, il est mappé sur security_result.severity selon la logique suivante : 6 → FAIBLE, 8 → MOYEN, 9 → ÉLEVÉ.
shost event.idm.read_only_udm.principal.hostname La valeur de shost du journal brut est mappée au champ principal.hostname.
src_ip event.idm.read_only_udm.principal.ip La valeur de src_ip du journal brut est mappée au champ principal.ip.
subClass event.idm.read_only_udm.security_result.category_details Utilisé conjointement avec class pour renseigner security_result.category_details.
suser event.idm.read_only_udm.principal.user.user_display_name La valeur de suser du journal brut, sans les crochets, les barres obliques inverses et les guillemets simples, est mappée au champ principal.user.user_display_name.
targetprocesscmd event.idm.read_only_udm.target.process.command_line La valeur de targetprocesscmd du journal brut est mappée au champ target.process.command_line.
targetprocessname event.idm.read_only_udm.target.application La valeur de targetprocessname du journal brut est mappée au champ target.application.
targetprocesssha256 event.idm.read_only_udm.target.process.file.sha256 La valeur de targetprocesssha256 du journal brut, convertie en minuscules, est mappée au champ target.process.file.sha256.
tenantname event.idm.read_only_udm.target.resource.attribute.labels.value La valeur de tenantname du journal brut est mappée au champ value dans une structure imbriquée sous target.resource.attribute.labels. La valeur key de ce champ est définie sur Tenant name.
event.idm.read_only_udm.metadata.event_type La valeur par défaut est STATUS_UPDATE. Définie sur EMAIL_TRANSACTION si eventType est Management Audit Logs. SCAN_NETWORK si eventType est XDR Analytics BIOC ou Behavioral Threat, ou si desc est Behavioral Threat. Remplacé par SCAN_PROCESS si desc est Suspicious Process Creation. Définissez cet élément sur Palo Alto Networks. Définissez cet élément sur Cortex XDR. Définissez cet élément sur PAN_EDR. Définie sur NETWORK_SUSPICIOUS si eventType est XDR Analytics BIOC ou Behavioral Threat, ou si desc est Behavioral Threat.

Journal des modifications

Afficher le journal des modifications de cet analyseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.