Mengumpulkan data Microsoft Windows AD

Didukung di:

Dokumen ini mencakup informasi berikut:

  • Arsitektur deployment dan langkah-langkah penginstalan, serta konfigurasi yang diperlukan yang menghasilkan log yang didukung oleh parser Google Security Operations untuk peristiwa Microsoft Windows Active Directory. Untuk ringkasan penyerapan data Google Security Operations, lihat Penyerapan data ke Google Security Operations.
  • Informasi tentang cara parser memetakan kolom dalam log asli ke kolom Unified Data Model Google Security Operations.

Berdasarkan arsitektur deployment Anda, konfigurasikan agen BindPlane atau agen NXLog untuk menyerap log Microsoft Windows Active Directory ke dalam Google Security Operations. Sebaiknya gunakan agen BindPlane untuk meneruskan log Windows Active Directory ke Google Security Operations.

Informasi dalam dokumen ini berlaku untuk parser dengan label transfer WINDOWS_AD. Label penyerapan mengidentifikasi parser yang menormalisasi data log mentah ke format UDM terstruktur.

Sebelum memulai

Sebelum mengonfigurasi agen BindPlane atau agen NXLog, selesaikan tugas berikut:

Mengonfigurasi server AD Microsoft Windows

  1. Di setiap server Microsoft Windows Active Directory, buat dan konfigurasikan skrip PowerShell untuk menyimpan data log ke file output. Agen BindPlane atau NXLog membaca file output.

    # 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. Ganti kode berikut :

    • Ganti nilai $OUTPUT_FILENAME dengan lokasi file output.
    • Simpan data dalam format JSON.
    • Tetapkan encoding ke UTF-8.
    • Gunakan parameter -Filter, bukan parameter -LDAPFilter, saat memanggil cmdlet Get-ADUser dan Get-ADComputer.
  3. Buat tugas berulang yang menjalankan skrip untuk mengambil dan menulis data ke file output.

    1. Buka aplikasi Task Scheduler.
    2. Klik Create task.
    3. Masukkan nama dan deskripsi tugas.
    4. Centang kotak Run with highest privileges untuk memastikan semua data diambil.
    5. Di tab Triggers, tentukan kapan Anda ingin mengulangi tugas.
    6. Di tab Action, tambahkan tindakan baru dan berikan jalur file tempat skrip disimpan.

Meninjau perangkat dan versi yang didukung

Microsoft Windows Server dirilis dengan edisi berikut: Foundation, Essentials, Standar, dan Datacenter. Skema peristiwa log yang dihasilkan oleh setiap edisi tidak berbeda.

Parser Google Security Operations mendukung log dari versi server Microsoft Windows berikut:

  • Microsoft Windows Server 2019
  • Microsoft Windows Server 2016
  • Microsoft Windows Server 2012

Parser Google Security Operations mendukung log yang dikumpulkan oleh NXLog Community Edition atau Enterprise Edition.

Meninjau jenis log yang didukung

Parser Google Security Operations akan mengurai dan menormalisasi data yang diambil dari Konteks Pengguna dan Konteks Aset. Fitur ini mendukung log yang dibuat dengan teks bahasa Inggris dan tidak mendukung log yang dibuat dalam bahasa non-Inggris.

Mengonfigurasi agen BindPlane

Sebaiknya gunakan agen BindPlane untuk meneruskan log Windows Active Directory ke Google Security Operations.

Setelah penginstalan, layanan agen BindPlane akan muncul sebagai layanan observIQ dalam daftar layanan Windows.

  1. Instal agen BindPlane di setiap server Windows Active Directory. Untuk informasi selengkapnya tentang cara menginstal agen BindPlane, lihat petunjuk penginstalan Agen BindPlane.
  2. Buat file konfigurasi untuk agen BindPlane dengan konten berikut.

    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. Ganti kode berikut :

    • FILE_PATH dengan jalur file tempat output skrip PowerShell yang disebutkan di Mengonfigurasi server AD Microsoft Windows telah disimpan.

    • PRIVATE_KEY_ID, PRIVATE_KEY SERVICSERVICE_ACCOUNT_NAME,PROJECT_ID, CLIENT_ID, dan CUSTOMER_ID dengan nilai masing-masing dari file JSON akun layanan yang dapat Anda download dari Google Cloud. Untuk informasi selengkapnya tentang kunci akun layanan, lihat Membuat dan menghapus kunci akun layanan.

  4. Untuk memulai layanan agen observIQ, pilih Layanan > Diperluas > Layanan observIQ > mulai.

Mengonfigurasi NXLog

Diagram berikut menunjukkan arsitektur tempat agen NXLog diinstal untuk mengumpulkan dan mengirim peristiwa Microsoft Windows ke Google Security Operations. Bandingkan informasi ini dengan lingkungan Anda untuk memastikan komponen ini diinstal. Deployment Anda mungkin berbeda dari arsitektur ini dan mungkin lebih kompleks.

Penyerapan penerusan NXLog.

Jika Anda menggunakan agen NXLog, bukan agen BindPlane, verifikasi hal berikut:

  • Skrip PowerShell dibuat dan dikonfigurasi di setiap Microsoft Windows Server yang menjalankan Active Directory untuk mengumpulkan data USER_CONTEXT dan ASSET_CONTEXT. Untuk informasi selengkapnya, lihat Mengonfigurasi server Microsoft Windows AD.
  • NXLog diinstal di setiap server AD Microsoft Windows untuk mengirim data ke server Linux atau Microsoft Windows Server pusat.
  • Pengirim Google Security Operations diinstal di server Microsoft Windows Server atau Linux pusat untuk meneruskan data log ke Google Security Operations.

Mengonfigurasi NXLog

  1. Instal agen NXLog di setiap kolektor yang berjalan di server Windows Active Directory. Aplikasi ini meneruskan log ke server Microsoft Windows atau Linux pusat. Untuk informasi selengkapnya, lihat dokumentasi NXLog.
  2. Buat file konfigurasi untuk setiap instance NXLog. Gunakan modul im_file NXLog untuk membaca dari file dan mengurai baris menjadi kolom. Gunakan om_tcp untuk meneruskan data ke server Microsoft Windows atau Linux pusat.

    Berikut adalah contoh konfigurasi NXLog. Ganti nilai <hostname> dan <port> dengan informasi tentang Server Microsoft Windows atau Linux pusat tujuan. Di bagian <Input in_adcontext> dan properti File, tambahkan jalur file log output yang ditulis oleh skrip PowerShell. Selalu tetapkan DirCheckInterval dan PollInterval. Jika tidak ditentukan, NXLog akan melakukan polling file setiap 1 detik.

    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. Mulai layanan NXLog di setiap sistem.

Mengonfigurasi penerusan di server pusat

Untuk informasi tentang cara menginstal dan mengonfigurasi forwarder di Linux, lihat Menginstal dan mengonfigurasi forwarder di Linux. Untuk informasi tentang cara menginstal dan mengonfigurasi forwarder di Microsoft Windows, lihat Menginstal dan mengonfigurasi forwarder di Microsoft Windows.

  1. Konfigurasikan sistem dengan zona waktu UTC.
  2. Instal penerusan Google Security Operations di server Microsoft Windows atau Linux pusat.
  3. Konfigurasikan penerusan Google Security Operations untuk mengirim log ke Google Security Operations. Berikut adalah contoh konfigurasi forwarder:

      - 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
    

Referensi pemetaan kolom: kolom log perangkat ke kolom UDM

Bagian ini menjelaskan cara parser memetakan kolom log asli ke kolom Unified Data Model.

Log Konteks Pengguna

Kolom NXLog Kolom 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

Log Konteks Aset

Kolom NXLog Kolom 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