Mengumpulkan log TSV Zeek (sebelumnya Bro)
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.
Opsi 1: Membuat akun layanan untuk Chronicle API (direkomendasikan)
- Login ke konsolGoogle Cloud dan pilih project Google Cloud yang ditautkan ke instance Google SecOps Anda.
- Buka IAM & Admin > Service Accounts.
- Klik Create service account.
- Berikan detail konfigurasi berikut:
- Service account name: Masukkan nama akun (misalnya,
bindplane-ingest). - Service account description: Masukkan deskripsi (misalnya,
Bindplane agent log ingestion).
- Service account name: Masukkan nama akun (misalnya,
- Klik Create and continue.
- Di bagian Grant this service account access to project, klik Select a role, lalu pilih Chronicle Editor.
- Klik Continue lalu klik Done.
- Klik akun layanan yang Anda buat, lalu buka tab Keys.
- Klik Add key > Create new key.
- Pilih JSON dan klik Create. File kunci akan didownload ke komputer Anda.
- Simpan file kunci sebagai
ingestion-auth.jsondi direktori kolektor Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsondi Linux atauC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsondi Windows), atau perbaruicreds_file_pathdiconfig.yamlagar sesuai dengan jalur tempat Anda menyimpannya. - Buka IAM & Admin > Settings dan salin Project number. Anda akan memerlukannya untuk konfigurasi pengekspor.
Opsi 2: Mendownload file autentikasi penyerapan (lama)
- Login ke konsol Google SecOps.
- Buka Settings > Data Management > Collection Agents. Jika Anda menggunakan platform khusus SIEM, buka Settings > Collection Agents.
- Download file autentikasi penyerapan.
- Simpan file dengan aman di sistem tempat agen Bindplane akan diinstal.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan > Administrasi > Profil. Jika Anda menggunakan platform khusus SIEM, buka Settings > Profile.
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
- 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" /quietTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sc query observiq-otel-collectorLayanan akan ditampilkan sebagai RUNNING.
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.shTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sudo systemctl status observiq-otel-collectorLayanan 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.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Mengedit file konfigurasi
Ganti seluruh konten
config.yamldengan 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:udploguntuk syslog UDPtcploguntuk syslog TCP
0.0.0.0: IP address to listen on:0.0.0.0untuk 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 pengeksporcreds_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
- Linux:
<customer_id>: ID Pelanggan dari langkah sebelumnyalocation: Ganti<LOCATION>dengan region instance Google SecOps Anda (misalnya,us,europe, atauasia-southeast1). Pengekspor mengawalichronicle.googleapis.comdengan nilai ini. Lihat Endpoint Regional untuk mengetahui daftar lengkapnya.project: Ganti<PROJECT_NUMBER>dengan nomor project dari IAM & Admin > Settings.endpoint: Tetap tetapkan kechronicle.googleapis.com.BRO_TSV: Jenis log persis seperti yang muncul di Chronicleingestion_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
exportersdengan kode berikut. Tetapkancreds_file_pathke jalur ke file autentikasi penyerapan, dan jika instance Anda berada di luar AS, gantimalachiteingestion-pa.googleapis.comdengan 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, laluEnter, laluCtrl+X - Windows: Klik File > Save
- Linux: Tekan
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:
sudo systemctl restart observiq-otel-collectorPastikan layanan sedang berjalan:
sudo systemctl status observiq-otel-collectorPeriksa 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-collectorKonsol Services:
- Tekan
Win+R, ketikservices.msc, lalu tekan Enter. - Cari observIQ OpenTelemetry Collector.
- Klik kanan, lalu pilih Restart.
Pastikan layanan sedang berjalan:
sc query observiq-otel-collectorPeriksa log untuk mengetahui error:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Tekan
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.
- Login ke host sensor Zeek dengan hak istimewa root atau sudo.
- Instal dan konfigurasi
rsyslogatausyslog-ngjika belum ada. Buat file konfigurasi rsyslog untuk meneruskan log Zeek:
sudo nano /etc/rsyslog.d/zeek-forward.confTambahkan 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/*.logdengan jalur sebenarnya ke file log Zeek Anda jika berbeda. - Gunakan
@@, bukan@untuk penerusan TCP (harus cocok dengan jenis penerima agen Bindplane).
- Ganti
Mulai ulang rsyslog untuk menerapkan perubahan:
sudo systemctl restart rsyslogPastikan 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.