Mengumpulkan log PowerShell
Dokumen ini menjelaskan cara mengumpulkan log PowerShell ke Google Security Operations menggunakan Bindplane. Parser mengubah log Microsoft PowerShell mentah menjadi model data terpadu (UDM). Pertama, alat ini mengekstrak kolom dari pesan log mentah, menormalisasinya ke dalam kolom UDM, lalu memperkaya data dengan konteks tambahan berdasarkan ID peristiwa tertentu, yang pada akhirnya membuat peristiwa UDM terstruktur untuk analisis keamanan.
Sebelum memulai
- Pastikan Anda memiliki instance Google SecOps.
- Pastikan Anda memiliki Windows 2016 atau yang lebih baru.
- Jika berjalan di balik proxy, pastikan port firewall terbuka.
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Proses Transfer. Simpan file dengan aman di sistem tempat Bindplane akan diinstal.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Profil.
- Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.
Menginstal agen Bindplane di Windows
- Buka Command Prompt atau PowerShell sebagai administrator.
Jalankan perintah berikut:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Referensi penginstalan tambahan
- Untuk opsi penginstalan tambahan, lihat panduan penginstalan ini.
Mengonfigurasi agen Bindplane untuk menyerap Syslog dan mengirim ke Google SecOps
- Sebelum mengonfigurasi file YAML, hentikan Layanan
observIQ Distro for Open Telemetry Collector
di Panel Layanan. Akses file konfigurasi:
- Temukan file
config.yaml
. Biasanya, file ini berada di direktori/etc/bindplane-agent/
di Linux atau di direktori penginstalan di Windows. - Buka file menggunakan editor teks (misalnya,
nano
,vi
, atau Notepad).
- Temukan file
Edit file
config.yaml
sebagai berikut:receivers: windowseventlog/powershell: channel: Microsoft-Windows-PowerShell/Operational max_reads: 100 poll_interval: 5s raw: true start_at: end processors: batch: exporters: chronicle/powershell: endpoint: malachiteingestion-pa.googleapis.com # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' log_type: 'POWERSHELL' override_log_type: false raw_log_field: body customer_id: '<customer_id>' service: pipelines: logs/winpowershell: receivers: - windowseventlog/powershell processors: [batch] exporters: [chronicle/powershell]
Ganti
<customer_id>
dengan ID pelanggan yang sebenarnya.Perbarui
/path/to/ingestion-authentication-file.json
ke jalur tempat file autentikasi disimpan di bagian Mendapatkan file autentikasi penyerapan Google SecOps.Setelah menyimpan file
config.yaml
, mulai LayananobservIQ Distro for Open Telemetry Collector
.
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:
net stop BindPlaneAgent && net start BindPlaneAgent
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
AccountName | principal.user.userid | Dipetakan langsung dari kolom AccountName dalam log mentah. |
ActivityID | security_result.detection_fields[0].value | Dipetakan langsung dari kolom ActivityID dalam log mentah. Kurung kurawal dihapus. |
Saluran | Tidak dipetakan ke objek IDM. | |
collection_time.nanos | Tidak dipetakan ke objek IDM. | |
collection_time.seconds | Tidak dipetakan ke objek IDM. | |
Perintah | Tidak dipetakan ke objek IDM. | |
CommandLine | Tidak dipetakan ke objek IDM. | |
Komputer | principal.hostname | Dipetakan langsung dari kolom Computer dalam log mentah jika ada. |
ContextInfo | Tidak dipetakan ke objek IDM. | |
ContextInfo_Command Name | security_result.detection_fields[0].value | Dipetakan langsung dari kolom ContextInfo_Command Name dalam log mentah jika ada. |
Jenis ContextInfo_Command | security_result.detection_fields[1].value | Dipetakan langsung dari kolom ContextInfo_Command Type dalam log mentah jika ada. |
Aplikasi ContextInfo_Host | target.process.command_line | Dipetakan langsung dari kolom ContextInfo_Host Application dalam log mentah jika powershell.Host Application tidak ada. |
ID ContextInfo_Host | target.asset.asset_id | Dipetakan langsung dari kolom ContextInfo_Host ID dalam log mentah jika powershell.Host ID tidak ada. Nilai diawali dengan Host ID: . |
ContextInfo_Nama Host | target.hostname | Dipetakan langsung dari kolom ContextInfo_Host Name dalam log mentah jika powershell.Host Name tidak ada. |
ContextInfo_Script Name | target.process.file.full_path | Dipetakan langsung dari kolom ContextInfo_Script Name dalam log mentah jika script_name tidak ada. |
ContextInfo_Sequence Number | security_result.detection_fields[2].value | Dipetakan langsung dari kolom ContextInfo_Sequence Number dalam log mentah jika ada. Dikonversi menjadi string. |
ContextInfo_Severity | Tidak dipetakan ke objek IDM. | |
create_time.nanos | Tidak dipetakan ke objek IDM. | |
create_time.seconds | Tidak dipetakan ke objek IDM. | |
customer_id | Tidak dipetakan ke objek IDM. | |
data | Tidak dipetakan ke objek IDM. | |
Data | security_result.detection_fields[0].value | Dipetakan langsung dari kolom Data dalam log mentah jika ada. |
Data_1 | security_result.detection_fields[1].value | Dipetakan langsung dari kolom Data_1 dalam log mentah jika ada. |
Data_2 | security_result.detection_fields[2].value | Dipetakan langsung dari kolom Data_2 dalam log mentah jika ada. |
Domain | principal.administrative_domain | Dipetakan langsung dari kolom Domain dalam log mentah. |
entries | Tidak dipetakan ke objek IDM. | |
ERROR_EVT_UNRESOLVED | Tidak dipetakan ke objek IDM. | |
EventCategory | Tidak dipetakan ke objek IDM. | |
EventData | Tidak dipetakan ke objek IDM. | |
EventID | metadata.product_event_type, security_result.rule_name | Dipetakan langsung dari kolom EventID dalam log mentah. Nilai diawali dengan EventID: untuk kolom security_result.rule_name . |
EventLevel | Tidak dipetakan ke objek IDM. | |
EventLevelName | security_result.severity | Dipetakan berdasarkan nilai EventLevelName :- Information dipetakan ke INFORMATIONAL .- Verbose dipetakan ke LOW . |
EventLog | Tidak dipetakan ke objek IDM. | |
EventReceivedTime | Tidak dipetakan ke objek IDM. | |
EventType | Tidak dipetakan ke objek IDM. | |
EventTime | metadata.event_timestamp | Digunakan untuk mengekstrak stempel waktu jika ada. |
ExecutionProcessID | principal.process.pid | Dipetakan langsung dari kolom ExecutionProcessID dalam log mentah jika ada dan tidak kosong atau 0. Dikonversi menjadi string. |
ExecutionThreadID | security_result.detection_fields[2].value | Dipetakan langsung dari kolom ExecutionThreadID dalam log mentah jika ada dan tidak kosong atau 0. Dikonversi menjadi string. |
File | target.process.file.full_path | Dipetakan langsung dari kolom File dalam log mentah jika ada. |
Aplikasi Host | Tidak dipetakan ke objek IDM. | |
HostApplication | Tidak dipetakan ke objek IDM. | |
Hostname | principal.hostname | Dipetakan langsung dari kolom Hostname dalam log mentah. |
id | Tidak dipetakan ke objek IDM. | |
Kata kunci | Tidak dipetakan ke objek IDM. | |
log_type | metadata.log_type | Dipetakan langsung dari kolom log_type dalam log mentah. |
Mesin | principal.asset.asset_id, principal.asset.platform_software.platform_version | Kolom Machine diuraikan untuk mengekstrak ID mesin dan informasi platform. ID mesin diawali dengan Machine ID: . Platform dipetakan ke enum UDM berdasarkan nilai: - win dipetakan ke WINDOWS .- mac dipetakan ke MAC .- lin dipetakan ke LINUX .- Nilai lainnya dipetakan ke UNKNOWN_PLATFORM . |
ManagementGroupName | additional.fields[0].value.string_value | Dipetakan langsung dari kolom ManagementGroupName dalam log mentah jika ada. |
Message.EventTime | metadata.event_timestamp | Digunakan untuk mengekstrak stempel waktu jika ada. Dikonversi menjadi string. |
Message.Message | security_result.description | Dipetakan langsung dari kolom Message.Message dalam log mentah jika EventID berada di [403 , 4103 , 4104 ] dan message_message_not_found . Kembali ke baris awal dan tab diganti dengan koma. |
Pesan | security_result.description | Dipetakan langsung dari kolom Message dalam log mentah jika ada. |
MessageNumber | Tidak dipetakan ke objek IDM. | |
MessageSourceAddress | principal.ip | Dipetakan langsung dari kolom MessageSourceAddress dalam log mentah jika ada. |
MessageTotal | Tidak dipetakan ke objek IDM. | |
MG | Tidak dipetakan ke objek IDM. | |
Opcode | metadata.description | Dipetakan langsung dari kolom Opcode dalam log mentah. |
OpcodeValue | Tidak dipetakan ke objek IDM. | |
Output | security_result.detection_fields[0].value | Dipetakan langsung dari kolom Output dalam log mentah jika ada. |
powershell.Command Name | security_result.detection_fields[0].value | Dipetakan langsung dari kolom powershell.Command Name jika ada. |
Jenis powershell.Command | security_result.detection_fields[1].value | Dipetakan langsung dari kolom powershell.Command Type jika ada. |
Aplikasi powershell.Host | target.process.command_line | Dipetakan langsung dari kolom powershell.Host Application dalam log mentah jika ada. |
ID powershell.Host | target.asset.asset_id | Dipetakan langsung dari kolom powershell.Host ID dalam log mentah jika ada. Nilai diawali dengan Host ID: . |
powershell.Host Name | target.hostname | Dipetakan langsung dari kolom powershell.Host Name dalam log mentah jika ada. |
powershell.HostApplication | target.process.command_line | Dipetakan langsung dari kolom powershell.HostApplication dalam log mentah jika ada. |
powershell.HostId | target.asset.asset_id | Dipetakan langsung dari kolom powershell.HostId dalam log mentah jika ada. Nilai diawali dengan Host ID: . |
powershell.HostName | target.hostname | Dipetakan langsung dari kolom powershell.HostName dalam log mentah jika ada. |
powershell.Nama Skrip | target.process.file.full_path | Dipetakan langsung dari kolom powershell.Script Name dalam log mentah jika ada. |
powershell.ScriptName | target.process.file.full_path | Dipetakan langsung dari kolom powershell.ScriptName dalam log mentah jika ada. |
powershell.Sequence Number | security_result.detection_fields[2].value | Dipetakan langsung dari kolom powershell.Sequence Number dalam log mentah jika ada. |
powershell.SequenceNumber | security_result.detection_fields[0].value | Dipetakan langsung dari kolom powershell.SequenceNumber dalam log mentah jika ada. |
powershell.UserId | principal.user.userid | Dipetakan langsung dari kolom powershell.UserId dalam log mentah jika ada. |
ID proses | principal.process.pid | Dipetakan langsung dari kolom Process ID dalam log mentah jika ExecutionProcessID dan ProcessID tidak ada atau kosong atau 0. Dikonversi menjadi string. |
ProcessID | principal.process.pid | Dipetakan langsung dari kolom ProcessID dalam log mentah jika ExecutionProcessID tidak ada atau kosong atau 0. Dikonversi menjadi string. |
ProviderGuid | metadata.product_deployment_id | Dipetakan langsung dari kolom ProviderGuid dalam log mentah. Kurung kurawal dihapus. |
PSEdition | Tidak dipetakan ke objek IDM. | |
PSRemotingProtocolVersion | Tidak dipetakan ke objek IDM. | |
PSVersion | Tidak dipetakan ke objek IDM. | |
RecordNumber | metadata.product_log_id | Dipetakan langsung dari kolom RecordNumber dalam log mentah. Dikonversi menjadi string. |
RenderedDescription | security_result.description | Dipetakan langsung dari kolom RenderedDescription dalam log mentah jika ada. |
Pengguna RunAs | Tidak dipetakan ke objek IDM. | |
ScriptBlockId | Tidak dipetakan ke objek IDM. | |
ScriptBlockText | security_result.detection_fields[0].value | Dipetakan langsung dari kolom ScriptBlockText dalam log mentah jika ada. |
ID ScriptBlock | Tidak dipetakan ke objek IDM. | |
Keparahan | security_result.severity, security_result.severity_details | Dipetakan berdasarkan nilai Severity :- verbose atau info yang dipetakan ke LOW .- warn atau err dipetakan ke MEDIUM .- crit dipetakan ke HIGH .Nilai mentah juga dipetakan ke security_result.severity_details . |
source.collector_id | Tidak dipetakan ke objek IDM. | |
source.customer_id | Tidak dipetakan ke objek IDM. | |
Sumber | additional.fields[1].value.string_value | Dipetakan langsung dari kolom Source dalam log mentah jika ada. |
SourceModuleName | principal.resource.name | Dipetakan langsung dari kolom SourceModuleName dalam log mentah. |
SourceModuleType | principal.resource.resource_subtype | Dipetakan langsung dari kolom SourceModuleType dalam log mentah. |
SourceName | metadata.product_name | Dipetakan langsung dari kolom SourceName dalam log mentah. |
start_time.nanos | Tidak dipetakan ke objek IDM. | |
start_time.seconds | Tidak dipetakan ke objek IDM. | |
TenantId | additional.fields[2].value.string_value | Dipetakan langsung dari kolom TenantId dalam log mentah jika ada. |
ThreadID | Tidak dipetakan ke objek IDM. | |
timestamp.nanos | Tidak dipetakan ke objek IDM. | |
timestamp.seconds | Tidak dipetakan ke objek IDM. | |
jenis | Tidak dipetakan ke objek IDM. | |
UserID | principal.user.windows_sid | Dipetakan langsung dari kolom UserID dalam log mentah. |
Nama pengguna | principal.user.userid | Dipetakan langsung dari kolom Username dalam log mentah jika AccountName tidak ada. |
metadata.vendor_name | Tetapkan ke Microsoft . |
|
metadata.event_type | Tetapkan ke PROCESS_LAUNCH jika EventID adalah 4104 dan _Path ada di Message , atau jika EventID adalah 4103 , atau jika EventID ada di [800 , 600 , 400 ] dan powershell.ScriptName dan powershell.HostApplication ada. Tetapkan ke PROCESS_TERMINATION jika EventID adalah 403 dan _HostApplication ada di Message , atau jika EventID adalah 403 dan NewEngineState adalah Stopped . Tetapkan ke STATUS_UPDATE jika EventID adalah 4104 dan _Path tidak ada di Message , atau jika EventID adalah 4103 dan no_value , script_name kosong, script_name_not_found , dan host_application_not_found semuanya benar, atau jika EventID adalah 53504 , atau jika EventID adalah 40962 , atau jika EventID adalah 40961 , atau jika EventID kosong dan MessageSourceAddress ada. Tetapkan ke USER_UNCATEGORIZED jika EventID kosong dan Username ada. Tetapkan ke GENERIC_EVENT jika EventID kosong dan MessageSourceAddress dan Username tidak ada. |
|
metadata.product_name | Tetapkan ke Powershell jika SourceName tidak ada. |
|
security_result.action | Tetapkan ke ALLOW . |
|
security_result.detection_fields[0].key | Tetapkan ke Activity ID . |
|
security_result.detection_fields[1].key | Tetapkan ke Sequence Number . |
|
security_result.detection_fields[2].key | Tetapkan ke ExecutionThreadID . |
|
additional.fields[0].key | Tetapkan ke Management Group Name . |
|
additional.fields[1].key | Tetapkan ke Source . |
|
additional.fields[2].key | Tetapkan ke TenantId . |
|
principal.asset.platform_software.platform | Tetapkan ke WINDOWS jika platform_software berisi win , MAC jika berisi mac , LINUX jika berisi lin , dan UNKNOWN_PLATFORM jika tidak. |
|
target.process.file.full_path | Tetapkan ke _Path jika EventID adalah 4104 dan _Path ada di Message . Tetapkan ke file_path jika EventID adalah 4104 dan file_path ada di Message . Tetapkan ke _HostApplication jika EventID adalah 403 dan _HostApplication ada di Message . |
Perubahan
2025-01-29
Peningkatan:
- Mengubah pemetaan untuk
ScriptBlockText
darisecurity_result.detection_fields
menjaditarget.process.command_line
.
2025-01-28
Peningkatan:
- Menambahkan
gsub
untuk mendukung format log JSON baru.
2025-01-09
Peningkatan:
- Memetakan
Payload
kesecurity_result.detection_fields
. - Memetakan
Script Name
ketarget.file.full_path
.
2024-11-28
Peningkatan:
- Menambahkan dukungan untuk pola log SYSLOG baru.
2024-08-20
Peningkatan:
- Menambahkan
gsub
untuk menghapus karakter tambahan guna mengurai log JSON.
2024-08-14
Peningkatan:
- Memetakan
Version
kemetadata.product_version
. - Memetakan
SystemTime
kemetadata.event_timestamp
. - Memetakan
channel
,keywords
,MessageNumber
,MessageTotal
, danScriptBlockId
kesecurity_result.detection_fields
. - Memetakan
Path
ketarget.process.file.full_path
.
2024-07-24
Peningkatan:
- Menambahkan dukungan untuk pola log JSON baru.
2024-07-20
Peningkatan:
- Memetakan
HostApplication
keprincipal.application
. - Memetakan
HostId
keprincipal.resource.product_object_id
. - Memetakan
System.Computer
keprincipal.hostname
danprincipal.asset.hostname
. - Memetakan
System.Version
kemetadata.product_version
. - Memetakan
System.ProcessID
keprincipal.process.pid
. - Memetakan
System.ProviderName
keprincipal.resource.attribute.labels
. - Memetakan
HostVersion
,RunspaceId
,PipelineId
,EngineVersion
,DetailSequence
,DetailTotal
,SequenceNumber
, danScriptName
keadditional.fields
. - Memetakan
System.EventRecordID
,System.Task
,System.Keywords
,System.Opcode
, danSystem.ThreadID
kesecurity.detection_fields
.
2023-12-05
Peningkatan:
- Menambahkan pemetaan untuk log JSON yang tidak diuraikan.
- Memetakan
Computer
keprincipal.hostname
. - Memetakan
EventLevelName
kesecurity_result.severity
. - Memetakan
ManagementGroupName
,Source
,TenantId
keadditional_fields
. - Memetakan
RenderedDescription
kesecurity_result.description
. - Memetakan
UserName
keprincipal.user.userid
.
2023-09-14
Peningkatan:
- Menambahkan pemetaan untuk log JSON yang tidak diuraikan.
- Memetakan 'winlog.activity_id' ke 'security_result.detection_fields'.
- Memetakan 'winlog.api' ke 'additional.fields'.
- Memetakan 'winlog.channel', 'winlog.process.thread.id' ke 'security_result.about.resource.attribute.labels'.
- Memetakan 'winlog.computer_name' ke 'principal.hostname'.
- Memetakan 'winlog.event_id' ke 'metadata.product_event_type' dan 'security_result.rule_name'.
- Memetakan 'winlog.opcode' ke 'metadata.description'.
- Memetakan 'winlog.process.pid' ke 'principal.process.pid'.
- Memetakan 'winlog.provider_guid' ke 'metadata.product_deployment_id'.
- Memetakan 'winlog.provider_name' ke 'metadata.product_name'.
- Memetakan 'winlog.record_id' ke 'metadata.product_log_id'.
- Memetakan 'winlog.user.domain' ke 'principal.administrative_domain'.
- Memetakan 'winlog.user.identifier' ke 'principal.user.windows_sid'.
- Memetakan 'winlog.user.name' ke 'principal.user.userid'.
2023-07-05
Peningkatan:
- Untuk 'EventID = 403', memetakan 'metadata.event_type' ke 'STATUS_UPDATE' jika nilai untuk 'HostApplication' tidak ada.
- Mengekstrak nilai untuk 'target.file.full_path' dari log menggunakan pola Grok saat 'Path' kosong.
- Menambahkan fungsi gsub untuk mengganti nama '@stempel waktu' menjadi 'EventTime'.
2022-11-09
Peningkatan:
- Kolom 'ProviderGuid' dipetakan ke 'metadata.product_deployment_id'.
- Kolom 'ExecutionProcessID' dipetakan ke 'principal.process.pid'.
- Kolom 'ProcessID' atau 'Process ID' dipetakan ke 'principal.process.pid'.
- Kolom 'SourceModuleType' dipetakan ke 'principal.resource.resource_subtype'.
- Kolom 'SourceModuleName' dipetakan ke 'principal.resource.name'.
- Kolom 'Komputer' dipetakan ke 'principal.asset.asset_id'.
- Kolom 'MessageSourceAddress' dipetakan ke 'principal.ip'.
- Kolom 'File' dipetakan ke 'target.process.file.full_path'.
- Kolom 'Host Application' atau 'Command' dipetakan ke 'target.process.command_line'.
- Kolom 'Output' dipetakan ke 'security_result.detection_fields'.
- Kolom 'Pesan' dipetakan ke 'security_result.description'.
- Kolom 'ActivityID' dipetakan ke 'security_result.detection_fields'.
- Menambahkan pemetaan berikut saat EventID adalah '4103'
- Kolom 'Host ID' atau 'ContextInfo_Host ID' dipetakan ke 'target.asset.asset_id'.
- Kolom 'Nama Host' atau 'ContextInfo_Nama Host' dipetakan ke 'target.hostname'.
- Kolom 'ContextInfo_Script Name' dipetakan ke 'target.process.file.full_path'.
- Kolom 'ContextInfo_Host Application' dipetakan ke 'target.process.command_line'.
- Kolom 'ContextInfo_Command Name' dipetakan ke 'security_result.detection_fields'.
- Kolom 'ContextInfo_Command Type' dipetakan ke 'security_result.detection_fields'.
- Kolom 'ContextInfo_Sequence Number' atau 'Sequence Number' dipetakan ke 'security_result.detection_fields'.
- Menambahkan pemetaan berikut saat EventID adalah '800', '600', atau '400'
- Kolom 'UserId' dipetakan ke 'principal.user.userid'.
- Kolom 'HostApplication' dipetakan ke 'target.process.command_line'.
- Kolom 'HostId' dipetakan ke 'target.asset.asset_id'.
- Kolom 'HostName' dipetakan ke 'target.hostname'.
- Kolom 'ScriptName' dipetakan ke 'target.process.file.full_path'.
- Kolom 'SequenceNumber' dipetakan ke 'security_result.detection_fields'.
2022-10-13
Perbaikan bug:
- Mengurai log yang gagal dengan membuat perubahan berikut.
- Menambahkan pemeriksaan
on_error
pada kolom yang gagal mengurai jika tidak ada nilai. Kolom seperti 'opcode', 'Host Application'. - Menambahkan sumber baru,'ContextInfo' untuk penguraian KV saat 'Message' tidak ada dalam log.
- Peningkatan:
- Mengubah event_type dari
GENERIC_EVENT
menjadiSTATUS_UPDATE
.
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.