Mengumpulkan log DNS Cisco Umbrella
Dokumen ini menjelaskan cara mengumpulkan log DNS Cisco Umbrella ke feed Google Security Operations menggunakan bucket AWS S3. Parser menangani log berformat JSON dan CSV. Proses ini mengekstrak kolom, mengganti namanya agar cocok dengan UDM, menangani berbagai versi dan format log (termasuk log proxy dan IP), serta melakukan logika khusus untuk identitas, kategori keamanan, dan peristiwa jaringan, yang pada akhirnya menggabungkan data yang diekstrak ke dalam skema UDM.
Sebelum memulai
- Pastikan Anda memiliki instance Google SecOps.
- Pastikan Anda memiliki akses istimewa ke AWS IAM dan S3.
- Pastikan Anda memiliki akses istimewa ke Cisco Umbrella.
Mengonfigurasi bucket Amazon S3 yang dikelola Cisco
- Login ke dasbor Cisco Umbrella.
- Buka Admin > Pengelolaan log.
- Pilih opsi Gunakan bucket Amazon S3 yang dikelola Cisco.
- Berikan detail konfigurasi berikut:
- Pilih region: pilih region yang lebih dekat dengan lokasi Anda untuk latensi yang lebih rendah.
- Pilih durasi retensi: pilih jangka waktu. Durasi retensi adalah 7, 14, atau 30 hari. Setelah jangka waktu yang dipilih, data akan dihapus dan tidak dapat dipulihkan. Jika siklus penyerapan Anda teratur, gunakan jangka waktu yang lebih singkat. Anda dapat mengubah durasi retensi di lain waktu.
- Klik Simpan.
- Klik Lanjutkan untuk mengonfirmasi pilihan Anda dan menerima notifikasi aktivasi.
Di jendela Activation complete yang muncul, nilai Access key dan Secret key ditampilkan. - Salin nilai Access key dan Secret key. Jika Anda kehilangan kunci ini, Anda harus membuatnya ulang.
- Klik Oke > Lanjutkan.
- Halaman ringkasan menampilkan konfigurasi dan nama bucket Anda. Anda dapat menonaktifkan atau mengaktifkan logging sesuai kebutuhan organisasi Anda. Namun, log dihapus berdasarkan durasi retensi, terlepas dari penambahan data baru.
Opsional: Mengonfigurasi kunci akses pengguna untuk bucket AWS S3 yang dikelola sendiri
- Login ke AWS Management Console.
- Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
- Klik Selesai.
- Pilih tab Izin.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Telusuri dan pilih kebijakan AmazonS3FullAccess.
- Klik Berikutnya.
- Klik Add permissions.
Opsional: Mengonfigurasi bucket Amazon S3 yang dikelola sendiri
Login ke AWS Management Console.
Buka S3.
Klik Create bucket.
Berikan detail konfigurasi berikut:
- Nama bucket: berikan nama untuk bucket Amazon S3.
- Region: pilih region.
Klik Buat.
Opsional: Mengonfigurasi kebijakan bucket untuk bucket AWS S3 yang dikelola sendiri
- Klik bucket yang baru dibuat untuk membukanya.
- Pilih Properti > Izin.
- Di daftar Permissions, klik Add bucket policy.
Masukkan kebijakan bucket yang telah dikonfigurasi sebelumnya sebagai berikut:
{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Sid": "", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET_NAME/*"}, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::BUCKET_NAME" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::568526795995:user/logs" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET_NAME" } ] }
- Ganti
BUCKET_NAME
dengan nama bucket Amazon S3 yang Anda berikan.
- Ganti
Klik Simpan.
Opsional: Verifikasi yang Diperlukan untuk bucket Amazon S3 yang dikelola sendiri
- Di dasbor Cisco Umbrella, pilih Admin > Log management > Amazon S3.
- Di kolom Bucket name, tentukan nama bucket Amazon S3 Anda yang tepat, lalu klik Verify.
- Sebagai bagian dari proses verifikasi, file bernama
README_FROM_UMBRELLA.txt
diupload dari Cisco Umbrella ke bucket Amazon S3 Anda. Anda mungkin perlu memuat ulang browser untuk melihat file readme saat diupload. - Download file
README_FROM_UMBRELLA.txt
, lalu buka menggunakan editor teks. - Salin dan simpan token Cisco Umbrella unik dari file.
- Buka dasbor Cisco Umbrella.
- Di kolom Token number, tentukan token, lalu klik Save.
- Jika berhasil, Anda akan menerima pesan konfirmasi di dasbor yang menunjukkan bahwa bucket telah berhasil diverifikasi. Jika Anda menerima error yang menunjukkan bahwa bucket Anda tidak dapat diverifikasi, periksa kembali sintaks nama bucket dan tinjau konfigurasi.
Mengonfigurasi feed di Google SecOps untuk menyerap log DNS Cisco Umbrella
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed; misalnya, Cisco Umbrella DNS Logs.
- Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih Cisco Umbrella DNS sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- URI S3: URI bucket.
s3:/BUCKET_NAME/
- Ganti
BUCKET_NAME
dengan nama bucket yang sebenarnya.
- Ganti
- Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
- URI S3: URI bucket.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
action |
security_result.action_details |
Nilai diambil dari kolom action jika ada di log JSON, atau dari column6 atau column7 di log CSV, dan dikonversi menjadi huruf besar (ALLOW atau BLOCK). |
amp.disposition |
security_result.detection_fields[].key |
Nilainya adalah ampDisposition . |
amp.disposition |
security_result.detection_fields[].value |
Nilai diambil dari kolom amp.disposition . |
amp.malware |
security_result.detection_fields[].key |
Nilainya adalah ampMalware . |
amp.malware |
security_result.detection_fields[].value |
Nilai diambil dari kolom amp.malware . |
amp.score |
security_result.detection_fields[].key |
Nilainya adalah ampScore . |
amp.score |
security_result.detection_fields[].value |
Nilai diambil dari kolom amp.score . |
blocked_categories |
security_result.category_details |
Nilai diambil dari kolom blocked_categories . |
blockedfiletype |
security_result.detection_fields[].key |
Nilainya adalah egress type . |
blockedfiletype |
security_result.detection_fields[].value |
Nilai diambil dari kolom blockedfiletype . |
bundleid |
additional.fields[].key |
Nilainya adalah bundleid . |
bundleid |
additional.fields[].value.string_value |
Nilai diambil dari kolom bundleid . |
categories[] |
security_result.category_details |
Nilai diambil dari kolom categories[].label . |
column1 |
metadata.event_timestamp.seconds |
Nilai diuraikan dari kolom column1 sebagai stempel waktu. Untuk log proxy, jika ada kolom date dan time , kolom tersebut digabungkan dan diuraikan sebagai stempel waktu. |
column10 |
network.http.user_agent |
Nilai diambil dari kolom column10 . |
column10 |
additional.fields[].value.string_value |
Nilai diambil dari kolom column10 . |
column11 |
target.port |
Nilai diambil dari kolom column11 . |
column12 |
principal.resource.name |
Nilai diambil dari kolom column12 . |
column13 |
security_result.rule_id |
Nilai diambil dari kolom column13 . |
column14 |
security_result.action_details |
Nilai diambil dari kolom column14 . |
column2 |
principal.user.user_display_name |
Nilai diambil dari kolom column2 . |
column2 |
principal.user.userid |
Nilai diambil dari kolom column2 . |
column2 |
principal.location.name |
Nilai diambil dari kolom column2 . |
column3 |
principal.hostname |
Nilai diambil dari kolom column3 . |
column3 |
principal.user.product_object_id |
Nilai diambil dari kolom column3 . |
column3 |
principal.location.city |
Nilai diambil dari kolom column3 . |
column3 |
additional.fields[].value.string_value |
Nilai diambil dari kolom column3 . |
column4 |
principal.asset.ip |
Nilai diambil dari kolom column4 . |
column4 |
principal.ip |
Nilai diambil dari kolom column4 . |
column4 |
principal.port |
Nilai diambil dari kolom column4 . |
column5 |
principal.asset.ip |
Nilai diambil dari kolom column5 . |
column5 |
principal.ip |
Nilai diambil dari kolom column5 . |
column5 |
target.asset.ip |
Nilai diambil dari kolom column5 . |
column5 |
target.ip |
Nilai diambil dari kolom column5 . |
column6 |
security_result.action_details |
Nilai diambil dari kolom column6 . |
column6 |
target.port |
Nilai diambil dari kolom column6 . |
column7 |
network.received_bytes |
Nilai diambil dari kolom column7 . |
column7 |
additional.fields[].value.string_value |
Nilai diambil dari kolom column7 . |
column8 |
principal.asset.ip |
Nilai diambil dari kolom column8 . |
column8 |
principal.ip |
Nilai diambil dari kolom column8 . |
column8 |
target.url |
Nilai diambil dari kolom column8 . |
column9 |
principal.port |
Nilai diambil dari kolom column9 . |
column9 |
network.http.referral_url |
Nilai diambil dari kolom column9 . |
data_center_name |
principal.resource.name |
Nilai diambil dari kolom data_center_name . |
datacenter.label |
security_result.detection_fields[].key |
Nilainya adalah datacenter label . |
datacenter.label |
security_result.detection_fields[].value |
Nilai diambil dari kolom datacenter.label . |
destinationip |
target.asset.ip |
Nilai diambil dari kolom destinationip . |
destinationip |
target.ip |
Nilai diambil dari kolom destinationip . |
direction |
network.direction |
Nilai diambil dari kolom direction dan dikonversi menjadi huruf besar. |
domain |
network.dns.questions[].name |
Nilai diambil dari kolom domain , dengan titik di akhir dihapus jika ada. |
dstPort |
target.port |
Nilai diambil dari kolom dstPort . |
dstip |
target.asset.ip |
Nilai diambil dari kolom dstip . |
dstip |
target.ip |
Nilai diambil dari kolom dstip . |
egress.ip |
security_result.detection_fields[].key |
Nilainya adalah egress ip . |
egress.ip |
security_result.detection_fields[].value |
Nilai diambil dari kolom egress.ip . |
egress.type |
security_result.detection_fields[].key |
Nilainya adalah egress type . |
egress.type |
security_result.detection_fields[].value |
Nilai diambil dari kolom egress.type . |
externalip |
principal.asset.ip |
Nilai diambil dari kolom externalip . |
externalip |
principal.ip |
Nilai diambil dari kolom externalip . |
forwardingmethod |
additional.fields[].key |
Nilainya adalah forwardingmethod . |
forwardingmethod |
additional.fields[].value.string_value |
Nilai diambil dari kolom forwardingmethod . |
granular_identity |
principal.user.user_display_name |
Nilai diambil dari kolom granular_identity jika granular_identity dan most_granular_identity ada. Jika tidak, nilai ini berasal dari kolom _policy_identity dan selanjutnya diuraikan berdasarkan identityType . |
granular_identity |
principal.user.email_addresses |
Nilai diekstrak dari kolom granular_identity menggunakan ekspresi reguler. |
granular_identity |
principal.user.first_name |
Nilai diekstrak dari kolom granular_identity menggunakan ekspresi reguler. |
granular_identity |
principal.user.last_name |
Nilai diekstrak dari kolom granular_identity menggunakan ekspresi reguler. |
granular_identity |
principal.user.userid |
Nilai diekstrak dari kolom granular_identity menggunakan ekspresi reguler. |
granular_identity |
principal.hostname |
Nilai diambil dari kolom granular_identity . |
granular_identity |
principal.location.name |
Nilai diambil dari kolom granular_identity . |
identity_types |
additional.fields[].value.string_value |
Nilai diambil dari kolom identity_types . |
identities[] |
principal.user.product_object_id |
Nilai diambil dari kolom identities[] . |
identities |
principal.user.product_object_id |
Nilai diambil dari kolom identities . |
internalip |
principal.asset.ip |
Nilai diambil dari kolom internalip . |
internalip |
principal.ip |
Nilai diambil dari kolom internalip . |
isolated.fileaction |
security_result.detection_fields[].key |
Nilainya adalah isolated fileaction . |
isolated.fileaction |
security_result.detection_fields[].value |
Nilai diambil dari kolom isolated.fileaction . |
isolated.state |
security_result.detection_fields[].key |
Nilainya adalah isolated state . |
isolated.state |
security_result.detection_fields[].value |
Nilai diambil dari kolom isolated.state . |
most_granular_identity |
principal.user.identityType |
Nilai diambil dari kolom most_granular_identity jika granular_identity dan most_granular_identity ada. Jika tidak, nilai diambil dari kolom _policy_identity_type . |
nat_destination_ip |
principal.asset.ip |
Nilai diambil dari kolom nat_destination_ip . |
nat_destination_ip |
principal.ip |
Nilai diambil dari kolom nat_destination_ip . |
odns_categories |
security_result.category_details |
Nilai diambil dari kolom odns_categories . |
policy.ruleid |
security_result.rule_id |
Nilai diambil dari kolom policy.ruleid . |
policy.rulesetid |
security_result.detection_fields[].key |
Nilainya adalah rulesetid . |
policy.rulesetid |
security_result.detection_fields[].value |
Nilai diambil dari kolom policy.rulesetid . |
policy.timebasedrule |
security_result.detection_fields[].key |
Nilainya adalah timebasedrule . |
policy.timebasedrule |
security_result.detection_fields[].value |
Nilai diambil dari kolom policy.timebasedrule . |
port |
target.port |
Nilai diambil dari kolom port . |
query_type_name |
network.dns.questions[].type |
Bagian numerik diekstrak dari kolom query_type_name menggunakan ekspresi reguler dan dikonversi menjadi bilangan bulat. |
query_type_name |
additional.fields[].value.string_value |
Bagian string dalam tanda kurung diekstrak dari kolom query_type_name menggunakan ekspresi reguler. |
querytype |
network.dns.questions[].type |
Nilai diambil dari kolom querytype dan dipetakan ke nilai numerik berdasarkan jenis data DNS. |
referer |
network.http.referral_url |
Nilai diambil dari kolom referer . |
requestmethod |
network.http.method |
Nilai diambil dari kolom requestmethod . |
requestsize |
network.sent_bytes |
Nilai diambil dari kolom requestsize dan dikonversi menjadi bilangan bulat yang tidak bertanda tangan. |
response |
additional.fields[].value.string_value |
Nilai diambil dari kolom response . |
responsecode |
network.http.response_code |
Nilai diambil dari kolom responsecode . |
responsefilename |
target.file.names |
Nilai diambil dari kolom responsefilename . |
responsesize |
network.received_bytes |
Nilai diambil dari kolom responsesize dan dikonversi menjadi bilangan bulat yang tidak bertanda tangan. |
returncode |
network.dns.response_code |
Nilai diambil dari kolom returncode dan dikonversi menjadi bilangan bulat yang tidak bertanda tangan. |
securityoverridden |
additional.fields[].key |
Nilainya adalah securityoverridden . |
securityoverridden |
additional.fields[].value.string_value |
Nilai diambil dari kolom securityoverridden . |
sha256 |
target.file.sha256 |
Nilai diambil dari kolom sha256 . |
source_ip |
principal.asset.ip |
Nilai diambil dari kolom source_ip jika ada di log JSON, atau dari column3 di log CSV. |
source_ip |
principal.ip |
Nilai diambil dari kolom source_ip jika ada di log JSON, atau dari column3 di log CSV. |
srcPort |
principal.port |
Nilai diambil dari kolom srcPort . |
statuscode |
network.http.response_code |
Nilai diambil dari kolom statuscode . |
tenantcontrols |
additional.fields[].key |
Nilainya adalah tenantcontrols . |
tenantcontrols |
additional.fields[].value.string_value |
Nilai diambil dari kolom tenantcontrols . |
timestamp |
metadata.event_timestamp.seconds |
Nilai diuraikan dari kolom timestamp sebagai stempel waktu. |
tunnel_name |
additional.fields[].key |
Nilainya adalah tunnel_name . |
tunnel_name |
additional.fields[].value.string_value |
Nilai diambil dari kolom tunnel_name . |
tunnel_type |
metadata.product_event_type |
Nilai diambil dari kolom tunnel_type . |
type |
additional.fields[].key |
Nilainya adalah type . |
type |
additional.fields[].value.string_value |
Nilai diambil dari kolom type . |
url |
target.url |
Nilai diambil dari kolom url . |
useragent |
network.http.user_agent |
Nilai diambil dari kolom useragent . |
verdict |
security_result.action_details |
Nilai diambil dari kolom verdict . |
warnstatus |
security_result.detection_fields[].key |
Nilainya adalah warnstatus . |
warnstatus |
security_result.detection_fields[].value |
Nilai diambil dari kolom warnstatus . Nilainya adalah DNS Lookup Type . Bagian string dalam tanda kurung diekstrak dari kolom query_type_name menggunakan ekspresi reguler, atau berupa string kosong jika kolom tidak ada. Nilainya adalah DNS request and response were made. Ditentukan berdasarkan keberadaan kolom tertentu: NETWORK_DNS jika question.name ada, NETWORK_CONNECTION jika principal.ip dan target.ip ada, STATUS_UPDATE jika hanya principal.ip yang ada, atau GENERIC_EVENT jika tidak ada. Nilainya adalah UMBRELLA_DNS . Nilainya adalah Umbrella DNS . Nilainya adalah Cisco . Nilai awalnya ditetapkan ke DNS . Jika requestmethod adalah metode HTTP yang valid, metode tersebut akan diubah menjadi HTTP . Bagian numerik diekstrak dari kolom query_type_name menggunakan ekspresi reguler dan dikonversi menjadi bilangan bulat, atau berasal dari kolom querytype dan dipetakan ke nilai numerik berdasarkan jenis data DNS. Nilai ini berasal dari kolom useragent atau column10 menggunakan filter parseduseragent . Nilai diambil dari bagian terakhir kolom column3 setelah dibagi dengan koma, atau berupa string kosong jika kolom tidak ada. Nilai diambil dari bagian pertama kolom column3 setelah dibagi dengan koma, atau diambil dari kolom column2 jika column3 tidak ada. Nilai diekstrak dari kolom column2 atau column3 menggunakan ekspresi reguler. Nilai diekstrak dari kolom column2 atau column3 menggunakan ekspresi reguler. Nilai diekstrak dari kolom column2 atau column3 menggunakan ekspresi reguler. Nilai diekstrak dari kolom column2 atau column3 menggunakan ekspresi reguler. Nilai ini berasal dari kolom action , column6 , column7 , atau verdict dan dikonversi menjadi huruf besar (ALLOW atau BLOCK). Nilai disetel ke NETWORK_MALICIOUS jika _categories berisi Malware , atau NETWORK_SUSPICIOUS jika _categories berisi Potentially Harmful . |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.