Mengumpulkan log pemberitahuan Netskope v1
Ringkasan
Parser ini mengekstrak log pemberitahuan Netskope dari pesan berformat JSON, yang mengubahnya menjadi UDM Google Security Operations. Fungsi ini menormalisasi kolom, mengurai stempel waktu, menangani pemberitahuan dan tingkat keparahan, mengekstrak informasi jaringan (IP, port, protokol), memperkaya data pengguna dan file, serta memetakan kolom ke struktur UDM. Parser juga menangani aktivitas Netskope tertentu seperti login dan peristiwa DLP serta menambahkan label kustom untuk konteks yang ditingkatkan.
Sebelum memulai
- Pastikan Anda memiliki instance Google Chronicle.
- Pastikan Anda memiliki akses dengan hak istimewa ke Netskope.
Mengaktifkan akses Netskope REST API
- Login ke tenant Netskope menggunakan kredensial administrator Anda.
- Buka Setelan > Alat > REST API v1.
- Buat kunci API baru khusus untuk Google SecOps.
- Berikan nama deskriptif (misalnya, Kunci Google SecOps).
- Salin dan simpan kunci dan rahasia yang dihasilkan.
Mengonfigurasi feed di Google SecOps untuk menyerap log Netskope Alert
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed (misalnya, Netskope Alert Logs).
- Pilih Third party API sebagai Source type.
- Pilih Netskope sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Header HTTP Autentikasi: pasangan kunci yang dibuat sebelumnya dalam format
<key>:<secret>
, digunakan untuk melakukan autentikasi terhadap Netskope API. - Nama Host API: FQDN (nama domain yang sepenuhnya memenuhi syarat) endpoint REST API Netskope Anda (misalnya
myinstance.goskope.com
). - Endpoint API: Masukkan alerts.
- Jenis Konten: Masukkan all.
- Namespace aset: namespace aset.
- Label penyerapan: label yang diterapkan ke peristiwa dari feed ini.
- Header HTTP Autentikasi: pasangan kunci yang dibuat sebelumnya dalam format
- Klik Berikutnya.
- Tinjau konfigurasi feed di layar Finalize, lalu klik Submit.
Opsional: Menambahkan konfigurasi feed untuk menyerap Log peristiwa Netskope
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya, Log Peristiwa Netskope).
- Pilih Third party API sebagai Source type.
- Pilih Netskope sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Header HTTP Autentikasi: pasangan kunci yang dibuat sebelumnya dalam format
<key>:<secret>
, digunakan untuk melakukan autentikasi terhadap Netskope API. - Nama Host API: FQDN (nama domain yang sepenuhnya memenuhi syarat) endpoint REST API Netskope Anda (misalnya
myinstance.goskope.com
). - Endpoint API: Masukkan events.
- Jenis Konten: Masukkan halaman, aplikasi, audit, infrastruktur, atau jaringan, bergantung pada peristiwa yang ingin Anda uraikan.
- Namespace aset: namespace aset.
- Label penyerapan: label yang diterapkan ke peristiwa dari feed ini.
- Header HTTP Autentikasi: pasangan kunci yang dibuat sebelumnya dalam format
- Klik Berikutnya.
- Tinjau konfigurasi feed di layar Finalize, lalu klik Submit.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
access_method |
extensions.auth.auth_details |
Dipetakan langsung dari kolom access_method . |
action |
security_result.action |
Dipetakan langsung dari kolom action , atau ditetapkan ke QUARANTINE jika action adalah "alert" atau "bypass". ALLOW jika action diizinkan. BLOCK jika action diblokir. |
action |
security_result.action_details |
Dipetakan dari kolom action jika "alert" atau "bypass". |
activity |
security_result.description |
Dipetakan langsung dari kolom activity . |
alert |
is_alert |
Tetapkan ke true jika alert adalah "yes", false jika tidak. |
alert_name |
- | Tidak dipetakan ke objek IDM. |
alert_type |
security_result.category_details |
Dipetakan langsung dari kolom alert_type . |
app |
target.application |
Dipetakan langsung dari kolom app . |
app_activity |
additional.fields {key:"app_activity", value:{string_value: |
Dipetakan langsung dari kolom app_activity sebagai pasangan nilai kunci di additional.fields . |
app_session_id |
target.resource.attribute.labels {key:"App Session Id", value: |
Diekstrak dari kolom message menggunakan grok dan ditambahkan sebagai label. |
appcategory |
security_result.category_details |
Dipetakan langsung dari kolom appcategory jika category kosong. |
browser |
network.http.user_agent |
Dipetakan langsung dari kolom browser jika bukan "tidak diketahui". |
browser_version |
network.http.parsed_user_agent.browser_version |
Dipetakan langsung dari kolom browser_version . |
browser_version |
network.http.parsed_user_agent.family |
Tetapkan ke "USER_DEFINED" jika browser_version ada. |
category |
security_result.category_details |
Dipetakan langsung dari kolom category . |
cci |
security_result.detection_fields {key:"cci", value: |
Dipetakan langsung dari kolom cci sebagai pasangan nilai kunci di detection_fields . |
ccl |
security_result.confidence |
Tetapkan berdasarkan nilai ccl : "poor" atau "low" dipetakan ke LOW_CONFIDENCE , "medium" ke MEDIUM_CONFIDENCE , "high" atau "excellent" ke HIGH_CONFIDENCE . |
ccl |
security_result.confidence_details |
Dipetakan langsung dari kolom ccl . |
client_bytes |
network.sent_bytes |
Dipetakan langsung dari kolom client_bytes setelah dikonversi ke bilangan bulat tanpa tanda tangan. |
count |
additional.fields {key:"count", value:{string_value: |
Dipetakan langsung dari kolom count sebagai pasangan nilai kunci di additional.fields . |
device |
principal.resource.resource_subtype |
Dipetakan langsung dari kolom device . |
device |
principal.resource.type |
Tetapkan ke "DEVICE" jika kolom device ada. |
dlp_file |
target.file.full_path |
Dipetakan langsung dari kolom dlp_file jika ada, atau dari file_path . |
dlp_profile |
security_result.rule_type |
Dipetakan langsung dari kolom dlp_profile . |
dlp_rule |
security_result.rule_name |
Dipetakan langsung dari kolom dlp_rule . |
dlp_rule_severity |
security_result.severity |
Dipetakan langsung dari kolom dlp_rule_severity jika alert_type adalah DLP. |
dlp_rule_severity |
_severity |
Dipetakan dari kolom dlp_rule_severity jika severity kosong. |
domain |
target.asset.hostname |
Dipetakan langsung dari kolom domain . |
domain |
target.hostname |
Dipetakan langsung dari kolom domain . |
dsthost |
target.asset.hostname |
Dipetakan langsung dari kolom dsthost jika bukan IP dan dstip kosong, jika tidak, dipetakan ke target.hostname . |
dsthost |
target.hostname |
Dipetakan langsung dari kolom dsthost jika bukan IP dan dstip tidak kosong. |
dstip |
target.asset.ip |
Dipetakan langsung dari kolom dstip . |
dstip |
target.ip |
Dipetakan langsung dari kolom dstip . |
dstport |
target.port |
Dipetakan langsung dari kolom dstport setelah dikonversi menjadi bilangan bulat. |
dst_country |
target.location.country_or_region |
Dipetakan langsung dari kolom dst_country . |
dst_location |
target.location.city |
Dipetakan langsung dari kolom dst_location . |
dst_region |
target.location.name |
Dipetakan langsung dari kolom dst_region . |
file_path |
target.file.full_path |
Dipetakan langsung dari kolom file_path jika dlp_file kosong. |
file_size |
target.file.size |
Dipetakan langsung dari kolom file_size setelah dikonversi ke bilangan bulat tanpa tanda tangan. |
file_type |
target.file.mime_type |
Dipetakan langsung dari kolom file_type jika bukan "Tidak diketahui". |
from_user |
network.email.from |
Dipetakan langsung dari kolom from_user jika berupa alamat email. |
from_user_category |
principal.resource.attribute.labels {key:"From User Category", value: |
Dipetakan langsung dari kolom from_user_category sebagai pasangan nilai kunci di principal.resource.attribute.labels . |
hostname |
principal.asset.hostname |
Dipetakan langsung dari kolom hostname jika tidak kosong, jika tidak, dari instance_id . |
hostname |
principal.hostname |
Dipetakan langsung dari kolom hostname jika tidak kosong, jika tidak, dari instance_id . |
id.time |
metadata.event_timestamp |
Diurai dan dipetakan ke stempel waktu peristiwa dalam metadata. |
instance_id |
principal.asset.hostname |
Dipetakan langsung dari kolom instance_id jika hostname kosong. |
instance_id |
principal.hostname |
Dipetakan langsung dari kolom instance_id jika hostname kosong. |
intermediary |
intermediary |
Dipetakan langsung dari kolom intermediary . |
ip_protocol |
network.ip_protocol |
Dipetakan dari kolom ip_protocol setelah diuraikan oleh file parse_ip_protocol.include . |
is_alert |
is_alert |
Kolom yang dihasilkan parser. Tetapkan ke benar jika kolom alert adalah "ya". |
is_significant |
is_significant |
Kolom yang dihasilkan parser. Tetapkan ke benar jika _severity adalah "KRITIS" atau "TINGGI". |
ja3 |
network.tls.client.ja3 |
Dipetakan langsung dari kolom ja3 jika cocok dengan pola heksadesimal. |
ja3s |
network.tls.server.ja3s |
Dipetakan langsung dari kolom ja3s jika cocok dengan pola heksadesimal. |
malware_id |
security_result.threat_id |
Dipetakan langsung dari kolom malware_id . |
malware_name |
security_result.threat_name |
Dipetakan langsung dari kolom malware_name . |
malware_severity |
security_result.severity |
Dipetakan langsung dari kolom malware_severity setelah dikonversi ke huruf besar. |
malware_type |
security_result.detection_fields {key:"Malware Type", value: |
Dipetakan langsung dari kolom malware_type sebagai pasangan nilai kunci di detection_fields . |
matched_username |
principal.user.email_addresses |
Dipetakan langsung dari kolom matched_username jika berupa alamat email. |
md5 |
target.file.md5 |
Dipetakan langsung dari kolom md5 jika tidak kosong atau "Tidak tersedia". |
metadata.event_type |
metadata.event_type |
Awalnya ditetapkan ke "GENERIC_EVENT", lalu berpotensi diganti berdasarkan kolom lain. Tetapkan ke NETWORK_HTTP jika srcip atau hostname dan dstip atau dsthost atau domain ada. Tetapkan ke STATUS_UPDATE jika srcip atau hostname ada, tetapi tidak ada dstip , dsthost , atau domain . Tetapkan ke USER_UNCATEGORIZED jika user ada. Tetapkan ke EMAIL_UNCATEGORIZED jika activity adalah "Pemindaian Introspeksi" dan shared_with atau from_user ada. Tetapkan ke USER_LOGIN jika activity adalah "Login Gagal", "Login Berhasil", atau "Upaya Login". |
metadata.log_type |
metadata.log_type |
Tetapkan ke "NETSKOPE_ALERT". |
metadata.product_log_id |
metadata.product_log_id |
Dipetakan langsung dari kolom _id . |
metadata.product_name |
metadata.product_name |
Tetapkan ke "Netskope Alert". |
metadata.vendor_name |
metadata.vendor_name |
Tetapkan ke "Netskope". |
netskope_pop |
observer.hostname |
Dipetakan langsung dari kolom netskope_pop . |
object |
additional.fields {key:"Object", value:{string_value: |
Dipetakan langsung dari kolom object sebagai pasangan nilai kunci di additional.fields . |
object_id |
additional.fields {key:"Object id", value:{string_value: |
Dipetakan langsung dari kolom object_id sebagai pasangan nilai kunci di additional.fields . |
object_type |
additional.fields {key:"Object type", value:{string_value: |
Dipetakan langsung dari kolom object_type sebagai pasangan nilai kunci di additional.fields . |
organization_unit |
principal.administrative_domain |
Dipetakan langsung dari kolom organization_unit . |
os |
principal.platform |
Dipetakan dari kolom os : "Windows" dipetakan ke WINDOWS , "MAC" ke MAC , "LINUX" ke LINUX . |
os_version |
principal.platform_version |
Dipetakan langsung dari kolom os_version . |
other_categories |
- | Tidak dipetakan ke objek IDM. |
page |
network.http.referral_url |
Dipetakan langsung dari kolom page jika referer kosong. |
policy |
security_result.summary |
Dipetakan langsung dari kolom policy . |
principal.user.email_addresses |
principal.user.email_addresses |
Digabung dari kolom user jika merupakan alamat email. |
protocol |
network.application_protocol |
Dipetakan langsung dari kolom protocol setelah menghapus semua yang ada setelah "/" pertama. Dikonversi ke huruf besar. |
publisher_cn |
additional.fields {key:"publisher_cn", value:{string_value: |
Dipetakan langsung dari kolom publisher_cn sebagai pasangan nilai kunci di additional.fields . |
publisher_name |
additional.fields {key:"publisher_name", value:{string_value: |
Dipetakan langsung dari kolom publisher_name sebagai pasangan nilai kunci di additional.fields . |
referer |
network.http.referral_url |
Dipetakan langsung dari kolom referer . |
security_result.alert_state |
security_result.alert_state |
Tetapkan ke "ALERTING" jika alert adalah "yes", "NOT_ALERTING" jika alert adalah "no", "UNSPECIFIED" jika tidak. |
security_result.category_details |
security_result.category_details |
Digabung dari kolom category atau appcategory atau alert_type . |
security_result.confidence |
security_result.confidence |
Berasal dari kolom ccl . |
security_result.confidence_details |
security_result.confidence_details |
Dipetakan langsung dari kolom ccl . |
security_result.description |
security_result.description |
Dipetakan langsung dari kolom activity . |
security_result.rule_name |
security_result.rule_name |
Dipetakan langsung dari kolom dlp_rule . |
security_result.rule_type |
security_result.rule_type |
Dipetakan langsung dari kolom dlp_profile . |
security_result.severity |
security_result.severity |
Berasal dari kolom _severity atau malware_severity atau dlp_rule_severity . |
security_result.summary |
security_result.summary |
Dipetakan langsung dari kolom policy . |
security_result.threat_id |
security_result.threat_id |
Dipetakan langsung dari kolom malware_id . |
security_result.threat_name |
security_result.threat_name |
Dipetakan langsung dari kolom malware_name . |
server_bytes |
network.received_bytes |
Dipetakan langsung dari kolom server_bytes setelah dikonversi ke bilangan bulat tanpa tanda tangan. |
severity |
_severity |
Dipetakan langsung dari kolom severity . |
sha256 |
target.file.sha256 |
Dipetakan langsung dari kolom sha256 . |
shared_with |
network.email.to |
Diurai dari kolom shared_with dan ditambahkan ke array network.email.to jika merupakan alamat email. |
site |
additional.fields {key:"site", value:{string_value: |
Dipetakan langsung dari kolom site sebagai pasangan nilai kunci di additional.fields . |
src_country |
principal.location.country_or_region |
Dipetakan langsung dari kolom src_country . |
src_latitude |
principal.location.region_latitude |
Dipetakan langsung dari kolom src_latitude . |
src_location |
principal.location.city |
Dipetakan langsung dari kolom src_location . |
src_longitude |
principal.location.region_longitude |
Dipetakan langsung dari kolom src_longitude . |
src_region |
principal.location.name |
Dipetakan langsung dari kolom src_region . |
srcip |
principal.asset.ip |
Diekstrak dari kolom srcip menggunakan grok dan digabungkan ke dalam array principal.asset.ip dan principal.ip . |
srcip |
principal.ip |
Diekstrak dari kolom srcip menggunakan grok dan digabungkan ke dalam array principal.asset.ip dan principal.ip . |
srcport |
principal.port |
Dipetakan langsung dari kolom srcport setelah dikonversi menjadi bilangan bulat. |
target.user.email_addresses |
target.user.email_addresses |
Digabung dari kolom to_user jika merupakan alamat email. |
threat_match_field |
security_result.detection_fields {key:"Threat Match Field", value: |
Dipetakan langsung dari kolom threat_match_field sebagai pasangan nilai kunci di detection_fields . |
timestamp |
metadata.event_timestamp |
Diurai dari kolom timestamp atau id.time . |
to_user |
target.user.email_addresses |
Diurai dari kolom to_user dan ditambahkan ke array target.user.email_addresses jika merupakan alamat email. |
to_user_category |
target.resource.attribute.labels {key:"To User Category", value: |
Dipetakan langsung dari kolom to_user_category sebagai pasangan nilai kunci di target.resource.attribute.labels . |
traffic_type |
security_result.detection_fields {key:"traffic_type", value: |
Dipetakan langsung dari kolom traffic_type sebagai pasangan nilai kunci di detection_fields . |
tunnel_id |
additional.fields {key:"tunnel_id", value:{string_value: |
Dipetakan langsung dari kolom tunnel_id sebagai pasangan nilai kunci di additional.fields . |
tunnel_type |
additional.fields {key:"tunnel_type", value:{string_value: |
Dipetakan langsung dari kolom tunnel_type sebagai pasangan nilai kunci di additional.fields . |
type |
security_result.detection_fields {key:"type", value: |
Dipetakan langsung dari kolom type sebagai pasangan nilai kunci di detection_fields . |
ur_normalized |
- | Tidak dipetakan ke objek IDM. |
url |
target.url |
Dipetakan langsung dari kolom url . |
user |
event.idm.read_only_udm.principal.user.userid |
Dipetakan langsung dari kolom user . |
user |
principal.user.email_addresses |
Dipetakan langsung dari kolom user jika berupa alamat email. |
useragent |
network.http.user_agent |
Dipetakan langsung dari kolom useragent . |
useragent |
network.http.parsed_user_agent |
Dikonversi ke parseduseragent dan dipetakan ke network.http.parsed_user_agent . |
user_agent |
network.http.user_agent |
Dipetakan langsung dari kolom user_agent . |
user_agent |
network.http.parsed_user_agent |
Dikonversi ke parseduseragent dan dipetakan ke network.http.parsed_user_agent . |
Perubahan
2024-06-04
- Memetakan "matched_username" ke "principal.user.email_addresses".
- Jika "action" adalah "bypass" atau "alert", petakan "action" ke "security_result.action_details" dan tetapkan "security_result.action" ke "QUARANTINE".
- Jika "alert_type" adalah "DLP", petakan "dlp_rule_severity" ke "security_result.severity".
2024-02-19
- Mengubah pemetaan "client_bytes" dari "network.received_bytes" menjadi "network.sent_bytes".
- Mengubah pemetaan "server_bytes" dari "network.sent_bytes" menjadi "network.received_bytes".
2024-02-08
- Memetakan "useragent" dan "user_agent" ke "network.http.user_agent" dan "network.http.parsed_user_agent".
2023-11-10
- Menambahkan pola Grok, untuk memeriksa apakah "srcip" adalah pola IP yang valid.
- Memetakan "instance_id" ke "principal.hostname".
- Memetakan "traffic_type" ke "security_result.detection_fields".
- Memetakan "app_activity" ke "additional.fields".
- Memetakan "count" ke "additional.fields".
- Memetakan "site" ke "additional.fields".
- Memetakan "device" ke "principal.resource.resource_sub_type".
- Memetakan "type" ke "security_result.detection_fields".
- Mengubah pemetaan "hostname" menggunakan "replace", bukan "rename".
- Mengubah pemetaan "cci" dari "additional.fields" menjadi "security_result.detection_fields".
- Mengubah pemetaan "ccl" dari "additional.fields" menjadi "security_result.confidence_details".
- Mengisi "security_result.confidence" sesuai dengan nilai di "ccl".
2023-07-14
- Perbaikan Bug -
- Nilai yang diekstrak untuk 'browser_session_id','app_session_id' menggunakan pola Grok sebelum pemetaan.
- Menambahkan pemeriksaan kondisi untuk memvalidasi email sebelum memetakan kolom 'to_user'.
2023-07-06
- Peningkatan -
- Mengubah pola Grok untuk mengidentifikasi apakah "dsthost" adalah alamat IP atau bukan.
- Jika "dsthost" adalah alamat IP, maka dipetakan ke "target.ip", jika tidak, dipetakan ke "target.hostname".
2023-06-06
- Peningkatan -
- Memetakan "domain" ke "target.hostname".
- Memetakan "app_session_id" ke "target.resource.attribute.labels".
- Memetakan "malware_severity" ke "security_result.severity".
- Memetakan "malware_type" ke "security_result.detection_fields".
- Memetakan "threat_match_field" ke "security_result.detection_fields".
- Memetakan "ja3" ke "network.tls.client.ja3".
- Memetakan "ja3s" ke "network.tls.server.ja3s".
- Memetakan "cci", "ccl" ke "additional.fields".
- Memetakan "access_method" ke "extensions.auth.auth_details".
- Memetakan "browser_version" ke "network.http.parsed_user_agent.browser_version".
- Memetakan "dlp_profile" ke "security_result.rule_type".
- Memetakan "dlp_rule" ke "security_result.rule_name".
- Memetakan "netskope_pop" ke "observer.hostname".
- Memetakan "page" ke "network.http.referral_url".
- Memetakan "to_user" ke "target.user.email_addresses".
- Memetakan "to_user_category" ke "target.resource.attribute.labels".
2023-03-23
- Peningkatan -
- Memetakan "security_result.alert_state" ke "ALERTING" jika "alert" sama dengan "yes".
- Memetakan "security_result.alert_state" ke "NOT_ALERTING" jika "alert" sama dengan "no".
- Memetakan "security_result.alert_state" ke "UNSPECIFIED" jika "alert" null.
2022-07-23
- Menghapus pemetaan yang tidak diperlukan untuk "metadata.description".
2022-07-01
- Kolom "os" dipetakan ke "principal.platform".
- Kolom "dsthost" dipetakan ke "target.ip" jika "dsthost" adalah IP, jika tidak, dipetakan ke "target.hostname".
- Kolom "dstport" dipetakan ke "target.port".
- Kolom "srcport" dipetakan ke "principal.port".
- Kolom "user" dipetakan ke "principal.user.email_addresses", jika "user" adalah alamat email yang valid.
- Kolom "src_latitude" dipetakan ke "principal.location.region_latitude".
- Kolom "src_longitude" dipetakan ke "principal.location.region_longitude".
- Kolom "ip_protocol" dipetakan ke "network.ip_protocol".
- Kolom "client_bytes" dipetakan ke "network.received_bytes".
- Kolom "server_bytes" dipetakan ke "network.sent_bytes".
- Kolom "browser_session_id" dipetakan ke "network.session_id".
- Kolom "network_session_id" dipetakan ke "network.session_id".
- Kolom "appcategory" dipetakan ke "security_result.category_details".
- Kolom "publisher_cn" dipetakan ke "additional.fields[n]".
- Kolom "publisher_name" dipetakan ke "additional.fields[n]".
- Kolom "tunnel_id" dipetakan ke "additional.fields[n]".
- Kolom "tunnel_type" dipetakan ke "additional.fields[n]".
- Mengubah pemetaan untuk kolom "shared_with" dari "intermediary.user.email_addresses" menjadi "network.email.to".
- Mengubah pemetaan untuk kolom "network.email.to" dari "principal.user.email_addresses" menjadi "network.email.from".
- Menambahkan pemeriksaan bersyarat untuk kolom "_severity", "shared_with", "from_user", "protocol".
- Mengubah "metadata.event_type" untuk kasus berikut:
- "GENERIC_EVENT" ke "NETWORK_HTTP" dengan "principal.ip or principal.hostname" dan "target.ip or target.hostname" tidak null.
- "GENERIC_EVENT" ke "STATUS_UPDATE" dengan "principal.ip atau principal.hostname" tidak null.
- "GENERIC_EVENT" ke "USER_UNCATEGORIZED" dengan "principal.user.userid" tidak null.
2022-06-17
- Perbaikan Bug:
- Menambahkan pemeriksaan bersyarat untuk "md5" == "not available".