Mengumpulkan log Microsoft SQL Server
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
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Penyerapan. 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
Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.
Penginstalan 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.
Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps
- 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).
 
- Cari file 
- Edit file - config.yamlsebagai 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.jsonke 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
- Buka SQL Server Management Studio (SSMS) dan hubungkan ke instance SQL Server Anda.
- Di Object Explorer, luaskan instance server Anda.
- Luaskan folder Security.
- Klik kanan Audits, lalu pilih New Audit.
- 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.
 
- Nama audit: Masukkan 
- Klik OK untuk membuat audit.
- Di Object Explorer, klik kanan ChronicleAudit yang baru dibuat, lalu pilih Enable Audit.
Membuat Spesifikasi Audit Server melalui GUI SSMS
- Di Object Explorer, luaskan Security.
- Klik kanan Server Audit Specifications, lalu pilih New Server Audit Specification.
- Dalam dialog Create Server Audit Specification, berikan detail konfigurasi berikut:
- Nama: Masukkan ChronicleAuditSpec.
- Audit: Pilih ChronicleAudit dari menu.
 
- Nama: Masukkan 
- 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
 
- Klik OK untuk membuat spesifikasi audit.
- Di Object Explorer, klik kanan ChronicleAuditSpec yang baru dibuat, lalu pilih Enable Server Audit Specification.
Memverifikasi Konfigurasi Audit
- Di Object Explorer, luaskan Security > Audits.
- Klik kanan ChronicleAudit, lalu pilih Properties.
- Pastikan Status ditampilkan sebagai Dimulai atau Diaktifkan.
- Luaskan Keamanan > Spesifikasi Audit Server.
- Klik kanan ChronicleAuditSpec, lalu pilih Properties.
- Pastikan semua delapan grup tindakan audit tercantum dan spesifikasi diaktifkan.
Opsi 2: Mengaktifkan Audit SQL Server menggunakan T-SQL
- Buka SQL Server Management Studio (SSMS) dan hubungkan ke instance SQL Server Anda.
- 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
- 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
- Download NXLog Community Edition dari nxlog.co/downloads.
- Jalankan penginstal dan selesaikan wizard penginstalan.
- Buka file konfigurasi NXLog yang berada di: - C:\Program Files\nxlog\conf\nxlog.conf
- 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.1Host dengan alamat IP agen Bindplane.
- Pastikan nilai Port cocok dengan port penerima Bindplane udplogyang dikonfigurasi sebelumnya.
 
- Ganti nilai saat ini 
- 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.useridjika ada dalam log seperti Starting up database atau Log was backed up. | 
| AgentDevice | additional.fields | Ditambahkan sebagai pasangan nilai kunci ke additional.fieldsdengan kunci "AgentDevice". | 
| AgentLogFile | additional.fields | Ditambahkan sebagai pasangan nilai kunci ke additional.fieldsdengan kunci "AgentLogFile". | 
| agent.hostname | observer.asset.hostname | Dipetakan ke nama host pengamat. | 
| agent.id | observer.asset_id | Digabungkan dengan agent.typeuntuk membentukobserver.asset_id. | 
| agent.type | observer.asset_id | Digabungkan dengan agent.iduntuk membentukobserver.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_fieldsdengan kunci "correlationId". | 
| Date | metadata.event_timestamp | Digabungkan dengan Timeuntuk 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_fieldsdengan 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.provideruntuk membentukmetadata.product_event_type. | 
| event.provider | metadata.product_event_type | Digabungkan dengan event.codeuntuk membentukmetadata.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.labelsdengan 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.fieldsdengan 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.fieldsdengan 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.labelsdengan kunci "LSN Terakhir". | 
| level | security_result.severity | Jika "Informasional", tetapkan security_result.severityke "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_fieldsdengan kunci "operationId". | 
| operationName | metadata.product_event_type | Dipetakan ke jenis peristiwa produk. | 
| operationVersion | additional.fields | Ditambahkan sebagai pasangan nilai kunci ke additional.fieldsdengan kunci "operationVersion". | 
| ProcessInfo | additional.fields | Ditambahkan sebagai pasangan nilai kunci ke additional.fieldsdengan 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.fieldsdengan 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_fieldsdengan 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_fieldsdengan 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.fieldsdengan kunci "roles". | 
| properties.servicePrincipalId | principal.user.userid | Digunakan untuk ID pengguna utama jika properties.userIdtidak 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.fieldsdengan 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_fieldsdengan 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.labelsdengan 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 levelatauSeverity. | 
| 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 darilogin_resultuntuk 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.fieldsdengan kunci "Source". | 
| source | principal.resource.attribute.labels | Ditambahkan sebagai key-value pair ke principal.resource.attribute.labelsdengan kunci "source". | 
| SourceModuleType | observer.application | Memetakan ke aplikasi pengamat. | 
| SourceModuleName | additional.fields | Ditambahkan sebagai pasangan nilai kunci ke additional.fieldsdengan kunci "SourceModuleName". | 
| source_module_name | observer.labels | Ditambahkan sebagai pasangan nilai kunci ke observer.labelsdengan 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 Dateuntuk membuat stempel waktu acara. | 
| transaction_id | target.resource.attribute.labels | Ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labelsdengan 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.