Mengumpulkan log Oracle DB
Dokumen ini menjelaskan cara menyerap log Oracle DB ke Google Security Operations menggunakan Bindplane. Parser mengekstrak kolom dari pesan SYSLOG, yang menangani beberapa format menggunakan pola grok dan penguraian nilai kunci. Kemudian, pemrosesan ini akan memetakan kolom yang diekstrak ini ke Unified Data Model (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
. Parser juga
menangani berbagai operasi pembersihan data seperti mengganti karakter dan
mengonversi jenis data.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Windows 2016 atau yang lebih baru, atau host Linux dengan
systemd
- Jika berjalan di belakang proxy, port firewall terbuka
- Akses dengan hak istimewa (Peran AUDIT_SYSTEM) ke database Oracle
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Proses Transfer. 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
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
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.sh
Referensi penginstalan tambahan
Untuk opsi penginstalan tambahan, lihat panduan penginstalan.
Mengonfigurasi agen Bindplane untuk menyerap Syslog dan mengirim ke Google SecOps
- Akses file konfigurasi:
- Temukan file
config.yaml
. Biasanya, file ini berada di direktori/etc/bindplane-agent/
di Linux atau di direktori penginstalan di Windows. - Buka file menggunakan editor teks (misalnya,
nano
,vi
, atau Notepad).
- Temukan file
Edit file
config.yaml
sebagai berikut:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" 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: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'ORACLE_DB' raw_log_field: body 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 Mendapatkan file autentikasi penyerapan Google SecOps.
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:
sudo systemctl restart bindplane-agent
Untuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:
net stop BindPlaneAgent && net start BindPlaneAgent
Mengaktifkan Audit untuk Database Oracle
- Menghubungkan ke Database Oracle dengan SQLplus.
Nonaktifkan database dengan perintah berikut:
shutdown immediate
Hentikan layanan pemroses Oracle dengan mengetik perintah berikut:
lsnrctl stop
Opsional: Hanya jika berlaku, hentikan Enterprise Manager menggunakan perintah berikut:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl stop oms
Tautkan Oracle DB dengan opsi uniaud menggunakan perintah berikut:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracle
Menghubungkan ke Database Oracle dengan SQLplus.
Mulai ulang database menggunakan perintah berikut:
startup
Mulai ulang layanan pemroses Oracle menggunakan perintah berikut:
lsnrctl start
Opsional: Hanya jika berlaku, mulai ulang Enterprise Manager menggunakan perintah berikut:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl start oms
Pastikan pengauditan terpadu diaktifkan, hubungkan ke database Oracle dengan SQLplus, lalu ketik perintah berikut:
select * from v$option where PARAMETER = 'Unified Auditing';
Verifikasi bahwa perintah menampilkan satu baris dengan VALUE sama dengan "BENAR".
Mengonfigurasi Syslog untuk Database Oracle
- Login ke instance Oracle.
Buka file berikut menggunakan
vi
:vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
Masukkan perintah berikut untuk konfigurasi syslog:
*.audit_trail='os' *.audit_syslog_level='local0.info'
Pastikan daemon syslog di host Oracle dikonfigurasi untuk meneruskan log audit.
Di Red Hat Enterprise, buka file
/etc/syslog.conf
berikut menggunakanvi
dan masukkan baris berikut:local0.info @ <bindplane-ip>:514
Simpan dan keluar dari file:
:wq
Di Red Hat Enterprise, ketik perintah berikut untuk memuat ulang konfigurasi syslog:
kill -HUP /var/run/syslogd.pid
Hubungkan ke SQLplus dan login sebagai sysdba untuk memulai ulang:
sys as sysdba
Nonaktifkan database dengan perintah berikut:
shutdown immediate
Mulai ulang database menggunakan perintah berikut:
startup
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 kunci 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 kunci 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 kunci 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 akan 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 kunci CLIENT_PROGRAM_NAME . |
CLIENT_TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Dipetakan langsung dengan kunci 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 kunci current_user . |
CURUSER |
additional.fields[current_user_label].value.string_value |
Dipetakan langsung dengan kunci current_user . |
DATABASE_USER |
principal.user.user_display_name |
Dipetakan langsung jika tidak kosong atau / . |
DBID |
metadata.product_log_id |
Dipetakan 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 kunci Entry Id . |
EXTERNAL_USERID |
additional.fields[external_userid_label].value.string_value |
Dipetakan langsung dengan kunci EXTERNAL_USERID . |
LENGTH |
additional.fields[length_label].value.string_value |
Dipetakan langsung dengan kunci length . |
LOGOFF$DEAD |
target.resource.attribute.labels[LOGOFFDEAD_label].value |
Dipetakan langsung dengan kunci LOGOFFDEAD . |
LOGOFF$LREAD |
target.resource.attribute.labels[LOGOFFLREAD_label].value |
Dipetakan langsung dengan kunci LOGOFFLREAD . |
LOGOFF$LWRITE |
target.resource.attribute.labels[LOGOFFLWRITE_label].value |
Dipetakan langsung dengan kunci LOGOFFLWRITE . |
LOGOFF$PREAD |
target.resource.attribute.labels[LOGOFFPREAD_label].value |
Dipetakan langsung dengan kunci LOGOFFPREAD . |
NTIMESTAMP# |
metadata.event_timestamp |
Diurai dan dikonversi ke format RFC 3339 atau ISO8601. |
OBJCREATOR |
target.resource.attribute.labels[obj_creator_label].value |
Dipetakan langsung dengan kunci OBJ Creator . |
OBJNAME |
target.resource.attribute.labels[obj_name_label].value |
Dipetakan langsung dengan kunci 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 kunci 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 kunci RLS_INFO . |
SCHEMA |
additional.fields[schema_label].value.string_value |
Dipetakan langsung dengan kunci schema . |
SESSIONCPU |
target.resource.attribute.labels[SESSIONCPU_label].value |
Dipetakan langsung dengan kunci 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 kunci 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 kunci SYSTEM_PRIVILEGE_USED . |
TARGET_USER |
additional.fields[target_user_label].value.string_value |
Dipetakan langsung dengan kunci TARGET_USER . |
TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
Dipetakan langsung dengan kunci CLIENT_TERMINAL . |
TYPE |
additional.fields[type_label].value.string_value |
Dipetakan langsung dengan kunci 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 langsung setelah dikonversi ke 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 kunci length . |
log_source_name |
principal.application |
Dipetakan secara langsung. |
message |
Bervariasi | Digunakan untuk penguraian 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 |
Di-hardcode ke Oracle . |
(Logika Parser) | metadata.product_name |
Di-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 . 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 |
Di-hardcode ke ORACLE_DB . |
(Logika Parser) | extensions.auth.mechanism |
Tetapkan ke USERNAME_PASSWORD dalam kondisi tertentu berdasarkan ACTION , ACTION_NUMBER , source_event , dan OSUSERID . |
(Logika Parser) | extensions.auth.type |
Tetapkan 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 |
Berasal dari protocol yang diekstrak dari CLIENT_ADDRESS menggunakan file penyertaan parse_ip_protocol.include . |
Perubahan
2025-03-18
Peningkatan:
- Menambahkan pola Grok untuk mengurai log SYSLOG.
- Memetakan
org_id
dancomp_id
keadditional.fields
. - Memetakan
host_addr
keprincipal.ip
danprincipal.asset.ip
. - Memetakan
host_id
keprincipal.hostname
danprincipal.asset.hostname
. - Memetakan
level
kesecurity_result.severity_details
.
2025-02-12
Peningkatan:
- Menambahkan filter tanggal untuk mendukung pola log syslog baru.
2025-01-15
Peningkatan:
- Memetakan
ID
kemetadata.event_timestamp
.
2024-12-19
Peningkatan:
- Menambahkan dukungan untuk pola log syslog baru.
2024-12-12
Peningkatan:
- Menambahkan pola
gsub
untuk menangani format baru log KV. - Menambahkan pola Grok baru untuk menangani format log KV baru.
- Memetakan
ORACLE_DB
kemetadata.log_type
.
2024-10-25
Peningkatan:
- Jika
ACTION
adalahGRANT
, tetapkanmetadata.event_type
keUSER_RESOURCE_UPDATE_PERMISSIONS
. - Jika
ACTION
adalahDROP
atauDELETE
, tetapkanmetadata.event_type
keUSER_RESOURCE_DELETION
. - Jika
ACTION
adalahCREATE
, tetapkanmetadata.event_type
keUSER_RESOURCE_CREATION
. - Jika
ACTION
adalahALTER
atauINSERT
, tetapkanmetadata.event_type
keUSER_RESOURCE_UPDATE_CONTENT
.
2024-09-25
Peningkatan:
- Menambahkan dukungan untuk pola log KV baru.
2024-07-24
Peningkatan:
- Memetakan
AUDIT_POLICY
sebagai satu string keadditional.fields
, bukan membaginya menjadi beberapa nilai.
2024-06-06
Peningkatan:
- Perubahan kecil di
principal.user.user_display_name
.
2024-05-30
Peningkatan:
- Menambahkan dukungan untuk kolom exadata.
2024-04-03
Peningkatan:
- Menambahkan dukungan untuk beberapa atribut yang tidak tercakup.
2023-10-25
Peningkatan:
- Memetakan
LENGTH
,LOGOFFDEAD
,LOGOFFLREAD
,LOGOFFLWRITE
,LOGOFFPREAD
,SESSIONCPU
,CLIENT_TERMINAL
ketarget.resource.attribute.labels
. - Memetakan
ACTION
kesecurity_result.summary
. - Tetapkan
security_result.description
keSuccess
jikaRETURNCODE
adalah 0 atauSTATUS
adalah 0. - Tetapkan
security_result.description
keFailure
jikaRETURNCODE
adalah 1 atau -1, atauSTATUS
adalah 1 atau -1. - Memetakan
principal.ip
danprincipal.port
dariCLIENT_ADDRESS
.
2022-10-13
Peningkatan:
- Menambahkan pola grok untuk menangani log SYSLOG dan KV.
2022-08-01
Peningkatan:
- Menambahkan pemetaan untuk kolom berikut:
hostname
dipetakan keprincipal.hostname
.- jika
returncode
adalah0
, security_result.action akan dipetakan keALLOW
. Jika-1
, security_result.action akan dipetakan keBLOCK
. ACTION
dipetakan kemetadata.product_event_type
.DATABASE USER
dipetakan keprincipal.user.user_display_name
.PRIVILEGE
dipetakan keprincipal.user.attribute.permissions
.CLIENT USER
dipetakan ketarget.user.user_display_name
.file_name
dipetakan ketarget.file.full_path
.event_name
dipetakan kemetadata.product_event_type
.ACTION_NUMBER
dipetakan keevent.idm.read_only_udm.additional.fields
.length
dipetakan keevent.idm.read_only_udm.additional.fields
.DBID
dipetakan kemetadata.product_log_id
.
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.