Collecter les journaux Delinea Secret Server
Ce document explique comment collecter les journaux Delinea (anciennement Thycotic) Secret Server. L'analyseur transforme les journaux bruts en un format structuré conforme à l'UDM Google Security Operations. Il extrait d'abord les champs clés tels que les codes temporels, les types d'événements et les informations sur les utilisateurs, 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. Il enrichit ainsi les données pour l'analyse 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 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é à 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 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 ce guide d'installation.
Configurer l'agent Bindplane pour ingérer les journaux Syslog et les 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 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 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é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 d'administrateur.
- Accédez à Admin > Configuration.
- Cliquez sur Modifier.
- Cochez la case 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 votre configuration 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 utilisateur" dans le champ "msg" du journal brut. |
ID du conteneur | event1.idm.read_only_udm.principal.asset.asset_id | La valeur est extraite du champ "Container Id" (ID du conteneur) dans le champ "msg" du journal brut et est précédée de "container_id:". |
Nom du conteneur | event1.idm.read_only_udm.principal.resource.name | La valeur est extraite du champ "Nom du conteneur" dans le champ "msg" du journal brut. |
cs2 | event1.idm.read_only_udm.additional.fields[].value.string_value | La valeur est extraite du champ "cs2" dans le champ "msg" du journal brut. |
cs3 | event1.idm.read_only_udm.target.file.full_path | La valeur est extraite du champ "cs3" dans le champ "msg" du journal brut. |
cs4 | event1.idm.read_only_udm.principal.user.user_display_name | La valeur est extraite du champ "cs4" dans le 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" dans le champ "msg" du journal brut. |
fname | event1.idm.read_only_udm.target.file.full_path | La valeur est extraite du champ "fname" dans le 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" dans le champ "msg" du journal brut. |
Nom de l'élément | event1.idm.read_only_udm.target.user.userid | La valeur est extraite du champ "Nom de l'article" dans le 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 "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" s'il est présent, sinon 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 lui-même extrait du journal brut à l'aide d'un modèle 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 "tcp". | |
event1.idm.read_only_udm.observer.application | La valeur est extraite du champ "agent.type" si elle est présente, 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é avec le champ "agent.id". | |
event1.idm.read_only_udm.observer.hostname | La valeur est extraite du champ "agent.hostname" si elle est présente, sinon 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" (si présent), sinon du champ "host.hostname". | |
event1.idm.read_only_udm.principal.asset.ip | La valeur est extraite du champ "src" s'il est présent, sinon du champ "src_ip". | |
event1.idm.read_only_udm.principal.hostname | La valeur est extraite du champ "host.hostname" s'il est présent, sinon du champ "server". | |
event1.idm.read_only_udm.principal.ip | La valeur est extraite du champ "src" s'il est présent, sinon du champ "src_ip" ou du champ "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 lui-même 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" dans le champ "msg" du journal brut. | |
event1.idm.read_only_udm.principal.user.userid | La valeur est extraite du champ "suser" dans le champ "msg" du journal brut, ou du champ "By User" si "thycotic_event" est défini sur "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
event1.idm.read_only_udm.security_result.action | La valeur est extraite du champ "Action" dans le champ "msg" du journal brut. Elle peut également être définie 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 défini sur "System Log", 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" dans le champ "msg" du journal brut, ou du champ "Item Name" si "thycotic_event" est défini sur "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" ou "USER - EDIT". | |
events.timestamp.seconds | La valeur est dérivée du champ "rt" s'il est présent, sinon 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 est utilisée pour définir le code temporel 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" dans le 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 lui-même extrait du champ "log.source.address" à l'aide d'un modèle Grok. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.