Mengumpulkan log Symantec VIP Authentication Hub
Dokumen ini menjelaskan cara menyerap log Symantec VIP Authentication Hub ke Google Security Operations menggunakan Bindplane. Kode parser pertama-tama membersihkan dan memproses pesan log input, mengonversi kolom tertentu, dan menyusun ulang data dari key-value pair. Kemudian, ekstrak informasi yang relevan dari berbagai kolom menggunakan pola grok dan logika bersyarat, lalu petakan ke atribut yang sesuai dalam Model Data Terpadu (UDM) untuk representasi peristiwa keamanan yang standar.
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 ke Symantec VIP Authentication Hub
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Penyerapan. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Profil.
- Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.
Menginstal agen Bindplane
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" /quiet
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.sh
Referensi penginstalan tambahan
Untuk opsi penginstalan tambahan, lihat panduan penginstalan.
Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps
- 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).
- Cari file
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: '/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: 'SYMANTEC_VIP_AUTHHUB' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.
Ganti
<customer_id>
dengan ID pelanggan yang sebenarnya.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
Mengonfigurasi Syslog di Symantec VIP Authentication Hub
- Login ke UI web Symantec VIP Gateway Anda.
- Buka Logs > Syslog Configuration.
- Jika Anda mengonfigurasi Syslog untuk pertama kalinya, Anda akan diminta untuk mengonfigurasi setelan Syslog. Pilih Ya.
- Jika Anda telah mengonfigurasi Syslog, klik Edit di bagian bawah halaman.
- Berikan detail konfigurasi berikut:
- Fasilitas Syslog: Pilih LOG_LOCAL0.
- Host Syslog: Masukkan alamat IP agen Bindplane.
- Port Syslog: Masukkan nomor port agen Bindplane (misalnya,
514
untuk UDP).
- Klik Simpan.
- Buka Identity providers > Self Service Portal Configuration.
- Edit detail konfigurasi berikut:
- Tingkat Logging: Pilih Info.
- Enable Syslog: Pilih Yes.
- Klik Kirim.
- Buka Identity providers > VIP Manager Authentication Configuration.
- Edit detail konfigurasi berikut:
- Tingkat Logging: Pilih Info.
- Enable Syslog: Pilih Yes.
- Klik Kirim.
- Buka User Store > LDAP Directory Synchronization.
- Edit detail konfigurasi berikut:
- Tingkat Log: Pilih Info.
- Enable Syslog: Pilih Yes.
- Klik Kirim.
Tabel pemetaan UDM
Kolom log | Pemetaan UDM | Logika |
---|---|---|
/auth/v1/authenticate |
security_result.detection_fields[].value |
Nilai diambil dari kolom /auth/v1/authenticate dalam log mentah dan ditetapkan ke objek security_result.detection_fields dengan kunci api . |
__isAuditIdLcmIdStore |
additional.fields[].value.string_value |
Nilai diambil dari kolom __isAuditIdLcmIdStore dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci __isAuditIdLcmIdStore . |
accessTokenScopes |
security_result.detection_fields[].value |
Nilai diambil dari kolom accessTokenScopes dalam log mentah dan ditetapkan ke objek security_result.detection_fields dengan kunci accessTokenScopes . |
accessTokenTid |
security_result.detection_fields[].value |
Nilai diambil dari kolom accessTokenTid dalam log mentah dan ditetapkan ke objek security_result.detection_fields dengan kunci accessTokenTid . |
api |
security_result.detection_fields[].value |
Nilai diambil dari kolom api dalam log mentah dan ditetapkan ke objek security_result.detection_fields dengan kunci api . |
appId |
additional.fields[].value.string_value |
Nilai diambil dari kolom appId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci appId . |
appName |
principal.application |
Nilai diambil dari kolom appName dalam log mentah. |
azpName |
additional.fields[].value.string_value |
Nilai diambil dari kolom azpName dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci azpName . |
bytes_sent |
network.sent_bytes |
Nilai diambil dari kolom bytes_sent dalam log mentah. |
client |
principal.asset.ip , principal.ip |
Alamat IP diekstrak dari kolom client di log mentah menggunakan pola grok dan ditambahkan ke kolom principal.ip dan principal.asset.ip . |
clientId |
additional.fields[].value.string_value , principal.user.userid |
Nilai diambil dari kolom clientId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci clientId . Jika kolom clientId tidak kosong, kolom tersebut juga digunakan untuk mengisi kolom principal.user.userid . |
clientIp |
principal.asset.ip , principal.ip |
Nilai diambil dari kolom clientIp di log mentah dan ditambahkan ke kolom principal.ip dan principal.asset.ip . |
clientTid |
additional.fields[].value.string_value |
Nilai diambil dari kolom clientTid dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci clientTid . |
clientTxnId |
additional.fields[].value.string_value |
Nilai diambil dari kolom clientTxnId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci clientTxnId . |
contentType |
additional.fields[].value.string_value |
Nilai diambil dari kolom contentType dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci contentType . |
countryISO |
principal.location.country_or_region |
Nilai diambil dari kolom countryISO dalam log mentah. |
eventId |
metadata.product_event_type |
Nilai diambil dari kolom eventId dalam log mentah. |
flowStateId |
additional.fields[].value.string_value |
Nilai diambil dari kolom flowStateId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci flowStateId . |
geo.city_name |
principal.location.city |
Nilai diambil dari kolom geo.city_name dalam log mentah. |
geo.country_name |
principal.location.country_or_region |
Nilai diambil dari kolom geo.country_name dalam log mentah. |
geo.location.lat |
principal.location.region_coordinates.latitude |
Nilai diambil dari kolom geo.location.lat di log mentah, dikonversi menjadi float, dan diganti namanya menjadi principal.location.region_coordinates.latitude . |
geo.location.lon |
principal.location.region_coordinates.longitude |
Nilai diambil dari kolom geo.location.lon di log mentah, dikonversi menjadi float, dan diganti namanya menjadi principal.location.region_coordinates.longitude . |
guid |
metadata.product_log_id |
Nilai diambil dari kolom guid dalam log mentah. |
host |
principal.asset.hostname , principal.hostname |
Nilai diambil dari kolom host dalam log mentah, tanpa tanda petik, dan ditambahkan ke kolom principal.hostname dan principal.asset.hostname . |
httpMethod |
network.http.method |
Nilai diambil dari kolom httpMethod dalam log mentah. |
httpReferrer |
network.http.referral_url |
Nilai diambil dari kolom httpReferrer dalam log mentah. |
identitySourceId |
additional.fields[].value.string_value |
Nilai diambil dari kolom identitySourceId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci identitySourceId . |
internal-user-sync-ext-resourceGuid |
target.user.userid |
Nilai diambil dari kolom internal-user-sync-ext-resourceGuid dalam log mentah. |
internal-user-sync-ext-resourceName |
target.user.email_addresses |
Nilai diambil dari kolom internal-user-sync-ext-resourceName di log mentah dan ditambahkan ke kolom target.user.email_addresses . |
issuerUrl |
target.url |
Nilai diambil dari kolom issuerUrl dalam log mentah. |
kubernetes.annotations.cni.projectcalico.org_containerID |
target.resource.product_object_id |
Nilai diambil dari kolom kubernetes.annotations.cni.projectcalico.org_containerID dalam log mentah. |
kubernetes.annotations.cni.projectcalico.org_podIP |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.annotations.cni.projectcalico.org_podIP dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci podIP . |
kubernetes.annotations.cni.projectcalico.org_podIPs |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.annotations.cni.projectcalico.org_podIPs dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci podIPs . |
kubernetes.container_hash |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.container_hash dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci container_hash . |
kubernetes.container_image |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.container_image dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci container_image . |
kubernetes.container_name |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.container_name dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci container_name . |
kubernetes.docker_id |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.docker_id dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci docker_id . |
kubernetes.host |
principal.asset.hostname , principal.hostname |
Nilai diambil dari kolom kubernetes.host di log mentah dan ditambahkan ke kolom principal.hostname dan principal.asset.hostname . |
kubernetes.labels.app |
Kolom ini tidak dipetakan ke objek IDM di UDM. | |
kubernetes.labels.app.kubernetes.io/component |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/component dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_component . |
kubernetes.labels.app.kubernetes.io/instance |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/instance dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_instance . |
kubernetes.labels.app.kubernetes.io/managed-by |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/managed-by dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_managed-by . |
kubernetes.labels.app.kubernetes.io/name |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/name dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_name . |
kubernetes.labels.app.kubernetes.io/part-of |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/part-of dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_part-of . |
kubernetes.labels.app.kubernetes.io/version |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.app.kubernetes.io/version dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci io_version . |
kubernetes.labels.helm.sh/chart |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.helm.sh/chart dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci helm_sh_chart . |
kubernetes.labels.helmChartName |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.helmChartName dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci helmChartName . |
kubernetes.labels.imageTag |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.imageTag dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci imageTag . |
kubernetes.labels.pod-template-hash |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.labels.pod-template-hash dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci pod-template-hash . |
kubernetes.namespace_name |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.namespace_name dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci namespace_name . |
kubernetes.pod_id |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.pod_id dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci pod_id . |
kubernetes.pod_name |
target.resource.attribute.labels[].value |
Nilai diambil dari kolom kubernetes.pod_name dalam log mentah dan ditetapkan ke objek target.resource.attribute.labels dengan kunci pod_name . |
level |
security_result.severity |
Jika kolom level dalam log mentah cocok dengan notice atau info (tidak peka huruf besar/kecil), kolom security_result.severity akan ditetapkan ke INFORMATIONAL . |
log |
security_result.description , level , kv_data |
Kolom level dan kv_data diekstrak dari kolom log di log mentah menggunakan pola grok. Kolom security_result.description diisi dengan seluruh kolom log . |
logtag |
additional.fields[].value.string_value |
Nilai diambil dari kolom logtag dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci logtag . |
method |
network.http.method |
Nilai diambil dari kolom method dalam log mentah. |
msg |
metadata.event_type , security_result.description |
Nilai diambil dari kolom msg dalam log mentah dan digunakan untuk mengisi kolom security_result.description . Kolom metadata.event_type ditentukan berdasarkan konten kolom msg : * USER_CREATION jika msg berisi Internal user created or updated . * USER_LOGIN jika msg berisi Authorization Initiated Succesfully , Authentication Initiated Successfully , atau Authentication Successful . * USER_RESOURCE_ACCESS jika msg berisi Token Generated atau token verified . * NETWORK_CONNECTION jika has_principal dan has_target benar. * STATUS_UPDATE jika has_principal benar. * GENERIC_EVENT jika tidak. |
path |
principal.file.full_path |
Nilai diambil dari kolom path dalam log mentah. |
principalId |
additional.fields[].value.string_value , principal.user.userid |
Nilai diambil dari kolom principalId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci principalId . Jika kolom principalId bukan clientId dan tidak kosong, kolom tersebut juga digunakan untuk mengisi kolom principal.user.userid . |
principalType |
additional.fields[].value.string_value |
Nilai diambil dari kolom principalType dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci principalType . |
protocol |
network.application_protocol |
Jika kolom protocol dalam log mentah cocok dengan HTTP (tidak peka huruf besar/kecil), kolom network.application_protocol akan ditetapkan ke HTTP . |
referrer |
network.http.referral_url |
Nilai diambil dari kolom referrer di log mentah, tanpa tanda petik, dan ditetapkan ke kolom network.http.referral_url . |
relVersion |
metadata.product_version |
Nilai diambil dari kolom relVersion dalam log mentah. |
remoteAddr |
additional.fields[].value.string_value |
Nilai diambil dari kolom remoteAddr dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci remoteAddr . |
requestId |
additional.fields[].value.string_value |
Nilai diambil dari kolom requestId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci requestId . |
requestTime |
additional.fields[].value.string_value |
Nilai diambil dari kolom requestTime dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci requestTime . |
responseCode |
network.http.response_code |
Nilai numerik diekstrak dari kolom responseCode dalam log mentah menggunakan pola grok, dikonversi menjadi bilangan bulat, dan ditetapkan ke kolom network.http.response_code . |
request |
method , path , protocol |
Kolom method , path , dan protocol diekstrak dari kolom request dalam log mentah menggunakan pola grok setelah menghapus tanda kutip. |
server |
target.asset.hostname , target.hostname |
Nilai diambil dari kolom server di log mentah dan ditambahkan ke kolom target.hostname dan target.asset.hostname . |
service |
additional.fields[].value.string_value |
Nilai diambil dari kolom service dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci service . |
status |
network.http.response_code |
Nilai diambil dari kolom status di log mentah, dikonversi menjadi bilangan bulat, dan ditetapkan ke kolom network.http.response_code . |
stream |
additional.fields[].value.string_value |
Nilai diambil dari kolom stream dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci stream . |
sub |
additional.fields[].value.string_value |
Nilai diambil dari kolom sub dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci sub . |
subType |
additional.fields[].value.string_value |
Nilai diambil dari kolom subType dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci subType . |
tid |
additional.fields[].value.string_value |
Nilai diambil dari kolom tid dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci tid . |
timestamp |
metadata.event_timestamp |
Nilai diambil dari kolom timestamp dalam log mentah dan diuraikan sebagai stempel waktu ISO8601. |
tname |
additional.fields[].value.string_value |
Nilai diambil dari kolom tname dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci tname . |
txnId |
additional.fields[].value.string_value |
Nilai diambil dari kolom txnId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci txnId . |
type |
additional.fields[].value.string_value |
Nilai diambil dari kolom type dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci type . |
userAgent |
network.http.parsed_user_agent , network.http.user_agent |
Nilai diambil dari kolom userAgent di log mentah dan ditetapkan ke kolom network.http.user_agent dan network.http.parsed_user_agent . Kolom network.http.parsed_user_agent kemudian dikonversi menjadi objek agen pengguna yang diuraikan. |
userDN |
additional.fields[].value.string_value |
Nilai diambil dari kolom userDN dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userDN . |
userGuid |
additional.fields[].value.string_value |
Nilai diambil dari kolom userGuid dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userGuid . |
userIdpGuid |
additional.fields[].value.string_value |
Nilai diambil dari kolom userIdpGuid dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userIdpGuid . |
userIP |
principal.asset.ip , principal.ip , target.asset.ip , target.ip , intermediary.ip |
Alamat IP diekstrak dari kolom userIP dalam log mentah menggunakan pola grok. Alamat IP pertama ditambahkan ke kolom principal.ip dan principal.asset.ip . Alamat IP kedua ditambahkan ke kolom target.ip dan target.asset.ip . Alamat IP ketiga ditambahkan ke kolom intermediary.ip . |
userLoginId |
target.user.email_addresses |
Jika kolom userLoginId dalam log mentah tidak kosong dan cocok dengan pola alamat email, kolom tersebut akan ditambahkan ke kolom target.user.email_addresses . |
userLoginIdAttributeMappingName |
target.user.user_display_name |
Nilai diambil dari kolom userLoginIdAttributeMappingName dalam log mentah. |
userRiskLevel |
additional.fields[].value.string_value |
Nilai diambil dari kolom userRiskLevel dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userRiskLevel . |
userRiskScore |
additional.fields[].value.string_value |
Nilai diambil dari kolom userRiskScore dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userRiskScore . |
userIp |
principal.asset.ip , principal.ip |
Nilai diambil dari kolom userIp di log mentah dan ditambahkan ke kolom principal.ip dan principal.asset.ip . |
userUniversalId |
additional.fields[].value.string_value |
Nilai diambil dari kolom userUniversalId dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci userUniversalId . |
vhost |
additional.fields[].value.string_value |
Nilai diambil dari kolom vhost dalam log mentah dan ditetapkan ke objek additional.fields dengan kunci vhost . |
T/A | extensions.auth.type |
Nilai ditetapkan ke SSO jika kolom metadata.event_type adalah USER_LOGIN . |
T/A | metadata.log_type |
Nilai ditetapkan ke SYMANTEC_VIP_AUTHHUB . |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.