Mengumpulkan log TSV Zeek (sebelumnya Bro)

Didukung di:

Dokumen ini menjelaskan cara menyerap log TSV Zeek (sebelumnya Bro) ke Google Security Operations menggunakan agen Bindplane.

Zeek (sebelumnya Bro) adalah platform pemantauan keamanan jaringan yang menganalisis traffic jaringan secara pasif dan menghasilkan file log mendetail yang dipisahkan tab, yang mencakup koneksi, kueri DNS, transaksi HTTP, sesi SSL/TLS, dan analisis file. Sensor Zeek menghasilkan file log TSV di bagian /opt/zeek/logs/ atau /usr/local/zeek/logs/ secara default.

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 host sensor Zeek
  • Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
  • Akses istimewa ke host sensor Zeek dengan izin untuk membaca file log
  • Akses ke file log TSV Zeek di sistem file sensor (biasanya di bagian /opt/zeek/logs/ atau /usr/local/zeek/logs/)

Mendapatkan kredensial Google SecOps untuk agen Bindplane

Untuk mengautentikasi agen Bindplane ke Google SecOps, pilih salah satu metode berikut:

  • Deployment baru: Gunakan Chronicle API (Opsi 1).
  • Deployment lama: Terus gunakan file autentikasi penyerapan (Opsi 2) hingga Ingestion API dihentikan pada 20 Juli 2027.
  1. Login ke konsolGoogle Cloud dan pilih project Google Cloud yang ditautkan ke instance Google SecOps Anda.
  2. Buka IAM & Admin > Service Accounts.
  3. Klik Create service account.
  4. Berikan detail konfigurasi berikut:
    • Service account name: Masukkan nama akun (misalnya, bindplane-ingest).
    • Service account description: Masukkan deskripsi (misalnya, Bindplane agent log ingestion).
  5. Klik Create and continue.
  6. Di bagian Grant this service account access to project, klik Select a role, lalu pilih Chronicle Editor.
  7. Klik Continue lalu klik Done.
  8. Klik akun layanan yang Anda buat, lalu buka tab Keys.
  9. Klik Add key > Create new key.
  10. Pilih JSON dan klik Create. File kunci akan didownload ke komputer Anda.
  11. Simpan file kunci sebagai ingestion-auth.json di direktori kolektor Bindplane (/opt/observiq-otel-collector/ingestion-auth.json di Linux atau C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json di Windows), atau perbarui creds_file_path di config.yaml agar sesuai dengan jalur tempat Anda menyimpannya.
  12. Buka IAM & Admin > Settings dan salin Project number. Anda akan memerlukannya untuk konfigurasi pengekspor.

Opsi 2: Mendownload file autentikasi penyerapan (lama)

  1. Login ke konsol Google SecOps.
  2. Buka Settings > Data Management > Collection Agents. Jika Anda menggunakan platform khusus SIEM, buka Settings > Collection Agents.
  3. Download 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 > Administrasi > Profil. Jika Anda menggunakan platform khusus SIEM, buka Settings > Profile.
  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 active (running).

Referensi penginstalan tambahan

Untuk opsi pemasangan dan pemecahan masalah tambahan, lihat Panduan pemasangan agen Bindplane.

Mengonfigurasi agen Bindplane untuk menyerap syslog dan mengirimkannya ke Google SecOps

Menemukan file konfigurasi

  • Linux:

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

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

Mengedit file konfigurasi

  • Ganti seluruh konten config.yaml dengan konfigurasi berikut:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/bro_tsv:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: BRO_TSV
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/bro_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/bro_tsv
    

Parameter konfigurasi

Ganti placeholder berikut:

  • Konfigurasi penerima:

    • udplog: Jenis penerima berdasarkan protokol:
      • udplog untuk syslog UDP
      • tcplog untuk syslog TCP
    • 0.0.0.0: IP address to listen on:
      • 0.0.0.0 untuk memproses semua antarmuka (direkomendasikan)
      • Alamat IP tertentu untuk memproses satu antarmuka
    • 514: Nomor port yang akan diproses (misalnya, 514, 1514, 6514)
  • Konfigurasi pengekspor:

    • bro_tsv: Nama deskriptif untuk pengekspor
    • creds_file_path: Jalur lengkap ke file kunci JSON akun layanan (Opsi 1):
      • 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
    • location: Ganti <LOCATION> dengan region instance Google SecOps Anda (misalnya, us, europe, atau asia-southeast1). Pengekspor mengawali chronicle.googleapis.com dengan nilai ini. Lihat Endpoint Regional untuk mengetahui daftar lengkapnya.
    • project: Ganti <PROJECT_NUMBER> dengan nomor project dari IAM & Admin > Settings.
    • endpoint: Tetap tetapkan ke chronicle.googleapis.com.
    • BRO_TSV: Jenis log persis seperti yang muncul di Chronicle
    • ingestion_labels: Label opsional dalam format YAML (misalnya, env: production)
  • Konfigurasi pipeline:

    • bro_to_chronicle: Nama deskriptif untuk pipeline

Pengekspor API penyerapan lama

  • Jika Anda menggunakan file autentikasi penyerapan dari Opsi 2, ganti blok exporters dengan kode berikut. Tetapkan creds_file_path ke jalur ke file autentikasi penyerapan, dan jika instance Anda berada di luar AS, ganti malachiteingestion-pa.googleapis.com dengan endpoint regional Anda (misalnya, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/bro_tsv:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: BRO_TSV
        raw_log_field: body
        ingestion_labels:
          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

  • Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:

    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
      
  • Untuk 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 Services:

      1. Tekan Win+R, ketik services.msc, lalu tekan Enter.
      2. Cari observIQ OpenTelemetry Collector.
      3. Klik kanan, lalu pilih Restart.
      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 penerusan syslog Zeek

Zeek menghasilkan file log TSV secara lokal. Untuk meneruskan log ini menggunakan syslog ke agen Bindplane, konfigurasikan daemon syslog di host sensor Zeek.

  1. Login ke host sensor Zeek dengan hak istimewa root atau sudo.
  2. Instal dan konfigurasi rsyslog atau syslog-ng jika belum ada.
  3. Buat file konfigurasi rsyslog untuk meneruskan log Zeek:

    sudo nano /etc/rsyslog.d/zeek-forward.conf
    
  4. Tambahkan konfigurasi berikut untuk meneruskan log Zeek ke agen Bindplane:

    module(load="imfile")
    input(type="imfile"
        File="/opt/zeek/logs/current/*.log"
        Tag="zeek:"
        Severity="info"
        Facility="local6")
    local6.* @<BINDPLANE_AGENT_IP>:514
    
    • Ganti <BINDPLANE_AGENT_IP> dengan alamat IP host agen Bindplane.
    • Ganti /opt/zeek/logs/current/*.log dengan jalur sebenarnya ke file log Zeek Anda jika berbeda.
    • Gunakan @@, bukan @ untuk penerusan TCP (harus cocok dengan jenis penerima agen Bindplane).
  5. Mulai ulang rsyslog untuk menerapkan perubahan:

    sudo systemctl restart rsyslog
    
  6. Pastikan pesan syslog diterima dengan memeriksa log agen Bindplane.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
rtt, operation, tunnel_type, action, cmd, arg, rows additional.fields Digabungkan dari additional_rtt, additional_op, additional_tt, additional_action, additional_cmd, additional_arg, additional_rows
extensions.auth.type Tetapkan ke "AUTHTYPE_UNSPECIFIED"
conn_state, action, error, desc metadata.description Setel ke deskripsi conn_state untuk bro_conn, tindakan untuk bro_smb_files, "KERBEROS: %{error}" untuk bro_kerberos, desc untuk AsymPayloadFlow, konstanta untuk lainnya
bro_type, qerror, next_protocol, protocol metadata.event_type Ditetapkan ke GENERIC_EVENT secara default, NETWORK_DNS untuk dns, NETWORK_CONNECTION untuk conn/ntlm/smb_mapping/dce_rpc/tunnel/mysql/ssh/udp/tcp, NETWORK_DHCP untuk dhcp, NETWORK_HTTP untuk http/ssl jika next_protocol http, NETWORK_UNCATEGORIZED untuk smb_files/files/x509, USER_LOGIN untuk radius, NETWORK_FTP untuk ftp, NETWORK_UNCATEGORIZED jika qerror query_not_present
bro_type, prod_event metadata.product_event_type Nilai dari bro_type jika tidak kosong, jika tidak, dari prod_event
uid, id metadata.product_log_id Nilai dari uid jika tersedia, jika tidak, dari id
metadata.product_name Setel ke "Bro"
metadata.vendor_name Tetapkan ke "Zeek"
service_proto, source network.application_protocol Dipetakan dari service_proto untuk conn, dipetakan dari sumber untuk file, konstanta untuk lainnya
hostname network.dhcp.client_hostname Nilai disalin langsung
lease_time network.dhcp.lease_time_seconds Dikonversi ke uinteger
dhcp_info network.dhcp.type Setel ke "ACK" jika =~ "ACK", "RELEASE" jika =~ "RELEASE", "INFORM" jika =~ "INFORM", "DISCOVER" jika =~ "DISCOVER", "OFFER" jika =~ "OFFER", "REQUEST" jika =~ "REQUEST"
assigned_ip network.dhcp.yiaddr Nilai disalin langsung
direction network.direction Nilai disalin langsung
answer_list network.dns.answers Nilai disalin langsung
trans_id network.dns.id Dikonversi ke uinteger
q network.dns.questions Digabungkan dari q
rcode network.dns.response_code Dikonversi ke uinteger jika bukan "-"
perintah network.ftp.command Nilai disalin langsung
metode network.http.method Nilai disalin langsung
referrer network.http.referral_url Nilai disalin langsung
status_code network.http.response_code Dikonversi ke bilangan bulat
user_agent network.http.user_agent Nilai disalin langsung
proto, protocol network.ip_protocol Nilai dari proto untuk conn, "UDP" untuk udp, "TCP" untuk tcp
id_resp_bytes, received_bytes network.received_bytes Dikonversi ke uinteger dari id_resp_bytes untuk conn, received_bytes untuk file
id_orig_bytes network.sent_bytes Dikonversi ke uinteger
uid network.session_id Nilai disalin langsung
cipher network.tls.cipher Nilai disalin langsung
client_issuer network.tls.client.certificate.issuer Nilai disalin langsung
client_subject network.tls.client.certificate.subject Nilai disalin langsung
klien network.tls.client.certificate.version Nilai disalin langsung
ja3 network.tls.client.ja3 Nilai disalin langsung
kurva network.tls.curve Nilai disalin langsung
menetapkan network.tls.established Nilai disalin langsung
next_protocol network.tls.next_protocol Nilai disalin langsung
dilanjutkan network.tls.resumed Nilai disalin langsung
issuer, certificate.issuer network.tls.server.certificate.issuer Nilai dari penerbit untuk ssl, certificate.issuer untuk x509
certificate.not_valid_after network.tls.server.certificate.not_after Dikonversi menggunakan filter tanggal
certificate.not_valid_before network.tls.server.certificate.not_before Dikonversi menggunakan filter tanggal
certificate.serial network.tls.server.certificate.serial Nilai disalin langsung
subject, certificate.subject network.tls.server.certificate.subject Nilai dari subjek untuk ssl, certificate.subject untuk x509
certificate.version network.tls.server.certificate.version Dikonversi ke string
ja3s network.tls.server.ja3s Nilai disalin langsung
versi network.tls.version Nilai disalin langsung
domain principal.administrative_domain Nilai disalin langsung
file_size principal.file.size Dikonversi ke uinteger
client_host, _system_name, _HostName principal.hostname Nilai dari client_host untuk kerberos, _system_name untuk x509, _HostName jika diekstrak
id.orig_h principal.ip Merged from id.orig_h
mac principal.mac Nilai disalin langsung
id.orig_p principal.port Dikonversi ke bilangan bulat, nilai dari id.orig_p atau dibalik untuk conn jika bukan local_orig
user_email principal.user.email_addresses Digabungkan dari user_email
user, username, user_name principal.user.userid Nilai dari pengguna untuk ftp, nama pengguna untuk radius, nama_pengguna untuk kerberos
qclass q.class Dikonversi ke uinteger
qname, q.name q.name Nilai dari qname atau q.name
qtype q.type Dikonversi ke uinteger
result, auth_success security_result Digabungkan dari security_result dengan tindakan BLOCK untuk radius gagal, ALLOW/BLOCK/UNKNOWN untuk ssh
uri target.administrative_domain Diekstrak dari URI menggunakan grok
full_file_path, fuid target.file.full_path Nilai dari full_file_path untuk smb_files, fuid untuk file
md5 target.file.md5 Nilai disalin langsung
mime_type target.file.mime_type Nilai disalin langsung
sha1 target.file.sha1 Nilai disalin langsung
size, file_size target.file.size Dikonversi ke uinteger dari size untuk smb_files, file_size untuk file
server_host, host, CN, server target.hostname Nilai dari server_host untuk kerberos, host untuk http, CN untuk x509, server untuk ssh
id.resp_h target.ip Merged from id.resp_h
host_key, host_key_alg, kex_alg, mac_alg, compression_alg, cipher_alg, auth_attempts target.labels Digabungkan dari berbagai objek label
id.resp_p target.port Dikonversi menjadi bilangan bulat, nilai dari id.resp_p atau dibalik untuk conn jika bukan local_orig
path, named_pipe target.resource.name Nilai dari jalur untuk smb_mapping, named_pipe untuk dce_rpc
share_type target.resource.type Nilai dari share_type untuk smb_mapping, "PIPE" untuk dce_rpc
url target.url Digabungkan dari host dan uri

Log Perubahan

Melihat Log Perubahan untuk parser ini

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