Windows オペレーティングシステム内でのログ収集で不便に感じるのは、すぐに使えるセキュリティ関連のイベントの数が限られていることです。ネットワーク監視を行っているシステム管理者は、未知または悪意のある実行中のプロセスをキャプチャし、アウトバウンド接続をしているソースプロセスをキャプチャし、ファイルやレジストリに変更が加えられたら検出し、特定のエンドポイントで実行されているコマンドをキャプチャしたりできるようにしたいと思うかもしれません。Microsoft は、そういった管理者のために、このようなタイプのログキャプチャのための優れたツールを SysInternals スイートで提供しています。システムモニター (System Monitor)、または Sysmon と呼ばれるツールです。

Sysmon は、デフォルト設定のままだと、イベントビューアがログイベントですぐに満杯になってしまいます。したがって、イベントを調整して誤検知を排除することが重要になります。Sysmon イベントは、config.xml ファイルの設定を調整することによってフィルタリングできます。設定ファイルのスキーマバージョンは、Sysmon のスキーマのバージョンと一致している必要があります。スキーマのバージョンを表示するには、Sysmon.exe の -s オプションを使用します。

Sysmon64-exe-image

スキーマバージョンを指定して、ファイルのフィルタリングを開始します。

<Sysmon schemaversion="4.1">

syslogでハッシュ値として使用したいハッシュアルゴリズムを選択することもできます。

<HashAlgorithms>MD5</HashAlgorithms>

イベントのフィルタリングは、次のコマンドで始めます。

<EventFiltering>

フィルタなしで "include" や "exclude" ステートメントを使用すると、逆の効果があります。たとえば、次の記述は、すべての「ProcessCreate」イベントを記録し、「FileCreateTime」イベントを記録しないように Sysmon に指示することになります。フィルタに含まれていないイベントタイプはすべて自動的に含まれます。

<Sysmon schemaversion=”4.1”>
  <EventFiltering>
    <ProcessCreate onmatch=”exclude”/>
    <FileCreateTime onmatch=”include”/>
  </EventFiltering>
</Sysmon>

特定のイベントタイプに対する詳細なフィルタリングをするには、特定のパラメータに基づいてイベントを含めるか除外するかを選択します。パラメータは、イベントログ内のルール名と一致します。たとえば、特定のプロセス作成イベントをフィルタリングしたい場合は、下のリストの右端にあるステートメント、(rule: ProcessCreate)が、フィルタリングに使用するルール名です。

まず、既知の誤検知を除外することから始めましょう。除外は、イベントタイプ別に行います。config.xml ファイルにコメントを入れるには、“<!--" と “-->” で囲まれたコメントブロックの中に記入します。

プロセス作成イベントフィルタの例を見てみましょう。最初の項目は、これがプロセス作成イベント用のフィルタであることを示すステートメントです。以降に示される基準に一致するプロセス作成イベントをログから除外するようにします。

<ProcessCreate onmatch="exclude">

最初に、実行プロセスの整合性レベルを除外します。Microsoft は、Windows Vista 以降、プロセスに整合性レベルと呼ばれるセキュリティ機能を導入しました。低、中、高、システムの4つの整合性レベルがあります。低い整合性レベルのプロセスには、高い整合性レベルを持つプロセスへのフルアクセス権限がありません。特権エスカレーションを伴わない dll インジェクション攻撃などを阻止することができます。ここでは、システムレベルの整合性を持つプロセスによって実行されたアクションに関するレポートは、信頼できると仮定してレポートから除外することにします。

<IntegrityLevel>System</IntegrityLevel>

次に、プロセス名やイメージに関連してたくさん報告してくるアプリケーションをレポートから除外することが考えられます。"contains" 演算子を使えば、パス全体は必要ではなくなります。プロセスイベントには、イメージとペアレント・イメージの両方があります。ペアレント・イメージはしばしば2番目のプロセスを呼び出します。

<Image condition="contains">C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroCEF\RdrCEF.exe</Image>
<ParentImage condition="contains">C:\Program Files (x86)\Google\Update\GoogleUpdate.exe</ParentImage>

そして、コマンドライン自体に含まれる内容に基づいてフィルタリングすることもできます。Sysmon は実行されたすべてのコマンドをキャプチャするのではなく、プロセスの作成に適用可能なコマンドのみをキャプチャします。イメージと同様、コマンドラインとペアレント・コマンドラインの両方があります。

<CommandLine condition="contains">C:\Windows\system32\wbem\wmiprvse.exe -secured -Embedding</CommandLine>

<ParentCommandLine condition="contains">C:\Windows\system32\SearchIndexer.exe /Embedding</ParentCommandLine>

最後に、プロセス作成セクションを閉じて、別のイベントタイプに進みます。

</ProcessCreate>

他の種類のイベントに対するフィルタの例を以下に示します。

<FileCreateTime onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<Image condition="end with">firefox.exe</Image>
<Image condition="end with">outlook.exe</Image>
<Image condition="end with">iexplore.exe</Image>
<Image condition="contains">C:\Windows\system32\msiexec.exe</Image>
<Image condition="contains">C:\Windows\syswow64\MsiExec.exe</Image>
</FileCreateTime>
<NetworkConnect onmatch="exclude">
<DestinationIp condition="contains">169.254</DestinationIp>
<DestinationIp condition="contains">255.255.</DestinationIp>
<DestinationIp condition="contains">239.255.</DestinationIp>
<DestinationIp condition="begin with">10.</DestinationIp>
<DestinationIp condition="contains">127.0.</DestinationIp>
<DestinationIp condition="contains">0:0:0</DestinationIp>
<!--<Image condition="end with">iexplore.exe</Image> -->
<!--<Image condition="end with">chrome.exe</Image> -->
<Image condition="end with">excel.exe</Image>
<Image condition="end with">winword.exe</Image>
<Image condition="end with">lms.exe</Image>
<Image condition="end with">onenote.exe</Image>
<Image condition="contains">C:\Program Files\Mozilla Firefox\firefox.exe"</Image>
<Image condition="contains">C:\Program Files\Mozilla Firefox\firefox.exe</Image>
<DestinationPortName condition="end with">dhcpv6-client</DestinationPortName>
<DestinationPortName condition="end with">epmap</DestinationPortName>
<DestinationPortName condition="end with">llmnr</DestinationPortName>
<DestinationPortName condition="end with">netbios-dgm</DestinationPortName>
<DestinationPortName condition="end with">netbios-ns</DestinationPortName>
<DestinationPortName condition="end with">netbios-ns</DestinationPortName>
<SourcePortName condition="end with">llmnr</SourcePortName>
<SourcePortName condition="end with">epmap</SourcePortName>
<SourcePortName condition="end with">ws-discovery</SourcePortName>
<SourcePortName condition="end with">ssdp</SourcePortName>
</NetworkConnect>

Sysmon 設定にフィルタを適用するには、”Sysmon -c c:\thepathtoyourconfig.xml” とタイプします。下の例をご覧ください。

Sysmon は使用している環境に合うように必要なだけ設定することができます。推奨される事前設定されたフィルタについては、GitHub で次のファイルをチェックしてください。

https://github.com/SwiftOnSecurity/Sysmon-config