Mengumpulkan log Oracle DB

Didukung di:

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

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

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
    

Penginstalan Linux

  1. Buka terminal dengan hak istimewa root atau sudo.
  2. 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

  1. 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).
  2. 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
    
  3. Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.

  4. Ganti <customer_id> dengan ID pelanggan yang sebenarnya.

  5. 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

  1. Menghubungkan ke Database Oracle dengan SQLplus.
  2. Nonaktifkan database dengan perintah berikut:

    shutdown immediate
    
  3. Hentikan layanan pemroses Oracle dengan mengetik perintah berikut:

    lsnrctl stop
    
  4. 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
    
  5. Tautkan Oracle DB dengan opsi uniaud menggunakan perintah berikut:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Menghubungkan ke Database Oracle dengan SQLplus.

  7. Mulai ulang database menggunakan perintah berikut:

    startup
    
  8. Mulai ulang layanan pemroses Oracle menggunakan perintah berikut:

    lsnrctl start
    
  9. 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
    
  10. Pastikan pengauditan terpadu diaktifkan, hubungkan ke database Oracle dengan SQLplus, lalu ketik perintah berikut:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Verifikasi bahwa perintah menampilkan satu baris dengan VALUE sama dengan "BENAR".

Mengonfigurasi Syslog untuk Database Oracle

  1. Login ke instance Oracle.
  2. Buka file berikut menggunakan vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Masukkan perintah berikut untuk konfigurasi syslog:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Pastikan daemon syslog di host Oracle dikonfigurasi untuk meneruskan log audit.

  5. Di Red Hat Enterprise, buka file /etc/syslog.conf berikut menggunakan vi dan masukkan baris berikut:

    local0.info @ <bindplane-ip>:514
    
  6. Simpan dan keluar dari file:

    :wq
    
  7. Di Red Hat Enterprise, ketik perintah berikut untuk memuat ulang konfigurasi syslog:

    kill -HUP /var/run/syslogd.pid
    
  8. Hubungkan ke SQLplus dan login sebagai sysdba untuk memulai ulang:

    sys as sysdba
    
  9. Nonaktifkan database dengan perintah berikut:

    shutdown immediate
    
  10. 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 dan comp_id ke additional.fields.
  • Memetakan host_addr ke principal.ip dan principal.asset.ip.
  • Memetakan host_id ke principal.hostname dan principal.asset.hostname.
  • Memetakan level ke security_result.severity_details.

2025-02-12

Peningkatan:

  • Menambahkan filter tanggal untuk mendukung pola log syslog baru.

2025-01-15

Peningkatan:

  • Memetakan ID ke metadata.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 ke metadata.log_type.

2024-10-25

Peningkatan:

  • Jika ACTION adalah GRANT, tetapkan metadata.event_type ke USER_RESOURCE_UPDATE_PERMISSIONS.
  • Jika ACTION adalah DROP atau DELETE, tetapkan metadata.event_type ke USER_RESOURCE_DELETION.
  • Jika ACTION adalah CREATE, tetapkan metadata.event_type ke USER_RESOURCE_CREATION.
  • Jika ACTION adalah ALTER atau INSERT, tetapkan metadata.event_type ke USER_RESOURCE_UPDATE_CONTENT.

2024-09-25

Peningkatan:

  • Menambahkan dukungan untuk pola log KV baru.

2024-07-24

Peningkatan:

  • Memetakan AUDIT_POLICY sebagai satu string ke additional.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 ke target.resource.attribute.labels.
  • Memetakan ACTION ke security_result.summary.
  • Tetapkan security_result.description ke Success jika RETURNCODE adalah 0 atau STATUS adalah 0.
  • Tetapkan security_result.description ke Failure jika RETURNCODE adalah 1 atau -1, atau STATUS adalah 1 atau -1.
  • Memetakan principal.ip dan principal.port dari CLIENT_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 ke principal.hostname.
  • jika returncode adalah 0, security_result.action akan dipetakan ke ALLOW. Jika -1, security_result.action akan dipetakan ke BLOCK.
  • ACTION dipetakan ke metadata.product_event_type.
  • DATABASE USER dipetakan ke principal.user.user_display_name.
  • PRIVILEGE dipetakan ke principal.user.attribute.permissions.
  • CLIENT USER dipetakan ke target.user.user_display_name.
  • file_name dipetakan ke target.file.full_path.
  • event_name dipetakan ke metadata.product_event_type.
  • ACTION_NUMBER dipetakan ke event.idm.read_only_udm.additional.fields.
  • length dipetakan ke event.idm.read_only_udm.additional.fields.
  • DBID dipetakan ke metadata.product_log_id.

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