Mengembangkan parser Advanced Security Information Model (ASIM) (Pratinjau publik)
Pengguna Security Information Model (ASIM) menggunakan parser pemersatu bukan nama tabel dalam kueri mereka, untuk melihat data dalam format yang dinormalisasi dan untuk memasukkan semua data yang relevan dengan skema dalam kueri. Parser pemersatu, selanjutnya, menggunakan parser khusus sumber untuk menangani detail spesifik setiap sumber.
Microsoft Sentinel menyediakan parser khusus sumber bawaan untuk banyak sumber data. Anda mungkin ingin memodifikasi, atau mengembangkan, parser khusus sumber ini dalam situasi berikut:
Saat perangkat Anda menyediakan peristiwa yang sesuai dengan skema ASIM, tetapi parser khusus sumber untuk perangkat Anda dan skema yang relevan tidak tersedia di Microsoft Sentinel.
Saat parser khusus sumber ASIM tersedia untuk perangkat Anda, tetapi perangkat Anda mengirimkan peristiwa dalam metode atau format yang berbeda dari yang diharapkan oleh parser ASIM. Contohnya:
Perangkat sumber Anda dapat dikonfigurasi untuk mengirim peristiwa dengan cara yang tidak standar.
Perangkat Anda mungkin memiliki versi yang berbeda dari yang didukung oleh parser ASIM.
Peristiwa dapat dikumpulkan, dimodifikasi, dan diteruskan oleh sistem perantara.
Untuk memahami bagaimana parser cocok dalam arsitektur ASIM, lihat diagram arsitektur ASIM.
Penting
ASIM saat ini sedang dalam PRATINJAU. Ketentuan Tambahan Pratinjau Azure mencakup persyaratan hukum tambahan yang berlaku untuk fitur Azure yang masih dalam versi beta, pratinjau, atau belum dirilis ke ketersediaan umum.
Proses pengembangan pengurai ASIM kustom
Alur kerja berikut menjelaskan langkah-langkah tingkat tinggi dalam mengembangkan ASIM kustom, parser khusus sumber:
Identifikasi skema atau skema yang diwakili oleh peristiwa yang dikirim dari sumber. Untuk informasi selengkapnya, lihat Ringkasan skem.
Petakan bidang peristiwa sumber ke skema atau skema yang diidentifikasi.
Kembangkan satu atau beberapa parser ASIM untuk sumber Anda. Anda harus mengembangkan penyaringan parser untuk setiap skema yang relevan dengan sumbernya.
Uji parser Anda.
Sebarkan parser ke ruang kerja Microsoft Sentinel Anda.
Perbarui parser pemersatu ASIM yang relevan untuk mereferensikan parser kustom baru. Untuk informasi selengkapnya, lihat Mengelola parser ASIM.
Anda mungkin juga ingin berkontribusi parser Anda ke distribusi ASIM utama. Parser yang dikontribusikan juga dapat tersedia di semua ruang kerja sebagai parser bawaan.
Artikel ini memandu Anda melalui langkah-langkah pengembangan, pengujian, dan penyebaran proses.
Tip
Tonton juga Webinar Memahami Lebih Dalam tentang Parser Normalisasi Microsoft Sentinel dan Konten yang Dinormalisasi atau tinjau slide deck terkait. Untuk informasi selengkapnya, lihat Langkah berikutnya.
Kumpulkan log sampel
Untuk membangun parser ASIM yang efektif, Anda memerlukan sekumpulan log yang representatif, yang dalam banyak kasus akan memerlukan pengaturan sistem sumber dan menghubungkannya ke Microsoft Azure Sentinel. Jika Anda tidak memiliki perangkat sumber yang tersedia, layanan bayar sesuai penggunaan cloud memungkinkan Anda menyebarkan banyak perangkat untuk pengembangan dan pengujian.
Selain itu, menemukan dokumentasi vendor dan sampel untuk log dapat membantu mempercepat pengembangan dan mengurangi kesalahan dengan memastikan cakupan format log yang luas.
Sekumpulan log perwakilan harus mencakup:
- Peristiwa dengan hasil peristiwa yang berbeda.
- Peristiwa dengan tindakan respons yang berbeda.
- Format yang berbeda untuk nama pengguna, nama host dan ID, dan bidang lain yang memerlukan normalisasi nilai.
Tip
Mulai parser kustom baru menggunakan parser yang ada untuk skema yang sama. Menggunakan parser yang ada sangat penting untuk memfilter parser untuk memastikan mereka menerima semua parameter yang diperlukan oleh skema.
Merencanakan pemetaan
Sebelum Anda mengembangkan parser, petakan informasi yang tersedia dalam peristiwa sumber atau peristiwa ke skema yang Anda identifikasi:
- Petakan semua bidang wajib dan sebaiknya juga bidang yang direkomendasikan.
- Cobalah untuk memetakan informasi apa pun yang tersedia dari sumber ke bidang yang dinormalisasi. Jika tidak tersedia sebagai bagian dari skema yang dipilih, pertimbangkan pemetaan ke bidang yang tersedia di skema lain.
- Petakan nilai untuk bidang di sumber ke nilai yang dinormalisasi yang diizinkan oleh ASIM. Nilai asli disimpan dalam bidang terpisah, seperti
EventOriginalResultDetails
.
Mengembangkan parser
Kembangkan penyaringan dan parser tanpa parameter untuk setiap skema yang relevan.
Parser kustom adalah kueri KQL yang dikembangkan di halaman Log Microsoft Sentinel. Kueri parser memiliki tiga bagian:
Filter>Urai>Siapkan bidang
Filter
Memfilter catatan yang relevan
Dalam banyak kasus, tabel di Microsoft Sentinel menyertakan beberapa jenis peristiwa. Contohnya:
- Tabel Syslog memiliki data dari berbagai sumber.
- Tabel kustom mungkin mencakup informasi dari satu sumber yang menyediakan lebih dari satu jenis kejadian dan dapat memuat berbagai skema.
Oleh karena itu, parser pertama-tama harus memfilter hanya rekaman yang relevan dengan skema target.
Pemfilteran di KQL dilakukan dengan menggunakan operator where
. Misalnya, Sysmon event 1 melaporkan pembuatan proses, dan karena itu dinormalisasi ke skema ProcessEvent. Peristiwa Sysmon event 1 adalah bagian dari tabel Event
, jadi Anda akan menggunakan filter berikut:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
Penting
Parser tidak boleh menyaring menurut waktu. Kueri yang menggunakan parser akan menerapkan rentang waktu.
Memfilter menurut jenis sumber menggunakan Daftar Pantauan
Dalam beberapa kasus, peristiwa itu sendiri tidak berisi informasi yang akan memungkinkan pemfilteran untuk jenis sumber tertentu.
Misalnya, peristiwa DNS Infoblox dikirim sebagai pesan Syslog, dan sulit dibedakan dari pesan Syslog yang dikirim dari sumber lain. Dalam kasus seperti itu, parser bergantung pada daftar sumber yang menentukan peristiwa yang relevan. Daftar ini dikelola di daftar tonton Sources_by_SourceType.
Untuk menggunakan daftar tonton ASimSourceType di parser Anda, gunakan _ASIM_GetSourceBySourceType
fungsi di bagian pemfilteran parser. Misalnya, parser DNS Infoblox menyertakan yang berikut di bagian pemfilteran:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
Untuk menggunakan sampel ini di parser Anda:
Ganti
Computer
dengan nama bidang yang menyertakan informasi sumber untuk sumber Anda. Anda dapat menyimpan ini sebagaiComputer
untuk setiap parser berdasarkan Syslog.Ganti token
InfobloxNIOS
dengan nilai pilihan Anda untuk parser Anda. Beri tahu pengguna parser bahwa mereka harus memperbarui daftar pantauanASimSourceType
menggunakan nilai yang Anda pilih, serta daftar sumber yang mengirim peristiwa jenis ini.
Pemfilteran berdasarkan parameter pengurai
Saat mengembangkan parser pemfilteran, pastikan parser Anda menerima parameter pemfilteran untuk skema yang relevan, seperti yang didokumentasikan dalam artikel referensi untuk skema tersebut. Menggunakan parser yang ada sebagai titik awal memastikan bahwa parser Anda menyertakan tanda tangan fungsi yang benar. Dalam kebanyakan kasus, kode pemfilteran yang sebenarnya juga serupa untuk memfilter parser untuk skema yang sama.
Saat memfilter, pastikan Anda:
- Filter sebelum mengurai menggunakan bidang fisik. Jika hasil yang disaring tidak cukup akurat, ulangi tes setelah mengurai untuk menyempurnakan hasil Anda. Untuk informasi selengkapnya, lihat pengoptimalan pemfilteran.
- Jangan memfilter jika parameter tidak didefinisikan dan masih memiliki nilai default.
Contoh berikut menunjukkan cara menerapkan pemfilteran untuk parameter string, di mana nilai default biasanya '*', dan untuk parameter daftar, di mana nilai default biasanya berupa daftar kosong.
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
Pengoptimalan pemfilteran
Untuk memastikan performa pengurai, perhatikan rekomendasi pemfilteran berikut:
- Selalu filter pada bidang bawaan, bukan bidang yang diuraikan. Meskipun terkadang lebih mudah untuk memfilter menggunakan bidang yang diuraikan, hal itu secara dramatis memengaruhi performa.
- Gunakan operator yang memberikan performa yang dioptimalkan. Khususnya,
==
,has
, danstartswith
. Menggunakan operator seperticontains
ataumatches regex
juga sangat mempengaruhi performa.
Memfilter rekomendasi untuk performa mungkin tidak selalu mudah diikuti. Misalnya, menggunakan has
tidak lebih akurat dari menggunakan contains
. Dalam kasus lain, pencocokan bidang bawaan, seperti SyslogMessage
, kurang akurat daripada membandingkan bidang yang diekstraksi, seperti DvcAction
. Dalam kasus seperti itu, sebaiknya Anda tetap memfilter menggunakan operator pengoptimal performa melalui bidang bawaan dan ulangi filter menggunakan kondisi yang lebih akurat setelah penguraian.
Misalnya, lihat cuplikan pengurai DNS Infoblox berikut. Pengurai pertama kali memeriksa bahwa SyslogMessage mengisi has
dengan kata client
. Namun, istilah tersebut mungkin digunakan di tempat yang berbeda dalam pesan, jadi setelah menguraikan bidang Log_Type
, parser memeriksa kembali bahwa kata client
memang merupakan nilai bidang.
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
Catatan
pengurai tidak boleh memfilter berdasarkan waktu, karena kueri yang menggunakan pengurai sudah memfilter menurut waktu.
Diurai
Setelah kueri memilih rekaman yang relevan, kueri mungkin perlu untuk mengurainya. Biasanya, penguraian diperlukan jika beberapa bidang acara disampaikan dalam satu bidang teks.
Operator KQL yang melakukan penguraian dicantumkan di bawah, dan diurutkan berdasarkan pengoptimalan performa operator tersebut. Yang pertama memberikan performa yang paling optimal, sedangkan yang terakhir memberikan performa yang paling tidak optimal.
Operator | Deskripsi |
---|---|
belah | Mengurai string nilai yang dibatasi. |
parse_csv | Mengurai serangkaian nilai yang diformat sebagai garis CSV (nilai yang dipisahkan koma). |
parse-kv | Mengekstrak informasi terstruktur dari ekspresi string dan mewakili informasi dalam formulir kunci/nilai. |
Mengurai | Mengurai beberapa nilai dari string arbitrer menggunakan pola, yang dapat menjadi pola yang disederhanakan dengan performa yang lebih baik, atau regex. |
extract_all | Mengurai nilai tunggal dari string arbitrer menggunakan regex. extract_all memiliki performa yang mirip dengan parse jika yang kedua menggunakan regex. |
ekstrak | Mengekstrak nilai tunggal dari string arbitrer menggunakan regex. Menggunakan extract menghasilkan performa yang lebih baik daripada parse atau extract_all jika nilai tunggal diperlukan. Namun, menggunakan aktivasi extract dari sumber string yang sama kurang efisien daripada parse atau extract_all tunggal dan harus dihindari. |
parse_json | Mengurai nilai dalam string yang diformat JSON. Jika hanya ada beberapa nilai yang dibutuhkan dari JSON, menggunakan parse , extract , atau extract_all akan menghasilkan performa yang lebih baik. |
parse_xml | Mengurai nilai dalam string yang diformat sebagai XML. Jika hanya ada beberapa nilai yang dibutuhkan dari XML, menggunakan parse , extract , atau extract_all akan menghasilkan performa yang lebih baik. |
Normalisasi
Memetakan nama bidang
Bentuk normalisasi yang paling sederhana adalah mengganti nama bidang asli dengan nama yang dinormalisasi. Gunakan operator project-rename
untuk tindakan tersebut. Menggunakan project-rename memastikan bahwa bidang masih dikelola sebagai bidang fisik dan menangani bidang menjadi lebih berkinerja. Contohnya:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
Menormalkan format dan jenis bidang
Dalam banyak kasus, nilai asli yang diekstrak perlu dinormalisasi. Misalnya, di ASIM, alamat MAC menggunakan titik dua sebagai pemisah, sementara sumber dapat mengirim alamat MAC yang dibatasi tanda hubung. Operator utama untuk mengubah nilai adalah extend
, bersama dengan banyak fungsi string KQL, numerik, dan tanggal.
Selain itu, memastikan bahwa bidang output parser cocok dengan jenis yang ditentukan dalam skema sangatlah penting agar parser dapat berfungsi. Misalnya, Anda mungkin perlu untuk mengonversi string yang mewakili tanggal dan waktu ke bidang tanggalwaktu. Fungsi seperti todatetime
dan tohex
berguna dalam kasus tersebut.
Misalnya, ID peristiwa unik yang asli dapat dikirim sebagai bilangan bulat, tetapi ASIM mengharuskan nilainya menjadi string, untuk memastikan kompatibilitas yang luas di antara sumber data. Oleh karena itu, saat menetapkan bidang sumber, gunakan extend
dan tostring
, bukan project-rename
:
| extend EventOriginalUid = tostring(ReportId),
Bidang dan nilai turunan
Nilai bidang sumber, setelah diekstraksi, mungkin perlu dipetakan ke kumpulan nilai yang ditentukan untuk bidang skema target. Fungsi iff
, case
, dan lookup
dapat membantu memetakan data yang tersedia ke nilai target.
Misalnya, pengurai DNS Microsoft menetapkan bidang EventResult
berdasarkan ID Kejadian dan Kode Respons menggunakan pernyataan iff
, sebagai berikut:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
Untuk memetakan beberapa nilai, tentukan pemetaan menggunakan operator datatable
dan gunakan lookup
untuk melakukan pemetaan. Misalnya, beberapa sumber melaporkan kode respons DNS numerik dan protokol jaringan, sementara skema mewajibkan representasi label teks yang lebih umum untuk keduanya. Contoh berikut menunjukkan cara memperoleh nilai yang diperlukan menggunakan datatable
dan lookup
:
let NetworkProtocolLookup = datatable(Proto:real, NetworkProtocol:string)[
6, 'TCP',
17, 'UDP'
];
let DnsResponseCodeLookup=datatable(DnsResponseCode:int,DnsResponseCodeName:string)[
0,'NOERROR',
1,'FORMERR',
2,'SERVFAIL',
3,'NXDOMAIN',
...
];
...
| lookup DnsResponseCodeLookup on DnsResponseCode
| lookup NetworkProtocolLookup on Proto
Perhatikan bahwa pencarian berguna dan efisien juga ketika pemetaan hanya memiliki dua nilai yang mungkin.
Ketika kondisi pemetaan lebih kompleks, gabungkan iff
, case
, dan lookup
. Contoh di bawah memperlihatkan cara menggabungkan lookup
dan case
. Contoh lookup
di atas mengembalikan nilai kosong di bidang DnsResponseCodeName
jika nilai pencarian tidak ditemukan. Contoh case
di bawah ini menambahnya dengan menggunakan hasil operasi lookup
jika tersedia, dan menentukan kondisi tambahan.
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
Microsoft Azure Sentinel menyediakan fungsi yang berguna untuk nilai pencarian umum. Misalnya, pencarian DnsResponseCodeName
di atas, dapat diimplementasikan menggunakan salah satu fungsi berikut:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
Opsi pertama menerima sebagai parameter nilai untuk pencarian dan memungkinkan Anda memilih bidang output, sehingga berguna sebagai fungsi pencarian umum. Opsi kedua lebih diarahkan ke parser, yang menerima sebagai input nama bidang sumber dan memperbarui bidang ASIM yang diperlukan, dalam hal ini DnsResponseCodeName
.
Untuk daftar lengkap fungsi bantuan ASIM, lihat Fungsi ASIM
Bidang pengayaan
Selain bidang yang tersedia dari sumbernya, peristiwa ASIM yang dihasilkan mencakup bidang pengayaan yang harus dihasilkan parser. Dalam banyak kasus, parser dapat menetapkan nilai konstanta ke bidang, misalnya:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
Jenis bidang pengayaan lain yang harus diatur parser Anda adalah bidang jenis, yang menunjuk jenis nilai yang disimpan dalam bidang terkait. Misalnya, bidang SrcUsernameType
menentukan jenis nilai yang disimpan di bidang SrcUsername
. Anda dapat menemukan informasi selengkapnya tentang bidang jenis dalam deskripsi entitas.
Dalam kebanyakan kasus, jenis juga diberi nilai konstanta. Namun, dalam beberapa kasus, jenisnya harus ditentukan berdasarkan nilai aktual, misalnya:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
Microsoft Azure Sentinel menyediakan fungsi yang berguna untuk menangani pengayaan. Misalnya, gunakan fungsi berikut untuk secara otomatis menetapkan bidang SrcHostname
, SrcDomain
, SrcDomainType
, dan SrcFQDN
berdasarkan nilai di bidang Computer
.
| invoke _ASIM_ResolveSrcFQDN('Computer')
Fungsi ini akan mengatur bidang sebagai berikut:
Bidang komputer | Bidang output |
---|---|
server1 | SrcHostname: server1 SrcDomain, SrcDomainType, SrcFQDN semuanya kosong |
server1.microsoft.com | SrcHostname: server1 SrcDomain: microsoft.com SrcDomainType: FQDN SrcFQDN:server1.microsoft.com |
Fungsi _ASIM_ResolveDstFQDN
dan _ASIM_ResolveDvcFQDN
melakukan tugas serupa yang mengisi bidang Dst
dan Dvc
. Untuk daftar lengkap fungsi bantuan ASIM, lihat fungsi ASIM
Memilih bidang dalam kumpulan hasil
Parser dapat secara opsional memilih bidang dalam kumpulan hasil. Menghapus bidang yang tidak diperlukan dapat meningkatkan performa dan menambah kejelasan dengan menghindari kesalahan antara bidang yang dinormalisasi dan bidang sumber yang tersisa.
Operator KQL berikut digunakan untuk menyiapkan bidang dalam tataan hasil Anda:
Operator | Deskripsi | Waktu penggunaan dalam pengurai |
---|---|---|
project-away | Menghapus bidang. | Gunakan project-away untuk bidang tertentu yang ingin Anda hapus dari tataan hasil. Sebaiknya jangan menghapus bidang asli yang tidak dinormalisasi dari kumpulan hasil, kecuali jika membuat kebingungan atau sangat besar dan mungkin memiliki implikasi performa. |
proyek | Memilih bidang yang sudah ada sebelumnya, atau dibuat sebagai bagian dari pernyataan, dan menghapus semua bidang lainnya. | Tidak disarankan untuk digunakan dalam pengurai, karena pengurai tidak boleh menghapus bidang lain yang tidak dinormalisasi. Jika Anda perlu menghapus bidang tertentu, seperti nilai sementara yang digunakan selama penguraian, gunakan project-away untuk menghapusnya dari hasil. |
Misalnya, saat mengurai tabel log kustom, gunakan cara berikut ini untuk menghapus bidang asli yang tersisa yang masih memiliki pendeskripsi jenis:
| project-away
*_d, *_s, *_b, *_g
Menangani varian penguraian
Penting
Varian yang berbeda mewakili jenis peristiwa yang berbeda, biasanya dipetakan ke skema yang berbeda dan mengembangkan parser terpisah
Dalam banyak kasus, kejadian dalam aliran kejadian termasuk varian yang membutuhkan logika penguraian yang berbeda. Untuk mengurai varian yang berbeda dalam parser tunggal, gunakan pernyataan kondisional seperti iff
dan case
, atau gunakan struktur serikat pekerja.
Untuk menggunakan union
untuk menangani beberapa varian, buat fungsi terpisah untuk setiap varian dan gunakan pernyataan gabungan untuk menggabungkan hasilnya:
let AzureFirewallNetworkRuleLogs = AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where isnotempty(msg_s);
let parseLogs = AzureFirewallNetworkRuleLogs
| where msg_s has_any("TCP", "UDP")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
":" srcPortNumber:int
…
| project-away msg_s;
let parseLogsWithUrls = AzureFirewallNetworkRuleLogs
| where msg_s has_all ("Url:","ThreatIntel:")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
" to " dstIpAddr:string
...
union parseLogs, parseLogsWithUrls…
Untuk menghindari peristiwa duplikat dan pemrosesan yang berlebihan, pastikan setiap fungsi dimulai dengan penyaringan, menggunakan bidang asli, hanya peristiwa yang dimaksudkan untuk diurai. Selain itu, jika diperlukan, gunakan project-away di setiap cabang, sebelum digabungkan.
Menyebarkan pengurai
Sebarkan parser secara manual dengan menyalin parser tersebut ke halaman Log Azure Monitor dan simpan perubahan yang baru saja Anda buat. Metode ini berguna untuk pengujian. Untuk informasi lebih lanjut, lihat Membuat fungsi.
Untuk menyebarkan sejumlah besar parser, sebaiknya gunakan templat ARM parser, sebagai berikut:
Buat file YAML berdasarkan templat yang relevan untuk setiap skema dan sertakan kueri Anda di dalamnya. Mulailah dengan templat YAML yang relevan untuk skema dan jenis parser Anda, pemfilteran, atau tanpa parameter.
Gunakan konverter templat ASIM Yaml ke ARM untuk mengonversi file YAML Anda ke templat ARM.
Jika menyebarkan pembaruan, hapus versi fungsi yang lebih lama menggunakan portal atau fungsi hapus alat PowerShell.
Sebarkan templat Anda menggunakan portal Azure atau PowerShell.
Anda juga dapat menggabungkan beberapa templat ke satu proses penyebaran menggunakan templat tertaut
Tip
Templat ARM dapat menggabungkan sumber daya yang berbeda, sehingga parser dapat digunakan bersama konektor, aturan analitik, atau daftar pantauan, untuk menyebutkan beberapa opsi yang berguna. Misalnya, parser Anda dapat mereferensikan daftar pantauan yang digunakan di sampingnya.
Menguji parser
Bagian ini menjelaskan bahwa alat pengujian yang disediakan ASIM yang memungkinkan Anda menguji parser Anda. Meskipun demikian, parser merupakan kode, terkadang bersifat kompleks dan praktik jaminan kualitas standar seperti tinjauan kode yang direkomendasikan selain pengujian otomatis.
Menginstal alat pengujian ASIM
Untuk menguji ASIM, sebarkan alat pengujian ASIM ke ruang kerja Microsoft Sentinel di mana:
- Parser Anda disebarkan.
- Tabel sumber yang digunakan oleh parser tersedia.
- Tabel sumber yang digunakan oleh parser diisi dengan beragam koleksi peristiwa yang relevan.
Memvalidasi skema output
Untuk memastikan bahwa parser Anda menghasilkan skema yang valid, gunakan penguji skema ASIM dengan menjalankan kueri berikut di halaman Log Microsoft Sentinel:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
Tangani hasilnya sebagai berikut:
Kesalahan | Perbuatan |
---|---|
Bidang [<Bidang>] wajib tidak ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, ini akan menjadi nilai turunan atau nilai konstan, dan bukan bidang yang sudah tersedia dari sumbernya. |
Bidang [<Bidang>] yang tidak ada bersifat wajib jika kolom wajib [<Bidang>] ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, bidang ini menunjukkan jenis kolom yang ada yang dirujuknya. |
Bidang [<Bidang>] yang tidak ada bersifat wajib jika kolom [<Bidang>] ada | Tambahkan bidang ini ke parser. Dalam banyak kasus, bidang ini menunjukkan jenis kolom yang ada yang dirujuknya. |
Alias [<Bidang>] wajib tidak ada untuk alias kolom [<Bidang>] yang ada | Tambahkan alias ini ke parser |
Alias [<Bidang>] yang direkomendasikan tidak ada untuk alias kolom [<Bidang>] yang ada | Tambahkan alias ini ke parser |
Alias [<Bidang>] opsional tidak ada untuk alias kolom [<Bidang>] yang ada | Tambahkan alias ini ke parser |
Alias [<Bidang>] wajib tidak ada untuk alias kolom [<Bidang>] yang tidak ada | Kesalahan ini menyertai kesalahan serupa untuk bidang alias. Perbaiki kesalahan bidang alias dan tambahkan alias ini ke parser Anda. |
Ketik ketidakcocokan untuk bidang [<Bidang>]. Saat ini [<Jenis>] dan seharusnya [<Jenis>] | Pastikan jenis bidang yang dinormalisasi sudah benar, biasanya menggunakan fungsi konversi seperti tostring . |
Info | Perbuatan |
---|---|
Bidang [<Bidang>] yang direkomendasikan tidak ada | Pertimbangkan untuk menambahkan bidang ini ke parser Anda. |
Info | Perbuatan |
---|---|
Alias [<Bidang>] yang direkomendasikan tidak ada untuk alias kolom [<Bidang>] yang tidak ada | Jika Anda menambahkan bidang alias ke parser, pastikan untuk menambahkan alias ini juga. |
Alias [<Bidang>] opsional tidak ada untuk alias kolom [<Bidang>] yang tidak ada | Jika Anda menambahkan bidang alias ke parser, pastikan untuk menambahkan alias ini juga. |
Bidang [<Bidang>] opsional tidak ada | Meskipun bidang opsional sering tidak ada, ada baiknya meninjau daftar untuk menentukan apakah ada bidang opsional yang dapat dipetakan dari sumbernya. |
Bidang [<Bidang>] ekstra tidak dinormalisasi | Meskipun bidang yang tidak dinormalisasi valid, ada baiknya meninjau daftar untuk menentukan apakah salah satu nilai yang tidak dinormalisasi dapat dipetakan ke bidang opsional. |
Catatan
Kesalahan akan mencegah konten yang menggunakan parser berfungsi dengan benar. Peringatan tidak akan mencegah konten berfungsi, tetapi dapat mengurangi kualitas hasil.
Memvalidasi nilai output
Untuk memastikan bahwa parser Anda menghasilkan nilai yang valid, gunakan penguji data ASIM dengan menjalankan kueri berikut di halaman Log Microsoft Sentinel:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
Menentukan skema bersifat opsional. Jika skema tidak ditentukan, bidang EventSchema
digunakan untuk mengidentifikasi skema yang harus dipatuhi peristiwa. Ig peristiwa tidak menyertakan bidang EventSchema
, hanya bidang umum yang akan diverifikasi. Jika skema ditentukan sebagai parameter, skema ini akan digunakan untuk menguji semua rekaman. Ini berguna untuk pengurai lama yang tidak mengatur bidang EventSchema
.
Catatan
Bahkan ketika skema tidak ditentukan, tanda kurung kosong diperlukan setelah nama fungsi.
Pengujian ini intensif sumber daya dan mungkin tidak berfungsi pada seluruh himpunan data Anda. Atur X ke angka terbesar yang mana waktu kuerinya tidak akan habis, atau atur rentang waktu untuk kueri tersebut menggunakan pemilih rentang waktu.
Tangani hasilnya sebagai berikut:
Pesan | Perbuatan |
---|---|
(0) Kesalahan: ketik ketidakcocokan untuk kolom [<Bidang>]. Saat ini [<Jenis>] dan seharusnya [<Jenis>] | Pastikan jenis bidang yang dinormalisasi sudah benar, biasanya menggunakan fungsi konversi seperti tostring . |
(0) Kesalahan: Nilai tidak valid (hingga 10 terdaftar) untuk bidang [<Bidang>] dari jenis [<Jenis Logika>] | Pastikan parser memetakan bidang sumber yang benar ke bidang output. Jika dipetakan dengan benar, perbarui parser untuk mengubah nilai sumber ke jenis, nilai, atau format yang benar. Lihat daftar jenis logis untuk informasi selengkapnya tentang nilai dan format yang benar untuk setiap jenis logis. Perhatikan bahwa alat pengujian hanya mencantumkan sampel dari 10 nilai yang tidak valid. |
(1) Peringatan: Nilai kosong di bidang [<Bidang>] wajib | Bidang wajib harus diisi, bukan hanya didefinisikan. Periksa apakah bidang dapat diisi dari sumber lain untuk rekaman yang sumber saat ini kosong. |
(2) Info: Nilai kosong di bidang [<Bidang>] yang direkomendasikan | Bidang yang direkomendasikan biasanya harus diisi. Periksa apakah bidang dapat diisi dari sumber lain untuk rekaman yang sumber saat ini kosong. |
(2) Info: Nilai kosong di bidang [<Bidang>] opsional | Periksa apakah bidang alias wajib atau direkomendasikan, dan jika demikian, apakah itu dapat diisi dari sumber lain. |
Banyak pesan juga melaporkan jumlah catatan yang menghasilkan pesan dan persentasenya dari total sampel. Persentase ini adalah indikator yang baik tentang pentingnya masalah. Misalnya, untuk bidang yang direkomendasikan:
- Nilai kosong sebesar 90% dapat menunjukkan masalah penguraian umum.
- Nilai kosong sebesar 25% dapat menunjukkan varian peristiwa yang tidak diurai dengan benar.
- Beberapa nilai kosong mungkin merupakan masalah yang dapat diabaikan.
Catatan
Kesalahan akan mencegah konten yang menggunakan parser berfungsi dengan benar. Peringatan tidak akan mencegah konten berfungsi, tetapi dapat mengurangi kualitas hasil.
Kontribusi parser
Anda mungkin ingin berkontribusi parser ke distribusi ASIM utama. Jika diterima, parser akan tersedia untuk setiap pelanggan sebagai parser bawaan ASIM.
Untuk berkontribusi parser:
- Kembangkan pengurai pemfilteran dan pengurai tanpa parameter.
- Buat file YAML untuk pengurai seperti yang dijelaskan dalam Menyebarkan Parser di atas.
- Pastikan pengurai Anda lulus semua pengujian tanpa kesalahan. Jika ada peringatan yang dibiarkan, dokumentasikan dalam file YAML parser.
- Buat permintaan pull terhadap repositori GitHub Microsoft Sentinel, termasuk:
Mendokumentasikan peringatan yang diterima
Jika peringatan yang tercantum oleh alat pengujian ASIM dianggap valid untuk parser, dokumentasikan peringatan yang diterima dalam file YAML parser menggunakan bagian Pengecualian seperti yang ditunjukkan pada contoh di bawah ini.
Exceptions:
- Field: DnsQuery
Warning: Invalid value
Exception: May have values such as "1164-ms-7.1440-9fdc2aab.3b2bd806-978e-11ec-8bb3-aad815b5cd42" which are not valid domains names. Those are related to TKEY RR requests.
- Field: DnsQuery
Warning: Empty value in mandatory field
Exception: May be empty for requests for root servers and for requests for RR type DNSKEY
Peringatan yang ditentukan dalam file YAML harus berupa bentuk singkat dari pesan peringatan yang mengidentifikasi secara unik. Nilai digunakan untuk mencocokkan pesan peringatan saat melakukan pengujian otomatis dan mengabaikannya.
Pedoman pengiriman sampel
Data sampel diperlukan saat memecahkan masalah pengurai dan untuk memastikan pembaruan di masa mendatang ke pengurai sesuai dengan sampel yang lebih lama. Sampel yang Anda kirimkan harus menyertakan varian peristiwa apa pun yang didukung pengurai. Pastikan bahwa peristiwa sampel mencakup semua kemungkinan jenis peristiwa, format peristiwa, dan variasi seperti peristiwa yang mewakili aktivitas yang berhasil dan gagal. Pastikan juga bahwa variasi dalam format nilai diwakili. Misalnya, jika nama host dapat direpresentasikan sebagai FQDN atau nama host sederhana, peristiwa sampel harus menyertakan kedua format.
Untuk mengirimkan sampel peristiwa, gunakan langkah-langkah berikut:
Logs
Di layar, jalankan kueri yang akan mengekstrak dari tabel sumber hanya peristiwa yang dipilih oleh pengurai. Misalnya, untuk pengurai DNS Infoblox, gunakan kueri berikut:
Syslog
| where ProcessName == "named"
Ekspor hasil menggunakan opsi Ekspor ke CSV ke file bernama
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv
, WhereEventProduct
,EventProduct
, danEventSchema
adalah nilai yang ditetapkan oleh pengurai ke bidang tersebut.Logs
Di layar, jalankan kueri yang akan menghasilkan skema atau tabel input pengurai. Misalnya, untuk pengurai DNS Infoblox yang sama, kuerinya adalah:
Syslog
| getschema
Ekspor hasil menggunakan opsi Ekspor ke CSV ke file bernama
<TableName>_schema.csv
, di manaTableName
adalah nama tabel sumber yang digunakan pengurai.Sertakan kedua file dalam PR Anda di folder
/Sample Data/ASIM
. Jika file sudah ada, tambahkan handel GitHub Anda ke nama, misalnya:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHanlde>.csv
Pedoman pengiriman hasil pengujian
Hasil pengujian penting untuk memverifikasi kebenaran pengurai dan memahami pengecualian yang dilaporkan.
Untuk mengirimkan hasil pengujian Anda, gunakan langkah-langkah berikut:
Jalankan pengujian pengurai dan jelaskan di bagian pengujian .
dan ekspor hasil pengujian menggunakan opsi Ekspor ke CSV ke file bernama
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv
dan<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv
masing-masing.Sertakan kedua file dalam PR Anda di folder
/Parsers/ASim<schema>/Tests
.
Langkah berikutnya
Artikel ini membahas pengembangan parser ASIM.
Pelajari selengkapnya tentang parser ASIM:
Pelajari selengkapnya tentang ASIM secara umum: