Vývoj analyzátorů ASIM (Advanced Security Information Model)

Uživatelé modelu ASIM (Advanced Security Information Model) používají ve svých dotazech sjednocující analyzátory místo názvů tabulek, k zobrazení dat v normalizovaném formátu a k zahrnutí všech dat relevantních pro schéma do dotazu. Sjednocující analyzátory zase používají analyzátory specifické pro zdroj ke zpracování konkrétních podrobností jednotlivých zdrojů.

Microsoft Sentinel poskytuje integrované analyzátory specifické pro zdroj pro mnoho zdrojů dat. Tyto analyzátory specifické pro zdroj můžete chtít upravit nebo vyvinout v následujících situacích:

  • Když vaše zařízení poskytuje události, které odpovídají schématu ASIM, ale analyzátor specifický pro zdroj pro vaše zařízení a příslušné schéma není v Microsoft Sentinel k dispozici.

  • Když jsou pro vaše zařízení k dispozici analyzátory specifické pro zdroj v ASIM, ale vaše zařízení odesílá události způsobem nebo ve formátu, který se liší od toho, co analyzátory ASIM očekávají. Příklady:

    • Vaše zdrojové zařízení může být nakonfigurované tak, aby odesílala události nestandardním způsobem.

    • Vaše zařízení může mít jinou verzi, než kterou podporuje analyzátor ASIM.

    • Události se můžou shromažďovat, upravovat a předávat zprostředkujícím systémem.

Informace o tom, jak parsery odpovídají architektuře ASIM, najdete v diagramu architektury ASIM.

Vlastní proces vývoje analyzátoru ASIM

Následující pracovní postup popisuje základní kroky při vývoji vlastního analyzátoru ASIM specifického pro zdroj:

  1. Shromážděte ukázkové protokoly.

  2. Identifikujte schémata nebo schémata, která události odeslané ze zdroje představují. Další informace najdete v tématu Přehled schématu.

  3. Namapujte pole zdrojových událostí na identifikované schéma nebo schémata.

  4. Vyvíjejte jeden nebo více analyzátorů ASIM pro váš zdroj. Pro každé schéma relevantní pro zdroj budete muset vyvinout analyzátor filtrování a analyzátor bez parametrů.

  5. Otestujte analyzátor.

  6. Nasadit analyzátory do pracovních prostorů Microsoft Sentinel.

  7. Aktualizujte příslušný sjednocený parser ASIM tak, aby odkazoval na nový vlastní parser. Další informace najdete v tématu Správa analyzátorů ASIM.

  8. Možná budete chtít přispět svými analyzátory do primární distribuce ASIM. Přidané parsery mohou být také ve všech pracovních prostorech k dispozici jako integrované parsery.

Tento článek vás provede kroky vývoje, testování a nasazení procesu.

Shromažďování ukázkových protokolů

K vytvoření efektivních analyzátorů ASIM potřebujete reprezentativní sadu protokolů, což ve většině případů bude vyžadovat nastavení zdrojového systému a jeho připojení k Microsoft Sentinel. Pokud zdrojové zařízení nemáte k dispozici, cloudové služby s průběžným platbou vám umožní nasadit mnoho zařízení pro vývoj a testování.

Kromě toho může vyhledání dokumentace a ukázek dodavatele pro protokoly pomoct zrychlit vývoj a snížit chyby tím, že zajistí pokrytí širokého formátu protokolu.

Reprezentativní sada protokolů by měla obsahovat:

  • Události s různými výsledky událostí
  • Události s různými akcemi odpovědí.
  • Různé formáty pro uživatelské jméno, název hostitele a ID a další pole, která vyžadují normalizaci hodnot.

Tip

Spusťte nový vlastní analyzátor pomocí existujícího analyzátoru pro stejné schéma. Použití existujícího analyzátoru je zvlášť důležité pro filtrování analyzátorů, aby se zajistilo, že přijímají všechny parametry vyžadované schématem.

Plánování mapování

Před vývojem analyzátoru namapujte informace dostupné ve zdrojové události nebo událostech na schéma, které jste identifikovali:

  • Namapujte všechna povinná pole a pokud možno také doporučená pole.
  • Zkuste namapovat všechny informace dostupné ze zdroje na normalizovaná pole. Pokud není k dispozici jako součást vybraného schématu, zvažte mapování na pole dostupná v jiných schématech.
  • Namapujte hodnoty polí ve zdrojovém systému na normalizované hodnoty povolené standardem ASIM. Původní hodnota je uložena v samostatném poli, například EventOriginalResultDetails.

Vývoj analyzátorů

Vytvořte filtrovací i bezparametrový analyzátor pro každé relevantní schéma.

Vlastní analyzátor je dotaz KQL vytvořený na stránce Protokoly v Microsoft Sentinelu. Dotaz analyzátoru má tři části:

Filtr>Analýza>Příprava polí

Filtering

Filtrování relevantních záznamů

V mnoha případech tabulka v Microsoft Sentinel obsahuje více typů událostí. Příklady:

  • Tabulka Syslog obsahuje data z více zdrojů.
  • Vlastní tabulky můžou obsahovat informace z jednoho zdroje, který poskytuje více než jeden typ události a může vyhovovat různým schématům.

Analyzátor by proto měl nejprve filtrovat pouze záznamy relevantní pro cílové schéma.

Filtrování v KQL se provádí pomocí operátoru where . Například událost Sysmon 1 hlásí vytvoření procesu, a proto je normalizována do schématu ProcessEvent . Událost 1 v Sysmonu je součástí tabulky Event , takže byste filtrovali pouze na události vytváření procesů v Sysmonu pomocí následujícího dotazu:

Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1

Important

Analyzátor by neměl filtrovat podle času. Dotaz, který používá analyzátor, použije časový rozsah.

Filtrování podle typu zdroje pomocí seznamu ke zhlédnutí

V některých případech samotná událost neobsahuje informace, které by umožňovaly filtrování pro konkrétní typy zdrojů.

Například události DNS infobloxu se odesílají jako zprávy Syslog a obtížně se odlišují od zpráv Syslog odesílaných z jiných zdrojů. V takových případech analyzátor spoléhá na seznam zdrojů, které definují relevantní události. Tento seznam je spravován v seznamu sledovaných položek Sources_by_SourceType.

Pokud chcete ve svých analyzátorech použít sledovací seznam ASimSourceType, použijte _ASIM_GetSourceBySourceType funkci v sekci filtrování analyzátoru. Například parser DNS Infoblox omezuje záznamy pouze na zdroje Infoblox NIOS tím, že zahrnuje následující filtr, který zajišťuje, že parser zpracovává pouze relevantní Syslog záznamy:

  | where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))

Chcete-li tuto ukázku použít ve vašem analyzátoru:

  • Nahraďte Computer názvem pole, které obsahuje informace o zdroji pro váš zdroj. Můžete to ponechat jako Computer pro všechny analyzátory založené na Syslogu.

  • Nahraďte token InfobloxNIOS hodnotou dle vašeho výběru pro váš analyzátor. Informujte uživatele parseru ASimSourceType, že musí aktualizovat seznam sledovaných položek s použitím vámi vybrané hodnoty a také seznam zdrojů, které odesílají události tohoto typu.

Filtrování na základě parametrů analyzátoru

Při vývoji analyzátorů filtrování se ujistěte, že váš analyzátor přijímá parametry filtrování pro příslušné schéma, jak je popsáno v referenčním článku pro toto schéma. Použití existujícího analyzátoru jako výchozího bodu zajistí, že váš analyzátor bude obsahovat správný podpis funkce. Ve většině případů je samotný filtrační kód také podobný u parserů pro stejné schéma.

Při filtrování se ujistěte, že:

  • Filtrujte před analýzou pomocí fyzických polí. Pokud filtrované výsledky nejsou dostatečně přesné, opakujte test po analýze, abyste výsledky vyladili. Další informace najdete v tématu Optimalizace filtrování.
  • Nefiltrujte, pokud parametr není definován a stále má výchozí hodnotu.

Použijte podmíněné predikáty k implementaci volitelného filtrování parametrů parseru, takže parser aplikuje filtry pouze tehdy, když volající poskytují hodnoty. Následující příklady ukazují, jak implementovat filtrování pro řetězcový parametr, kde výchozí hodnota je obvykle *, a pro parametr seznamu, kde výchozí hodnotou je obvykle prázdný seznam.

srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)

Pro více informací o array_length funkci a operátoru has_any viz dokumentaci Kusto:

Optimalizace filtrování

Pokud chcete zajistit výkon analyzátoru, mějte na paměti následující doporučení filtrování:

  • Vždy filtrujte podle předdefinovaných polí a ne podle parsovaných polí. I když je někdy snazší filtrovat pomocí parsovaných polí, výrazně to ovlivňuje výkon.
  • Použijte operátory, které poskytují optimalizovaný výkon. Konkrétně ==, hasa startswith. Použití operátorů, jako je contains nebo matches regex, také výrazně ovlivňuje výkon.

Doporučení pro filtrování z hlediska výkonu nemusí být vždy snadné dodržovat. Například použití has je méně přesné než contains. V jiných případech je porovnání předdefinovaného pole, například SyslogMessage, méně přesné než porovnání extrahovaného pole, například DvcAction. V takových případech doporučujeme nejprve provést předběžné filtrování pomocí operátoru optimalizovaného z hlediska výkonu nad vestavěným polem a po parsování filtrování zopakovat s použitím přesnějších podmínek.

Příklad najdete v následujícím fragmentu kódu analyzátoru DNS Infoblox . Analyzátor nejprve zkontroluje, jestli pole SyslogMessage has obsahuje slovo client. Termín se ale může použít na jiném místě ve zprávě, takže po parsování Log_Type pole analyzátor znovu zkontroluje, že slovo client bylo skutečně hodnotou pole.

Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
      | extend Log_Type = tostring(Parser[1]),
      | where Log_Type == "client"

Note

Analyzátory by neměly filtrovat podle času, protože dotaz pomocí analyzátoru už filtruje čas.

Analýza

Jakmile dotaz vybere relevantní záznamy, může je muset analyzovat. Analýza se obvykle vyžaduje, pokud je v jednom textovém poli vyjádřeno více polí událostí.

Níže jsou uvedeny operátory KQL, které provádějí analýzu, seřazené podle optimalizace výkonu. První poskytuje nejoptimaličtější výkon, zatímco poslední poskytuje nejméně optimalizovaný výkon.

Operátor/funkce() Description
split() – funkce Analyzovat řetězec oddělených hodnot.
parse_csv() Parsujte řetězec hodnot formátovaných jako řádek CSV (hodnoty oddělené čárkami).
parse-kv – operátor Extrahuje strukturované informace z řetězcového výrazu a představuje informace ve formě klíč/hodnota.
Operátor parse Parsujte více hodnot z libovolného řetězce pomocí vzoru, který může být zjednodušeným vzorem s lepším výkonem nebo regulárním výrazem.
extract_all() Parsuje jednotlivé hodnoty z libovolného řetězce pomocí regulárního výrazu. extract_all má podobný výkon jako parse pokud by ten druhý používal regulární výraz.
extract() – funkce Extrahujte jednu hodnotu z libovolného řetězce pomocí regulárního výrazu.

Použití extract poskytuje lepší výkon než parse nebo extract_all pokud je potřeba jedna hodnota. Použití více aktivací extract přes stejný zdrojový řetězec je však méně efektivní než jeden parse nebo extract_all, a proto by se tomu mělo vyhnout.
parse_json() Parsujte hodnoty v řetězci formátovaného jako JSON. Pokud z JSON potřebujete jenom několik hodnot, můžete použít parse, extractnebo extract_all zajistit lepší výkon.
parse_xml() Parsujte hodnoty v řetězci formátovaného jako XML. Pokud potřebujete získat jen několik hodnot z XML, použití parse, extract nebo extract_all poskytuje lepší výkon.

Normalizování

Mapování názvů polí

Nejjednodušší formou normalizace je přejmenování původního pole na jeho normalizovaný název. Použijte k tomu operátor project-rename . Přejmenování projektu zajistí, že pole bude stále spravováno jako fyzické pole a zpracování pole bude výkonnější. Například následující dotazy mapují pole zdrojového účtu na jejich normalizované názvy polí ASIM aktérů:

 | project-rename
    ActorUserId = InitiatingProcessAccountSid,
    ActorUserAadId = InitiatingProcessAccountObjectId,
    ActorUserUpn = InitiatingProcessAccountUpn,

Normalizace formátu a typu polí

V mnoha případech je třeba původní extrahované hodnoty normalizovat. Například se v ASIM u adres MAC jako oddělovač používají dvojtečky, zatímco zdroj může odeslat adresu MAC s oddělovači v podobě spojovníků. Primárním operátorem pro transformaci hodnot je extend, společně s širokou sadou řetězců KQL, číselných a datových funkcí.

Kromě toho je důležité zajistit, aby výstupní pole analyzátoru odpovídala typu definovanému ve schématu, aby parsery fungovaly. Například může být nutné převést řetězec představující datum a čas na pole datetime. Funkce jako todatetime a tohex jsou v těchto případech užitečné.

Například původní jedinečné ID události může být odesláno jako celé číslo, ale ASIM vyžaduje, aby hodnotou byl řetězec, aby byla zajištěna široká kompatibilita mezi zdroji dat. Proto při přiřazení zdrojového pole převeďte číselnou hodnotu na řetězec pomocí extend a místo tostringproject-rename, aby normalizované pole odpovídalo požadavku typu řetězce schématu:

  | extend EventOriginalUid = tostring(ReportId),

Odvozená pole a hodnoty

Po extrahování může být potřeba namapovat hodnotu zdrojového pole na sadu hodnot zadaných pro pole cílového schématu. Funkce iff, casea lookup mohou být užitečné pro mapování dostupných dat na cílové hodnoty.

Například Microsoft DNS parser odvozuje normalizovaný výsledek úspěchu nebo selhání z kódů událostí a odpovědí specifických pro zdroj. Parser přiřazuje EventResult pole na základě ID události a kódu odpovědi pomocí příkazu iff , který je následující:

   extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')

Pokud chcete namapovat několik hodnot, definujte mapování pomocí operátoru datatable a použijte lookup k provedení mapování. Například některé zdroje hlásí číselné kódy odpovědí DNS a síťový protokol, zatímco schéma vyžaduje častější reprezentaci popisků textu pro obojí. Následující příklad ukazuje, jak vytvořit tabulky vyhledávání, které mapují numerické identifikátory protokolů a DNS kódy odpovědí na jejich normalizované textové štítky, a poté tyto vyhledávání aplikovat na parsovaná data pomocí datatable a 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

Všimněte si, že vyhledávání je užitečné a efektivní také v případech, kdy mapování obsahuje pouze dvě možné hodnoty.

Pokud jsou podmínky mapování složitější, kombinujte iff, case a lookup. Následující příklad ukazuje, jak kombinovat lookup a case. Pokud lookup vyhledávací hodnota nebyla nalezena, vrátí výše uvedený příklad v poli DnsResponseCodeName prázdnou hodnotu. Následující case příklad ho rozšiřuje o výsledek lookup operace, pokud je k dispozici, a v opačném případě určí další podmínky. Použijte tento přístup k řešení neshodných hodnot vyhledávání tím, že se vrátíte k dalším podmínkám nebo výchozímu označení:

   | extend DnsResponseCodeName = 
      case (
        DnsResponseCodeName != "", DnsResponseCodeName,
        DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
        'Unassigned'
      )

Microsoft Sentinel poskytuje vestavěné pomocné funkce pro běžné hodnoty vyhledávání. Místo ručního vytváření a datatable a pro lookup dobře známá mapování můžete tyto funkce použít k přímému naplnění normalizovaného pole. Například výše uvedené DnsResponseCodeName vyhledávání lze implementovat pomocí jedné z následujících funkcí:


| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)

| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')

První možnost přijímá jako parametr hodnotu, která se má vyhledat, a umožňuje zvolit výstupní pole, a proto je užitečné jako obecná vyhledávací funkce. Druhá možnost je více zaměřená na analyzátory, přebírá jako vstup název zdrojového pole a aktualizuje potřebné pole ASIM v tomto případě DnsResponseCodeName.

Úplný seznam funkcí nápovědy ASIM najdete v tématu Funkce ASIM.

Pole rozšiřování

Kromě polí dostupných ze zdroje obsahuje výsledná událost ASIM pole rozšiřování, která by měl analyzátor vygenerovat. V mnoha případech mohou parsery těmto polům přiřadit konstantní hodnotu. Doplňte standardní obohacovací pole tak, aby každý parsovaný záznam obsahoval konzistentní metadata produktu, dodavatele a schématu, například:

  | extend                  
     EventCount = int(1),
     EventProduct = 'M365 Defender for Endpoint',
     EventVendor = 'Microsoft',
     EventSchemaVersion = '0.1.0',
     EventSchema = 'ProcessEvent'

Dalším typem polí rozšíření, která by měly vaše analyzátory nastavit, jsou pole typu, která určují typ hodnoty uložené v souvisejícím poli. Pole například SrcUsernameType určuje typ hodnoty uložené v SrcUsername poli. Další informace o polích typů najdete v popisu entit.

Ve většině případů je typům přiřazena také konstantní hodnota. V některých případech však musí být typ určen na základě skutečné hodnoty. Například zjistěte, zda je parsované hostitelské jméno plně kvalifikované doménové jméno (FQDN) tím, že zkontrolujete, zda obsahuje více než jeden segment:

   DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')

Microsoft Sentinel poskytuje užitečné funkce pro provádění obohacení. Například použijte _ASIM_ResolveSrcFQDN pomocnou funkci k odvození normalizovaného zdrojového jména hostitele, domény, typu domény a polí FQDN z tohoto sloupce Computer . Následující úryvek automaticky vyplní SrcHostnamepole , SrcDomain, SrcDomainType, a SrcFQDN polí na základě hodnoty v Computer poli.

  | invoke _ASIM_ResolveSrcFQDN('Computer')

Tato funkce nastaví pole následujícím způsobem:

Obor počítačů Výstupní pole
server1 SrcHostname: server1
SrcDomain, SrcDomainType, SrcFQDN– vše prázdné.
server1.microsoft.com SrcHostname: server1
SrcDomain: microsoft.com
SrcDomainType: plně kvalifikovaný název domény
SrcFQDN:server1.microsoft.com

Funkce _ASIM_ResolveDstFQDN a _ASIM_ResolveDvcFQDN provádějí podobnou úlohu tím, že naplňují související pole Dst a Dvc. Úplný seznam funkcí nápovědy ASIM najdete v tématu Funkce ASIM.

Vyberte pole v sadě výsledků

Analyzátor může volitelně vybrat pole v sadě výsledků. Odebrání nepotřebných polí může zvýšit výkon a zlepšit přehlednost tím, že se zabrání záměně mezi normalizovanými poli a zbývajícími zdrojovými poli.

K výběru polí v sadě výsledků se používají následující operátory KQL:

Operátor Description Kdy použít v analyzátoru
project-away Odebere pole. Použijte project-away pro konkrétní pole, která chcete ze sady výsledků odebrat. Doporučujeme neodejmout původní pole, která nejsou normalizována ze sady výsledků, pokud nevytvoří nejasnosti nebo jsou velmi velká a mohou mít vliv na výkon.
projekt Vybere pole, která existovala dříve nebo byla vytvořena jako součást příkazu, a odebere všechna ostatní pole. Nedoporučuje se používat v analyzátoru, protože analyzátor by neměl odebírat žádná další pole, která nejsou normalizována.

Pokud potřebujete odebrat konkrétní pole, jako jsou dočasné hodnoty použité při analýze, použijte project-away je k jejich odebrání z výsledků.

Například při parsování vlastní logovací tabulky odstraňte zbývající sloupce specifické pro zdroj (například pole s _d, _s, _b, nebo _g příponami), aby výstup parseru obsahoval pouze normalizovaná pole, která chcete zachovat:

    | project-away
        *_d, *_s, *_b, *_g

Zpracovat varianty parsování

Important

Různé varianty představují různé typy událostí, běžně mapované na různá schémata, a vyvíjejí samostatné analyzátory.

V mnoha případech události v eventstreamu zahrnují varianty, které vyžadují jinou logiku analýzy. Pokud chcete analyzovat různé varianty v jednom analyzátoru, použijte podmíněné příkazy, jako jsou iff a case, nebo použijte sjednocovací strukturu.

Pokud chcete použít union ke zpracování více variant, vytvořte pro každou variantu samostatnou funkci a pomocí příkazu union zkombinujte výsledky:

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…

Aby nedocházelo k duplicitním událostem a nadměrnému zpracování, ujistěte se, že každá funkce začíná filtrováním, pomocí nativních polí, pouze událostí, které má analyzovat. V případě potřeby také před sjednocením používejte projekt mimo každou větev.

Nasazení analyzátorů

Parsery nasadíte ručně tím, že je zkopírujete na stránku protokolu Azure Monitor a uložíte dotaz jako funkci. Tato metoda je užitečná pro testování. Další informace najdete v tématu Vytvoření funkce.

Pokud chcete nasadit velký počet analyzátorů, doporučujeme použít šablony ARM analyzátoru, a to následujícím způsobem:

  1. Vytvořte soubor YAML založený na příslušné šabloně pro každé schéma a zahrňte do něj váš dotaz. Začněte šablonou YAML , která je relevantní pro vaše schéma a typ analyzátoru, filtrování nebo bez parametrů.

  2. Pomocí převaděče šablon ASIM YAML na ARM převeďte soubor YAML na šablonu ARM.

  3. Pokud nasazujete aktualizaci, odstraňte starší verze funkcí pomocí portálu nebo pomocí nástroje PowerShellu pro odstranění funkce.

  4. Nasaďte šablonu pomocí portálu Azure nebo PowerShell.

Můžete také zkombinovat více šablon do jednoho procesu nasazení pomocí propojených šablon.

Tip

Šablony ARM mohou kombinovat různé prostředky, takže parsery lze nasadit společně s konektory, analytickými pravidly nebo seznamy ke sledování, abychom uvedli jen několik užitečných možností. Analyzátor může například odkazovat na sledovací seznam nasazený společně s ním.

Analyzátory testů

ASIM poskytuje testovací nástroje, které můžete použít k ověření vlastních parserů. Nicméně parsery jsou programový kód, někdy i složitý, a vedle automatizovaného testování se proto doporučují i standardní postupy zajištění kvality, jako jsou revize kódu.

Instalace testovacích nástrojů ASIM

Než nasadíte nástroj pro testování ASIM, ujistěte se, že máte pracovní prostor Microsoft Sentinel, kde:

  • Váš parser byl nasazen.
  • Zdrojová tabulka používaná analyzátorem je k dispozici.
  • Zdrojová tabulka používaná analyzátorem je naplněna pestrou kolekcí relevantních událostí.

Když vaše pracovní prostředí splní tyto požadavky, nasadíte do něj nástroj pro testování ASIM.

Ověření výstupního schématu

Abyste se ujistili, že váš parser vytváří platné schéma, spusťte následující testovací dotaz schématu na stránce Microsoft Sentinel Logs. Tento příkaz ověřuje, že výstupní pole, typy a aliasy vašeho parseru odpovídají očekávanému ASIM schématu:

<parser name> | getschema | invoke ASimSchemaTester('<schema>')

Výsledky zpracujte následujícím způsobem:

Error Action
Chybí povinné pole [<Pole>] Přidejte pole do parseru. V mnoha případech by to byla odvozená nebo konstantní hodnota, a ne pole, které je již dostupné ze zdroje.
Chybějící pole [<Pole>] je povinné, pokud existuje povinný sloupec [<Pole>] Přidejte pole do parseru. V mnoha případech toto pole označuje typy existujícího sloupce, na který odkazuje.
Chybějící pole [<Pole>] je povinné, pokud sloupec [<Pole>] existuje. Přidejte pole do parseru. V mnoha případech toto pole označuje typy existujícího sloupce, na který odkazuje.
Chybí povinný alias [<Pole>] aliasující existující sloupec [<Pole>] Přidejte alias do parseru
Chybí doporučený alias [<Pole>] pro aliasování existujícího sloupce [<Pole>] Přidejte alias do parseru
Chybí volitelný alias [<Pole>], který aliasuje existující sloupec [<Pole>] Přidejte alias do parseru
Chybí povinný alias [<Pole>] pro chybějící alias sloupce [<Pole>] Tato chyba doprovází podobnou chybu pro pole s aliasy. Opravte chybu pole s aliasy a přidejte tento alias do analyzátoru.
Neshoda typu v poli [<Pole>]. Aktuálně je to [<Type>], ale mělo by to být [<Type>] Ujistěte se, že je typ normalizovaného pole správný, obvykle pomocí funkce převodu , například tostring.
Informace Action
Chybí doporučené pole [<Pole>] Zvažte přidání tohoto pole do analyzátoru.
Informace Action
Chybí doporučený alias [<Pole>] aliasující neexistující sloupec [<Pole>] Pokud do analyzátoru přidáte pole s aliasem, nezapomeňte přidat i tento alias.
Chybí volitelný alias [<Pole>] odkazující na neexistující sloupec [<Pole>] Pokud do analyzátoru přidáte pole s aliasem, nezapomeňte přidat i tento alias.
Chybí volitelné pole [<Pole>] I když volitelná pole často chybí, stojí za to zkontrolovat seznam a zjistit, jestli je možné některé z volitelných polí mapovat ze zdroje.
Nadbytečné nenormalizované pole [<Pole>] I když jsou nenormalizovaná pole platná, stojí za to zkontrolovat seznam a zjistit, jestli je možné některé z nenormalizovaných hodnot namapovat na volitelné pole.

Note

Chyby zabrání správnému fungování obsahu využívajícího analyzátor. Upozornění nezabrání tomu, aby obsah fungoval, ale může snížit kvalitu výsledků.

Ověření výstupních hodnot

Abyste měli jistotu, že váš parser generuje platné hodnoty, použijte ASIM datový tester k ověření hodnot polí na vzorku výstupu parseru a identifikaci případných chyb nebo varování. Spusť následující dotaz na stránce Microsoft Sentinel Logs:

<parser name> | limit <X> | invoke ASimDataTester ('<schema>')

Zadání schématu je volitelné. Pokud schéma není zadané, použije se pole k identifikaci schématu, EventSchema které má událost dodržovat. Pokud událost neobsahuje pole EventSchema , budou ověřena pouze společná pole. Pokud je schéma zadáno jako parametr, toto schéma se použije k otestování všech záznamů. To je užitečné pro starší analyzátory, které nenastavují EventSchema pole.

Note

I v případě, že schéma není zadané, jsou za názvem funkce potřeba prázdné závorky.

Tento test je náročný na prostředky a nemusí fungovat na celé datové sadě. Nastavte X na nejvyšší hodnotu, při které u dotazu nevyprší časový limit, nebo nastavte časový rozsah dotazu pomocí nástroje pro výběr časového rozsahu.

Výsledky zpracujte následujícím způsobem:

Message Action
(0) Chyba: Neshoda typů pro sloupec [<Pole>]. Aktuálně je to [<Type>], ale mělo by to být [<Type>] Ujistěte se, že je typ normalizovaného pole správný, obvykle pomocí funkce převodu , například tostring.
(0) Chyba: Neplatné hodnoty (až 10 uvedené) pro pole [<Pole>] typu [<Logický typ>] Ujistěte se, že analyzátor mapuje správné zdrojové pole na výstupní pole. Pokud je namapován správně, aktualizujte analyzátor tak, aby transformoval zdrojovou hodnotu na správný typ, hodnotu nebo formát. Další informace o správných hodnotách a formátech pro každý logický typ najdete v seznamu logických typů.

Všimněte si, že testovací nástroj uvádí pouze vzorek 10 neplatných hodnot.
(1) Upozornění: Prázdná hodnota v povinném poli [<Pole>] Povinná pole by se měla vyplňovat, ne jenom definovat. Zkontrolujte, jestli se pole dá naplnit z jiných zdrojů pro záznamy, pro které je aktuální zdroj prázdný.
(2) Informace: Prázdná hodnota v doporučeném poli [<Pole>] Doporučená pole by se obvykle měla vyplňovat. Zkontrolujte, jestli se pole dá naplnit z jiných zdrojů pro záznamy, pro které je aktuální zdroj prázdný.
(2) Informace: Prázdná hodnota v volitelném poli [<Pole>] Zkontrolujte, jestli je pole s aliasem povinné nebo doporučené, a pokud ano, jestli je možné ho naplnit z jiných zdrojů.

Mnoho zpráv také hlásí počet záznamů, které zprávu vygenerovaly, a jejich procento z celkového vzorku. Toto procento je dobrým indikátorem důležitosti problému. Například pro doporučené pole:

  • 90 % prázdných hodnot může značit obecný problém s analýzou.
  • 25 % prázdných hodnot může znamenat variantu události, která nebyla správně analyzována.
  • Několik prázdných hodnot může být zanedbatelným problémem.

Note

Chyby zabrání správnému fungování obsahu využívajícího analyzátor. Upozornění nezabrání tomu, aby obsah fungoval, ale může snížit kvalitu výsledků.

Přispějte analyzátory

Možná budete chtít přispět parserem do hlavní distribuce ASIM. Pokud to přijmete, budou analyzátory dostupné každému zákazníkovi jako integrované analyzátory ASIM.

Chcete-li přispět svými parsery:

Dokumentace přijatých upozornění

Pokud jsou varování uvedena ASIM testovacími nástroji považována za platná pro parser, zaznamenejte přijatá varování v YAML souboru parseru pomocí sekce Výjimky. Následující příklad YAML ukazuje, jak zaznamenat varování přijatých testů parseru v Exceptions části definice parseru:

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

Varování uvedené v souboru YAML by mělo být zkrácenou verzí odpovídající varovné zprávy ASIM testeru, dostatečně unikátní, aby identifikovala toto konkrétní varování. Tato hodnota se používá k porovnání varovných zpráv ASIM testerů během automatizovaného testování a ignoruje tato varování.

Pokyny pro odeslání ukázek

Ukázková data jsou potřeba při řešení potíží s analyzátorem a k zajištění budoucích aktualizací analyzátoru odpovídajících starším ukázkám. Ukázky, které odešlete, by měly obsahovat všechny varianty událostí, které analyzátor podporuje. Ujistěte se, že ukázkové události zahrnují všechny možné typy událostí, formáty událostí a varianty, jako jsou události představující úspěšné a neúspěšné aktivity. Také se ujistěte, že jsou reprezentovány varianty ve formátech hodnot. Pokud může být například název hostitele reprezentován jako plně kvalifikovaný název domény nebo jednoduchý název hostitele, ukázkové události by měly obsahovat oba formáty.

Pokud chcete odeslat ukázky událostí, postupujte následovně:

  • Na Logs obrazovce spusťte dotaz, který extrahuje ze zdrojové tabulky pouze události vybrané analyzátorem. Například pro Infoblox DNS parser použijte následující dotaz k získání pouze záznamů Infoblox NIOS Syslog, které parser zpracovává:
    Syslog
    | where ProcessName == "named"
  • Exportujte výsledky pomocí možnosti Exportovat do souboru CSV do souboru s názvem <EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv, Kde EventProduct, EventProducta EventSchema jsou hodnoty přiřazené analyzátorem k těmto polím.

  • Na Logs obrazovce spusťte getschema zdrojovou tabulku a zkontrolujte dostupné sloupce a jejich typy. Exportujte tyto informace o schématu spolu se svými vzorkovými daty. Například pro DNS parser Infoblox je dotaz následující:

    Syslog
    | getschema
  • Exportujte výsledky pomocí možnosti Exportovat do souboru CSV do souboru s názvem <TableName>_schema.csv, kde TableName je název zdrojové tabulky, který analyzátor používá.

  • Oba soubory do žádosti o přijetí změn vložte do složky /Sample Data/ASIM. Pokud soubor už existuje, přidejte k názvu popisovač GitHubu, například: <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv

Pokyny k odeslání výsledků testů

Výsledky testů jsou důležité k ověření správnosti analyzátoru a pochopení všech nahlášených výjimek.

Pokud chcete odeslat výsledky testu, postupujte následovně:

  • Spusť testy parseru podle popisu v testovacích parserech.

  • a exportujte výsledky testů pomocí možnosti Exportovat do souboru CSV do souborů s názvem <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv a <EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv v uvedeném pořadí.

  • Oba soubory do žádosti o přijetí změn vložte do složky /Parsers/ASim<schema>/Tests.

Další informace o analyzátorech ASIM:

Další informace o ASIM obecně: