Collecter les données Microsoft Windows AD
Ce document contient les informations suivantes :
- Architecture de déploiement et étapes d'installation, ainsi que toute configuration requise qui produit des journaux compatibles avec l'analyseur Google Security Operations pour les événements Microsoft Windows Active Directory. Pour en savoir plus sur l'ingestion de données Google Security Operations, consultez Ingestion de données dans Google Security Operations.
- Informations sur la manière dont l'analyseur mappe les champs dans le journal d'origine aux champs du modèle de données unifié Google Security Operations.
En fonction de votre architecture de déploiement, configurez l'agent BindPlane ou l'agent NXLog pour ingèrer les journaux Microsoft Windows Active Directory dans Google Security Operations. Nous vous recommandons d'utiliser l'agent BindPlane pour transférer les journaux d'Active Directory Windows vers Google Security Operations.
Les informations de ce document s'appliquent à l'analyseur avec le libellé d'ingestion WINDOWS_AD. Le libellé d'ingestion identifie l'analyseur qui normalise les données de journal brutes au format UDM structuré.
Avant de commencer
Avant de configurer l'agent BindPlane ou l'agent NXLog, effectuez les tâches suivantes:
- Configurez tous les systèmes pour qu'ils utilisent le fuseau horaire UTC.
- Configurez les serveurs Microsoft Windows AD.
- Vérifiez les appareils et les versions compatibles.
- Consultez les types de journaux compatibles.
Configurer les serveurs Microsoft Windows AD
Sur chaque serveur Microsoft Windows Active Directory, créez et configurez un script PowerShell pour enregistrer les données du journal dans un fichier de sortie. L'agent BindPlane ou NXLog lit le fichier de sortie.
# Set the location where the log file will be written $OUTPUT_FILENAME="<Path_of_the_output_file>" If (Test-Path -Path $OUTPUT_FILENAME) { Remove-Item -path $OUTPUT_FILENAME -ErrorAction SilentlyContinue} # USER_CONTEXT: Gets all Active Directory users and their properties. Get-ADUser -Filter * -properties samAccountName | % { Get-ADUser $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append } # ASSET_CONTEXT: Gets all Active Directory assets and their properties. Get-ADComputer -Filter * -properties samAccountName | % { Get-ADComputer $_.SamAccountName -properties * | ConvertTo-JSON -compress | Out-File -encoding utf8 $OUTPUT_FILENAME -Append }
Remplacez les éléments suivants :
- Remplacez la valeur de
$OUTPUT_FILENAME
par l'emplacement du fichier de sortie. - Stockez les données au format JSON.
- Définissez l'encodage sur UTF-8.
- Utilisez le paramètre
-Filter
plutôt que le paramètre-LDAPFilter
lorsque vous appelez les cmdletsGet-ADUser
etGet-ADComputer
.
- Remplacez la valeur de
Créez une tâche récurrente qui exécute le script pour extraire et écrire des données dans le fichier de sortie.
- Ouvrez l'application Planificateur de tâches.
- Cliquez sur Créer une tâche.
- Saisissez un nom et une description pour la tâche.
- Cochez la case Exécuter avec les droits d'accès les plus élevés pour vous assurer que toutes les données sont récupérées.
- Dans l'onglet Déclencheurs, définissez quand vous souhaitez répéter la tâche.
- Dans l'onglet Action, ajoutez une action et indiquez le chemin d'accès au fichier où le script est stocké.
Vérifier les appareils et versions compatibles
Publication de Microsoft Windows Server avec les éditions suivantes: Foundation, Essentials, Standard et Datacenter. Schéma des événements des journaux générés par chaque édition ne diffère pas.
L'analyseur des opérations de sécurité Google accepte les journaux des versions suivantes de Microsoft Windows Server:
- Microsoft Windows Server 2019
- Microsoft Windows Server 2016
- Microsoft Windows Server 2012
L'analyseur Google Security Operations accepte les journaux collectés par NXLog Community Edition ou Enterprise Edition.
Examiner les types de journaux compatibles
L'analyseur Google Security Operations analyse et normalise les données récupérées à partir du contexte utilisateur et du contexte de l'asset. Il est compatible avec les journaux générés avec du texte en anglais, mais pas ceux générés dans d'autres langues que l'anglais.
Configurer l'agent BindPlane
Nous vous recommandons d'utiliser l'agent BindPlane pour transférer les journaux de Windows Active Directory vers Google Security Operations.
Après l'installation, le service de l'agent BindPlane apparaît sous le nom de service observIQ
dans la liste des services Windows.
- Installez l'agent BindPlane sur chaque serveur Windows Active Directory. Pour en savoir plus sur l'installation de l'agent BindPlane, consultez les instructions d'installation de l'agent BindPlane.
Créez un fichier de configuration pour l'agent BindPlane avec le contenu suivant.
receivers: filelog: include: [ `FILE_PATH` ] operators: - type: json_parser start_at: beginning windowseventlog/activedirectoryservice: channel: Directory Service raw: true processors: batch: exporters: chronicle/activedirectory: endpoint: https://malachiteingestion-pa.googleapis.com creds: '{ "type": "service_account", "project_id": "malachite-projectname", "private_key_id": `PRIVATE_KEY_ID`, "private_key": `PRIVATE_KEY`, "client_email":"`SERVICE_ACCOUNT_NAME`@malachite-`PROJECT_ID`.iam.gserviceaccount.com", "client_id": `CLIENT_ID`, "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/`SERVICSERVICE_ACCOUNT_NAME`%40malachite-`PROJECT_ID`.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }' log_type: 'WINDOWS_AD' override_log_type: false raw_log_field: body customer_id: `CUSTOMER_ID` service: pipelines: logs/ads: receivers: - filelog - windowseventlog/activedirectoryservice processors: [batch] exporters: [chronicle/activedirectory]
Remplacez les éléments suivants :
FILE_PATH
par le chemin d'accès au fichier dans lequel a été stockée la sortie du script PowerShell mentionné dans la section Configurer les serveurs Microsoft Windows AD.PRIVATE_KEY_ID
,PRIVATE_KEY
SERVICSERVICE_ACCOUNT_NAME
,PROJECT_ID
,CLIENT_ID
etCUSTOMER_ID
par les valeurs respectives du fichier JSON du compte de service que vous pouvez télécharger depuis Google Cloud. Pour en savoir plus sur les clés de compte de service, consultez Créer et supprimer des clés de compte de service.
Pour démarrer le service de l'agent observIQ, sélectionnez Services > Étendu > Service observIQ > à l'écran.
Configurer NXLog
Le schéma suivant présente une architecture dans laquelle des agents NXLog sont installés pour collecter des événements Microsoft Windows et les envoyer à Google Security Operations. Comparez ces informations avec celles de votre environnement pour vous assurer que ces composants installés. Votre déploiement peut être différent de cette architecture et peut être plus complexe.
Si vous utilisez l'agent NXLog au lieu de l'agent BindPlane, vérifiez les points suivants:
- Un script PowerShell est créé et configuré sur chaque serveur Microsoft Windows qui exécute Active Directory pour collecter les données
USER_CONTEXT
etASSET_CONTEXT
. Pour en savoir plus, consultez Configurer des serveurs Microsoft Windows AD. - NXLog est installé sur chaque serveur Microsoft Windows AD pour envoyer des données au serveur Linux ou Microsoft Windows Server central.
- Le transfert Google Security Operations est installé sur le serveur Linux ou Microsoft Windows Server central pour transférer les données de journalisation vers Google Security Operations.
Configurer NXLog
- Installez l'agent NXLog sur chaque collecteur exécuté sur le serveur Windows Active Directory. Cette application transmet les journaux au serveur central Microsoft Windows ou Linux. Pour en savoir plus, consultez les Documentation NXLog
Créez un fichier de configuration pour chaque instance NXLog. Utilisez le module
im_file
de NXLog pour lire le fichier et analyser les lignes en champs. Utilisezom_tcp
pour transférer les données vers le serveur Microsoft Windows ou Linux central.Voici un exemple de configuration NXLog. Remplacez les valeurs
<hostname>
et<port>
par des informations sur le serveur Linux ou Microsoft Windows central de destination. Dans la section<Input in_adcontext>
et la propriétéFile
, ajoutez le chemin d'accès au fichier journal de sortie écrit par le script PowerShell. Définissez toujoursDirCheckInterval
etPollInterval
. Si ces valeurs ne sont pas définies, NXLog interroge les fichiers toutes les secondes.define ROOT C:\Program Files\nxlog define ADCONTEXT_OUTPUT_DESTINATION_ADDRESS <hostname> define ADCONTEXT_OUTPUT_DESTINATION_PORT <port> Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Input in_adcontext> Module im_file File "<Path_of_the_output_file>" DirCheckInterval 3600 PollInterval 3600 </Input> <Output out_chronicle_adcontext> Module om_tcp Host %ADCONTEXT_OUTPUT_DESTINATION_ADDRESS% Port %ADCONTEXT_OUTPUT_DESTINATION_PORT% </Output> <Route ad_context_to_chronicle> Path in_adcontext => out_chronicle_adcontext </Route>
Démarrez le service NXLog dans chaque système.
Configurer le redirecteur sur un serveur central
Pour plus d’informations sur l’installation et la configuration du redirecteur sous Linux, consultez la section Installer et configurer le redirecteur sous Linux. Pour en savoir plus sur l'installation et la configuration du forwarder sur Microsoft Windows, consultez Installer et configurer le forwarder sur Microsoft Windows.
- Configurez le système avec le fuseau horaire UTC.
- Installez le redirecteur Google Security Operations sur le serveur central Microsoft Windows ou Linux.
Configurez le redirecteur Google Security Operations pour envoyer les journaux à Google Security Operations. Voici un exemple de configuration du redirecteur:
- syslog: common: enabled: true data_type: WINDOWS_AD batch_n_seconds: 10 batch_n_bytes: 1048576 tcp_address: 0.0.0.0:10518 connection_timeout_sec: 60
Documentation de référence sur le mappage de champs: champs de journal de l'appareil avec champs UDM
Cette section explique comment l'analyseur mappe les champs de journal d'origine aux champs du modèle de données unifié.
Journaux de contexte utilisateur
Champ NXLog | Champ UDM |
---|---|
GivenName |
entity.entity.user.first_name |
Surname |
entity.entity.user.last_name |
SamAccountName |
entity.entity.user.userid |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is user ,entity.metadata.entity_type is set to USER |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the
entity.entity.user.product_object_id UDM field.
|
objectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the objectGUID log field value is not empty, then the objectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.user.product_object_id UDM field.
|
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
City |
entity.entity.user.personal_address.city |
Company |
entity.entity.user.company_name |
Country |
entity.entity.user.personal_address.country_or_region |
Department |
entity.entity.user.department |
Description |
entity.metadata.description |
DisplayName |
entity.entity.user.user_display_name |
EmailAddress |
entity.entity.user.email_addresses |
EmployeeID |
entity.entity.user.employee_id |
HomeDirectory |
entity.entity.file.full_path |
HomePage |
entity.entity.url |
HomePhone |
entity.entity.user.phone_numbers |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
lastLogon |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Manager |
Values for GUID , SAMAccountname , SID all mapped to different UDM fields:- SID is stored in manager.windows_sid- Distinguished name (i.e. value in first CN) is stored in
manager.user_display_name - GUID ,SamAccountName is stored in manager.userid |
MemberOf |
The following fields in the first occurrence of CN are set:entity.relations.entity.group.group_display_name entity.relations.entity_type set to GROUP entity.relations.relationship set t0 MEMBER entity.relations.direction set to UNIDIRECTIONAL |
MobilePhone |
entity.entity.user.phone_numbers |
Office |
entity.entity.user.office_address.name |
PasswordExpired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PasswordNotRequired |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
PrimaryGroup |
Following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.user.attribute.label.key and entity.entity.user.attribute.label.value |
State |
entity.entity.user.personal_address.state |
StreetAddress |
entity.entity.user.personal_address.name |
Title |
entity.entity.user.title |
whenCreated |
entity.user.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |
Journaux de contexte des composants
Champ NXLog | Champ de l'UDM |
---|---|
DNSHostName |
entity.entity.asset.hostname |
SamAccountName |
entity.entity.asset.asset_id |
SID.Value |
entity.entity.user.windows_sid |
ObjectClass |
If the value is computer , entity.metadata.entity_type set to ASSET |
ObjectGuid |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
ObjectGUID |
If the ObjectGuid log field value is not empty, then the ObjectGuid log field is mapped to the entity.entity.asset.product_object_id UDM field.
Else, If the ObjectGUID log field value is not empty, then the ObjectGUID log field is mapped to the entity.entity.asset.product_object_id UDM field. |
AccountExpirationDate |
entity.entity.user.account_expiration_time |
badPwdCount |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
CanonicalName |
entity.entity.administrative_domain |
countryCode |
entity.entity.asset.location.country_or_region |
Description |
entity.entity.metadata.description |
HomePage |
entity.entity.url |
IPv4Address |
entity.entity.asset.ip |
IPv6Address |
entity.entity.asset.ip |
LastBadPasswordAttempt |
entity.entity.user.last_bad_password_attempt_time |
lastLogoff |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
lastLogon |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
LastLogonDate |
entity.entity.user.last_login_time |
Location |
entity.entity.asset.location.name |
ManagedBy |
The following fields are set:entity.entity.user.user_display_name entity.relations.entity_type set to USER entity.relations.relationship set to ADMINISTERS entity.relations.direction set to UNIDIRECTIONAL |
ObjectCategory |
entity.entity.asset.category |
OperatingSystem |
If the name contains Windows ,
entity.entity.asset.platform_software.platform field is set to
WINDOWS . |
OperatingSystemServicePack |
entity.entity.asset.platform_software.platform_patch_level |
OperatingSystemVersion |
The field entity.entity.asset.platform_software.platform_version is set to
%{OperatingSystem} - %{OperatingSystemVersion} |
PasswordExpired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordLastSet |
entity.entity.user.last_password_change_time |
PasswordNeverExpires |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PasswordNotRequired |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
PrimaryGroup |
The following fields are set: - entity.relations.entity.group.group_display_name - entity.relations.entity_type set to GROUP - entity.relations.relationship set to MEMBER - entity.relations.direction set to UNIDIRECTIONAL |
ServicePrincipalNames |
entity.entity.asset.attribute.label.key and entity.entity.asset.attribute.label.value |
whenChanged |
entity.entity.asset.attribute.last_update_time |
whenCreated |
entity.entity.asset.attribute.creation_time |
AccountLockoutTime |
entity.entity.user.account_lockout_time |