Mengumpulkan log Microsoft PowerShell

Didukung di:

Dokumen ini menjelaskan cara menyerap log Microsoft PowerShell ke Google Security Operations menggunakan agen Bindplane.

Microsoft PowerShell adalah framework otomatisasi tugas dan manajemen konfigurasi dari Microsoft, yang terdiri dari shell command line dan bahasa skrip. Log PowerShell mencatat eksekusi skrip, aktivitas modul, dan pemanggilan perintah, sehingga memberikan visibilitas ke operasi PowerShell untuk pemantauan keamanan dan analisis forensik.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Windows Server 2016 atau yang lebih baru
  • Konektivitas jaringan antara host Windows dan Google SecOps
  • Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
  • Akses administratif ke host Windows untuk mengonfigurasi logging PowerShell dan menginstal agen Bindplane

Mengonfigurasi logging PowerShell

Logging PowerShell harus diaktifkan di host Windows sebelum log dapat dikumpulkan. Secara default, logging PowerShell bersifat minimal. Aktifkan Logging Pemblokiran Skrip untuk merekam aktivitas PowerShell yang mendetail.

Mengaktifkan Script Block Logging menggunakan kebijakan grup

  1. Buka Local Group Policy Editor dengan menjalankan gpedit.msc sebagai administrator.
  2. Buka Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell.
  3. Klik dua kali Turn on PowerShell Script Block Logging.
  4. Pilih Enabled.
  5. Secara opsional, centang Log script block invocation start / stop events untuk mencatat peristiwa mulai dan berhenti untuk setiap blok skrip. Perhatikan bahwa opsi ini menghasilkan log dalam jumlah besar.
  6. Klik Oke.
  7. Buka Command Prompt sebagai administrator dan jalankan gpupdate /force untuk menerapkan kebijakan secara langsung.

Mengaktifkan Script Block Logging menggunakan registry

Atau, Anda dapat mengaktifkan Script Block Logging dengan menetapkan nilai registry berikut:

  1. Buka Registry Editor dengan menjalankan regedit sebagai administrator.
  2. Buka HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging.
  3. Jika kunci tidak ada, buat kunci tersebut.
  4. Buat DWORD (32-bit) Value baru bernama EnableScriptBlockLogging dan tetapkan nilainya ke 1.
  5. Mulai ulang sesi PowerShell agar perubahan diterapkan.

PowerShell Script Block Logging menulis peristiwa ke saluran log peristiwa Microsoft-Windows-PowerShell/Operational dengan ID Peristiwa 4104.

Opsional: Mengaktifkan logging modul

Logging Modul mencatat detail eksekusi pipeline untuk modul tertentu. Untuk mengaktifkan Module Logging untuk semua modul, lakukan hal berikut:

  1. Di Local Group Policy Editor, buka Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell.
  2. Klik dua kali Turn on Module Logging.
  3. Pilih Enabled.
  4. Klik Tampilkan di samping Nama Modul.
  5. Masukkan * untuk mencatat semua modul.
  6. Klik OK di jendela Module Names.
  7. Klik OK di jendela Module Logging.
  8. Jalankan gpupdate /force untuk menerapkan kebijakan.

Peristiwa Pencatatan Modul ditulis ke log peristiwa Windows PowerShell dengan ID Peristiwa 4103.

Opsional: Mengaktifkan transkripsi

Transkripsi membuat catatan berbasis teks dari semua input dan output sesi PowerShell. Untuk mengaktifkan Transkripsi, lakukan hal berikut:

  1. Di Local Group Policy Editor, buka Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell.
  2. Klik dua kali Turn on PowerShell Transcription.
  3. Pilih Enabled.
  4. Atau, tentukan Direktori output transkrip. Jika dibiarkan kosong, transkrip akan disimpan ke folder Dokumen setiap pengguna.
  5. Centang Sertakan header pemanggilan untuk menyertakan stempel waktu dan metadata.
  6. Klik Oke.
  7. Jalankan gpupdate /force untuk menerapkan kebijakan.

Transkrip ditulis ke file teks dengan nama yang diawali dengan PowerShell_transcript.

Mendapatkan kredensial Google SecOps untuk agen Bindplane

Untuk mengautentikasi agen Bindplane ke Google SecOps, pilih salah satu metode berikut:

  • Deployment baru: Gunakan Chronicle API (Opsi 1).
  • Deployment lama: Terus gunakan file autentikasi penyerapan (Opsi 2) hingga Ingestion API dihentikan pada 20 Juli 2027.
  1. Login ke Google Cloud konsol dan pilih project Google Cloud yang ditautkan ke instance Google SecOps Anda.
  2. Buka IAM & Admin > Service Accounts.
  3. Klik Create service account.
  4. Berikan detail konfigurasi berikut:
    • Service account name: Masukkan nama akun (misalnya, bindplane-ingest).
    • Deskripsi akun layanan: Masukkan deskripsi (misalnya, Bindplane agent log ingestion).
  5. Klik Create and continue.
  6. Di bagian Grant this service account access to project, klik Select a role, lalu pilih Chronicle Editor.
  7. Klik Continue lalu klik Done.
  8. Klik akun layanan yang Anda buat, lalu buka tab Keys.
  9. Klik Add key > Create new key.
  10. Pilih JSON, lalu klik Create. File kunci akan didownload ke komputer Anda.
  11. Simpan file kunci sebagai ingestion-auth.json di direktori Bindplane collector (/opt/observiq-otel-collector/ingestion-auth.json di Linux atau C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json di Windows), atau perbarui creds_file_path di config.yaml agar sesuai dengan jalur tempat Anda menyimpannya.
  12. Buka IAM & Admin > Settings dan salin Project number. Anda akan memerlukannya untuk konfigurasi pengekspor.

Opsi 2: Mendownload file autentikasi penyerapan (lama)

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download file autentikasi penyerapan.
  4. Simpan file dengan aman di sistem tempat agen Bindplane akan diinstal.

Mendapatkan ID pelanggan Google SecOps

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

Menginstal agen Bindplane

Instal agen Bindplane di host Windows Anda sesuai dengan petunjuk berikut.

Penginstalan 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
    
  3. Tunggu hingga penginstalan selesai.

  4. Verifikasi penginstalan dengan menjalankan:

    sc query observiq-otel-collector
    

    Layanan akan ditampilkan sebagai RUNNING.

Referensi penginstalan tambahan

Untuk mengetahui opsi penginstalan dan pemecahan masalah tambahan, lihat Panduan penginstalan agen Bindplane.

Mengonfigurasi agen Bindplane untuk mengumpulkan log PowerShell

Menemukan file konfigurasi Windows

  • Temukan file konfigurasi Windows sebagai berikut:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edit file konfigurasi

  • Ganti seluruh konten config.yaml dengan konfigurasi 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:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    
    service:
      pipelines:
        logs/powershell:
          receivers:
            - windowseventlog/powershell
          processors:
            - batch
          exporters:
            - chronicle/powershell
    

Parameter konfigurasi

Ganti placeholder berikut:

  • Konfigurasi penerima:

    • channel: Saluran Log Peristiwa Windows yang akan dikumpulkan. Untuk Logging Blok Skrip PowerShell, gunakan Microsoft-Windows-PowerShell/Operational. Untuk Logging Modul, gunakan Windows PowerShell.
    • raw: Tetapkan ke true untuk mengirim XML Log Peristiwa Windows mentah ke Google SecOps.
    • start_at: Setel ke end untuk mengumpulkan hanya peristiwa baru setelah agen dimulai. Setel ke beginning untuk mengumpulkan semua peristiwa yang ada.
  • Konfigurasi pengekspor:

    • <CUSTOMER_ID>: Ganti dengan ID pelanggan dari langkah sebelumnya.
    • creds_file_path: Jalur lengkap ke file kunci JSON akun layanan (Opsi 1). Salin file kredensial ke lokasi ini.
    • location: Ganti <LOCATION> dengan region instance Google SecOps Anda (misalnya, us, europe, atau asia-southeast1). Pengekspor akan menambahkan awalan chronicle.googleapis.com dengan nilai ini. Lihat Endpoint Regional untuk mengetahui daftar lengkapnya.
    • project: Ganti <PROJECT_NUMBER> dengan nomor project dari IAM & Admin > Settings.
    • endpoint: Tetap tetapkan ke chronicle.googleapis.com.

    • log_type: Tetapkan ke POWERSHELL untuk menggunakan parser PowerShell.

Pengekspor API penyerapan lama

  • Jika Anda menggunakan file autentikasi penyerapan dari Opsi 2, ganti blok exporters dengan kode berikut. Tetapkan creds_file_path ke jalur ke file autentikasi penyerapan, dan jika instance Anda berada di luar AS, ganti malachiteingestion-pa.googleapis.com dengan endpoint regional Anda (misalnya, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/powershell:
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    

Menyimpan file konfigurasi

Setelah mengedit, simpan file dengan mengklik File > Save.

Mulai ulang agen Bindplane untuk menerapkan perubahan

Windows

  • Menggunakan Command Prompt atau PowerShell sebagai administrator:

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  • Atau menggunakan konsol Services:

    1. Tekan Win+R, ketik services.msc, lalu tekan Enter.
    2. Cari observIQ OpenTelemetry Collector.
    3. Klik kanan, lalu pilih Mulai ulang.
    4. Pastikan layanan sedang berjalan:

      sc query observiq-otel-collector
      
    5. Periksa log untuk mengetahui error:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Memverifikasi penyerapan log

Setelah mengonfigurasi agen Bindplane dan memulai ulang layanan, log PowerShell akan mulai mengalir ke Google SecOps.

  1. Login ke konsol Google SecOps.
  2. Buka Investigasi > Penelusuran.
  3. Jalankan penelusuran berikut untuk memverifikasi bahwa log PowerShell sedang di-ingest:

    metadata.log_type = "POWERSHELL"
    
  4. Pastikan peristiwa muncul dengan stempel waktu terbaru.

Peristiwa PowerShell Script Block Logging (ID Peristiwa 4104) akan muncul dengan detail blok skrip yang dieksekusi, termasuk konten skrip, ID blok skrip, dan konteks eksekusi.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
HostId principal.resource.product_object_id ID unik untuk objek produk yang terkait dengan resource utama
System.Version metadata.product_version Versi produk yang menghasilkan peristiwa
System.EventId, EventID, winlog.event_id metadata.product_event_type Jenis peristiwa seperti yang ditentukan oleh produk
Computer, System.Computer, computer, winlog.computer_name principal.hostname Nama host entitas utama
Computer, System.Computer, computer, winlog.computer_name principal.asset.hostname Nama host aset yang terkait dengan akun utama
System.EventRecordID, RecordNumber, winlog.record_id metadata.product_log_id ID unik untuk entri log dalam sistem logging produk
System.Opcode, opcode, winlog.opcode metadata.description Deskripsi peristiwa atau konteks tambahan
ProviderGuid, winlog.provider_guid metadata.product_deployment_id ID unik untuk deployment produk
System.ProcessID, ProcessID, ExecutionProcessID, execution.process_id, winlog.process.pid principal.process.pid ID proses dari proses utama
SourceModuleName principal.resource.name Nama resource yang terkait dengan akun utama
SourceModuleType principal.resource.resource_subtype Subjenis resource yang terkait dengan prinsipal
security.user_id, UserID, winlog.user.identifier principal.user.windows_sid Pengidentifikasi Keamanan (SID) Windows untuk pengguna utama
metadata.event_type Jenis peristiwa (misalnya, USER_LOGIN, NETWORK_CONNECTION)
SourceName, winlog.provider_name metadata.product_name Nama produk yang menghasilkan peristiwa
AccountName, Username, UserName, winlog.user.name principal.user.userid ID pengguna utama
Domain, winlog.user.domain principal.administrative_domain Domain administratif akun utama
Path, target_file, ScriptName, script_name, ContextInfo_Script Name, file_path target.process.file.full_path Jalur lengkap ke file yang terkait dengan proses target
HostName, powershell.Host Name, ContextInfo_Host Name target.hostname Nama host entitas target
HostName, powershell.Host Name, ContextInfo_Host Name target.asset.hostname Nama host aset yang terkait dengan target
Host ID, HostID, ContextInfo_Host ID target.asset.asset_id ID unik untuk aset target
Nombre_de_comando, ContextInfo_Command Name, CommandName target.application Nama aplikasi yang terkait dengan target
HostApplication, ContextInfo_Host Application target.process.command_line Command line yang digunakan untuk meluncurkan proses target
ScriptBlockText target.process.command_line Command line yang digunakan untuk meluncurkan proses target
MessageSourceAddress principal.ip Alamat IP akun utama
MessageSourceAddress principal.asset.ip Alamat IP aset yang terkait dengan pemilik
Nombre_de_host principal.application Nama aplikasi yang terkait dengan akun utama
Version_de_host principal.platform_version Versi platform yang terkait dengan prinsipal
Id_de_host principal.resource.id ID unik untuk resource utama
Application_host principal.process.file.full_path Jalur lengkap ke file yang terkait dengan proses utama
HostApplication principal.process.command_line Command line yang digunakan untuk meluncurkan proses utama
Usuario, admin_domain principal.user.userid ID Pengguna dari pengguna utama
Usuario, admin_domain principal.administrative_domain Domain administratif akun utama
CommandLine principal.process.command_line Command line yang digunakan untuk meluncurkan proses utama
Mesin, machine_id principal.asset.asset_id ID unik untuk aset utama
Machine, platform_software principal.asset.platform_software.platform Jenis platform aset (misalnya, WINDOWS, LINUX)
Machine, platform_software principal.asset.platform_software.platform_version Versi software platform di aset
MessageSourceAddress intermediary.ip Alamat IP entitas perantara
MessageSourceAddress, Hostname intermediary.hostname Nama host entitas perantara
MessageSourceAddress, Hostname intermediary.asset.hostname Nama host aset yang terkait dengan perantara
MessageSourceAddress intermediary.port Nomor port yang digunakan oleh perantara
HostApplication target.process.command_line Command line yang digunakan untuk meluncurkan proses target
HostId target.asset.asset_id ID unik untuk aset target
SequenceNumber, ContextInfo_Sequence Number, Sequence Number security_result.detection_fields Key-value pair informasi deteksi tambahan
ProviderName principal.resource.attribute.labels Label atau atribut yang terkait dengan resource utama
NewEngineState additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
PreviousEngineState additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
ScriptName additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
ManagementGroupName additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
Sumber additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
RenderedDescription security_result.description Deskripsi hasil keamanan atau tindakan yang diambil
TenantId additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
NamaPengguna principal.user.userid ID Pengguna dari pengguna utama
ActivityID security_result.detection_fields Key-value pair informasi deteksi tambahan
ExecutionThreadID, execution.thread_id, winlog.process.thread.id security_result.detection_fields Key-value pair informasi deteksi tambahan
Output security_result.detection_fields Key-value pair informasi deteksi tambahan
Data security_result.detection_fields Key-value pair informasi deteksi tambahan
Data_1 additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
data_1 security_result.detection_fields Key-value pair informasi deteksi tambahan
Data_2 security_result.detection_fields Key-value pair informasi deteksi tambahan
winlog.activity_id security_result.detection_fields Key-value pair informasi deteksi tambahan
winlog.api additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
winlog.channel principal.resource.attribute.labels Label atau atribut yang terkait dengan resource utama
Offset additional.fields Kolom kustom tambahan yang tidak tercakup dalam skema UDM standar
SeverityValue security_result.detection_fields Key-value pair informasi deteksi tambahan
intermediary intermediary Detail tentang entitas perantara yang terlibat dalam peristiwa
security_result security_result Hasil keamanan keseluruhan, termasuk tindakan, tingkat keparahan, dan deteksi
metadata.vendor_name Nama vendor yang menghasilkan peristiwa
SourceName metadata.product_name Nama produk yang menghasilkan peristiwa
syslog_host event.idm.read_only_udm.intermediary.hostname Dipetakan dari log perubahan
Computer event.idm.read_only_udm.intermediary.hostname Dipetakan dari log perubahan
Version event.idm.read_only_udm.metadata.product_version Dipetakan dari log perubahan
Task event.idm.read_only_udm.security_result.detection_fields Dipetakan dari log perubahan
OpcodeValue event.idm.read_only_udm.security_result.detection_fields Dipetakan dari log perubahan
ThreadID event.idm.read_only_udm.security_result.detection_fields Dipetakan dari log perubahan
AccountType event.idm.read_only_udm.security_result.detection_fields Dipetakan dari log perubahan
Offset event1.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
SeverityValue event1.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
NewEngineState", "PreviousEngineState", "HostVersion", "RunspaceId", "SequenceNumber", "EngineVersion" and "PipelineId additional.fields Dipetakan dari log perubahan
Payload security_result.detection_fields Dipetakan dari log perubahan
Script Name target.file.full_path Dipetakan dari log perubahan
SystemTime metadata.event_timestamp Dipetakan dari log perubahan
channel", "keywords", "MessageNumber", "MessageTotal", and "ScriptBlockId security_result.detection_fields Dipetakan dari log perubahan
System.ProviderName principal.resource.attribute.labels Dipetakan dari log perubahan
HostVersion", "RunspaceId", "PipelineId", "EngineVersion", "DetailSequence", "DetailTotal", "SequenceNumber", and "ScriptName additional.fields Dipetakan dari log perubahan
System.EventRecordID", "System.Task", "System.Keywords", "System.Opcode", and "System.ThreadID security.detection_fields Dipetakan dari log perubahan
EventLevelName security_result.severity Dipetakan dari log perubahan
ManagementGroupName", "Source", "TenantId additional_fields Dipetakan dari log perubahan

Log Perubahan

Melihat Log Perubahan untuk parser ini

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