【Snare】WECエージェントでWindowsイベントコレクターを活用する(4)サブスクリプションの詳細設定

はじめに

前回のブログでは、Windows イベント コレクター(WEC)の機能とSnareのWECエージェントを使って、証明書ベースでセキュアにイベントログを収集・保存する方法をご紹介しました。きちんと使える証明書を準備することが肝で、いわゆるオレオレ証明書を作っただけでは、上手く動作しません。

実際に使える証明書の作り方については、別の機会に譲るとして、今回はWECサブスクリプションのXMLファイルを使った設定についてご説明します。このお話をする一つの理由は、Microsoftの「ソース開始サブスクリプションの設定」に載っている、以下のサブスクリプション構成のXMLファイルの例が曲者だからです。

<Subscription xmlns=”http://schemas.microsoft.com/2006/03/windows/events/subscription”>
    <SubscriptionId>SampleSISubscription</SubscriptionId>
    <SubscriptionType>SourceInitiated</SubscriptionType>
    <Description>Source Initiated Subscription Sample</Description>
    <Enabled>true</Enabled>
    <Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>

    <!– Use Normal (default), Custom, MinLatency, MinBandwidth –>
    <ConfigurationMode>Custom</ConfigurationMode>

    <Delivery Mode=”Push”>
        <Batching>
            <MaxItems>1</MaxItems>
            <MaxLatencyTime>1000</MaxLatencyTime>
        </Batching>
        <PushSettings>
            <Heartbeat Interval=”60000″/>
        </PushSettings>
    </Delivery>

    <Expires>2018-01-01T00:00:00.000Z</Expires>

    <Query>
        <![CDATA[
            <QueryList>
                <Query Path=”Application”>
                    <Select>Event[System/EventID=’999′]</Select>
                </Query>
            </QueryList>
        ]]>
    </Query>

    <ReadExistingEvents>true</ReadExistingEvents>
    <TransportName>http</TransportName>
    <ContentFormat>RenderedText</ContentFormat>
    <Locale Language=”en-US”/>
    <LogFile>ForwardedEvents</LogFile>
    <AllowedSourceNonDomainComputers></AllowedSourceNonDomainComputers>
    <AllowedSourceDomainComputers>O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)</AllowedSourceDomainComputers>
</Subscription>

そして、GUIによる設定の方が初心者向きでもあるので、まず、第1~3回ではGUIによる設定をご紹介しました。しかし、GUIによる設定では「詳細設定」の細かい設定ができないという問題があります。また、多数のソース コンピューターがある場合には、GUIによる設定は能率が悪いということもあります。

そこで、XMLによるサブスクリプションの設定が必要となるでしょう。必要となる道具立てとして、wecutilコマンドとイベントのクエリがあります。それらについて説明し、サブスクリプションの設定内容については、主にGUIの設定との対応を使って説明します。

wecutilコマンド

このWECのサブスクリプションを操作するコマンドとして、wecutilコマンドがあります。WECに関してはGUIだけではすべてのことができないので、結局このコマンドをある程度分かっていることが重要です。XMLの操作にもこのコマンドを使います。

wecutilコマンドのヘルプ

wecutilコマンドのヘルプ

wecutilコマンドについては、このヘルプとはリファレンスを見れば何とか使いこなせるでしょう。
wecutil コマンド -?
でサブコマンド毎のヘルプも出せるので、詳しくはそれを見ればよいわけです。

wecutilコマンドでサブスクリプションの構成を表示する

コマンドプロンプトもしくはPowerShellで、
wecutil es
を実行することで設定されているサブスクリプションの一覧が表示できます。

これで目的のサブスクリプション名(ID)を確認して、
wecutil gs サブスクリプションID
でサブスクリプションの構成を表示します。以下は前回の証明書編で作ったサブスクリプションtest4をこのコマンドで表示させたものです。

wecutil esコマンドとwecutil gsコマンドの実行結果

wecutil gsコマンドでサブスクリプションの構成をXML形式で表示する

wecutil gs コマンドのオプションで /f:XML を指定するとXML形式で出力されます。これとこのオプションなしの場合の出力やGUIと比較すれば、XMLの書き方が分かると思います。同じtest4をXML形式で表示させたものが次の画像です。

wecutil gs <subsc_ID> /f:<XML>コマンドの実行結果

サブスクリプション設定のGUI表示とXML記述の対応

参考までにサブスクリプションtest4のGUIのイメージのうち「サブスクリプションのプロパティ」は以下のようです。

test4の「サブスクリプションのプロパティ」画面

GUIとXMLとを比較してまとめたもののが次の表です。

WECサブスクリプションの設定項目 GUIとXML比較

*1 GUIで「サブスクリプションの種類」を設定すると、第1回で説明したように、コレクター開始の場合はPull、ソース開始の場合はPushに設定されます。

*2 GUIの「イベント配信の最適化」のモードが、ConfigurationModeに対応しており、モードによって決められた値が設定されます。この後に詳述します。

表の中の灰色に塗りつぶした項目は、他の設定モードでは設定されることのある項目です。

これらがイベントサブスクリプションのプロパティのすべてではありませんが、大方必要な項目が分かります。これらのプロパティの詳細は、Window イベントコレクターのリファレンスにあります。

XMLを最初から手で入力するのは大変なので、GUIで入力してそれを、wecutil gs <サブスクリプションID> /f:XMLコマンドでXMLに落として、それに対して詳細を修正するのがよいでしょう。Microsoftの関連するマニュアルにある例をベースに修正することも考えられます。

サブスクリプションのモード(ConfigurationMode)

XMLによるConfigurationModeの設定は、Normal、Custom、MinLatency、MinBandwidthの四つがあり、それぞれ、「イベント配信の最適化」のモードと対応しています。[標準]がNormal、[帯域幅の最小化]がMinBandwidth、[待ち時間最小化]がMinLatency、[カスタム]がCustomです。

XMLの”Delivery Mode”のブロックの値は、このモードとの関連で設定され、カスタムを選択した場合のみ、自由に値を設定できます。カスタムを選択するとGUIで[イベント配信の最適化]の設定を変更できなくなります。

また、DeliveryModeは、SbuscriptionTypeと連動しており、この点については第一回でも若干説明しましたが、全体をまとめると以下の表のようになります。

イベント配信の最適化モードの設定値

*3 私がWindows 2019サーバーで検証した範囲では、GUIで設定した場合はDeliveryMaxItemsは設定されていませんでした。また、DeliveryModeは、WEF イベントはどのくらいの頻度で配信されますか?]の記述では、[標準(通常)]モード時は、プル配信モードだと記述されていますが、ソース開始サブスクリプションではプッシュに設定されます。

パラメーターの意味

  • DeliveryMode:*4
    • Push: コレクターがセットしたコールバックに非同期的にソースがイベントをプッシュする
    • Pull:  クエリ条件に一致する使用可能なイベントがある場合にソースが通知し、コレクターがイベントを取りに行く
  • DeliveryMaxItems: イベント ソースから転送するときにバッチ処理できるイベントの最大数
  • DeliveryMaxLatencyTime: イベント ソースがイベントを送信するまでに待機する時間、単位ミリ秒
  • HeartbeatInterval: ハートビート時間間隔、単位ミリ秒

*4 イベントのサブスクライブ を参照のこと。

XMLによるサブスクプションの作成

wecutil cs <XMLファイル>
上記コマンドを使うことで、XMLによるサブスクリプションの作成ができます。一度GUIで作成してからそれを修正する場合は、同じ名前(ID)のサブスクリプションを作成しようとすると既にファイルがあるとして怒られます。

その場合は、
wecutil ss c:<XMLファイル>
でパラメーターの変更が行えます。wecutil ssコマンドではXMLを使わなくてもパラメーターの変更ができるので、そちらの方が簡単ならそれを使うのもよいと思います。

ただし、ConfigurationModeをCustomに設定すると、GUIで設定が見えず管理できなくなるので、設定をXMLに落としてバックアップしておくことが、より重要になります。 そうでなくとも、wecutil gs <Subid> /f:XML でXMLにバックアップしておくことはいざというときのために重要と思います。

イベントのクエリ

もう一つ、WECのサブスクリプションの設定を扱うのに重要なのは、イベントビューアーに使われているXPath式またはXPath式を含むイベントのXMLクエリです。<Query>~</Query>の部分が該当します。ただし、これの書き方を覚える必要はほとんどないでしょう。

イベントのクエリの作成

この部分を理解する一番の近道は、イベントビューアーでフィルターを設定し、それをXML形式で表示してみることです。GUIで入力した内容がそのままXMLに変換されています。ですから、サブスクリプションのこの部分を作成するには、イベントビューアーでフィルターを作ってそれをコピペするだけでよいでしょう。

このクエリのMicrosoftの説明は、イベントの使用 (Windows イベント ログ) にあります。

動作検証用のサブスクリプション?のイベントのクエリ

最初に引用したソース開始サブスクリプションのXMLのクエリは、肝心の部分が
<Query Path=”Application”>
    <Select>Event[System/EventID=’999′]</Select>

</Query>
となっていて、これはApplicationのログのイベントIDが999のログだけを選択することを意味します。つまり、このXMLはテスト用にイベントID 999のイベントを起こす必要があります。

また、「サブスクリプションが正しく動作することを検証するには」を読むと、DeliveryMaxItemsの数だけイベントを発生させる必要があると書かれています。
このサンプルXMLでは、DeliveryMaxItemsは1に設定されているので、ApplicationのイベントID 999のイベントを1回だけソース コンピューターで発生させると、ログが転送されるからです。

そのためには、ソース コンピューターで、以下のコマンドをたたけばいいことが分かります。
eventcreate /ID 999 /L Application /T INFORMATION /D “To connect WEC”

<余談>
PowerShellのGet-WinEventコマンドでこのクエリのXMLを使ってフィルターしたログを表示することができます。PowerShellには、Get-EventLogコマンドもありますが、こちらの方が便利です。また、クエリのXMLはwevtutilコマンドでも使えますが、今から覚えるのならより便利なGet-WinEventコマンドをお薦めします。

セキュリティ記述子の文字列形式

ここまでお勉強すれば、何とか最初の例のXMLを解釈できるようになっていると思います。しかし、最後に一つ難物がありました。引用したXMLの最後から二行目にある、接続を許可されるドメインコンピューターのリストを表すセキュリティ記述子の文字列形式です。

O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)

これはセキュリティ記述子定義言語(SDDL)で記述されている文字列で、実際のセキュリティ記述子はWindowsのオブジェクト毎に定義されたバイナリのデータ構造です。それを人間が見て分かりやすいようにSDDLで記述したものが、この文字列形式です。

Microsoftのセキュリティ記述子の文字列形式の説明を見るとセキュリティ記述子の4つのメイン コンポーネントが以下のコロン付きのヘッダーで表示されたものがベタで並んでいることが分かります。以下の4つです。

  • O:所有者
  • G:プライマリーグループ
  • D:随意アクセス制御リスト DACL(Discretionary access control list)
  • S:システムアクセス制御リスト SACL(System Access Control List)

正確な構文は以下の引用の通りです。

O:owner_sid
G:group_sid
D:dacl_flags(string_ace1)(string_ace2)… (string_acen)
S:sacl_flags(string_ace1)(string_ace2)… (string_acen)

ここからflagを除くとSID(Security ID)とACE(Access Control Entry)からなることが分かります。それぞれSID文字列とACE文字列で記述されるので、それらを調べれば解釈できそうです。

  • 1つ目(Owner)と2つ目(Primary Group)はSID(Security ID)文字列で記述
  • 3つ目(DACL)と4つ目(SACL)は主にACE(Access Control Entry)文字列で記述

SID文字列の説明を見ると、これの書き方は以下の二種類あります。

  • 標準文字列表現(sid-value) (S-R-I-S-S)
  • Sddl.hで定義された文字列定数(sid-token)(基本的にアルファベット二文字)

一方、ACE文字列の説明を見ると、構文は以下の通りです。

ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)

上で引用したマニュアルページの情報を使って、O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)というセキュリティ記述子の文字列形式を解釈してみます。

ここで4つメインコンポ―ネント境界に区切り文字がないので要注意して分解して解釈します。

  • O:NS SDDL_NETWORK_SERVICE ネットワークサービスアカウント
  • G:NS 同上
  • D:(A;;GA;;;DC)(A;;GA;;;NS)
      A;;GA;;;DC 
       ace_type:ACCESS_ALLOWED_ACE_TYPE、
       rights:GA SDDL_GENERIC_ALL GENERIC_ALL
       account_sid:DC SDDL_DOMAIN_COMPUTERS ドメインコンピューター
      A;;GA;;;NS
       ace_type:ACCESS_ALLOWED_ACE_TYPE、
       rights:GA SDDL_GENERIC_ALL GENERIC_ALL
       account_sid:NS SDDL_NETWORK_SERVICE ネットワークサービスアカウント

結局、次のことが分かります。

  • O:所有者とG:プライマリーグループはネットワークサービスアカウント(NETWORK SERVICE)
  • 随意アクセス制御リスト(DACL)でドメインコンピューターとネットワークサービスアカウントにGAのアクセス権(汎用アクセス権のREAD/WRITE/EXECUTEのすべて)が設定されている
  • システムアクセス制御リスト(SCAL)は設定されていない

ソース開始サブスクリプションの設定の注意には、この同じセキュリティ記述子(の文字列形式)がAllowedSourceDomainComputersのデフォルトとして設定されていると書かれています。したがって、XMLの以下の部分は書かなくても結果は同じということですね。

<AllowedSourceDomainComputers>O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)</AllowedSourceDomainComputers>

余談ですが、日本語の注意書きでは、GAが機械翻訳で「ジョージア州」となっています。

おわりに

今回はWindowsイベント コレクターのサブスクプションの設定をXMLの定義ファイルで行うためのご説明をしました。最初に、例題のXMLが曲者と言ったのは、これは単に動作検証用のものだったからでした。また、最後のセキュリティ記述子の文字列形式の解釈も、徒労に終わったという気がしますが、XMLに書かれる内容を理解しておくことは、必要なことだと考えましょう。

今回は力尽きてSnare製品の説明と結びつけることができませんでしたが、WECを活用する上で、SnareのWECエージェントを使って頂ければ幸いです。

最後までお読みいただき、ありがとうございました。

参考資料

今回の記事の参考資料

今回の記事の内容に関して、Microsoftのドキュメントのリンクを集めましたので、参考にしてください。

これまでの記事

Windows イベントコレクターの設定については、ドメイン環境、WORKGROUP環境、証明書の使える環境に分けて、これまでの3回のブログでご説明しました。
SnareのWECエージェントのインストールと設定については第1回をご覧ください。Snare Centralで受信したログの確認方法については、第1回~3回それぞれ違った方法をSnare Centralの機能紹介を兼ねて説明してあります。目次を見て興味あるところを読んでいただければ幸いです。

お問合せ

30日無償でご利用いただける評価版を以下ダウンロードリンクにご用意しております。簡単に検証が開始できますので、ぜひお気軽にお試しください。

ジュピターテクノロジー 堅

こんな記事も読まれています

最新記事

おすすめ記事

  1. 「リモートデスクトップの操作が遅い!」の原因を高速特定!ntopngによる輻輳原因の究明アプローチを実例でご紹介

  2. フリーWi-Fiに潜む悪魔の双子(エビルツイン)とは。加害者・被害者にならないために知るべきこと

  3. Syslogサーバー構築手順~インストールから初期設定まで~WinSyslogの使い方

製品カテゴリー

JTC IT用語集
TOP