Collecter les journaux HP ProCurve
Ce document explique comment ingérer les journaux du commutateur HP ProCurve dans Google Security Operations à l'aide de Bindplane. Le code de l'analyseur tente d'abord d'analyser le message de journal brut au format JSON. Si cela échoue, il utilise des expressions régulières (modèles grok
) pour extraire les champs du message en fonction des formats de journaux HP ProCurve courants.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps
- Hôte Windows 2016 ou version ultérieure, ou hôte Linux avec systemd
- Si vous exécutez le programme derrière un proxy, les ports du pare-feu sont ouverts.
- Accès privilégié à un commutateur HP ProCurve
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. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.
Obtenir l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installation de fenêtres
- 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 les droits root 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
Ressources d'installation supplémentaires
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
Accédez au fichier de configuration :
- Recherchez le fichier
config.yaml
. En règle générale, il se trouve dans le répertoire/etc/bindplane-agent/
sous Linux ou dans le répertoire d'installation sous Windows. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez le fichier
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: 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: HP_PROCURVE raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<customer_id>
par le numéro client réel.Mettez à jour
/path/to/ingestion-authentication-file.json
en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.
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 Syslog sur un commutateur HP ProCurve
- Connectez-vous au commutateur HP Procurve avec SSH.
Vérifiez l'interface du commutateur à l'aide de la commande suivante :
show ip int br
Activez le mode configuration sur le commutateur à l'aide de la commande suivante :
console# conf t
Configurez le commutateur pour qu'il envoie les journaux à l'aide des commandes suivantes :
logging host <bindplae-server-ip> transport <udp/tcp> port <port-number> logging facility syslog logging trap informational logging buffer 65536 logging origin-id hostname logging source-interface <interface>
Remplacez
<bindplae-server-ip>
et<port-number>
par l'adresse IP Bindplane et le numéro de port.Remplacez
<udp/tcp>
en sélectionnant uniquement UDP ou TCP comme protocole de communication (selon la configuration de votre agent Bindplane).Remplacez
<interface>
par l'ID d'interface que vous avez reçu précédemment du commutateur (par exemple,Ethernet1/1
).Quittez le mode configuration et enregistrez les modifications à l'aide des commandes suivantes :
console# exit console# wr
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
AAAScheme | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est AAAScheme |
AAAType | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est AAAType |
ID du châssis | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ description si la clé est Chassis ID |
La commande est | read_only_udm.security_result.detection_fields.value | Texte après Command is dans le champ commandInfo |
CommandSource | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est CommandSource |
Config-Method | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que config_method . |
ConfigDestination | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est ConfigDestination |
ConfigSource | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est ConfigSource |
Nom de l'appareil | read_only_udm.principal.hostname | Si le champ existe dans le journal, il est mappé au nom d'hôte principal et au nom d'hôte de l'asset. |
ID de l'événement | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que event_id . |
EventIndex | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est EventIndex |
IfIndex | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ description si la clé est IfIndex |
Adresse IP : %{IP:IPAddr} | read_only_udm.target.ip, read_only_udm.target.asset.ip | Adresse IP extraite du champ desc et mappée à l'adresse IP cible et à l'adresse IP de l'élément cible |
IPAddr | read_only_udm.target.ip, read_only_udm.target.asset.ip | Si le champ existe dans le journal, il est mappé sur l'adresse IP cible et l'adresse IP de l'asset cible. |
Notice-Type | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que notice_type . |
ID du port | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ description si la clé est Port ID |
Adresse IP distante | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que remote_ip_address . |
Service | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est Service |
Tâche | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ descrip si la clé est Task |
Utilisateur | read_only_udm.principal.user.userid | Si le champ existe dans le journal, il est mappé à l'ID utilisateur principal. |
User-Name | read_only_udm.principal.user.userid | Si le champ existe dans le journal, il est mappé à l'ID utilisateur principal. |
NomUtilisateur | read_only_udm.principal.user.userid | Si le champ existe dans le journal, il est mappé à l'ID utilisateur principal. |
UserService | read_only_udm.security_result.detection_fields.value | Valeur extraite du champ desc si la clé est UserService |
collection_time.seconds | read_only_udm.metadata.event_timestamp.seconds | Partie en secondes de l'horodatage de l'événement |
données | Ce champ contient le message de journal brut et est analysé pour extraire d'autres champs. Il n'est pas mappé à l'UDM. | |
décroiss. | read_only_udm.security_result.description | Description extraite du message de journal |
descrip | Description extraite du champ desc , puis analysée pour les paires clé/valeur. Il n'est pas mappé à l'UDM. |
|
description | read_only_udm.security_result.description | Si le champ existe dans le journal, il est mappé à la description du résultat de sécurité. |
descript | read_only_udm.metadata.description | Si le champ existe dans le journal, il est mappé à la description des métadonnées. |
event_id | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que event_id . |
eventId | read_only_udm.metadata.product_event_type | ID de l'événement extrait du message du journal |
nom d'hôte | read_only_udm.principal.hostname, read_only_udm.principal.asset.hostname | Nom d'hôte extrait du message du journal et mappé au nom d'hôte principal et au nom d'hôte de l'élément |
inter_ip | read_only_udm.additional.fields.value.string_value, read_only_udm.intermediary.ip | Si le champ existe dans le journal et qu'il s'agit d'une adresse IP valide, il est mappé à l'adresse IP intermédiaire. Sinon, il est placé dans les champs supplémentaires sous la forme inter_ip . |
notice_type | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que notice_type . |
pid | read_only_udm.principal.process.pid | Si le champ existe dans le journal, il est mappé au PID du processus principal. |
programme | Informations sur le programme extraites du message du journal, analysées plus en détail pour extraire le module, la gravité et l'action. Il n'est pas mappé à l'UDM. | |
proto | read_only_udm.network.application_protocol, read_only_udm.additional.fields.value.string_value | Protocole extrait du message de journal. S'il correspond à des protocoles connus, il est mappé au protocole d'application. Sinon, il est placé dans les champs supplémentaires sous la forme Application Protocol . |
remote_ip_address | read_only_udm.principal.ip, read_only_udm.principal.asset.ip, read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal et qu'il s'agit d'une adresse IP valide, il est mappé à l'adresse IP principale et à l'adresse IP de l'asset principal. Sinon, il est placé dans les champs supplémentaires sous la forme remote_ip_address . |
de gravité, | read_only_udm.security_result.severity, read_only_udm.security_result.severity_details | Gravité extraite du champ program après fractionnement par / . Elle est mappée sur les niveaux de gravité UDM et stockée en tant que détails bruts de gravité. |
src_ip | read_only_udm.principal.ip, read_only_udm.principal.asset.ip | Adresse IP source extraite du message de journal et mappée à l'adresse IP principale et à l'adresse IP de l'élément principal |
état | read_only_udm.additional.fields.value.string_value | Si le champ existe dans le journal, il est placé dans les champs supplémentaires en tant que status . |
targetHostname | read_only_udm.target.hostname, read_only_udm.target.asset.ip | Si le champ existe dans le journal, il est mappé au nom d'hôte cible et à l'adresse IP de l'asset cible. |
target_ip | read_only_udm.target.ip, read_only_udm.target.asset.ip | Adresse IP cible extraite du message de journal et mappée à l'adresse IP cible et à l'adresse IP de l'élément cible |
timestamp | read_only_udm.metadata.event_timestamp.seconds | Code temporel extrait du message du journal et converti en code temporel de l'événement |
timestamp.seconds | read_only_udm.metadata.event_timestamp.seconds | Partie en secondes de l'horodatage de l'événement |
nom d'utilisateur | read_only_udm.principal.user.userid | Si le champ existe dans le journal, il est mappé à l'ID utilisateur principal. |
read_only_udm.metadata.event_type | Déterminé en fonction d'une combinaison de champs et de logique : – NETWORK_CONNECTION : si has_principal et has_target sont définis sur "true". – USER_LOGOUT : si action est WEBOPT_LOGOUT , LOGOUT ou SHELL_LOGOUT . – USER_LOGIN : si action est LOGIN ou WEBOPT_LOGIN_SUC . – STATUS_UPDATE : si action n'est pas vide ou si src_ip /hostname ne sont pas vides. – USER_UNCATEGORIZED : si has_user est défini sur "true". – GENERIC_EVENT : si aucune de ces conditions n'est remplie. |
|
read_only_udm.metadata.product_name | Codé en dur sur Procurve |
|
read_only_udm.metadata.vendor_name | Codé en dur sur HP |
|
read_only_udm.extensions.auth.type | Définie sur MACHINE , si event_type est USER_LOGOUT ou USER_LOGIN |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.