Collecter les journaux ManageEngine ADManager Plus
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- Cliquez sur Télécharger pour télécharger le fichier d'authentification pour l'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
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
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-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quietAttendez la fin de l'installation.
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
- Ouvrez un terminal avec les droits root ou sudo.
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.shAttendez la fin de l'installation.
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.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar 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_plusRemplacez les espaces réservés suivants :
Configuration du récepteur :
- Le récepteur utilise
tcplogpour recevoir les données syslog sur le port TCP 514. listen_address: défini sur0.0.0.0:514pour écouter sur toutes les interfaces sur le port 514.
- Le récepteur utilise
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
- Linux :
<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.
- États-Unis :
log_type: définissez cette valeur surADMANAGER_PLUSexactement 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 surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
Redémarrez l'agent Bindplane pour appliquer les modifications.
Linux
Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :
sudo systemctl restart observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Windows
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-collectorUtiliser la console Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Recherchez observIQ Distro for OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurer le transfert syslog ManageEngine ADManager Plus
- Connectez-vous à ADManager Plus.
- Accédez à l'onglet Admin.
- Sous Paramètres système, cliquez sur Intégrations.
Sous Transfert de journaux, cliquez sur Syslog.
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.
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 "" |
| 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.