Mengumpulkan log Microsoft SQL Server

Didukung di:

Dokumen ini menjelaskan cara menyerap log Microsoft SQL Server ke Google Security Operations menggunakan BindPlane. Parser menangani log Microsoft SQL Server terstruktur (JSON, key-value pair) dan semi-terstruktur (syslog). Proses ini mengekstrak kolom, menormalisasi stempel waktu, menangani berbagai format log berdasarkan konten SourceModuleType dan Message (termasuk peristiwa audit, login, dan database), serta memetakannya ke UDM. Agen ini juga melakukan logika parsing khusus untuk catatan audit, upaya login, dan operasi database, yang memperkaya data dengan informasi konteks dan tingkat keparahan tambahan.Agen ini mengumpulkan log Audit dan Error SQL Server dari Log Peristiwa Windows menggunakan penerus syslog (NXLog) dan mengirimkannya ke agen BindPlane untuk dikirimkan ke Google SecOps.

Sebelum memulai

Pastikan Anda memenuhi prasyarat berikut:

  • Instance Google SecOps
  • Host Windows Server 2016 atau yang lebih baru yang menjalankan Microsoft SQL Server
  • Akses administratif untuk menginstal dan mengonfigurasi Agen BindPlane dan NXLog
  • Jika berjalan di belakang proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane

Mendapatkan file autentikasi penyerapan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Download File Autentikasi Penyerapan. 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

Instal agen Bindplane di sistem operasi Windows atau Linux 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
    

Referensi penginstalan tambahan

Untuk opsi penginstalan tambahan, lihat panduan penginstalan.

Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps

  1. Akses file konfigurasi:
    • Cari file config.yaml. Biasanya, ada di direktori `C:\Program Files\observIQ\bindplane-agent` di Windows.
    • Buka file menggunakan editor teks (misalnya, nano, vi, atau Notepad).
  2. Edit file config.yaml sebagai berikut:

      receivers:
      udplog:
         # Replace the port and IP address as required
         listen_address: "0.0.0.0:1514"
    
      exporters:
      chronicle/chronicle_w_labels:
         compression: gzip
         # Adjust the path to the credentials file you downloaded in Step 1
         creds_file_path: '/path/to/ingestion-authentication-file.json'
         # Replace with your actual customer ID from Step 2
         customer_id: <YOUR_CUSTOMER_ID>
         endpoint: malachiteingestion-pa.googleapis.com
         # Add optional ingestion labels for better organization
         log_type: 'MICROSOFT_SQL'
         raw_log_field: body
         ingestion_labels:
    
      service:
      pipelines:
         logs/source0__chronicle_w_labels-0:
            receivers:
            - udplog
            exporters:
            - chronicle/chronicle_w_labels
    
    • Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.
    • Ganti <customer_id> dengan ID pelanggan yang sebenarnya.
    • Perbarui /path/to/ingestion-authentication-file.json ke jalur tempat file autentikasi disimpan di bagian Dapatkan file autentikasi penyerapan Google SecOps.

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
    

Mengaktifkan Audit SQL Server di Log Peristiwa Windows

Anda dapat mengaktifkan Audit SQL Server menggunakan GUI SQL Server Management Studio (SSMS) atau perintah T-SQL. Pilih opsi yang paling sesuai dengan lingkungan Anda.

Opsi 1: Mengaktifkan Audit SQL Server melalui GUI SSMS

Membuat Audit Server di UI SQL Server Management Studio

  1. Buka SQL Server Management Studio (SSMS) dan hubungkan ke instance SQL Server Anda.
  2. Di Object Explorer, luaskan instance server Anda.
  3. Luaskan folder Security.
  4. Klik kanan Audits, lalu pilih New Audit.
  5. Dalam dialog Buat Audit, berikan detail konfigurasi berikut:
    • Nama audit: Masukkan ChronicleAudit.
    • Penundaan antrean (dalam milidetik): Masukkan 1000.
    • Saat log audit gagal: Pilih Lanjutkan.
    • Tujuan audit: Pilih Log Aplikasi.
  6. Klik OK untuk membuat audit.
  7. Di Object Explorer, klik kanan ChronicleAudit yang baru dibuat, lalu pilih Enable Audit.

Membuat Spesifikasi Audit Server melalui GUI SSMS

  1. Di Object Explorer, luaskan Security.
  2. Klik kanan Server Audit Specifications, lalu pilih New Server Audit Specification.
  3. Dalam dialog Create Server Audit Specification, berikan detail konfigurasi berikut:
    • Nama: Masukkan ChronicleAuditSpec.
    • Audit: Pilih ChronicleAudit dari menu.
  4. Di bagian Jenis Tindakan Audit, klik Tambahkan, lalu pilih grup tindakan audit berikut (tambahkan setiap grup satu per satu dengan mengklik Tambahkan setelah memilih setiap grup):
    • FAILED_LOGIN_GROUP
    • SUCCESSFUL_LOGIN_GROUP
    • LOGOUT_GROUP
    • SERVER_ROLE_MEMBER_CHANGE_GROUP
    • DATABASE_OBJECT_CHANGE_GROUP
    • DATABASE_PRINCIPAL_CHANGE_GROUP
    • SCHEMA_OBJECT_CHANGE_GROUP
    • DATABASE_PERMISSION_CHANGE_GROUP
  5. Klik OK untuk membuat spesifikasi audit.
  6. Di Object Explorer, klik kanan ChronicleAuditSpec yang baru dibuat, lalu pilih Enable Server Audit Specification.

Memverifikasi Konfigurasi Audit

  1. Di Object Explorer, luaskan Security > Audits.
  2. Klik kanan ChronicleAudit, lalu pilih Properties.
  3. Pastikan Status ditampilkan sebagai Dimulai atau Diaktifkan.
  4. Luaskan Keamanan > Spesifikasi Audit Server.
  5. Klik kanan ChronicleAuditSpec, lalu pilih Properties.
  6. Pastikan semua delapan grup tindakan audit tercantum dan spesifikasi diaktifkan.

Opsi 2: Mengaktifkan Audit SQL Server menggunakan T-SQL

  1. Buka SQL Server Management Studio (SSMS) dan hubungkan ke instance SQL Server Anda.
  2. Jalankan perintah T-SQL berikut untuk membuat audit server yang menulis ke Log Aplikasi Windows:

    USE master;
    GO
    
    CREATE SERVER AUDIT ChronicleAudit
    TO APPLICATION_LOG
    WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
    GO
    
    ALTER SERVER AUDIT ChronicleAudit WITH (STATE = ON);
    GO
    
  3. Buat spesifikasi audit untuk merekam peristiwa keamanan yang relevan:

    CREATE SERVER AUDIT SPECIFICATION ChronicleAuditSpec
    FOR SERVER AUDIT ChronicleAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (LOGOUT_GROUP),
    ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP),
    ADD (DATABASE_PERMISSION_CHANGE_GROUP);
    GO
    
    ALTER SERVER AUDIT SPECIFICATION ChronicleAuditSpec WITH (STATE = ON);
    GO
    

Konfigurasi ini memastikan peristiwa autentikasi, perubahan izin, dan modifikasi objek dicatat ke Log Peristiwa Windows.

Menginstal dan mengonfigurasi NXLog untuk meneruskan peristiwa ke BindPlane

  1. Download NXLog Community Edition dari nxlog.co/downloads.
  2. Jalankan penginstal dan selesaikan wizard penginstalan.
  3. Buka file konfigurasi NXLog yang berada di:

    C:\Program Files\nxlog\conf\nxlog.conf
    
  4. Ganti konten dengan konfigurasi berikut:

    define ROOT C:\Program Files\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log
    
    <Extension _json>
       Module      xm_json
    </Extension>
    
    <Input in_eventlog>
       Module      im_msvistalog
       Query       <QueryList>\
                      <Query Id="0">\
                            <Select Path="Application">*[System[Provider[@Name='MSSQLSERVER']]]</Select>\
                      </Query>\
                   </QueryList>
    </Input>
    
    <Output out_syslog>
       Module      om_udp
       Host        127.0.0.1
       Port        1514
       Exec        to_json();
    </Output>
    
    <Route r1>
       Path        in_eventlog => out_syslog
    </Route>
    
    • Ganti nilai saat ini 127.0.0.1 Host dengan alamat IP agen Bindplane.
    • Pastikan nilai Port cocok dengan port penerima Bindplane udplog yang dikonfigurasi sebelumnya.
  5. Simpan file dan mulai ulang layanan NXLog:

    net stop nxlog && net start nxlog
    

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
AccountName principal.user.userid Digunakan untuk principal.user.userid jika ada dalam log seperti Starting up database atau Log was backed up.
AgentDevice additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "AgentDevice".
AgentLogFile additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "AgentLogFile".
agent.hostname observer.asset.hostname Dipetakan ke nama host pengamat.
agent.id observer.asset_id Digabungkan dengan agent.type untuk membentuk observer.asset_id.
agent.type observer.asset_id Digabungkan dengan agent.id untuk membentuk observer.asset_id.
agent.version observer.platform_version Memetakan ke versi platform pengamat.
ApplicationName principal.application Memetakan ke aplikasi utama.
application_name target.application Memetakan ke aplikasi target.
client_address principal.ip Digunakan untuk IP utama jika berbeda dari host dan bukan pipe lokal atau bernama.
client_ip principal.ip Memetakan ke IP utama.
computer_name about.hostname Memetakan ke nama host about.
correlationId security_result.detection_fields Ditambahkan sebagai pasangan nilai kunci ke security_result.detection_fields dengan kunci "correlationId".
Date metadata.event_timestamp Digabungkan dengan Time untuk membuat stempel waktu acara.
database_name target.resource_ancestors.name Digunakan untuk nama ancestor resource target jika ada di log audit.
durationMs network.session_duration.seconds Dikonversi dari milidetik ke detik dan dipetakan.
ecs.version metadata.product_version Memetakan ke versi produk.
error security_result.detection_fields Ditambahkan sebagai pasangan nilai kunci ke security_result.detection_fields dengan kunci "error".
err_msg security_result.description Dipetakan ke deskripsi hasil keamanan.
EventID metadata.product_event_type Digunakan untuk membuat jenis peristiwa produk jika kolom lain tidak tersedia, dengan awalan "EventID: ".
event.action Source Digunakan sebagai sumber jika ada.
event.code metadata.product_event_type Digabungkan dengan event.provider untuk membentuk metadata.product_event_type.
event.provider metadata.product_event_type Digabungkan dengan event.code untuk membentuk metadata.product_event_type.
EventReceivedTime metadata.ingested_timestamp Diuraikan dan digunakan sebagai stempel waktu yang di-ingest.
event_time metadata.event_timestamp Diuraikan dan digunakan sebagai stempel waktu peristiwa.
file_name principal.process.file.full_path Memetakan ke jalur lengkap file proses utama.
file_path target.file.full_path Digunakan untuk jalur lengkap file target jika ditemukan di log pencadangan.
first_lsn target.resource.attribute.labels Ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labels dengan kunci "LSN Pertama".
host principal.hostname, observer.hostname Digunakan untuk nama host utama atau pengamat jika bukan IP. Juga digunakan untuk nama host atau IP target, bergantung pada apakah itu IP atau bukan.
host.ip principal.ip Digabungkan ke IP utama.
host.name host Digunakan sebagai host jika ada.
Hostname principal.hostname, target.hostname Digunakan untuk nama host utama atau target jika ada.
hostinfo.architecture principal.asset.hardware.cpu_platform Dipetakan ke platform CPU hardware aset utama.
hostinfo.os.build additional.fields Ditambahkan sebagai key-value pair ke additional.fields dengan kunci "os_build".
hostinfo.os.kernel principal.platform_patch_level Memetakan ke tingkat patch platform utama.
hostinfo.os.name additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "os_name".
hostinfo.os.platform principal.platform Huruf kapital dan dipetakan ke platform utama.
hostinfo.os.version principal.platform_version Memetakan ke versi platform utama.
last_lsn target.resource.attribute.labels Ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labels dengan kunci "LSN Terakhir".
level security_result.severity Jika "Informasional", tetapkan security_result.severity ke "INFORMATIONAL".
log.level security_result.severity_details Memetakan ke detail tingkat keparahan hasil keamanan.
LoginName principal.user.userid Digunakan untuk ID pengguna utama jika ada di log KV.
login_result security_result.action Menentukan tindakan hasil keamanan (ALLOW atau BLOCK).
logon_user principal.user.userid Digunakan untuk ID pengguna utama jika ada di log login.
logstash.process.host intermediary.hostname Memetakan ke nama host perantara.
Message metadata.description, security_result.description Digunakan untuk deskripsi peristiwa atau deskripsi hasil keamanan, bergantung pada jenis log.
msg metadata.description Digunakan untuk deskripsi acara jika ada.
ObjectName target.resource.name Dipetakan ke nama resource target.
object_name target.resource.name Digunakan untuk nama resource target jika ada di log audit.
ObjectType target.resource.type Memetakan ke jenis resource target.
operationId security_result.detection_fields Ditambahkan sebagai pasangan nilai kunci ke security_result.detection_fields dengan kunci "operationId".
operationName metadata.product_event_type Dipetakan ke jenis peristiwa produk.
operationVersion additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "operationVersion".
ProcessInfo additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "ProcessInfo".
properties.apiVersion metadata.product_version Memetakan ke versi produk.
properties.appId target.resource.product_object_id Dipetakan ke ID objek produk resource target.
properties.clientAuthMethod extensions.auth.auth_details Digunakan untuk menentukan detail autentikasi.
properties.clientRequestId additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "clientRequestId".
properties.durationMs network.session_duration.seconds Dikonversi menjadi detik dan dipetakan.
properties.identityProvider security_result.detection_fields Ditambahkan sebagai pasangan nilai kunci ke security_result.detection_fields dengan kunci "identityProvider".
properties.ipAddress principal.ip, principal.asset.ip Diuraikan untuk IP dan digabungkan ke IP utama dan IP aset utama.
properties.location principal.location.name Dipetakan ke nama lokasi utama.
properties.operationId security_result.detection_fields Ditambahkan sebagai pasangan nilai kunci ke security_result.detection_fields dengan kunci "operationId".
properties.requestId metadata.product_log_id Dipetakan ke ID log produk.
properties.requestMethod network.http.method Dipetakan ke metode HTTP jaringan.
properties.requestUri target.url Memetakan ke URL target.
properties.responseSizeBytes network.received_bytes Dikonversi menjadi bilangan bulat tidak bertanda dan dipetakan.
properties.responseStatusCode network.http.response_code Dikonversi menjadi bilangan bulat dan dipetakan.
properties.roles additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "roles".
properties.servicePrincipalId principal.user.userid Digunakan untuk ID pengguna utama jika properties.userId tidak ada.
properties.signInActivityId network.session_id Memetakan ke ID sesi jaringan.
properties.tenantId metadata.product_deployment_id Dipetakan ke ID deployment produk.
properties.tokenIssuedAt additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "tokenIssuedAt".
properties.userAgent network.http.user_agent Memetakan ke agen pengguna HTTP jaringan.
properties.userId principal.user.userid Digunakan untuk ID pengguna utama jika ada.
properties.wids security_result.detection_fields Ditambahkan sebagai key-value pair ke security_result.detection_fields dengan kunci "wids".
reason security_result.summary Digunakan untuk ringkasan hasil keamanan dalam peristiwa login.
resourceId target.resource.attribute.labels Ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labels dengan kunci "ID Resource".
schema_name target.resource_ancestors.resource_subtype Digunakan untuk subjenis ancestor resource target jika ada di log audit.
security_result.description metadata.description Digunakan untuk deskripsi peristiwa jika bukan peristiwa audit.
security_result.severity security_result.severity Memetakan secara langsung jika ada. Disetel ke "RENDAH" untuk log KV, "INFORMASI" untuk pesan error tertentu, dan berasal dari kolom level atau Severity.
security_result.severity_details security_result.severity_details Memetakan secara langsung jika ada.
security_result.summary security_result.summary Memetakan secara langsung jika ada. Disetel ke "Koneksi dibuat menggunakan autentikasi Windows" atau alasan tertentu dari peristiwa login, atau "SQL Server Audit Record" untuk peristiwa audit.
security_result_action security_result.action Digabungkan ke dalam security_result.action. Ditetapkan ke "ALLOW" untuk sebagian besar peristiwa, dan berasal dari login_result untuk peristiwa login.
server_instance_name target.hostname Digunakan untuk nama host target jika ada di log audit.
server_principal_name principal.user.userid Digunakan untuk ID pengguna utama jika ada di log audit.
server_principal_sid principal.asset_id Digunakan untuk membuat ID aset utama, dengan awalan "server SID:".
session_id network.session_id Digunakan untuk ID sesi jaringan jika ada di log audit.
sev security_result.severity Digunakan untuk menentukan tingkat keparahan hasil keamanan.
Severity security_result.severity Digunakan untuk menentukan tingkat keparahan hasil keamanan.
Source additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "Source".
source principal.resource.attribute.labels Ditambahkan sebagai key-value pair ke principal.resource.attribute.labels dengan kunci "source".
SourceModuleType observer.application Memetakan ke aplikasi pengamat.
SourceModuleName additional.fields Ditambahkan sebagai pasangan nilai kunci ke additional.fields dengan kunci "SourceModuleName".
source_module_name observer.labels Ditambahkan sebagai pasangan nilai kunci ke observer.labels dengan kunci "SourceModuleName".
source_module_type observer.application Memetakan ke aplikasi pengamat.
SPID network.session_id Memetakan ke ID sesi jaringan.
statement target.process.command_line Digunakan untuk command line proses target jika ada di log audit.
TextData security_result.description, metadata.description Digunakan untuk deskripsi hasil keamanan jika bukan peristiwa login, atau deskripsi peristiwa jika merupakan peristiwa login.
time metadata.event_timestamp Diuraikan dan digunakan sebagai stempel waktu peristiwa.
Time metadata.event_timestamp Digabungkan dengan Date untuk membuat stempel waktu acara.
transaction_id target.resource.attribute.labels Ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labels dengan kunci "transaction_id".
UserID principal.user.windows_sid Digunakan untuk SID Windows pengguna utama jika ada dan dalam format yang benar.
user_id principal.user.userid Digunakan untuk ID pengguna utama jika ada.
metadata.log_type metadata.log_type Dikodekan secara permanen ke "MICROSOFT_SQL".
metadata.vendor_name metadata.vendor_name Dikodekan secara permanen ke "Microsoft".
metadata.product_name metadata.product_name Dikodekan secara permanen ke "SQL Server".
metadata.event_type metadata.event_type Disetel ke berbagai nilai, bergantung pada konten log, termasuk "USER_LOGIN", "USER_LOGOUT", "STATUS_STARTUP", "STATUS_SHUTDOWN", "NETWORK_HTTP", "GENERIC_EVENT", dan "STATUS_UNCATEGORIZED" sebagai default.
extensions.auth.type extensions.auth.type Setel ke "MACHINE" untuk peristiwa login dan logout.

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