Mengumpulkan log Oracle DB
Panduan ini menjelaskan cara menyerap log Oracle DB ke Google Security Operations menggunakan agen Bindplane.
Parser mengekstrak kolom dari pesan SYSLOG, menangani beberapa format menggunakan pola grok dan penguraian key-value. Kemudian, alat ini memetakan kolom yang diekstrak ke Model Data Terpadu (UDM), memperkaya data dengan metadata statis seperti nama vendor dan produk, serta menetapkan jenis peristiwa secara dinamis berdasarkan nilai kolom tertentu seperti ACTION dan USERID.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
Instance Google SecOps
Windows Server 2016 atau yang lebih baru, atau host Linux dengan
systemdKonektivitas jaringan antara agen Bindplane dan host Oracle Database
Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
Akses istimewa ke instance Oracle Database (peran SYSDBA atau AUDIT_ADMIN)
Oracle Database 19c atau yang lebih baru dengan pengauditan terpadu diaktifkan (atau pengauditan mode campuran di Oracle 12c–18c)
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" /quietTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sc query observiq-otel-collector
Layanan akan ditampilkan sebagai RUNNING.
Penginstalan Linux
- Buka terminal dengan hak istimewa root atau sudo.
Jalankan perintah berikut:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sudo systemctl status observiq-otel-collector
Layanan akan ditampilkan sebagai aktif (berjalan).
Referensi penginstalan tambahan
Untuk opsi penginstalan dan pemecahan masalah tambahan, lihat Panduan penginstalan agen BindPlane.
Mengonfigurasi agen BindPlane untuk menyerap syslog dan mengirimkannya ke Google SecOps
Cari file konfigurasi
Linux:
```bash
sudo nano /etc/bindplane-agent/config.yaml
```
Windows:
```cmd
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
```
Edit file konfigurasi
Ganti seluruh konten config.yaml dengan konfigurasi berikut:
```yaml
receivers:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/oracle_db:
compression: gzip
creds_file_path: '/path/to/ingestion-authentication-file.json'
customer_id: '<customer_id>'
endpoint: malachiteingestion-pa.googleapis.com
log_type: ORACLE_DB
raw_log_field: body
ingestion_labels:
log_type: 'ORACLE_DB'
service:
pipelines:
logs/oracle_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/oracle_db
```
Parameter konfigurasi
- Ganti placeholder berikut:
Konfigurasi penerima:
* listen_address: Alamat IP dan port yang akan diproses:
- Ganti 0.0.0.0 dengan alamat IP tertentu untuk memproses satu antarmuka, atau biarkan sebagai 0.0.0.0 untuk memproses semua antarmuka (direkomendasikan)
- Ganti 514 dengan nomor port yang cocok dengan konfigurasi penerusan syslog Oracle
Konfigurasi pengekspor:
* creds_file_path: Jalur lengkap ke file autentikasi penyerapan:
- Linux: /etc/bindplane-agent/ingestion-auth.json
- Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
* customer_id: ID Pelanggan yang disalin di bagian Dapatkan ID pelanggan Google SecOps
* endpoint: URL endpoint regional:
- Amerika Serikat: malachiteingestion-pa.googleapis.com
- Eropa: europe-malachiteingestion-pa.googleapis.com
- Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
- Lihat Endpoint Regional untuk daftar lengkap
Simpan file konfigurasi
- Setelah mengedit, simpan file:
- Linux: Tekan
Ctrl+O, laluEnter, laluCtrl+X - Windows: Klik File > Save
- Linux: Tekan
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:
sudo systemctl restart observiq-otel-collector- Pastikan layanan sedang berjalan:
sudo systemctl status observiq-otel-collector- Periksa log untuk mengetahui error:
sudo journalctl -u observiq-otel-collector -fUntuk memulai ulang agen Bindplane di Windows, pilih salah satu opsi berikut:
- Command Prompt atau PowerShell sebagai administrator:
net stop observiq-otel-collector && net start observiq-otel-collector- Konsol layanan:
- Tekan
Win+R, ketikservices.msc, lalu tekan Enter. - Temukan observIQ OpenTelemetry Collector.
- Klik kanan, lalu pilih Mulai Ulang.
- Tekan
- Pastikan layanan sedang berjalan:
sc query observiq-otel-collector- Periksa log untuk mengetahui error:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Mengonfigurasi pengauditan terpadu Oracle Database dan penerusan syslog
Mengaktifkan audit terpadu
Jika audit terpadu belum diaktifkan, tautkan kembali biner Oracle dengan opsi uniaud_on. Hal ini mengharuskan penonaktifan semua proses Oracle yang berjalan dari Oracle Home (instance database dan listener).
- Hubungkan ke host Oracle Database sebagai pengguna sistem operasi
oracle. Nonaktifkan instance dan pendengar Oracle:
sqlplus / as sysdba <<EOF shutdown immediate; exit EOF lsnrctl stopTautkan kembali biner Oracle dengan audit terpadu yang diaktifkan:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracleMulai pendengar dan instance Oracle:
lsnrctl start sqlplus / as sysdba <<EOF startup; exit EOFJika Oracle Enterprise Manager Cloud Control berjalan di host yang sama, mulai ulang:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl start omsPastikan audit terpadu diaktifkan. Hubungkan ke Oracle Database dengan SQLplus:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
Verifikasi bahwa perintah menampilkan satu baris dengan VALUE sama dengan TRUE.
Mengonfigurasi output syslog audit terpadu
Tetapkan parameter inisialisasi UNIFIED_AUDIT_SYSTEMLOG untuk menulis data audit terpadu ke syslog. Parameter ini diperkenalkan di Oracle 19c dan menggantikan parameter AUDIT_SYSLOG_LEVEL yang tidak digunakan lagi (yang hanya berlaku untuk audit tradisional).
- Hubungkan ke Oracle Database dengan SQLplus sebagai SYSDBA.
Tetapkan parameter
UNIFIED_AUDIT_SYSTEMLOG:- Pada sistem UNIX/Linux, setel parameter ke nilai
facility.priority:
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL7.INFO' SCOPE=SPFILE;- Pada sistem Windows, tetapkan parameter ke
TRUEuntuk menulis ke Windows Event Viewer:
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = TRUE SCOPE=SPFILE;- Pada sistem UNIX/Linux, setel parameter ke nilai
Opsional: Untuk menulis rekaman kebijakan audit terpadu umum dari container root CDB ke syslog di sistem UNIX/Linux, tetapkan parameter
UNIFIED_AUDIT_COMMON_SYSTEMLOG:ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;Mulai ulang instance Oracle Database agar perubahan parameter diterapkan:
SHUTDOWN IMMEDIATE; STARTUP;
Mengonfigurasi daemon syslog di host Oracle
Di host Oracle Database, konfigurasi daemon syslog untuk meneruskan entri log audit ke agen BindPlane.
- Login ke host Oracle Database sebagai
root. Buka file konfigurasi syslog:
- Di RHEL/CentOS/Oracle Linux dengan rsyslog:
sudo vi /etc/rsyslog.conf- Pada sistem lama dengan syslog:
sudo vi /etc/syslog.confTambahkan aturan penerusan yang cocok dengan fasilitas dan prioritas yang Anda konfigurasi di
UNIFIED_AUDIT_SYSTEMLOG. Misalnya, jika Anda menetapkanLOCAL7.INFO:- Untuk meneruskan melalui UDP (mencocokkan penerima
udplogBindplane):
local7.info @<BINDPLANE_HOST_IP>:514- Untuk meneruskan melalui TCP (jika Bindplane menggunakan penerima
tcplog):
local7.info @@<BINDPLANE_HOST_IP>:514- Untuk meneruskan melalui UDP (mencocokkan penerima
Ganti <BINDPLANE_HOST_IP> dengan alamat IP atau nama host sistem yang menjalankan agen Bindplane.
Note: A single `@` prefix indicates UDP forwarding. A double `@@` prefix indicates TCP forwarding. Ensure this matches the receiver type in the Bindplane `config.yaml`.
Opsional: Untuk juga menyimpan salinan lokal log audit, tambahkan baris berikut:
local7.info /var/log/oracle_audit.logSimpan file dan mulai ulang daemon syslog:
- Di RHEL/CentOS/Oracle Linux dengan rsyslog:
sudo systemctl restart rsyslog- Pada sistem lama dengan syslog:
sudo service syslog restart
Memverifikasi penerusan log audit
Buat peristiwa audit pengujian dengan melakukan tindakan yang dapat diaudit di Oracle Database. Misalnya, hubungkan sebagai pengguna dan jalankan:
SELECT * FROM DBA_USERS WHERE ROWNUM = 1;Periksa log agen Bindplane untuk pesan syslog masuk:
sudo journalctl -u observiq-otel-collector -fPastikan pesan syslog berisi tag
Oracle Unified Auditdengan pasangan nilai kunci sepertiTYPE,DBID,SESID,DBUSER,ACTION, danRETCODE.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
ACTION |
security_result.action_details |
Nilai ACTION dari log mentah dipetakan langsung ke kolom UDM ini. Logika tambahan diterapkan untuk menentukan security_result.action dan security_result.description berdasarkan nilai ACTION (misalnya, 100 dipetakan ke ALLOW dan Success). |
ACTION_NAME |
metadata.product_event_type |
Dipetakan secara langsung. |
ACTION_NUMBER |
additional.fields[action_number].value.string_value |
Dipetakan langsung dengan tombol Source Event. Juga digunakan bersama dengan kolom lain untuk mendapatkan metadata.event_type dan metadata.product_event_type. |
APPLICATION_CONTEXTS |
additional.fields[application_contexts_label].value.string_value |
Dipetakan langsung dengan tombol APPLICATION_CONTEXTS. |
AUDIT_POLICY |
additional.fields[audit_policy_label].value.string_value atau additional.fields[AUDIT_POLICY_#].value.string_value |
Jika AUDIT_POLICY berisi koma, AUDIT_POLICY akan dibagi menjadi beberapa label dengan kunci seperti AUDIT_POLICY_0, AUDIT_POLICY_1, dll. Jika tidak, AUDIT_POLICY akan dipetakan langsung dengan kunci AUDIT_POLICY. |
AUDIT_TYPE |
additional.fields[audit_type_label].value.string_value |
Dipetakan langsung dengan tombol AUDIT_TYPE. |
AUTHENTICATION_TYPE |
metadata.event_type, extensions.auth.type |
Digunakan untuk mendapatkan metadata.event_type sebagai USER_LOGIN jika auth_type (diekstrak dari AUTHENTICATION_TYPE) tidak kosong dan kondisi lainnya terpenuhi. extensions.auth.type disetel ke AUTHTYPE_UNSPECIFIED. |
CLIENT_ADDRESS |
principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid |
IP, port, dan protokol diekstrak menggunakan pola grok. Jika ada nama pengguna di kolom CLIENT_ADDRESS, nama pengguna tersebut dipetakan ke intermediary[host].user.userid. |
CLIENT_ID |
target.user.userid |
Dipetakan secara langsung. |
CLIENT_PROGRAM_NAME |
additional.fields[client_program_name_label].value.string_value |
Dipetakan langsung dengan tombol CLIENT_PROGRAM_NAME. |
CLIENT_TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Dipetakan langsung dengan tombol CLIENT_TERMINAL. |
CLIENT_USER |
target.user.user_display_name |
Dipetakan secara langsung. |
COMMENT$TEXT |
additional.fields[comment_text_label].value.string_value |
Dipetakan langsung dengan kunci comment_text setelah mengganti + dengan :. |
CURRENT_USER |
additional.fields[current_user_label].value.string_value |
Dipetakan langsung dengan tombol current_user. |
CURUSER |
additional.fields[current_user_label].value.string_value |
Dipetakan langsung dengan tombol current_user. |
DATABASE_USER |
principal.user.user_display_name |
Dipetakan secara langsung jika tidak kosong atau /. |
DBID |
metadata.product_log_id |
Dipetakan secara langsung setelah menghapus tanda petik tunggal. |
DBNAME |
target.resource.resource_type, target.resource.resource_subtype, target.resource.name |
Menetapkan resource_type ke DATABASE, resource_subtype ke Oracle Database, dan memetakan DBNAME ke name. |
DBPROXY_USERRNAME |
intermediary[dbproxy].user.userid |
Dipetakan secara langsung. |
DBUSERNAME |
target.user.user_display_name |
Dipetakan secara langsung. |
ENTRYID |
target.resource.attribute.labels[entry_id_label].value |
Dipetakan langsung dengan tombol Entry Id. |
EXTERNAL_USERID |
additional.fields[external_userid_label].value.string_value |
Dipetakan langsung dengan tombol EXTERNAL_USERID. |
LENGTH |
additional.fields[length_label].value.string_value |
Dipetakan langsung dengan tombol length. |
LOGOFF$DEAD |
target.resource.attribute.labels[LOGOFFDEAD_label].value |
Dipetakan langsung dengan tombol LOGOFFDEAD. |
LOGOFF$LREAD |
target.resource.attribute.labels[LOGOFFLREAD_label].value |
Dipetakan langsung dengan tombol LOGOFFLREAD. |
LOGOFF$LWRITE |
target.resource.attribute.labels[LOGOFFLWRITE_label].value |
Dipetakan langsung dengan tombol LOGOFFLWRITE. |
LOGOFF$PREAD |
target.resource.attribute.labels[LOGOFFPREAD_label].value |
Dipetakan langsung dengan tombol LOGOFFPREAD. |
NTIMESTAMP# |
metadata.event_timestamp |
Diuraikan dan dikonversi ke format RFC 3339 atau ISO8601. |
OBJCREATOR |
target.resource.attribute.labels[obj_creator_label].value |
Dipetakan langsung dengan tombol OBJ Creator. |
OBJNAME |
target.resource.attribute.labels[obj_name_label].value |
Dipetakan langsung dengan tombol OBJ Name. |
OS_USERNAME |
principal.user.user_display_name |
Dipetakan secara langsung. |
OSUSERID |
target.user.userid |
Dipetakan secara langsung. |
PDB_GUID |
principal.resource.product_object_id |
Dipetakan secara langsung. |
PRIV$USED |
additional.fields[privused_label].value.string_value |
Dipetakan langsung dengan tombol privused. |
PRIVILEGE |
principal.user.attribute.permissions.name |
Dipetakan secara langsung. |
RETURN_CODE |
security_result.summary |
Dipetakan secara langsung. Logika diterapkan untuk mendapatkan security_result.action dan security_result.description. |
RETURNCODE |
security_result.summary |
Dipetakan secara langsung. Logika diterapkan untuk mendapatkan security_result.action dan security_result.description. |
RLS_INFO |
additional.fields[rls_info_label].value.string_value |
Dipetakan langsung dengan tombol RLS_INFO. |
SCHEMA |
additional.fields[schema_label].value.string_value |
Dipetakan langsung dengan tombol schema. |
SESSIONCPU |
target.resource.attribute.labels[SESSIONCPU_label].value |
Dipetakan langsung dengan tombol SESSIONCPU. |
SESSIONID |
network.session_id |
Dipetakan secara langsung. |
SESID |
network.session_id |
Dipetakan secara langsung. |
SQL_TEXT |
target.process.command_line |
Dipetakan secara langsung. |
SQLTEXT |
target.process.command_line |
Dipetakan secara langsung. |
STATEMENT |
target.resource.attribute.labels[statement_label].value |
Dipetakan langsung dengan tombol STATEMENT. |
STATUS |
security_result.summary |
Dipetakan secara langsung. Logika diterapkan untuk mendapatkan security_result.action dan security_result.description. |
SYSTEM_PRIVILEGE_USED |
additional.fields[system_privilege_used_label].value.string_value |
Dipetakan langsung dengan tombol SYSTEM_PRIVILEGE_USED. |
TARGET_USER |
additional.fields[target_user_label].value.string_value |
Dipetakan langsung dengan tombol TARGET_USER. |
TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Dipetakan langsung dengan tombol CLIENT_TERMINAL. |
TYPE |
additional.fields[type_label].value.string_value |
Dipetakan langsung dengan tombol type. |
USERHOST |
principal.hostname, principal.administrative_domain |
Nama host dan domain diekstrak menggunakan pola grok. |
USERID |
principal.user.userid |
Dipetakan secara langsung. |
device_host_name |
target.hostname |
Dipetakan secara langsung. |
event_name |
metadata.product_event_type |
Dipetakan secara langsung setelah dikonversi menjadi huruf besar. |
file_name |
target.file.full_path |
Dipetakan secara langsung. |
hostname |
principal.hostname |
Dipetakan secara langsung. |
length |
additional.fields[length_label].value.string_value |
Dipetakan langsung dengan tombol length. |
log_source_name |
principal.application |
Dipetakan secara langsung. |
message |
Bervariasi | Digunakan untuk parsing grok guna mengekstrak beberapa kolom. |
returncode |
RETURNCODE |
Dipetakan secara langsung. |
src_ip |
principal.ip |
Dipetakan secara langsung. |
t_hostname |
target.hostname |
Dipetakan secara langsung. |
| (Logika Parser) | metadata.vendor_name |
Hardcode ke Oracle. |
| (Logika Parser) | metadata.product_name |
Hardcode ke Oracle DB. |
| (Logika Parser) | metadata.event_type |
Ditentukan berdasarkan nilai ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name, database_name. Nilai defaultnya adalah USER_RESOURCE_ACCESS jika tidak ada kondisi tertentu yang terpenuhi. |
| (Logika Parser) | metadata.product_event_type |
Ditentukan berdasarkan nilai ACTION, ACTION_NUMBER, source_event, p_event_type, ACTION_NAME. |
| (Logika Parser) | metadata.log_type |
Hardcode ke ORACLE_DB. |
| (Logika Parser) | extensions.auth.mechanism |
Ditetapkan ke USERNAME_PASSWORD dalam kondisi tertentu berdasarkan ACTION, ACTION_NUMBER, source_event, dan OSUSERID. |
| (Logika Parser) | extensions.auth.type |
Disetel ke AUTHTYPE_UNSPECIFIED dalam kondisi tertentu berdasarkan ACTION, ACTION_NUMBER, dan AUTHENTICATION_TYPE. |
| (Logika Parser) | security_result.description |
Berasal dari RETURNCODE atau STATUS. |
| (Logika Parser) | security_result.action |
Berasal dari RETURNCODE atau STATUS. |
| (Logika Parser) | target.resource.attribute.labels |
Beberapa label ditambahkan berdasarkan keberadaan dan nilai berbagai kolom log. |
| (Logika Parser) | additional.fields |
Beberapa kolom ditambahkan sebagai pasangan nilai kunci berdasarkan keberadaan dan nilai berbagai kolom log. |
| (Logika Parser) | intermediary |
Dibuat dan diisi berdasarkan keberadaan dan nilai DBPROXY_USERRNAME dan CLIENT_ADDRESS. |
| (Logika Parser) | network.ip_protocol |
Diperoleh dari protokol yang diekstrak dari CLIENT_ADDRESS menggunakan file include parse_ip_protocol.include. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.