Collecter les journaux ManageEngine ADManager Plus

Compatible avec :

Ce document explique comment ingérer des journaux ManageEngine ADManager Plus dans Google Security Operations à l'aide de l'agent Bindplane.

ManageEngine ADManager Plus est une solution Web qui simplifie la gestion d'Active Directory, y compris la création et la modification d'utilisateurs, la sécurité basée sur les rôles et les rapports détaillés. L'intégration d'ADManager Plus aux serveurs Splunk et Syslog permet aux entreprises de transférer les journaux de toutes les actions de gestion Active Directory, Microsoft 365 et Google Workspace effectuées dans ADManager Plus.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure, ou hôte Linux avec systemd
  • Connectivité réseau entre l'agent Bindplane et ManageEngine ADManager Plus
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
  • Accès privilégié à la console de gestion ManageEngine ADManager Plus

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. Cliquez sur Télécharger pour télécharger le fichier d'authentification pour l'ingestion.
  4. 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

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

Installer l'agent Bindplane

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

Installation de fenêtres

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

    msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

Le service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

Le service doit être indiqué comme actif (en cours d'exécution).

Autres ressources d'installation

Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Linux :

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows :

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  1. Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/admanager_plus:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: ADMANAGER_PLUS
        raw_log_field: body
        ingestion_labels:
          log_source: admanager_plus
    
    service:
      pipelines:
        logs/admanager_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/admanager_plus
    
  2. Remplacez les espaces réservés suivants :

    • Configuration du récepteur :

      • Le récepteur utilise tcplog pour recevoir les données syslog sur le port TCP 514.
      • listen_address : défini sur 0.0.0.0:514 pour écouter sur toutes les interfaces sur le port 514.
    • Configuration de l'exportateur :

      • <CREDS_FILE_PATH> : chemin d'accès complet au fichier d'authentification de l'ingestion :
        • Linux : /opt/observiq-otel-collector/ingestion-auth.json
        • Windows : C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
      • <CUSTOMER_ID> : ID client de l'étape précédente.
      • endpoint : URL du point de terminaison régional :
        • États-Unis : malachiteingestion-pa.googleapis.com
        • Europe : europe-malachiteingestion-pa.googleapis.com
        • Asie : asia-southeast1-malachiteingestion-pa.googleapis.com
        • Pour obtenir la liste complète, consultez Points de terminaison régionaux.
      • log_type : définissez cette valeur sur ADMANAGER_PLUS exactement telle qu'elle apparaît dans Chronicle.
      • ingestion_labels : libellés facultatifs au format YAML.

Enregistrez le fichier de configuration.

Après avoir modifié le fichier, enregistrez-le :

  • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
  • Windows : cliquez sur Fichier > Enregistrer.

Redémarrez l'agent Bindplane pour appliquer les modifications.

Linux

  1. Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :

    sudo systemctl restart observiq-otel-collector
    
  2. Vérifiez que le service est en cours d'exécution :

    sudo systemctl status observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    sudo journalctl -u observiq-otel-collector -f
    

Windows

  1. Pour redémarrer l'agent Bindplane dans Windows, choisissez l'une des options suivantes :

    • À l'aide de l'invite de commandes ou de PowerShell en tant qu'administrateur :

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Utiliser la console Services :

      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Recherchez observIQ Distro for OpenTelemetry Collector.
      3. Effectuez un clic droit, puis sélectionnez Redémarrer.
  2. Vérifiez que le service est en cours d'exécution :

    sc query observiq-otel-collector
    
  3. Recherchez les erreurs dans les journaux :

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Configurer le transfert syslog ManageEngine ADManager Plus

  1. Connectez-vous à ADManager Plus.
  2. Accédez à l'onglet Admin.
  3. Sous Paramètres système, cliquez sur Intégrations.
  4. Sous Transfert de journaux, cliquez sur Syslog.

  5. Configurez les champs suivants :

    • Serveur Syslog : saisissez le nom du serveur Syslog. Saisissez l'adresse IP ou le nom d'hôte de l'hôte de l'agent Bindplane.
    • Port : saisissez le numéro de port. Saisissez 514.
    • Protocole : choisissez le protocole approprié (TCP ou UDP) pour transférer les journaux. Sélectionnez TCP.
    • Norme Syslog : sélectionnez le format de message syslog souhaité (RFC 3164, RFC 5424 ou RawLog). Sélectionnez RFC 5424 (recommandé).
    • Format de données : saisissez le format de données. Configurez le format de données selon les besoins de votre environnement.
  6. Cliquez sur Enregistrer pour enregistrer la configuration.

Une fois la configuration effectuée, ADManager Plus commence à transférer les journaux des actions de gestion à l'agent BindPlane, qui les envoie ensuite à Google SecOps.

Table de mappage UDM

Champ de journal Mappage UDM Logique
ipPhone event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "ipPhone" et la valeur de ipPhone si ipPhone != ""
l event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "l" et la valeur de l si l != ""
lockoutTime event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "lockoutTime" et la valeur de lockoutTime si lockoutTime != ""
Déplacer depuis event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "Move From" et la valeur de Move_From si Move_From != ""
Déplacer vers event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "Move To" et la valeur de Move_To si Move_To != ""
msg event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "member" et la valeur du message si msg != ""
sn event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "sn" et la valeur de sn si sn != ""
st event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "st" et la valeur de st si st != ""
Nom du modèle event.idm.read_only_udm.additional.fields Fusionné en tant que libellé avec la clé "Nom du modèle" et la valeur de Template_Name si Template_Name != ""
État event.idm.read_only_udm.metadata.description Valeur extraite de l'état si l'état est différent de ""
heure event.idm.read_only_udm.metadata.event_timestamp Converti du format heure au format code temporel si l'heure est différente de ""
event.idm.read_only_udm.metadata.event_type Dérivé : si has_principal_user == "true", alors "USER_UNCATEGORIZED" ; sinon, si has_principal == "true", alors "STATUS_UPDATE" ; sinon, "GENERIC_EVENT"
TechnicianName event.idm.read_only_udm.metadata.product_event_type Valeur extraite de TechnicianName si TechnicianName != ""
event.idm.read_only_udm.metadata.product_name Définissez-le sur "ADMANAGER_PLUS".
event.idm.read_only_udm.metadata.vendor_name Définissez-le sur "ADMANAGER_PLUS".
Nom de domaine event.idm.read_only_udm.principal.administrative_domain Valeur extraite de Domain_Name si Domain_Name != ""
nom d'hôte event.idm.read_only_udm.principal.asset.hostname Valeur extraite du nom d'hôte si le nom d'hôte est différent de ""
mail event.idm.read_only_udm.principal.email Valeur extraite de l'e-mail si l'e-mail est différent de ""
nom d'hôte event.idm.read_only_udm.principal.hostname Valeur extraite du nom d'hôte si le nom d'hôte est différent de ""
co event.idm.read_only_udm.principal.location.city Valeur extraite de co si co != ""
Tâche event.idm.read_only_udm.principal.resource.name Valeur extraite de la tâche si la tâche est différente de ""
wWWHomePage event.idm.read_only_udm.principal.url Valeur extraite de wWWHomePage si wWWHomePage != ""
Type de mot de passe event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "Password Type" et la valeur de Password_Type si Password_Type != ""
Code de pays event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "countryCode" et la valeur de countryCode si countryCode != ""
mot de passe event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "password" et la valeur du mot de passe si le mot de passe est différent de ""
postalCode event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "postalCode" et la valeur de postalCode si postalCode != ""
primaryGroupID event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "primaryGroupID" et la valeur de primaryGroupID si primaryGroupID != ""
userAccountControl event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "userAccountControl" et la valeur de userAccountControl si userAccountControl != ""
userPrincipalName event.idm.read_only_udm.principal.user.attribute.labels Fusionné en tant que libellé avec la clé "userPrincipalName" et la valeur de userPrincipalName si userPrincipalName != ""
company event.idm.read_only_udm.principal.user.company_name Valeur extraite de l'entreprise si l'entreprise != ""
department event.idm.read_only_udm.principal.user.department Fusionné avec le service si le service est différent de ""
givenName event.idm.read_only_udm.principal.user.first_name Valeur extraite de givenName si givenName != ""
physicalDeliveryOfficeName event.idm.read_only_udm.principal.user.office_address.name Valeur extraite de physicalDeliveryOfficeName si physicalDeliveryOfficeName != ""
streetAddress event.idm.read_only_udm.principal.user.personal_address.name Valeur extraite de streetAddress si streetAddress != ""
homePhone event.idm.read_only_udm.principal.user.phone_numbers Fusionné avec homePhone si homePhone != ""
Nom d'utilisateur event.idm.read_only_udm.principal.user.user_display_name Valeur extraite de User_Name si User_Name != "", sinon de Object_Name si Object_Name != ""
sAMAccountName event.idm.read_only_udm.principal.user.userid Valeur extraite de sAMAccountName si sAMAccountName != ""
ACTION event.idm.read_only_udm.security_result.action_details Valeur extraite de ACTION si ACTION != ""
description event.idm.read_only_udm.security_result.description Valeur extraite de la description si la description est différente de ""
Nom du conteneur event.idm.read_only_udm.security_result.detection_fields Dérivé de grok container_Name : fusionné en tant que libellé avec la clé "Container_Name_DC_value1" et la valeur de dc_label_1 si dc_label_1 != ""
Nom du conteneur event.idm.read_only_udm.security_result.detection_fields Dérivé de grok container_Name : fusionné en tant que libellé avec la clé "Container_Name_DC_value2" et la valeur de dc_label_2 si dc_label_2 != ""
Nom du conteneur event.idm.read_only_udm.security_result.detection_fields Dérivé de grok container_Name : fusionné en tant que libellé avec la clé "Container_Name_OU_value1" et la valeur de ou_label_1 si ou_label_1 != ""
Nom du conteneur event.idm.read_only_udm.security_result.detection_fields Dérivé de grok container_Name : fusionné en tant que libellé avec la clé "Container_Name_OU_value2" et la valeur de ou_label_2 si ou_label_2 != ""
Nom du conteneur event.idm.read_only_udm.security_result.detection_fields Dérivé de grok container_Name : fusionné en tant que libellé avec la clé "Container_Name_OU_value3" et la valeur de ou_label_3 si ou_label_3 != ""
Groupe principal event.idm.read_only_udm.security_result.detection_fields Dérivé du grok Primary_Group : fusionné en tant que libellé avec la clé "Primary_Group_CN_value1" et la valeur de cn_label_1 si cn_label_1 != ""
Groupe principal event.idm.read_only_udm.security_result.detection_fields Dérivé du grok Primary_Group : fusionné en tant que libellé avec la clé "Primary_Group_CN_value2" et la valeur de cn_label_2 si cn_label_2 != ""
Groupe principal event.idm.read_only_udm.security_result.detection_fields Dérivé du grok Primary_Group : fusionné en tant que libellé avec la clé "Primary_Group_DC_value1" et la valeur de primary_dc_label_1 si primary_dc_label_1 != ""
Groupe principal event.idm.read_only_udm.security_result.detection_fields Dérivé du grok Primary_Group : fusionné en tant que libellé avec la clé "Primary_Group_DC_value2" et la valeur de primary_dc_label_2 si primary_dc_label_2 != ""
accountExpires event.idm.read_only_udm.security_result.detection_fields Fusionné en tant que libellé avec la clé "accountExpires" et la valeur de "accountExpires" si "accountExpires" != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension du responsable : fusionné en tant que libellé avec la clé "manager_cn_value1" et la valeur de manager_cn_value1 si manager_cn_value1 != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension du responsable : fusionné en tant que libellé avec la clé "manager_dc_value1" et la valeur de manager_dc_value1 si manager_dc_value1 != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension du compte administrateur : fusionné en tant que libellé avec la clé "manager_dc_value2" et la valeur de manager_dc_value2 si manager_dc_value2 != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension de l'administrateur : fusionné en tant que libellé avec la clé "manager_ou_value1" et la valeur de manager_ou_value1 si manager_ou_value1 != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension du responsable : fusionné en tant que libellé avec la clé "manager_ou_value2" et la valeur de manager_ou_value2 si manager_ou_value2 != ""
gestionnaire event.idm.read_only_udm.security_result.detection_fields Dérivé de la compréhension du responsable : fusionné en tant que libellé avec la clé "manager_ou_value3" et la valeur de manager_ou_value3 si manager_ou_value3 != ""
pwdLastSet event.idm.read_only_udm.security_result.detection_fields Fusionné en tant que libellé avec la clé "pwdLastSet" et la valeur de pwdLastSet si pwdLastSet != ""
ModuleName event.idm.read_only_udm.target.resource.name Valeur extraite de ModuleName si ModuleName != ""

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