Mengumpulkan data Microsoft Windows AD
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:
- Konfigurasikan semua sistem untuk menggunakan zona waktu UTC.
- Mengonfigurasi server Microsoft Windows AD.
- Tinjau perangkat dan versi yang didukung.
- Tinjau jenis log yang didukung.
Mengonfigurasi server AD Microsoft Windows
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 }
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 cmdletGet-ADUser
danGet-ADComputer
.
- Ganti nilai
Buat tugas berulang yang menjalankan skrip untuk mengambil dan menulis data ke file output.
- Buka aplikasi Task Scheduler.
- Klik Create task.
- Masukkan nama dan deskripsi tugas.
- Centang kotak Run with highest privileges untuk memastikan semua data diambil.
- Di tab Triggers, tentukan kapan Anda ingin mengulangi tugas.
- 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.
- Instal agen BindPlane di setiap server Windows Active Directory. Untuk informasi selengkapnya tentang cara menginstal agen BindPlane, lihat petunjuk penginstalan Agen BindPlane.
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]
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
, danCUSTOMER_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.
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.
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
danASSET_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
- 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.
Buat file konfigurasi untuk setiap instance NXLog. Gunakan modul
im_file
NXLog untuk membaca dari file dan mengurai baris menjadi kolom. Gunakanom_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 propertiFile
, tambahkan jalur file log output yang ditulis oleh skrip PowerShell. Selalu tetapkanDirCheckInterval
danPollInterval
. 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>
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.
- Konfigurasikan sistem dengan zona waktu UTC.
- Instal penerusan Google Security Operations di server Microsoft Windows atau Linux pusat.
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 |