Collecter les journaux de l'accès à distance sécurisé BeyondTrust

Compatible avec:

Ce document explique comment collecter les journaux de BeyondTrust Secure Remote Access à l'aide de Bindplane. L'analyseur gère deux formats syslog. Le premier format utilise des paires clé-valeur dans un message structuré, tandis que le second utilise des champs délimités par une barre oblique. L'analyseur extrait les champs pertinents des deux formats et les met en correspondance avec l'UDM. Il effectue également une catégorisation des types d'événements en fonction des mots clés extraits et gère une logique spécifique pour les événements de connexion/déconnexion et les types d'authentification.

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é à un accès à distance sécurisé BeyondTrust.

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. 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

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec des droits root ou sudo.
  2. 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

Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à Google SecOps

  1. Accédez au fichier de configuration:

    1. 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.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (nano, vi ou Bloc-notes, par exemple).
  2. 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: BEYONDTRUST_REMOTE_ACCESS
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.

  4. Remplacez <customer_id> par le numéro client réel.

  5. 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 l'assistance à distance BeyondTrust

  1. Connectez-vous à l'interface utilisateur Web de BeyondTrust.
  2. Sélectionnez Appliance > Security > Appliance administration (Appareil > Sécurité > Administration de l'appli).
  3. Dans la section Syslog, procédez comme suit :
    • Format du message: sélectionnez Ancien format BSD.
    • Serveur syslog distant: saisissez l'adresse IP et le port de Bindplane.
  4. Cliquez sur Envoyer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
datetime metadata.event_timestamp L'horodatage est extrait du champ datetime au format RFC 3339 si le champ when n'est pas présent.
deviceHost target.hostname La valeur de deviceHost est mappée directement sur target.hostname.
dstHost target.ip La valeur de dstHost est mappée directement sur target.ip après avoir été validée en tant qu'adresse IP valide.
dstPriv additional.fields.[key=dstPriv].value.string_value La valeur de dstPriv est placée dans le champ additional avec la clé dstPriv.
dstUid target.user.userid La valeur de dstUid est mappée directement sur target.user.userid.
dstUser target.user.user_display_name La valeur de dstUser est mappée directement sur target.user.user_display_name.
eventName metadata.event_type Si eventName est login (sans distinction entre majuscules et minuscules), metadata.event_type est défini sur USER_LOGIN. Si eventName est logout (sans distinction entre majuscules et minuscules), metadata.event_type est défini sur USER_LOGOUT. Sinon, si eventName n'est pas vide, metadata.event_type est défini sur USER_UNCATEGORIZED. Si eventName est vide et que le message correspond au deuxième modèle Grok, metadata.event_type est défini sur GENERIC_EVENT. Si eventName est vide et que le message correspond au premier format Grok, metadata.event_type est défini sur GENERIC_EVENT. Si srcUid, userid ou who ne sont pas vides, metadata.event_type est défini sur USER_CHANGE_PERMISSIONS. Si deviceHost ou site ne sont pas vides, metadata.event_type est défini sur USER_UNCATEGORIZED. Sinon, metadata.event_type est défini sur GENERIC_EVENT.
event_name additional.fields.[key=event_name].value.string_value La valeur de event_name est placée dans le champ additional avec la clé event_name.
event_name metadata.product_event_type La valeur de event_name est utilisée avec le champ id pour renseigner metadata.product_event_type au format [id] -nom_événement``.
externalKeyLabel additional.fields.[key=externalKeyLabel].value.string_value La valeur de externalKeyLabel est placée dans le champ additional avec la clé externalKeyLabel.
id metadata.product_event_type La valeur de id est utilisée avec le champ event_name pour renseigner metadata.product_event_type au format [id] -nom_événement``.
jumpGroupId additional.fields.[key=jumpGroupId].value.string_value La valeur de jumpGroupId est placée dans le champ additional avec la clé jumpGroupId.
jumpGroupName additional.fields.[key=jumpGroupName].value.string_value La valeur de jumpGroupName est placée dans le champ additional avec la clé jumpGroupName.
jumpGroupType additional.fields.[key=jumpGroupType].value.string_value La valeur de jumpGroupType est placée dans le champ additional avec la clé jumpGroupType.
jumpointId additional.fields.[key=jumpointId].value.string_value La valeur de jumpointId est placée dans le champ additional avec la clé jumpointId.
jumpointName additional.fields.[key=jumpointName].value.string_value La valeur de jumpointName est placée dans le champ additional avec la clé jumpointName.
kv_data Divers champs UDM Le champ kv_data est analysé en paires clé-valeur, qui sont ensuite mappées sur différents champs UDM en fonction de leurs clés (par exemple, eventName, when, who, who_ip, site, target, status, reason).
kvdata Divers champs UDM Le champ kvdata est analysé en paires clé-valeur, qui sont ensuite mappées sur différents champs UDM en fonction de leurs clés (par exemple, msg, srcUser, srcUid, srcHost, dstUser, dstUid, dstHost, sessionId, jumpointId, jumpointName, jumpGroupId, jumpGroupName, jumpGroupType, externalKeyLabel, dstPriv).
message Divers champs UDM Le champ message est analysé à l'aide de modèles Grok pour extraire différents champs, qui sont ensuite mappés sur des champs UDM.
msg metadata.description La valeur de msg est mappée directement sur metadata.description.
product_event_type metadata.product_event_type La valeur de product_event_type est mappée directement sur metadata.product_event_type.
product_log_id metadata.product_log_id La valeur de product_log_id est mappée directement sur metadata.product_log_id.
process_id principal.process.pid La valeur de process_id est mappée directement sur principal.process.pid.
reason security_result.description La valeur de reason est mappée directement sur security_result.description.
segment_number additional.fields.[key=segment_number].value.string_value La valeur de segment_number est placée dans le champ additional avec la clé segment_number.
sessionId network.session_id La valeur de sessionId est mappée directement sur network.session_id.
site target.hostname La valeur de site est mappée directement sur target.hostname.
site_id additional.fields.[key=site_id].value.string_value La valeur de site_id est placée dans le champ additional avec la clé site_id.
srcHost principal.ip La valeur de srcHost est mappée directement sur principal.ip après avoir été validée en tant qu'adresse IP valide.
srcUid principal.user.userid La valeur de srcUid est mappée directement sur principal.user.userid.
srcUser principal.user.user_display_name La valeur de srcUser est mappée directement sur principal.user.user_display_name.
status security_result.action Si status est failure (sans distinction entre majuscules et minuscules), security_result.action est défini sur BLOCK. Sinon, security_result.action est défini sur ALLOW.
status security_result.action_details La valeur de status est mappée directement sur security_result.action_details.
target target.application La valeur de target est mappée directement sur target.application. rep_client est remplacé par Representative Console et web/login par Web/Login.
target extensions.auth.type Si target est rep_client, extensions.auth.type est défini sur MACHINE. Si target est web/login, extensions.auth.type est défini sur SSO. Sinon, extensions.auth.type est défini sur AUTHTYPE_UNSPECIFIED.
timestamp metadata.event_timestamp L'timestamp du journal brut est utilisé en remplacement si ni datetime, ni when ne sont présents.
total_segments additional.fields.[key=total_segments].value.string_value La valeur de total_segments est placée dans le champ additional avec la clé total_segments.
device_product additional.fields.[key=device_product].value.string_value La valeur de device_product est placée dans le champ additional avec la clé device_product.
device_vendor additional.fields.[key=device_vendor].value.string_value La valeur de device_vendor est placée dans le champ additional avec la clé device_vendor.
device_version metadata.product_version La valeur de device_version est mappée directement sur metadata.product_version.
when metadata.event_timestamp Le code temporel est extrait du champ when au format UNIX, le cas échéant.
who principal.user.userid Si le champ who correspond au modèle d'expression régulière, le userid extrait est mappé sur principal.user.userid. Sinon, l'ensemble du champ who est mappé sur principal.user.userid.
who principal.user.user_display_name Si le champ who correspond au modèle d'expression régulière, le user_display_name extrait est mappé sur principal.user.user_display_name.
who_ip principal.ip La valeur de who_ip est mappée directement sur principal.ip.
(Logique de l'analyseur) metadata.log_type Le type de journal est défini sur BEYONDTRUST_REMOTE_ACCESS.
(Logique de l'analyseur) metadata.product_name Le nom du produit est défini sur BeyondTrust Secure Remote Access.
(Logique de l'analyseur) metadata.vendor_name Le nom du fournisseur est défini sur BeyondTrust.
(Logique de l'analyseur) security_result.summary La valeur est dérivée à l'aide du format User %{eventName}.
(Logique de l'analyseur) extensions.auth.mechanism Si method contient using password, le mécanisme est défini sur USERNAME_PASSWORD. Si method contient using elevate, le mécanisme est défini sur REMOTE.

Modifications

2022-09-30

Amélioration :

  • J'ai écrit grok pour analyser les journaux système non analysés.
  • Mappage de device_vendor sur additional.fields.
  • Mappage de event_name sur additional.fields.
  • Mappage de device_product sur additional.fields.
  • Mappage de externalKeyLabel sur additional.fields.
  • Mappage de dstPriv sur additional.fields.
  • Mappage de filePath sur target.file.full_path.
  • Mappage de fsize sur target.file.size.

2022-07-14

  • Analyseur nouvellement créé.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.