Collecter les données Microsoft Windows AD

Compatible avec :

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:

Configurer les serveurs Microsoft Windows AD

  1. 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 }
    
  2. 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 cmdlets Get-ADUser et Get-ADComputer.
  3. Créez une tâche récurrente qui exécute le script pour extraire et écrire des données dans le fichier de sortie.

    1. Ouvrez l'application Planificateur de tâches.
    2. Cliquez sur Créer une tâche.
    3. Saisissez un nom et une description pour la tâche.
    4. 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.
    5. Dans l'onglet Déclencheurs, définissez quand vous souhaitez répéter la tâche.
    6. 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.

  1. 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.
  2. 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]
    
  3. 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 et CUSTOMER_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.

  4. Pour démarrer le service de l'agent observIQ, sélectionnez Services &gt; Étendu &gt; Service observIQ &gt; à 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.

ingestion du redirecteur NXLog.

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 et ASSET_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

  1. 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
  2. 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. Utilisez om_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 toujours DirCheckInterval et PollInterval. 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>
    
  3. 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.

  1. Configurez le système avec le fuseau horaire UTC.
  2. Installez le redirecteur Google Security Operations sur le serveur central Microsoft Windows ou Linux.
  3. 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