Bagikan melalui


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:

  1. Kumpulkan log sampel.

  2. Identifikasi skema atau skema yang diwakili oleh peristiwa yang dikirim dari sumber. Untuk informasi selengkapnya, lihat Ringkasan skem.

  3. Petakan bidang peristiwa sumber ke skema atau skema yang diidentifikasi.

  4. Kembangkan satu atau beberapa parser ASIM untuk sumber Anda. Anda harus mengembangkan penyaringan parser untuk setiap skema yang relevan dengan sumbernya.

  5. Uji parser Anda.

  6. Sebarkan parser ke ruang kerja Microsoft Sentinel Anda.

  7. Perbarui parser pemersatu ASIM yang relevan untuk mereferensikan parser kustom baru. Untuk informasi selengkapnya, lihat Mengelola parser ASIM.

  8. 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.

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 sebagai Computer untuk setiap parser berdasarkan Syslog.

  • Ganti token InfobloxNIOS dengan nilai pilihan Anda untuk parser Anda. Beri tahu pengguna parser bahwa mereka harus memperbarui daftar pantauan ASimSourceType 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, dan startswith. Menggunakan operator seperti contains atau matches 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:

  1. 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.

  2. Gunakan konverter templat ASIM Yaml ke ARM untuk mengonversi file YAML Anda ke templat ARM.

  3. Jika menyebarkan pembaruan, hapus versi fungsi yang lebih lama menggunakan portal atau fungsi hapus alat PowerShell.

  4. 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:
    • File YAML pengurai Anda di folder pengurai ASIM (/Parsers/ASim<schema>/Parsers)
    • Data sampel perwakilan sesuai dengan pedoman pengiriman sampel.
    • Hasil pengujian sesuai dengan pedoman pengiriman hasil pengujian.

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, Where EventProduct, EventProduct, dan EventSchema 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 mana TableName 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: