Collecter les journaux Palo Alto Networks Traps
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.
Option 1 : Créer un compte de service pour l'API Chronicle (recommandé)
- Connectez-vous à la consoleGoogle Cloud et sélectionnez le projet Google Cloud associé à votre instance Google SecOps.
- Accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- 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).
- Nom du compte de service : saisissez un nom pour le compte (par exemple,
- Cliquez sur Créer et continuer.
- Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Sélectionner un rôle, puis sélectionnez Éditeur Chronicle.
- Cliquez sur Continue (Continuer), puis sur Done (OK).
- Cliquez sur le compte de service que vous avez créé, puis accédez à l'onglet Clés.
- Cliquez sur Ajouter une clé > Créer une clé.
- Sélectionnez JSON, puis cliquez sur Créer. Le fichier de clé est téléchargé sur votre ordinateur.
- Enregistrez le fichier de clé sous le nom
ingestion-auth.jsondans le répertoire du collecteur BindPlane (/opt/observiq-otel-collector/ingestion-auth.jsonsous Linux ouC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsous Windows), ou mettez à jourcreds_file_pathdansconfig.yamlpour qu'il corresponde au chemin d'accès où vous l'enregistrez. - 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)
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Agents de collecte.
- Téléchargez le fichier d'authentification d'ingestion.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et enregistrez le numéro client dans la section Détails de l'organisation.
Installer l'agent Bindplane
Installation de Windows
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec des droits d'accès racine ou sudo.
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
- Pour découvrir d'autres options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
Accédez au fichier de configuration :
- 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. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano,viou Notepad).
- Trouvez le fichier
Modifiez le fichier
config.yamlcomme 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_labelsRemplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<LOCATION>par la région de votre instance Google SecOps (par exemple,us,europeouasia-southeast1). L'exportateur ajoute cette valeur en préfixe àchronicle.googleapis.com.Remplacez
<PROJECT_NUMBER>par le numéro de projet indiqué dans IAM et administration > Paramètres.Remplacez
<customer_id>par le numéro client réel.Remplacez
/path/to/ingestion-authentication-file.jsonpar 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
exporterspar ce qui suit. Définissezcredssur le chemin d'accès au fichier d'authentification de l'ingestion. Si votre instance se trouve en dehors des États-Unis, remplacezmalachiteingestion-pa.googleapis.compar 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-agentPour 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
- Connectez-vous à la console Cortex XDR ESM.
- Sélectionnez Settings>ESM> Syslog.
- Cochez la case Activer syslog.
- 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.
- 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
- 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.