Mengumpulkan log IBM DB2

Didukung di:

Dokumen ini menjelaskan cara menyerap log IBM DB2 ke Google Security Operations menggunakan agen Bindplane.

IBM Db2 adalah sistem manajemen database relasional yang menyediakan fasilitas audit untuk membantu mendeteksi akses yang tidak diketahui atau tidak terduga ke data. Fasilitas audit Db2 menghasilkan dan mengizinkan pemeliharaan jejak audit untuk serangkaian peristiwa database yang telah ditentukan sebelumnya.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Windows Server 2016 atau yang lebih baru, atau host Linux dengan systemd
  • Konektivitas jaringan antara agen Bindplane dan instance IBM DB2
  • Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
  • Instance IBM DB2 (versi 11.1 atau yang lebih baru) dengan hak istimewa SYSADM
  • Ruang disk yang cukup untuk penyimpanan dan pengarsipan log audit

Mendapatkan file autentikasi penyerapan Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Setelan SIEM > Agen Pengumpulan.
  3. Klik Download untuk mendownload file autentikasi penyerapan.
  4. Simpan file dengan aman di sistem tempat agen 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

Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.

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
    
  3. Tunggu hingga penginstalan selesai.

  4. Verifikasi penginstalan dengan menjalankan:

    sc query observiq-otel-collector
    

    Layanan akan ditampilkan sebagai RUNNING.

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
    
  3. Tunggu hingga penginstalan selesai.

  4. 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:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Edit file konfigurasi

  1. Ganti seluruh konten config.yaml dengan konfigurasi berikut:

    receivers:
      tcplog:
        listen_address: "0.0.0.0:1514"
    
    exporters:
      chronicle/db2_audit:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: DB2_DB
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/db2_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/db2_audit
    
  2. Ganti placeholder berikut:

    • Konfigurasi penerima:

      • listen_address: Setel ke 0.0.0.0:1514 untuk memproses semua antarmuka di port 1514 (port non-privilege direkomendasikan untuk Linux).
    • Konfigurasi eksportir:

      • creds_file_path: Jalur lengkap ke file autentikasi penyerapan:

        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
      • customer_id: ID Pelanggan dari langkah sebelumnya

      • 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 mengetahui daftar lengkapnya
      • log_type: Tetapkan ke DB2_DB

      • ingestion_labels: Label opsional dalam format YAML (misalnya, env: production)

Simpan file konfigurasi

  • Setelah mengedit, simpan file:

    • Linux: Tekan Ctrl+O, lalu Enter, lalu Ctrl+X
    • Windows: Klik File > Save

Mulai ulang agen BindPlane untuk menerapkan perubahan

  • Linux

    sudo systemctl restart observiq-otel-collector
    
    1. Pastikan layanan sedang berjalan:

      sudo systemctl status observiq-otel-collector
      
    2. Periksa log untuk mengetahui error:

      sudo journalctl -u observiq-otel-collector -f
      
  • Windows

    Pilih salah satu opsi berikut:

    • Menggunakan Command Prompt atau PowerShell sebagai administrator:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Menggunakan konsol Layanan:

      1. Tekan Win+R, ketik services.msc, lalu tekan Enter.
      2. Temukan observIQ OpenTelemetry Collector.
      3. Klik kanan, lalu pilih Mulai Ulang.
      4. Pastikan layanan sedang berjalan:

        sc query observiq-otel-collector
        
      5. Periksa log untuk mengetahui error:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Mengonfigurasi fasilitas audit IBM DB2

Konfigurasi fasilitas audit DB2 untuk merekam peristiwa keamanan dan mengekstraknya ke syslog.

Memeriksa konfigurasi audit saat ini

  • Hubungkan ke instance DB2 Anda sebagai pengguna dengan otoritas SYSADM dan jalankan:

    db2audit describe
    

    Bagian ini menampilkan konfigurasi audit saat ini, termasuk status, kategori, dan jalur audit.

Mengonfigurasi jalur audit

  1. Tetapkan direktori tempat log audit akan disimpan:

    db2audit configure datapath /db2audit/data
    db2audit configure archivepath /db2audit/archive
    
  2. Pastikan direktori ini ada dan memiliki izin yang sesuai untuk pemilik instance DB2:

    mkdir -p /db2audit/data /db2audit/archive
    chown db2inst1:db2iadm1 /db2audit/data /db2audit/archive
    chmod 750 /db2audit/data /db2audit/archive
    

Mengonfigurasi cakupan dan kategori audit

  • Konfigurasi fasilitas audit untuk mencatat semua peristiwa keamanan:

    db2audit configure scope all status both errortype normal
    

    Konfigurasi ini:

    • scope all: Mengaudit semua kategori (audit, checking, objmaint, secmaint, sysadmin, validate, context)
    • status both: Mencatat peristiwa yang berhasil dan gagal
    • errortype normal: Penanganan error standar

Mulai fasilitas audit

  1. Mulai pengauditan:

    db2audit start
    
  2. Pastikan audit aktif:

    db2audit describe
    

    Output akan menampilkan Audit active: "TRUE".

Mengonfigurasi syslog untuk menerima log audit DB2

Konfigurasi daemon syslog sistem untuk menerima dan menyimpan pesan audit DB2.

Linux (rsyslog)

  1. Edit file konfigurasi rsyslog:

    sudo nano /etc/rsyslog.conf
    
  2. Tambahkan baris berikut untuk merutekan pesan audit DB2 ke file khusus:

    user.info /var/log/db2/db2audit.log
    
  3. Buat direktori dan file log:

    sudo mkdir -p /var/log/db2
    sudo touch /var/log/db2/db2audit.log
    sudo chmod 640 /var/log/db2/db2audit.log
    
  4. Mulai ulang rsyslog:

    sudo systemctl restart rsyslog
    

AIX (syslogd)

  1. Edit file konfigurasi syslog:

    sudo vi /etc/syslog.conf
    
  2. Tambahkan baris berikut:

    user.info /var/log/db2/db2audit.log
    
  3. Buat direktori dan file log:

    sudo mkdir -p /var/log/db2
    sudo touch /var/log/db2/db2audit.log
    sudo chmod 640 /var/log/db2/db2audit.log
    
  4. Mulai ulang syslogd:

    sudo refresh -s syslogd
    

Mengekstrak log audit DB2 ke syslog

Mengekstrak log audit yang diarsipkan dan mengirimkannya ke daemon syslog sistem.

Menghapus dan mengarsipkan log audit

  • Sebelum melakukan ekstraksi, hapus semua catatan audit yang tertunda dan arsipkan log audit saat ini:

    db2audit flush
    db2audit archive
    

    Perintah arsip membuat file yang diberi stempel waktu di jalur arsip (misalnya, db2audit.instance.log.0.20250110123456).

Mengekstrak log audit ke syslog

  • Ekstrak log audit yang diarsipkan dan kirimkan ke syslog menggunakan fasilitas dan prioritas user.info:

    db2audit extract syslog user.info from files /db2audit/archive/db2audit.instance.log.0.*
    

    Perintah ini:

    • Mengekstrak catatan audit dari file log yang diarsipkan
    • Mengirimkannya ke daemon syslog sistem dengan fasilitas user dan prioritas info
    • Daemon syslog merutekan pesan sesuai dengan /etc/syslog.conf atau /etc/rsyslog.conf

Memverifikasi bahwa log sedang dikirim

  • Periksa apakah pesan audit sedang ditulis ke file syslog:

    tail -f /var/log/db2/db2audit.log
    

    Anda akan melihat catatan audit DB2 muncul di file log.

Mengonfigurasi rsyslog untuk meneruskan log ke agen BindPlane

Konfigurasi rsyslog untuk meneruskan log audit DB2 ke agen BindPlane.

  1. Buat file konfigurasi rsyslog baru:

    sudo nano /etc/rsyslog.d/50-db2-forward.conf
    
  2. Tambahkan konfigurasi berikut untuk meneruskan log ke agen Bindplane:

    # Forward DB2 audit logs to Bindplane agent
    user.info @@127.0.0.1:1514
    

    Awalan @@ menunjukkan penerusan TCP. Gunakan @ untuk UDP jika diperlukan.

  3. Mulai ulang rsyslog:

    sudo systemctl restart rsyslog
    

Mengotomatiskan ekstraksi log audit

Buat skrip untuk mengotomatiskan proses penghapusan, pengarsipan, dan ekstraksi.

Buat skrip ekstraksi

  1. Buat skrip untuk mengotomatiskan ekstraksi log audit:

    sudo nano /usr/local/bin/db2audit-extract.sh
    
  2. Tambahkan konten berikut:

    #!/bin/bash
    # DB2 Audit Log Extraction Script
    
    # Set DB2 environment
    export DB2INSTANCE=db2inst1
    . /home/db2inst1/sqllib/db2profile
    
    # Flush pending audit records
    db2audit flush
    
    # Archive current audit log
    db2audit archive
    
    # Extract archived logs to syslog
    db2audit extract syslog user.info from files /db2audit/archive/db2audit.instance.log.0.*
    
    # Optional: Clean up old archived logs (older than 30 days)
    find /db2audit/archive -name "db2audit.instance.log.0.*" -mtime +30 -delete
    
    exit 0
    
  3. Setel agar skrip dapat dieksekusi:

    sudo chmod +x /usr/local/bin/db2audit-extract.sh
    

Menjadwalkan dengan cron

  1. Jadwalkan skrip agar berjalan secara berkala menggunakan cron:

    sudo crontab -e
    
  2. Tambahkan baris berikut untuk menjalankan skrip setiap jam:

    Pilih salah satu opsi berikut:

    0 * * * * /usr/local/bin/db2audit-extract.sh >> /var/log/db2/db2audit-extract.log 2>&1
    

    Atau jalankan setiap 15 menit untuk ekstraksi yang lebih sering:

    */15 * * * * /usr/local/bin/db2audit-extract.sh >> /var/log/db2/db2audit-extract.log 2>&1
    

Memverifikasi penyerapan log di Google SecOps

  1. Login ke konsol Google SecOps.
  2. Buka Penelusuran.
  3. Jalankan kueri penelusuran untuk memverifikasi bahwa log DB2 sedang di-ingest:

    metadata.log_type = "DB2_DB"
    
  4. Pastikan log muncul dengan stempel waktu dan kolom yang benar.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
msg event.idm.read_only_udm.additional.fields Nilai diambil dari msg jika msg != ""
Sistem event.idm.read_only_udm.additional.fields Nilai diambil dari Sistem jika System != ""
Subsistem event.idm.read_only_udm.additional.fields Nilai diambil dari Subsystem jika Subsystem != ""
auth_mechanism event.idm.read_only_udm.extensions.auth.mechanism Disetel ke "USERNAME_PASSWORD" untuk peristiwa USER_LOGIN
CorrelationUser event.idm.read_only_udm.intermediary.user.userid Nilai diambil dari CorrelationUser jika CorrelationUser != ""
jumlah event.idm.read_only_udm.metadata.description Nilai diambil dari jumlah
date_time event.idm.read_only_udm.metadata.event_timestamp Dikonversi dari kolom tanggal dan waktu ke format ISO8601 jika keduanya != ""
leef_event_id event.idm.read_only_udm.metadata.product_event_type Nilai diambil dari leef_event_id
event.idm.read_only_udm.metadata.event_type Diperoleh dari leef_event_id: jika dalam ["102-87", "102-83"] → USER_LOGIN; jika dalam ["102-6", "102-7", "102-8", "102-10", "102-24", "102-143"] → USER_RESOURCE_ACCESS atau USER_RESOURCE_UPDATE_CONTENT berdasarkan maksud; jika "102-319" → USER_RESOURCE_ACCESS; selain itu GENERIC_EVENT
event.idm.read_only_udm.metadata.product_name Ditetapkan ke "DB2"
event.idm.read_only_udm.metadata.vendor_name Ditetapkan ke "IBM"
SSID event.idm.read_only_udm.network.session_id Nilai diambil dari SSID jika SSID != ""
pekerjaan event.idm.read_only_udm.principal.application Nilai diambil dari tugas jika tugas != ""
sourceServiceName event.idm.read_only_udm.principal.application Nilai yang diambil dari sourceServiceName
sourceHostName event.idm.read_only_udm.principal.asset.hostname Nilai diambil dari sourceHostName jika sourceHostName != ""
principal_ip event.idm.read_only_udm.principal.asset.ip Nilai yang diambil dari principal_ip untuk peristiwa 102-319
product_id event.idm.read_only_udm.principal.asset_id Disetel ke "Product ID: %{product_id}" untuk peristiwa 102-319
sourceHostName event.idm.read_only_udm.principal.hostname Nilai diambil dari sourceHostName jika sourceHostName != ""
principal_ip event.idm.read_only_udm.principal.ip Nilai yang diambil dari principal_ip untuk peristiwa 102-319
Pembuat event.idm.read_only_udm.principal.user.user_display_name Nilai yang diambil dari Kreator
nama event.idm.read_only_udm.principal.user.user_display_name Nilai diambil dari nama jika name != ""
AuthenticatedUser event.idm.read_only_udm.principal.user.userid Nilai diambil dari AuthenticatedUser jika AuthenticatedUser != ""
sourceUserName event.idm.read_only_udm.principal.user.userid Nilai diambil dari sourceUserName
usrName event.idm.read_only_udm.principal.user.userid Nilai diambil dari usrName
_action event.idm.read_only_udm.security_result.action Diperoleh dari jumlah: jika berisi "berhasil" → PERBOLEHKAN; jika tidak, BLOKIR untuk peristiwa USER_LOGIN
deviceHostName event.idm.read_only_udm.target.asset.hostname Nilai yang diambil dari deviceHostName
conn_location3 event.idm.read_only_udm.target.asset.hostname Nilai diambil dari conn_location3 jika conn_location3 != ""
file_name event.idm.read_only_udm.target.file.full_path Nilai diambil dari file_name jika file_name != ""
deviceHostName event.idm.read_only_udm.target.hostname Nilai yang diambil dari deviceHostName
conn_location3 event.idm.read_only_udm.target.hostname Nilai diambil dari conn_location3 jika conn_location3 != ""
conn_location, conn_location2 event.idm.read_only_udm.target.location.name Digabungkan dari conn_location dan conn_location2 jika keduanya != ""
deviceProcessName event.idm.read_only_udm.target.process.command_line Nilai yang diambil dari deviceProcessName
SQL event.idm.read_only_udm.target.process.command_line Nilai diambil dari SQL jika SQL != ""
Connection_Type event.idm.read_only_udm.target.resource.attribute.labels Kunci "Jenis Koneksi" dengan nilai dari Connection_Type
Paket event.idm.read_only_udm.target.resource.attribute.labels Kunci "Plan" dengan nilai dari Plan
DB2_Subsystem event.idm.read_only_udm.target.resource.attribute.labels Kunci "DB2 Subsystem" dengan nilai dari DB2_Subsystem
Priv_Check_Code event.idm.read_only_udm.target.resource.attribute.labels Kunci "Priv Check Code" dengan nilai dari Priv_Check_Code
Table_Name event.idm.read_only_udm.target.resource.attribute.labels Kunci "Table Name" dengan nilai dari Table_Name
MessageType event.idm.read_only_udm.target.resource.attribute.labels Kunci "Jenis Pesan" dengan nilai dari MessageType
Check_type event.idm.read_only_udm.target.resource.attribute.labels Kunci "Check Type" dengan nilai dari Check_type
deviceAction event.idm.read_only_udm.target.resource.attribute.labels Kunci "Device Action" dengan nilai yang dipetakan dari deviceAction: G → GRANT, R → REVOKE
SSID event.idm.read_only_udm.target.resource.attribute.labels Kunci "SSID" dengan nilai dari SSID jika nilai != ""
SQL event.idm.read_only_udm.target.resource.attribute.labels Kunci "SQL Query" dengan nilai dari SQL jika SQL != ""
messageid event.idm.read_only_udm.target.resource.id Nilai diambil dari messageid
Object_Class_Code event.idm.read_only_udm.target.resource.parent Nilai diambil dari Object_Class_Code
obj event.idm.read_only_udm.target.resource.name Nilai diambil dari obj
resource_name event.idm.read_only_udm.target.resource.name Nilai yang diambil dari resource_name yang diekstrak dari SQL jika SQL != "" dan tidak kosong
Database_Name event.idm.read_only_udm.target.resource.name Nilai yang diambil dari Database_Name
objtyp event.idm.read_only_udm.target.resource.resource_subtype Nilai diambil dari objtyp (huruf besar) jika objtyp != ""
Jenis event.idm.read_only_udm.target.resource.resource_subtype Berasal dari Jenis: T → TABEL, V → VIEW, X → TABEL TAMBAHAN
event.idm.read_only_udm.target.resource.resource_type Ditetapkan ke "DATABASE"

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