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,viou le Bloc-notes).
- Recherchez 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: 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_labelsRemplacez 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.jsonen 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-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 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 brActivez le mode configuration sur le commutateur à l'aide de la commande suivante :
console# conf tConfigurez 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.