Collecter les journaux du serveur de secrets Delinea
Ce document explique comment collecter les journaux Secret Server de Delinea (anciennement Thycotic). L'analyseur transforme les journaux bruts en un format structuré conforme à l'UDM Google Security Operations. Il commence par extraire des champs clés tels que les codes temporels, les types d'événements et les informations utilisateur, puis utilise une logique conditionnelle basée sur le type d'événement spécifique pour mapper les données dans les champs UDM appropriés, ce qui enrichit les données à analyser dans Google SecOps.
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 l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
- Assurez-vous de disposer d'un accès privilégié à Delinea.
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 l'agent 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 ce 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 with your specific IP and port listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Path to the ingestion authentication file creds: '/path/to/your/ingestion-auth.json' # Your Chronicle customer ID customer_id: 'your_customer_id' endpoint: malachiteingestion-pa.googleapis.com ingestion_labels: log_type: SYSLOG namespace: thycotic 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émarrer 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 Delinea Secret Server pour envoyer des journaux à l'aide de Syslog
- Connectez-vous à Delinea Secret Server avec des identifiants administrateur.
- Accédez à Administration > Configuration.
- Cliquez sur Modifier.
- Cochez la case Enable Syslog/CEF logging (Activer la journalisation Syslog/CEF) et spécifiez les informations suivantes :
- Serveur syslog/CEF: saisissez l'adresse IP de votre Bindplane.
- Protocole Syslog/CEF: sélectionnez UDP ou TCP (selon la configuration de Bindplane).
- Port syslog/CEF: saisissez le numéro de port sur lequel Bindplane est configuré pour écouter.
- Cliquez sur Enregistrer.
Mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
Account_Domain | event1.idm.read_only_udm.principal.domain | La valeur est extraite du champ "Account_Domain" dans le champ "msg" du journal brut. |
Par utilisateur | event1.idm.read_only_udm.principal.user.userid | La valeur est extraite du champ "Par l'utilisateur" du champ "msg" du journal brut. |
ID du conteneur | event1.idm.read_only_udm.principal.asset.asset_id | La valeur est extraite du champ "ID du conteneur" du champ "msg" du journal brut et est précédée du préfixe "container_id:". |
Nom du conteneur | event1.idm.read_only_udm.principal.resource.name | La valeur est extraite du champ "Nom du conteneur" du champ "msg" du journal brut. |
cs2 | event1.idm.read_only_udm.additional.fields[].value.string_value | La valeur est extraite du champ "cs2" du champ "msg" du journal brut. |
cs3 | event1.idm.read_only_udm.target.file.full_path | La valeur est extraite du champ "cs3" du champ "msg" du journal brut. |
cs4 | event1.idm.read_only_udm.principal.user.user_display_name | La valeur est extraite du champ "cs4" du champ "msg" du journal brut. |
Détails | event1.idm.read_only_udm.additional.fields[].value.string_value | La valeur est extraite du champ "Détails" du champ "msg" du journal brut. |
fname | event1.idm.read_only_udm.target.file.full_path | La valeur est extraite du champ "fname" du champ "msg" du journal brut. |
Hôte | event1.idm.read_only_udm.principal.hostname, event1.idm.read_only_udm.principal.asset.hostname | La valeur est extraite du champ "Host" du champ "msg" du journal brut. |
Nom de l'élément | event1.idm.read_only_udm.target.user.userid | La valeur est extraite du champ "Item Name" (Nom de l'élément) du champ "msg" du journal brut. |
event1.idm.read_only_udm.additional.fields[].key | La valeur est codée en dur sur "fname". | |
event1.idm.read_only_udm.additional.fields[].key | La valeur est codée en dur sur "Group or User" (Groupe ou Utilisateur). | |
event1.idm.read_only_udm.additional.fields[].key | La valeur est codée en dur sur "Détails". | |
event1.idm.read_only_udm.additional.fields[].key | La valeur est codée en dur sur "type_id". | |
event1.idm.read_only_udm.extensions.auth.type | La valeur est codée en dur sur "MACHINE". | |
event1.idm.read_only_udm.metadata.description | La valeur est extraite du champ "thycotic_event", qui est extrait du journal brut à l'aide d'un modèle Grok. | |
event1.idm.read_only_udm.metadata.event_timestamp.seconds | La valeur est dérivée du champ "rt", le cas échéant, ou du champ "ts". Les deux champs sont extraits du journal brut à l'aide de modèles Grok. | |
event1.idm.read_only_udm.metadata.event_type | La valeur est déterminée en fonction du champ "thycotic_event" et d'autres conditions. Par exemple, si "thycotic_event" est "USER - LOGIN", le type d'événement est défini sur "USER_LOGIN". | |
event1.idm.read_only_udm.metadata.log_type | La valeur est codée en dur sur "THYCOTIC". | |
event1.idm.read_only_udm.metadata.product_event_type | La valeur est extraite du champ "thycotic_event", qui est extrait du journal brut à l'aide d'un modèle Grok. | |
event1.idm.read_only_udm.metadata.product_log_id | La valeur est extraite du champ "action_id", qui est extrait du journal brut à l'aide d'un format grok. | |
event1.idm.read_only_udm.metadata.product_name | La valeur est extraite du champ "device_product", qui est extrait du journal brut à l'aide d'un modèle Grok. Si le champ est vide, la valeur est codée en dur sur "Secret Server". | |
event1.idm.read_only_udm.metadata.product_version | La valeur est extraite du champ "device_version", qui est extrait du journal brut à l'aide d'un modèle Grok. | |
event1.idm.read_only_udm.metadata.vendor_name | La valeur est codée en dur sur "Thycotic". | |
event1.idm.read_only_udm.network.ip_protocol | La valeur est définie sur "TCP" si le champ "input.type" est défini sur "tcp". | |
event1.idm.read_only_udm.observer.application | La valeur est extraite du champ "agent.type", le cas échéant. Sinon, elle est codée en dur sur "Secret Server". | |
event1.idm.read_only_udm.observer.asset_id | La valeur est définie sur "Agent ID:" concaténée avec le champ "agent.id". | |
event1.idm.read_only_udm.observer.hostname | La valeur est extraite du champ "agent.hostname", le cas échéant, ou du champ "server". | |
event1.idm.read_only_udm.observer.platform_version | La valeur est extraite du champ "agent.version". | |
event1.idm.read_only_udm.observer.user.userid | La valeur est extraite du champ "agent.name". | |
event1.idm.read_only_udm.principal.asset.asset_id | La valeur est définie sur "ID:" concaténé avec le champ "host.id". | |
event1.idm.read_only_udm.principal.asset.hardware.cpu_platform | La valeur est extraite du champ "host.architecture". | |
event1.idm.read_only_udm.principal.asset.hostname | La valeur est extraite du champ "server", le cas échéant, ou du champ "host.hostname". | |
event1.idm.read_only_udm.principal.asset.ip | La valeur est extraite du champ "src", le cas échéant, ou du champ "src_ip". | |
event1.idm.read_only_udm.principal.hostname | La valeur est extraite du champ "host.hostname", le cas échéant, ou du champ "server". | |
event1.idm.read_only_udm.principal.ip | La valeur est extraite du champ "src", le cas échéant, ou du champ "src_ip" ou "host.ip". | |
event1.idm.read_only_udm.principal.mac | La valeur est extraite du champ "host.mac". | |
event1.idm.read_only_udm.principal.platform | La valeur est définie sur "LINUX" si le champ "host_os_platform" est "centos", sinon elle est définie sur la valeur en majuscules du champ "host_os_platform". | |
event1.idm.read_only_udm.principal.platform_patch_level | La valeur est extraite du champ "host.os.kernel". | |
event1.idm.read_only_udm.principal.platform_version | La valeur est extraite du champ "host.os.version". | |
event1.idm.read_only_udm.principal.port | La valeur est extraite du champ "src_port", qui est extrait du champ "log.source.address" à l'aide d'un modèle Grok. | |
event1.idm.read_only_udm.principal.user.user_display_name | La valeur est extraite du champ "cs4" du champ "msg" du journal brut. | |
event1.idm.read_only_udm.principal.user.userid | La valeur est extraite du champ "suser" du champ "msg" du journal brut, ou du champ "Par l'utilisateur" si "thycotic_event" est "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
event1.idm.read_only_udm.security_result.action | La valeur est extraite du champ "Action" du champ "msg" du journal brut. Il peut également être défini sur "ALLOW" ou "BLOCK" en fonction de la valeur de "thycotic_event". | |
event1.idm.read_only_udm.security_result.description | La valeur est extraite du champ "temp_message", qui contient la partie restante du champ "msg" après l'extraction d'autres champs. | |
event1.idm.read_only_udm.security_result.severity | La valeur est déterminée en fonction du champ "syslog_severity". Par exemple, si "syslog_severity" contient "error" ou "warning", la gravité est définie sur "HIGH". Si "thycotic_event" est "Journal système", la gravité est définie sur "INFORMATIONAL". | |
event1.idm.read_only_udm.security_result.severity_details | La valeur est extraite du champ "syslog_severity". | |
event1.idm.read_only_udm.target.file.full_path | La valeur est construite en concaténant les champs "cs3" et "fname" avec un séparateur "/" si les deux champs sont présents. Si un seul champ est présent, la valeur est extraite de ce champ. | |
event1.idm.read_only_udm.target.resource.product_object_id | La valeur est extraite du champ "type_id". | |
event1.idm.read_only_udm.target.user.userid | La valeur est extraite du champ "item_name" du champ "msg" du journal brut, ou du champ "Item Name" si "thycotic_event" est "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
events.timestamp.seconds | La valeur est dérivée du champ "rt", le cas échéant, ou du champ "ts". Les deux champs sont extraits du journal brut à l'aide de modèles Grok. | |
rt | event1.idm.read_only_udm.metadata.event_timestamp.seconds | La valeur est extraite du champ "rt" du champ "msg" du journal brut et permet de définir l'horodatage de l'événement. |
src | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | La valeur est extraite du champ "src" du champ "msg" du journal brut. |
src_ip | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | La valeur est extraite du champ "src_ip", qui est extrait du champ "log.source.address" à l'aide d'un format grok. |
Modifications
2024-06-04
- Amélioration de l'analyse des journaux non analysés.
- Les champs "Host" (Hôte) et "server" (Serveur) ont été mappés sur les champs UDM associés au nom d'hôte.
- Mappage de "Container_Id" et "Container_name" sur les champs UDM liés aux noms d'éléments et de ressources.
2023-09-22
- Ajustement de la logique d'analyse pour mieux gérer les journaux non analysés.
- Ajout de la gestion des erreurs pour les champs "rt" et "ts".
2023-06-12
- Mise à jour de la logique d'analyse pour prendre en charge un nouveau format de journal.
- Mappage des champs "fname", "cs2" et "details" sur les champs UDM pour obtenir des informations supplémentaires et un résumé des résultats de sécurité.
2022-08-01
- Prise en charge de l'analyse des journaux au format JSON.
- Nous avons mappé de nombreux champs des journaux JSON sur leurs champs UDM correspondants, y compris les champs liés aux informations sur l'appareil et l'agent, les adresses IP, les détails de l'hôte, les informations sur la plate-forme et la gravité de la sécurité.
- Ajout de l'analyse des journaux de type "SECRET - SECRETPASSWORDCHANGEFAILURE".
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.