Advanced Security Information Model (ASIM) パーサー (パブリック プレビュー) の管理

Advanced Security Information Model (ASIM) ユーザーは、クエリでテーブル名の代わりに統一パーサーを使用して、データを正規化された形式で表示し、単一のクエリでスキーマに関連するすべてのデータを取得します。 各統一パーサーは、各ソースの特定の詳細を処理する複数のソース固有のパーサーを使用します。

パーサーが ASIM アーキテクチャにどのように適合するかを理解するには、ASIM アーキテクチャの図を参照してください。

次の処理を行うために、各統一パーサーで使用されるソース固有のパーサーを管理しなければならない場合があります。

  • カスタムのソース固有のパーサーを統一パーサーに追加する。

  • 統一パーサーによって使用される組み込みのソース固有のパーサーをカスタムのソース固有のパーサーに置き換える。 組み込みパーサーを置き換えるのは、次のような場合です。

    • 統一パーサーで既定で使用されるパーサー以外のバージョンの組み込みパーサーを使用する。

    • 統一パーサーによって使用されるソース固有のパーサーのバージョンを保持することによって自動更新を阻止する。

    • 組み込みパーサーの修正バージョンを使用する。

  • ソース固有のパーサーを構成する。これによって、たとえば、パーサーに関連する情報を送信するソースを定義します。

この記事では、組み込みの統一 ASIM パーサーを使用するのか、ワークスペースにデプロイされた統一パーサーを使用するのかに関係なく、パーサーの管理方法を示します。

重要

現在、ASIM はプレビュー段階です。 Azure プレビューの追加使用条件には、ベータ版、プレビュー版、またはまだ一般提供されていない Azure 機能に適用される追加の法律条項が含まれています。

前提条件

この記事の手順では、ソース固有のすべてのパーサーが既に Microsoft Sentinel ワークスペースにデプロイされていることを前提とします。

詳細については、ASIM パーサーの開発に関する記事を参照してください。

組み込みの統一パーサーを管理する

ワークスペースのセットアップ

Microsoft Sentinel ユーザーは、組み込みの統一パーサーを編集できません。 代わりに、次のメカニズムを使用して、組み込みの統一パーサーの動作を変更します。

  • ソース固有のパーサーの追加をサポートするために、ASIM は統一カスタム パーサーを使用します。 このようなカスタム パーサーはワークスペースにデプロイされるため、編集可能です。 組み込みの統一パーサーにより、これらのカスタム パーサーが自動的に選択されます (存在する場合)。

    サポートされているすべてのスキーマのために、初期の空の統一カスタム パーサーを Microsoft Sentinel ワークスペースにデプロイできます。あるいは、特定のスキーマのために個別に行うこともできます。 詳細については、Microsoft Sentinel GitHub リポジトリで「初期の空の ASIM カスタム統一パーサーをデプロイする」を参照してください。

  • 組み込みのソース固有パーサーの除外をサポートするために、ASIM はウォッチリストを使用します。 Microsoft Sentinel GitHub リポジトリから、Microsoft Sentinel ワークスペースにウォッチリストをデプロイします。

  • 組み込みパーサーとカスタム パーサーのソースの種類を定義するために、ASIM ではウォッチリストを使用します。 Microsoft Sentinel GitHub リポジトリから、Microsoft Sentinel ワークスペースにウォッチリストをデプロイします。

組み込みの統一パーサーにカスタム パーサーを追加する

カスタム パーサーを追加するには、カスタム統一パーサーに新しいカスタム パーサーを参照する行を挿入します。

必ず、フィルタリング カスタム パーサーとパラメーターレス カスタム パーサーの両方を追加してください。 パーサーを編集する方法の詳細については、Azure Monitor ログ クエリでの関数に関する記事を参照してください。

追加する行の構文は、スキーマごとに異なります。

スキーマ パーサー 追加する行
DNS Im_DnsCustom _parser_name_ (starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)
NetworkSession Im_NetworkSessionCustom _parser_name_ (starttime, endtime, srcipaddr_has_any_prefix, dstipaddr_has_any_prefix, dstportnumber, hostname_has_any, dvcaction, eventresult)
WebSession Im_WebSessionCustom _parser_name_ (starttime, endtime, srcipaddr_has_any_prefix, url_has_any, httpuseragent_has_any, eventresultdetails_in, eventresult)

既にパーサーを参照している統一カスタム パーサーに新たなパーサーを追加する場合は、必ず、前の行の末尾にコンマを追加してください。

たとえば、次のコードは、added_parser を追加した後のカスタム統一パーサーを示しています。

union isfuzzy=true
existing_parser(starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype),
added_parser(starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)

組み込みパーサーの修正バージョンを使用する

既存の組み込みのソース固有のパーサーを修正するには:

  1. オリジナルのパーサーに基づいてカスタム パーサーを作成し、それを組み込みパーサーに追加します。

  2. レコードを ASim Disabled Parsers ウォッチリストに追加します。

  3. CallerContext 値を Exclude<parser name> と定義します。ここで <parser name> はパーサーを除外する統一パーサーの名前です。

  4. SourceSpecificParser 値を Exclude<parser name> と定義します。ここで <parser name> は除外するパーサーの名前で、バージョン指定子は使用しません。

たとえば、Azure Firewall DNS パーサーから除外するには、次のレコードをウォッチリストに追加します。

CallerContext SourceSpecificParser
Exclude_Im_Dns Exclude_Im_Dns_AzureFirewall

組み込みパーサーの自動更新を阻止する

組み込みのソース固有のパーサーの自動更新を阻止するには、次のプロセスを使用します。

  1. _Im_Dns_AzureFirewallV02 など、使用する組み込みパーサーのバージョンをカスタム統一パーサーに追加します。 詳細については、前述の「組み込みの統一パーサーにカスタム パーサーを追加する」を参照してください。

  2. 組み込みパーサーの例外を追加します。 たとえば、自動更新を完全にオプトアウトして、大量の組み込みパーサーを除外する場合は、次の項目を追加します。

  • CallerContext のすべてのパーサーを除外する、SourceSpecificParser フィールドとして Any を含むレコード。
  • すべての組み込みパーサーを除外する、CallerContext および SourceSpecificParser フィールド内の Any に関するレコード。

詳細については、「組み込みパーサーの修正バージョンを使用する」を参照してください。

ワークスペースにデプロイされた統一パーサーを管理する

ワークスペースにデプロイされた統一パーサーにカスタム パーサーを追加する

カスタム パーサーを追加するには、ワークスペースにデプロイされた統一パーサーの union ステートメントに新しいカスタム パーサーを参照する行を挿入します。

必ず、フィルタリング カスタム パーサーとパラメーターレス カスタム パーサーの両方を追加してください。 追加する行の構文は、スキーマごとに異なります。

スキーマ パーサー 追加する行
認証 ImAuthentication _parser_name_ (starttime, endtime, targetusername_has)
DNS ImDns _parser_name_ (starttime, endtime, srcipaddr, domain_has_any,
responsecodename, response_has_ipv4, response_has_any_prefix,
eventtype)
ファイル イベント imFileEvent _parser_name_
ネットワーク セッション imNetworkSession _parser_name_ (starttime, endtime, srcipaddr_has_any_prefix, dstipaddr_has_any_prefix, dstportnumber, url_has_any,
httpuseragent_has_any, hostname_has_any, dvcaction, eventresult)
プロセス イベント - imProcess
- imProcessCreate
- imProcessTerminate
_parser_name_
レジストリ イベント imRegistry

_parser_name_
Web セッション imWebSession

_parser_name_ parser (starttime, endtime, srcipaddr_has_any, url_has_any, httpuseragent_has_any, eventresultdetails_in, eventresult)

統一パーサーに新たなパーサーを追加する場合は、必ず、前の行の末尾にコンマを追加してください。

たとえば、次の例は、カスタム added_parser を追加した後の DNS フィルタリング統一パーサーを示しています。

  let Generic=(starttime:datetime=datetime(null), endtime:datetime=datetime(null) , srcipaddr:string='*' , domain_has_any:dynamic=dynamic([]) , responsecodename:string='*', response_has_ipv4:string='*' , response_has_any_prefix:dynamic=dynamic([]) , eventtype:string='lookup' ){
  let DisabledParsers=materialize(_GetWatchlist('ASimDisabledParsers') | where SearchKey in ('Any', 'imDns') | extend SourceSpecificParser=column_ifexists('SourceSpecificParser','') | distinct SourceSpecificParser);
  let imDnsBuiltInDisabled=toscalar('imDnsBuiltIn' in (DisabledParsers) or 'Any' in (DisabledParsers)); 
  union isfuzzy=true
      vimDnsEmpty
    , vimDnsCiscoUmbrella  ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsCiscoUmbrella'   in (DisabledParsers) )))
    , vimDnsInfobloxNIOS   ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsInfobloxNIOS'    in (DisabledParsers) )))
    ...
    , vimDnsAzureFirewall  ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsAzureFirewall'   in (DisabledParsers) )))
    , vimDnsMicrosoftNXlog ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsMicrosoftNXlog'  in (DisabledParsers) ))),
    added_parser ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)
     };
  Generic( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)

ワークスペースにデプロイされたパーサーの修正バージョンを使用する

Microsoft Sentinel ユーザーは、ワークスペースにデプロイされたパーサーを直接修正できます。 オリジナルに基づいてパーサーを作成して、オリジナルをコメントアウトし、ワークスペースにデプロイされた統一パーサーに修正バージョンを追加します。

たとえば、次のコードは、vimDnsAzureFirewall パーサーが修正バージョンに置き換えられた DNS フィルタリング統一パーサーを示しています。

  let Generic=(starttime:datetime=datetime(null), endtime:datetime=datetime(null) , srcipaddr:string='*' , domain_has_any:dynamic=dynamic([]) , responsecodename:string='*', response_has_ipv4:string='*' , response_has_any_prefix:dynamic=dynamic([]) , eventtype:string='lookup' ){
  let DisabledParsers=materialize(_GetWatchlist('ASimDisabledParsers') | where SearchKey in ('Any', 'imDns') | extend SourceSpecificParser=column_ifexists('SourceSpecificParser','') | distinct SourceSpecificParser);
  let imDnsBuiltInDisabled=toscalar('imDnsBuiltIn' in (DisabledParsers) or 'Any' in (DisabledParsers)); 
  union isfuzzy=true
      vimDnsEmpty
    , vimDnsCiscoUmbrella  ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsCiscoUmbrella'   in (DisabledParsers) )))
    , vimDnsInfobloxNIOS   ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsInfobloxNIOS'    in (DisabledParsers) )))
    ...
    // , vimDnsAzureFirewall  ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsAzureFirewall'   in (DisabledParsers) )))
    , vimDnsMicrosoftNXlog ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype, (imDnsBuiltInDisabled or('vimDnsMicrosoftNXlog'  in (DisabledParsers) ))),
    modified_vimDnsAzureFirewall ( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)
     };
  Generic( starttime, endtime, srcipaddr, domain_has_any, responsecodename, response_has_ipv4, response_has_any_prefix, eventtype)

ソース固有のパーサーに関連するソースを構成する

パーサーによっては、パーサーに関連するソースの一覧を更新する必要があります。 たとえば、Syslog データを使用するパーサーでは、どの Syslog イベントがパーサーに関連しているかを判別できない場合があります。 このようなパーサーでは、Sources_by_SourceType ウォッチリストを使用して、パーサーに関連する情報をどのソースが送信するのかを判別できます。 このような解析では、関連するソースごとのレコードをウォッチリストに追加します。

  • SourceType フィールドは、パーサーのドキュメントで指定されているパーサー固有の値に設定します。
  • Source フィールドは、イベントで使用されるソースの識別子に設定します。 場合によっては、Syslog などの元のテーブルに対してクエリを実行して、正しい値を判断する必要があります。

システムに Sources_by_SourceType ウォッチリストがデプロイされていない場合は、Microsoft Sentinel GitHub リポジトリから Microsoft Sentinel ワークスペースにウォッチリストをデプロイします。

次のステップ

この記事では、Advanced Security Information Model (ASIM) パーサーの管理について説明します。

ASIM パーサーの詳細については、次を参照してください。

ASIM 全般の詳細については、次を参照してください。