Collecter les journaux PAM CyberArk

Compatible avec:

Ce code d'analyseur extrait d'abord les champs des messages syslog du PAM (Privileged Access Manager) CyberArk à l'aide d'expressions régulières. Ensuite, il met en correspondance les champs extraits avec un modèle de données unifié (UDM), enrichit les données avec un contexte supplémentaire et standardise le type d'événement en fonction de critères spécifiques.

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.

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.

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 l'ID client dans la section Détails de l'organisation.

Installer l'agent BindPlane

  1. Pour l'installation sous Windows, exécutez le script suivant:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Pour l'installation Linux, exécutez le script suivant:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Pour en savoir plus sur les options d'installation, consultez ce guide d'installation.

Configurer l'agent BindPlane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez à la machine sur laquelle BindPlane est installé.
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        tcplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: Cyberark_PAM
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Redémarrez l'agent BindPlane pour appliquer les modifications:

    sudo systemctl restart bindplane
    

Configurer l'exportation Syslog pour CyberArk Vault

  1. Connectez-vous au serveur Vault.
  2. Ouvrez le fichier de configuration dbparm.ini, situé à l'emplacement C:\Program Files (x86)\CyberArk\Vault\Server\dbparm.ini.
  3. Ajoutez ou modifiez les paramètres suivants:

    SyslogServer=<syslog_server_ip>
    SyslogPort=<syslog_server_port>
    SyslogProtocol=<TCP or UDP>
    SyslogFormat=Syslog
    
  4. Enregistrez le fichier dbparm.ini.

  5. Redémarrez le serveur Vault:

    net stop CyberArkVault
    net start CyberArkVault
    

Configurer l'exportation Syslog dans PVWA

  1. Connectez-vous au serveur PVWA.
  2. Ouvrez le fichier Web.config, situé à l'emplacement suivant: C:\inetpub\wwwroot\PasswordVault\.
  3. Ajoutez ou modifiez les clés suivantes:

    <add key="SyslogServer" value="<syslog_server_ip>" />
    <add key="SyslogPort" value="<syslog_server_port>" />
    <add key="SyslogProtocol" value="<TCP or UDP>" />
    <add key="SyslogFormat" value="Syslog" />
    
  4. Enregistrez les modifications apportées au fichier Web.config.

  5. Redémarrez le service IIS:

    iisreset
    

Configurer l'exportation Syslog dans PTA

  1. Accédez au serveur PTA à l'aide de SSH.
  2. Ouvrez le fichier application.properties, situé à l'emplacement suivant: /opt/cta/config/application.properties.
  3. Ajoutez ou modifiez les lignes suivantes:

    syslog.server.ip=<syslog_server_ip>
    syslog.server.port=<syslog_server_port>
    syslog.protocol=<TCP or UDP>
    
  4. Enregistrez le fichier application.properties.

  5. Redémarrez le service PTA pour appliquer les modifications:

    sudo service pta restart
    

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
agir metadata.description Mappé directement à partir du champ act.
cn1 additional.fields.value.string_value Mappé directement à partir du champ cn1 lorsque cn1Label n'est pas vide.
cn1Label additional.fields.key Mappé directement à partir du champ cn1Label lorsque cn1 n'est pas vide.
cn2 additional.fields.value.string_value Mappé directement à partir du champ cn2 lorsque cn2Label n'est pas vide.
cn2Label additional.fields.key Mappage direct à partir du champ cn2Label lorsque cn2 n'est pas vide.
cs1 additional.fields.value.string_value Mappage direct à partir du champ cs1 lorsque cs1Label n'est pas vide.
cs1Label additional.fields.key Mappé directement à partir du champ cs1Label lorsque cs1 n'est pas vide.
cs2 additional.fields.value.string_value Mappé directement à partir du champ cs2 lorsque cs2Label n'est pas vide.
cs2Label additional.fields.key Mappage direct à partir du champ cs2Label lorsque cs2 n'est pas vide.
cs3 additional.fields.value.string_value Mappé directement à partir du champ cs3 lorsque cs3Label n'est pas vide.
cs3Label additional.fields.key Mappé directement à partir du champ cs3Label lorsque cs3 n'est pas vide.
cs4 additional.fields.value.string_value Mappé directement à partir du champ cs4 lorsque cs4Label n'est pas vide.
cs4Label additional.fields.key Mappé directement à partir du champ cs4Label lorsque cs4 n'est pas vide.
cs5 additional.fields.value.string_value Mappé directement à partir du champ cs5 lorsque cs5Label n'est pas vide.
cs5Label additional.fields.key Mappé directement à partir du champ cs5Label lorsque cs5 n'est pas vide.
dhost target.hostname Mappé à partir du champ dhost s'il ne s'agit pas d'une adresse IP. Si dhost est vide, il est mappé à partir de shost (adresse IP ou nom d'hôte).
dhost target.asset.hostname Mappé à partir du champ dhost s'il ne s'agit pas d'une adresse IP. Si dhost est vide, il est mappé à partir de shost (adresse IP ou nom d'hôte).
dhost target.ip Mappé à partir du champ dhost s'il s'agit d'une adresse IP.
dhost target.asset.ip Mappé à partir du champ dhost s'il s'agit d'une adresse IP.
duser target.user.userid Mappé directement à partir du champ duser.
dvc intermediary.ip Mappé à partir du champ dvc s'il s'agit d'une adresse IP.
externalId metadata.product_log_id Mappé directement à partir du champ externalId.
fname target.file.full_path Mappé directement à partir du champ fname.
nom metadata.event_type Permet de déterminer event_type en fonction de la combinaison des champs name, shost et dhost. Valeurs possibles: USER_CHANGE_PASSWORD, FILE_READ, USER_LOGIN, FILE_OPEN, FILE_DELETION. Si aucune correspondance n'est trouvée, et si has_principal est défini sur "true" et has_target sur "false", event_type est défini sur STATUS_UPDATE. Sinon, la valeur par défaut est GENERIC_EVENT.
prin_hostname principal.hostname Mappé directement à partir du champ prin_hostname. Si elle est vide, elle est mappée à partir de shost si shost n'est pas une adresse IP.
prin_hostname principal.asset.hostname Mappé directement à partir du champ prin_hostname. Si elle est vide, elle est mappée à partir de shost si shost n'est pas une adresse IP.
prin_ip principal.ip Mappé directement à partir du champ prin_ip. S'il est vide, il est mappé à partir de shost si shost est une adresse IP.
prin_ip principal.asset.ip Mappé directement à partir du champ prin_ip. S'il est vide, il est mappé à partir de shost si shost est une adresse IP.
produit metadata.product_name Mappé directement à partir du champ product. La valeur par défaut est "PAM" si elle n'est pas présente dans le journal.
reason security_result.description Mappé directement à partir du champ reason.
de gravité, security_result.severity Mappé à partir du champ severity selon la logique suivante: 1 à 3: INFORMATIONAL, 4: ERROR, 5: CRITICAL.
shost principal.hostname Mappé sur prin_hostname si prin_hostname est vide et que shost n'est pas une adresse IP.
shost principal.asset.hostname Mappé sur prin_hostname si prin_hostname est vide et que shost n'est pas une adresse IP.
shost principal.ip Mappé sur prin_ip si prin_ip est vide et que shost est une adresse IP.
shost principal.asset.ip Mappé sur prin_ip si prin_ip est vide et que shost est une adresse IP.
shost target.hostname Mappé sur target.hostname si dhost est vide et que shost n'est pas une adresse IP.
shost target.asset.hostname Mappé sur target.hostname si dhost est vide et que shost n'est pas une adresse IP.
shost target.ip Mappé sur target.ip si dhost est vide et que shost est une adresse IP.
shost target.asset.ip Mappé sur target.ip si dhost est vide et que shost est une adresse IP.
état additional.fields.value.string_value Mappé directement à partir du champ status.
suser principal.user.userid Mappé à partir du champ suser. Si duser est vide, il est considéré comme l'ID utilisateur cible.
temps metadata.event_timestamp.seconds Mappé directement à partir du champ time après conversion au format code temporel.
temps metadata.event_timestamp.nanos Mappé directement à partir du champ time après conversion au format code temporel.
vendor metadata.vendor_name Mappé directement à partir du champ vendor. La valeur par défaut est "CYBERARK" si elle n'est pas présente dans le journal.
version metadata.product_version Mappé directement à partir du champ version.
metadata.log_type Codé en dur sur "CYBERARK_PAM".
extensions.auth.mechanism Définissez-le sur "USERNAME_PASSWORD" si event_type est "USER_LOGIN".

Modifications

2024-05-05

  • Analyseur nouvellement créé.