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, menangani beberapa format menggunakan pola grok dan penguraian key-value. Kemudian, kolom yang diekstrak ini dipetakan ke Model Data Terpadu (UDM), yang 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 dijalankan di belakang proxy, port firewall terbuka
  • Akses 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 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

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 mengirimkannya ke Google SecOps

  1. Akses file konfigurasi:
    • Cari 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 Dapatkan 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 Oracle Database

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

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

    lsnrctl stop
    
  4. Opsional: 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. Hubungkan ke Oracle Database dengan SQLplus.

  7. Mulai ulang database menggunakan perintah berikut:

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

    lsnrctl start
    
  9. Opsional: 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. Verifikasi bahwa 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 "TRUE".

Mengonfigurasi Syslog untuk Oracle Database

  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, lalu 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 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 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 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. 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 Disetel 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 Berasal dari protocol yang diekstrak dari CLIENT_ADDRESS menggunakan file sertakan parse_ip_protocol.include.

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