Collecter les journaux HP ProCurve
Ce document explique comment ingérer les journaux des commutateurs 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 des champs du message en fonction des formats de journal HP ProCurve courants.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes:
- Instance Google SecOps
- Windows 2016 ou version ultérieure, ou hôte Linux avec systemd
- Si l'exécution se fait 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 le numéro client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.
Installer l'agent Bindplane
Installation de Windows
- Ouvrez l'invite de commande 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 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
Autres ressources d'installation
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à 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 (
nano
,vi
ou Bloc-notes, par exemple).
- 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 dans votre infrastructure si nécessaire.
Remplacez
<customer_id>
par le numéro client réel.Remplacez
/path/to/ingestion-authentication-file.json
par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'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 à l'aide de SSH.
Vérifiez l'interface du commutateur à l'aide de la commande suivante:
show ip int br
Activez le mode de configuration sur le commutateur à l'aide de la commande suivante:
console# conf t
Configurez le commutateur pour qu'il envoie des 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 et le numéro de port de Bindplane.Remplacez
<udp/tcp>
en sélectionnant uniquement UDP ou TCP comme protocole de communication (en fonction de 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 de configuration et enregistrez les modifications à l'aide des commandes suivantes:
console# exit console# wr
Tableau 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 |
Device-Name | 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. |
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 . |
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 sur 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'élément 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 |
Remote-IP-Address | 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. |
Nom d'utilisateur | 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 secondes du code temporel 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é sur l'UDM. | |
décroiss. | read_only_udm.security_result.description | Description extraite du message de journal |
descrip | Description extraite du champ desc , analysée pour les paires clé-valeur. Il n'est pas mappé sur l'UDM. |
|
description | read_only_udm.security_result.description | Si le champ existe dans le journal, il est mappé sur 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 d'événement extrait du message de journal |
nom d'hôte | read_only_udm.principal.hostname, read_only_udm.principal.asset.hostname | Nom d'hôte extrait du message de journal et mappé sur le nom d'hôte principal et le 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é sur une 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é sur le PID du processus principal. |
programme | Informations sur le programme extraites du message de journal, analysées pour extraire le module, la gravité et l'action. Il n'est pas mappé sur 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é sur le 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é sur l'adresse IP principale et l'adresse IP de l'élément 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 / . Il est mappé sur les niveaux de gravité UDM et stocké sous forme de détails bruts sur la 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 sur 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 et à l'adresse IP de l'élément 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 sur l'adresse IP de l'élément cible |
timestamp | read_only_udm.metadata.event_timestamp.seconds | Code temporel extrait du message de journal et converti en code temporel d'événement |
timestamp.seconds | read_only_udm.metadata.event_timestamp.seconds | Partie secondes du code temporel 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 vrai. - 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éfinissez-le sur MACHINE si event_type est USER_LOGOUT ou USER_LOGIN . |
Modifications
2024-03-04
Amélioration :
- Ajout d'un modèle Grok pour analyser les journaux non analysés.
- Si
severity
est égal àDHCP
,DHCP
est mappé surnetwork.application_protocol
. - Mappage de
severity
sursecurity_result.severity_details
. - Mappage de
prin_port
surprincipal.port
. - Mappage de
pid
surprincipal.process.pid
. - Mappage de
descript
surmetadata.description
. - Mappage de
inter_ip
surintermediary.ip
. - Mappage de
remote_ip_address
surprincipal.ip
. - Mappage de
username
surprincipal.user.userid
. status
,config_method
,event_id
etnotice_type
ont été mappés suradditional.fields
.
2023-09-24
Amélioration :
- Ajout d'un format Grok pour analyser les journaux non analysés.
- Mappage de
target_mac
surtarget.mac
. - Mappage de
msg
surmetadata.description
. - Mappage de
src_mac
surprincipal.mac
. - Mappage de
severity
sursecurity_result.severity
.
2023-07-24
Amélioration :
- Ajout d'un modèle Grok pour analyser et mapper les journaux non analysés.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.