Mengumpulkan log PowerShell

Didukung di:

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

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download File Autentikasi Proses Transfer. Simpan file dengan aman di sistem tempat Bindplane akan diinstal.

Mendapatkan ID pelanggan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Profil.
  3. Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.

Menginstal agen Bindplane di Windows

  1. Buka Command Prompt atau PowerShell sebagai administrator.
  2. Jalankan perintah berikut:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Referensi penginstalan tambahan

Mengonfigurasi agen Bindplane untuk menyerap Syslog dan mengirim ke Google SecOps

  1. Sebelum mengonfigurasi file YAML, hentikan Layanan observIQ Distro for Open Telemetry Collector di Panel Layanan.
  2. Akses file konfigurasi:

    1. Temukan file config.yaml. Biasanya, file ini berada di direktori /etc/bindplane-agent/ di Linux atau di direktori penginstalan di Windows.
    2. Buka file menggunakan editor teks (misalnya, nano, vi, atau Notepad).
  3. 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] 
    
  4. Ganti <customer_id> dengan ID pelanggan yang sebenarnya.

  5. Perbarui /path/to/ingestion-authentication-file.json ke jalur tempat file autentikasi disimpan di bagian Mendapatkan file autentikasi penyerapan Google SecOps.

  6. Setelah menyimpan file config.yaml, mulai Layanan observIQ 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 dari security_result.detection_fields menjadi target.process.command_line.

2025-01-28

Peningkatan:

  • Menambahkan gsub untuk mendukung format log JSON baru.

2025-01-09

Peningkatan:

  • Memetakan Payload ke security_result.detection_fields.
  • Memetakan Script Name ke target.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 ke metadata.product_version.
  • Memetakan SystemTime ke metadata.event_timestamp.
  • Memetakan channel, keywords, MessageNumber, MessageTotal, dan ScriptBlockId ke security_result.detection_fields.
  • Memetakan Path ke target.process.file.full_path.

2024-07-24

Peningkatan:

  • Menambahkan dukungan untuk pola log JSON baru.

2024-07-20

Peningkatan:

  • Memetakan HostApplication ke principal.application.
  • Memetakan HostId ke principal.resource.product_object_id.
  • Memetakan System.Computer ke principal.hostname dan principal.asset.hostname.
  • Memetakan System.Version ke metadata.product_version.
  • Memetakan System.ProcessID ke principal.process.pid.
  • Memetakan System.ProviderName ke principal.resource.attribute.labels.
  • Memetakan HostVersion, RunspaceId, PipelineId, EngineVersion, DetailSequence, DetailTotal, SequenceNumber, dan ScriptName ke additional.fields.
  • Memetakan System.EventRecordID, System.Task, System.Keywords, System.Opcode, dan System.ThreadID ke security.detection_fields.

2023-12-05

Peningkatan:

  • Menambahkan pemetaan untuk log JSON yang tidak diuraikan.
  • Memetakan Computer ke principal.hostname.
  • Memetakan EventLevelName ke security_result.severity.
  • Memetakan ManagementGroupName, Source, TenantId ke additional_fields.
  • Memetakan RenderedDescription ke security_result.description.
  • Memetakan UserName ke principal.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 menjadi STATUS_UPDATE.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.