Sysmon v15.14

作成者: Mark Russinovich および Thomas Garnier

公開日: 2024 年 2 月 13 日

DownloadSysmon をダウンロード(4.6 MB)

Sysmon for Linux (GitHub) をダウンロード

はじめに

システム モニター (Sysmon) は、Windows システム サービスであり、システムにインストールされた後はシステムが再起動しても常駐してシステム アクティビティの監視と Windows イベント ログへの記録を行うデバイス ドライバーです。 プロセスの作成、ネットワーク接続、ファイル作成日時の変更に関する詳細情報を提供します。 Windows イベント コレクションまたは SIEM エージェントを使用して生成されたイベントを収集してから、それらを分析することで、悪意のある、または異常なアクティビティを特定し、侵入者とマルウェアがネットワーク上でどのように動作するかを理解できます。 サービスは保護されたプロセスとして実行されるため、ユーザー モードでのさまざまな対話が禁止されます。

Sysmon は、生成するイベントの分析を提供せず、また攻撃者に対してそれ自体を隠そうともしないことに注意してください。

Sysmon 機能の概要

Sysmon には、次の機能があります。

  • 現在のプロセスと親プロセスの両方のコマンド ライン全体を使用して、プロセスの作成をログに記録します。
  • SHA1 (既定値)、MD5、SHA256、IMPHASH を使用してプロセス イメージ ファイルのハッシュを記録します。
  • 複数のハッシュを同時に使用できます。
  • Windows でプロセス ID を再利用する場合でもイベントの関連付けを可能にするために、プロセス作成イベントにプロセス GUID が含まれます。
  • 同じログオン セッションでのイベントの関連付けを可能にするために、各イベントにセッション GUID が含まれます。
  • 署名とハッシュと一緒にドライバーまたは DLL の読み込みをログに記録します。
  • ディスクとボリュームの raw 読み取りアクセス用のオープンをログに記録します。
  • 各接続のソース プロセス、IP アドレス、ポート番号、ホスト名、ポート名など、必要に応じてネットワーク接続をログに記録します。
  • ファイルの作成時間の変更を検出して、ファイルが実際に作成された時点を把握します。 ファイル作成タイムスタンプの変更は、マルウェアがその証拠を隠すのに通常使用する手法です。
  • レジストリで変更された場合、構成を自動的に再読み込みします。
  • 特定のイベントを動的に包含または除外するためのルール フィルター処理。
  • 巧妙なカーネル モード マルウェアによって行われたアクティビティをキャプチャするために、ブート プロセスの早い段階からイベントを生成します。

スクリーンショット

EventViewer

使用法

Sysmon のインストールとアンインストールと共に構成のチェックと変更を行う簡単なコマンド ライン オプションを特徴とする一般的な使用法:

インストール: sysmon64 -i [<configfile>]
構成の更新: sysmon64 -c [<configfile>]
イベント マニフェストのインストール: sysmon64 -m
スキーマの出力: sysmon64 -s
アンインストール: sysmon64 -u [force]

パラメーター 説明
-i サービスとドライバーをインストールします。 必要に応じて、構成ファイルを取得します。
-c インストールされている Sysmon ドライバーの構成を更新するか、他の引数が指定されていない場合は現在の構成をダンプします。 必要に応じて、構成ファイルを取得します。
-m イベント マニフェストをインストールします (サービスのインストールでも暗黙的に行われます)。
-s 構成スキーマ定義を出力します。
-u サービスとドライバーをアンインストールします。 -u force を使用すると、一部のコンポーネントがインストールされていない場合でもアンインストールが続行します。

サービスはイベントを直ちにログに記録し、起動時にサービスがイベント ログに書き込むアクティビティを起動の早期からキャプチャするブート開始ドライバーとしてドライバーがインストールされます。

Vista 以降では、イベントは Applications and Services Logs/Microsoft/Windows/Sysmon/Operational に格納されます。 それより古いシステムでは、イベントは System イベント ログに書き込まれます。

構成ファイルの詳細が必要な場合は、-? config コマンドを使用します。

インストール時に EULA を自動的に受け入れるには -accepteula を指定します。それ以外の場合は、受け入れるように対話形式で求められます。

インストールにもアンインストールにも再起動は必要ありません。

既定の設定でインストールします (SHA1 でハッシュされたイメージを処理し、ネットワーク監視なし)

sysmon -accepteula -i

構成ファイルを使用して Sysmon をインストールします (以下で説明します)

sysmon -accepteula -i c:\windows\config.xml

アンインストール

sysmon -u

現在の構成をダンプします

sysmon -c

構成ファイルを使用してアクティブな Sysmon を再構成します (以下で説明します)

sysmon -c c:\windows\config.xml

構成を既定の設定に変更します

sysmon -c --

構成スキーマを表示します

sysmon -s

イベント

Vista 以降では、イベントは Applications and Services Logs/Microsoft/Windows/Sysmon/Operational に格納され、それより古いシステムでは、イベントは System イベント ログに書き込まれます。 イベントのタイムスタンプは UTC 標準時です。

Sysmon で生成される各イベントの種類の例を次に示します。

イベント ID 1: プロセスの作成

プロセス作成イベントでは、新しく作成されたプロセスに関する拡張情報を提供します。 コマンド ライン全体が、プロセスの実行に関するコンテキストを提供します。 ProcessGUID フィールドは、イベントの関連付けを容易にするためにドメイン全体でこのプロセスの一意の値です。 ハッシュは、HashType フィールド内のアルゴリズムを含むファイルの完全なハッシュです。

イベント ID 2: プロセスによってファイルの作成時間が変更された

ファイル作成時間の変更イベントは、ファイル作成時間がプロセスによって明示的に変更されたときに登録されます。 このイベントは、ファイルの実際の作成時間を追跡するのに役立ちます。 攻撃者は、バックドアのファイル作成時間を変更して、オペレーティング システムと一緒にインストールされたように見せかける可能性があります。 多くのプロセスではファイルの作成時間が正当な手段で変更され、必ずしも悪意のあるアクティビティを示しているわけではないことに注意してください。

イベント ID 3: ネットワーク接続

ネットワーク接続イベントでは、マシン上の TCP/UDP 接続がログに記録されます。 この機能は既定で無効になっています。 各接続は、ProcessId フィールドと ProcessGuid フィールドを介してプロセスにリンクされます。 また、このイベントには、送信元と宛先のホスト名、IP アドレス、ポート番号、IPv6 の状態も含まれます。

イベント ID 4: Sysmon サービスの状態が変更された

サービス状態変更イベントは、Sysmon サービスの状態 (開始または停止) を報告します。

イベント ID 5: プロセスが終了した

プロセス終了イベントは、プロセスが終了した時点を報告します。 プロセスの UtcTimeProcessGuidProcessId を提供します。

イベント ID 6: ドライバーが読み込まれた

ドライバー読み込みイベントは、システムに読み込まれているドライバーに関する情報を提供します。 構成されたハッシュが署名情報と共に提供されます。 署名はパフォーマンス上の理由から非同期的に作成され、読み込み後にファイルが削除されたかどうかを示します。

イベント ID 7: イメージが読み込まれた

イメージ読み込みイベントは、モジュールが特定のプロセスに読み込まれた時点をログに記録します。 このイベントは既定で無効になっており、"–l" オプションを使用して構成する必要があります。 モジュールが読み込まれるプロセス、ハッシュ、署名情報を示します。 署名はパフォーマンス上の理由から非同期的に作成され、読み込み後にファイルが削除されたかどうかを示します。 すべてのイメージ読み込みイベントを監視すると大量のログが生成されるため、このイベントは慎重に構成する必要があります。

イベント ID 8: CreateRemoteThread

CreateRemoteThread イベントは、プロセスが別のプロセスでスレッドを作成する時点を検出します。 この手法は、他のプロセスでコードを挿入して隠すためにマルウェアによって使用されます。 このイベントは、ソース プロセスとターゲット プロセスを示します。 新しいスレッドで実行されるコードに関する情報 StartAddressStartModule および StartFunction を提供します。 StartModule および StartFunction フィールドは推論され、開始アドレスが読み込まれたモジュールまたは既知のエクスポートされた関数の外部にある場合は空であることに注意してください。

イベント ID 9: RawAccessRead

RawAccessRead イベントは、プロセスが \\.\ 記号を使用してドライブからの読み取り操作を行う時点を検出します。 この手法は、多くの場合、読み取り用にロックされているファイルのデータ抜き取りや、ファイル アクセス監査ツールを回避するためにマルウェアによって使用されます。 このイベントは、ソース プロセスとターゲット デバイスを示します。

イベント ID 10: ProcessAccess

プロセス アクセス イベントは、プロセスが別のプロセスを開いた時点、多くの場合は情報のクエリが続く操作、またはターゲット プロセスのアドレス空間の読み取りと書き込みを報告します。 これにより、パスザハッシュ攻撃で使用する資格情報を盗むために、ローカル セキュリティ機関 (Lsass.exe) などのプロセスのメモリの内容を読み取るハッキング ツールを検出できます。 これを有効にすると、状態を照会するためにプロセスを繰り返し開くアクティブな診断ユーティリティがある場合、大量のログが生成される可能性があるため、通常は、期待されるアクセスを削除するフィルターでのみ実行する必要があります。

イベント ID 11: FileCreate

ファイルの作成操作は、ファイルの作成または上書き時にログに記録されます。 このイベントは、スタートアップ フォルダーなどの自動起動の場所や、初期感染時にマルウェアがドロップする一般的な場所である一時ディレクトリとダウンロード ディレクトリの監視に役立ちます。

イベント ID 12: RegistryEvent (オブジェクトの作成と削除)

レジストリ キーと値の作成操作と削除操作は、このイベントの種類にマップされます。これは、レジストリの自動開始の場所への変更や特定のマルウェア レジストリの変更を監視するのに役立ちます。

Sysmon では、短縮バージョンのレジストリ ルート キー名が次のマッピングで使用されます。

キー名 省略形
HKEY_LOCAL_MACHINE HKLM
HKEY_USERS HKU
HKEY_LOCAL_MACHINE\System\ControlSet00x HKLM\System\CurrentControlSet
HKEY_LOCAL_MACHINE\Classes HKCR

イベント ID 13: RegistryEvent (値セット)

このレジストリ イベントの種類は、レジストリ値の変更を識別します。 このイベントは、種類 DWORDQWORD のレジストリ値に対して書き込まれた値を記録します。

イベント ID 14: RegistryEvent (キーと値の名前変更)

レジストリ キーと値の名前変更操作は、このイベントの種類にマップされ、名前が変更されたキーまたは値の新しい名前を記録します。

イベント ID 15: FileCreateStreamHash

このイベントは、名前付きファイル ストリームが作成される時点をログに記録し、ストリームが割り当てられているファイルの内容 (名前のないストリーム) のハッシュと、名前付きストリームの内容をログに記録するイベントを生成します。 ブラウザーのダウンロードを介して実行可能ファイルまたは構成設定を削除する別の種類のマルウェアがあり、このイベントは、Zone.Identifier "mark of the web" ストリームをアタッチするブラウザーに基づいてこれをキャプチャすることを目的としています。

イベント ID 16: ServiceConfigurationChange

このイベントは、フィルター処理ルールが更新された時点など、Sysmon 構成の変更をログに記録します。

イベント ID 17: PipeEvent (パイプが作成された)

このイベントは、名前付きパイプが作成されたときに生成されます。 マルウェアは、多くの場合、プロセス間通信に名前付きパイプを使用します。

イベント ID 18: PipeEvent (パイプが接続された)

このイベントは、クライアントとサーバーの間で名前付きパイプ接続が確立された時点をログに記録します。

イベント ID 19: WmiEvent (WmiEventFilter アクティビティが検出された)

WMI イベント フィルター (マルウェアが実行するために使用するメソッド) が登録されている場合、このイベントは WMI 名前空間、フィルター名、フィルター式をログに記録します。

イベント ID 20: WmiEvent (WmiEventConsumer アクティビティが検出された)

このイベントは、WMI コンシューマーの登録をログに記録し、コンシューマー名、ログ、宛先を記録します。

イベント ID 21: WmiEvent (WmiEventConsumerToFilter アクティビティが検出された)

コンシューマーがフィルターにバインドされると、このイベントによってコンシューマー名とフィルター パスがログに記録されます。

イベント ID 22: DNSEvent (DNS クエリ)

このイベントは、結果が成功したか失敗したか、キャッシュされているかどうかに関係なく、プロセスが DNS クエリを実行するときに生成されます。 このイベントのテレメトリは Windows 8.1 用に追加されたため、Windows 7 以前では使用できません。

イベント ID 23: FileDelete (アーカイブされたファイルの削除)

ファイルが削除されました。 イベントのログ記録に加えて、削除されたファイルが ArchiveDirectory (既定では C:\Sysmon) に保存されます。 通常の動作状態では、このディレクトリは不合理なサイズに拡大する可能性があります。同様の動作についてはイベント ID 26: FileDeleteDetected を参照してください。ただし、削除されたファイルは保存されません。

イベント ID 24: ClipboardChange (クリップボード内の新しいコンテンツ)

このイベントは、システム クリップボードの内容が変更されたときに生成されます。

イベント ID 25: ProcessTampering (プロセス イメージの変更)

このイベントは、"hollow" や "herpaderp" などのプロセス非表示手法が検出されたときに生成されます。

イベント ID 26: FileDeleteDetected (ログに記録されたファイルの削除)

ファイルが削除されました。

イベント ID 27: FileBlockExecutable

このイベントは、Sysmon が実行可能ファイル (PE 形式) の作成を検出してブロックするときに生成されます。

イベント ID 28: FileBlockShredding

このイベントは、Sysmon が SDelete などのツールからのファイルのシュレッディングを検出してブロックするときに生成されます。

イベント ID 29: FileExecutableDetected

このイベントは、Sysmon が新しい実行可能ファイル (PE 形式) の作成を検出したときに生成されます。

イベント ID 255: エラー

このイベントは、Sysmon 内でエラーが発生したときに生成されます。 システムの負荷が高く、特定のタスクを実行できなかった場合、または Sysmon サービスにバグが存在する場合、または特定のセキュリティと整合性の条件が満たされていない場合でも発生する可能性があります。 Sysinternals フォーラムまたは Twitter (@markrussinovich) でバグを報告できます。

構成ファイル

構成ファイルは、-i (インストール) または -c (インストール) 構成スイッチの後に指定できます。 事前設定された構成をデプロイし、キャプチャされたイベントをフィルター処理するのが容易になります。

単純な構成 xml ファイルは次のようになります。

<Sysmon schemaversion="4.82">
  <!-- Capture all hashes -->
  <HashAlgorithms>*</HashAlgorithms>
  <EventFiltering>
    <!-- Log all drivers except if the signature -->
    <!-- contains Microsoft or Windows -->
    <DriverLoad onmatch="exclude">
      <Signature condition="contains">microsoft</Signature>
      <Signature condition="contains">windows</Signature>
    </DriverLoad>
    <!-- Do not log process termination -->
    <ProcessTerminate onmatch="include" />
    <!-- Log network connection if the destination port equal 443 -->
    <!-- or 80, and process isn't InternetExplorer -->
    <NetworkConnect onmatch="include">
      <DestinationPort>443</DestinationPort>
      <DestinationPort>80</DestinationPort>
    </NetworkConnect>
    <NetworkConnect onmatch="exclude">
      <Image condition="end with">iexplore.exe</Image>
    </NetworkConnect>
  </EventFiltering>
</Sysmon>

構成ファイルには、Sysmon タグの schemaversion 属性が含まれています。 このバージョンは Sysmon バイナリ バージョンとは無関係であり、古い構成ファイルの解析が可能になります。 "-? config" コマンド ラインを使用して、現在のスキーマ バージョンを取得できます。 構成エントリは Sysmon タグのすぐ下にあり、フィルターは EventFiltering タグの下にあります。

構成エントリ

構成エントリはコマンド ライン スイッチに似ており、次のものが含まれます

構成エントリには、次のものが含まれます。

入力 Value 説明
ArchiveDirectory String copy-on-delete ファイルが移動される先のボリューム ルートにあるディレクトリの名前。 このディレクトリはシステム ACL で保護されています (Sysinternals の PsExec を使用して、psexec -sid cmd を使用してディレクトリにアクセスできます)。 既定値: Sysmon
CheckRevocation ブール型 署名失効チェックを制御します。 既定値: True
CopyOnDeletePE ブール型 削除された実行可能イメージ ファイルを保持します。 既定値: False
CopyOnDeleteSIDs 文字列 ファイルの削除が保持されるアカウント SID のコンマ区切りリスト。
CopyOnDeleteExtensions 文字列 削除時に保持されるファイルの拡張子。
CopyOnDeleteProcesses 文字列 ファイルの削除が保持されるプロセス名。
DnsLookup ブール型 逆引き DNS 参照を制御します。 既定値: True
DriverName String ドライバーとサービス イメージに指定された名前を使用します。
HashAlgorithms 文字列 ハッシュに適用するハッシュ アルゴリズム。 サポートされるアルゴリズムには、MD5、SHA1、SHA256、IMPHASH、* (すべて) があります。 既定値: None

コマンド ライン スイッチの構成エントリは、Sysmon 使用法の出力で説明されています。 パラメーターは、タグに基づいて省略可能です。 コマンド ライン スイッチによりイベントも有効にする場合、フィルター タグを使用して構成する必要があります。 -s スイッチを指定して、イベント タグや各イベントのフィールド名と種類を含む、構成スキーマ全体を Sysmon に出力させることができます。 たとえば、RawAccessRead イベントの種類のスキーマは次のとおりです。

<event name="SYSMON_RAWACCESS_READ" value="9" level="Informational "template="RawAccessRead detected" rulename="RawAccessRead" version="2">  
  <data name="UtcTime" inType="win:UnicodeString" outType="xs:string"/>  
  <data name="ProcessGuid" inType="win:GUID"/>  
  <data name="ProcessId" inType="win:UInt32" outType="win:PID"/>  
  <data name="Image" inType="win:UnicodeString" outType="xs:string"/>  
  <data name="Device" inType="win:UnicodeString" outType="xs:string"/>  
</event>  

イベント フィルター エントリ

イベント フィルターを使用すると、生成されたイベントをフィルターに掛けることができます。 多くの場合、イベントはノイズが多く、すべてを収集することはできません。 たとえば、特定のプロセスに対するネットワーク接続のみに関心があるが、すべてに関心があるわけではない場合があります。 ホスト上の出力をフィルター処理して、収集するデータを減らすことができます。

各イベントには、構成ファイルの EventFiltering ノードの下に独自のフィルター タグがあります。

ID Tag Event
1 ProcessCreate プロセスの作成
2 FileCreateTime ファイル作成時間
3 NetworkConnect ネットワーク接続が検出されました
4 該当なし Sysmon サービスの状態の変更 (フィルター処理できません)
5 ProcessTerminate プロセスが終了しました
6 DriverLoad ドライバーが読み込まれました
7 ImageLoad イメージが読み込まれました
8 CreateRemoteThread CreateRemoteThread が検出されました
9 RawAccessRead RawAccessRead が検出されました
10 ProcessAccess プロセスがアクセスされました
11 FileCreate ファイルが作成されました
12 RegistryEvent レジストリ オブジェクトが追加または削除されました
13 RegistryEvent レジストリ値が設定されました
14 RegistryEvent レジストリ オブジェクトの名前が変更されました
15 FileCreateStreamHash ファイル ストリームが作成されました
16 該当なし Sysmon 構成の変更 (フィルター処理できません)
17 PipeEvent 名前付きパイプが作成されました
18 PipeEvent 名前付きパイプが接続されました
19 WmiEvent WMI フィルター
20 WmiEvent WMI コンシューマー
21 WmiEvent WMI コンシューマー フィルター
22 DNSQuery DNS クエリ
23 FileDelete ファイルの削除がアーカイブされました
24 ClipboardChange クリップボード内の新しいコンテンツ
25 ProcessTampering プロセス イメージの変更
26 FileDeleteDetected ファイルの削除がログに記録されました
27 FileBlockExecutable ファイル ブロック実行可能ファイル
28 FileBlockShredding ファイル ブロックのシュレッディング
29 FileExecutableDetected ファイル実行可能ファイルが検出されました

これらのタグは、タスク名のイベント ビューアーでも確認できます。

イベントが一致する場合、onmatch フィルターが適用されます。 フィルター タグの onmatch 属性を使用して変更できます。 値が "include" の場合は、一致したイベントのみが含まれることを意味します。 "exclude" に設定される場合、ルールが一致する場合を除き、イベントが含まれます。 イベント ID ごとに include フィルター セットと exclude フィルター セットの両方を指定できます。この場合、exclude の一致が優先されます。

各フィルターには、0 個以上のルールを含めることができます。 フィルター タグの下にある各タグは、イベントのフィールド名です。 同じフィールド名の条件を指定するルールは OR 条件として動作し、異なるフィールド名を指定するルールは AND 条件として動作します。 フィールド ルールも、条件を使用して値を照合できます。 条件は次のとおりです (すべて大文字と小文字は区別されません)。

Condition 説明
is 既定値。値は等しい
is any このフィールドは、; で区切られた値のいずれかです
is not 値が異なります
contains フィールドにこの値が含まれます
contains any フィールドには、; で区切られた値のいずれかが含まれます
contains all フィールドには、; で区切られた値のすべてが含まれます
excludes フィールドにこの値は含まれません
excludes any フィールドに、; で区切られた値が 1 つ以上含まれません
excludes all フィールドに、; で区切られた値が含まれません
begin with フィールドは、この値で始まります
end with フィールドは、この値で終わります
not begin with フィールドの先頭はこの値ではありません
not end with フィールドの末尾はこの値ではありません
less than 辞書順比較が 0 未満です
more than 辞書順比較が 0 より大きい
image イメージ パス (完全パスまたはイメージ名のみ) と一致します。 たとえば、lsass.exec:\windows\system32\lsass.exe と一致します

属性として指定することで、別の条件を使用できます。 これにより、パスに iexplore.exe があるプロセスからネットワーク アクティビティが除外されます。

<NetworkConnect onmatch="exclude">
  <Image condition="contains">iexplore.exe</Image>
</NetworkConnect>

イベントがログに記録されたルールの一致を Sysmon が報告するようにするには、ルールに名前を追加します。

<NetworkConnect onmatch="exclude">
  <Image name="network iexplore" condition="contains">iexplore.exe</Image>
</NetworkConnect>

同じタグに対して包含ルールと除外ルールの両方を使用できます。この場合、除外ルールが包含ルールより優先されます。 ルール内では、フィルター条件に OR 動作があります。

前に示した構成例では、ネットワーク フィルターは包含ルールと除外ルールの両方を使用して、名前に iexplore.exe があるプロセスを除くすべてのプロセスによってポート 80 と 443 へのアクティビティをキャプチャします。

ルール グループを使用してルールを結合する方法をオーバーライドすることもできます。これにより、1 つ以上のイベントのルール結合の種類を AND または OR に明示的に設定できます。

次の例は、この使用方法を示しています。 最初のルール グループでは、timeout.exe100 のコマンド ライン引数でのみ実行されると、プロセス作成イベントが生成されますが、ping.exetimeout.exe の終了に対してプロセス終了イベントが生成されます。

  <EventFiltering>
    <RuleGroup name="group 1" groupRelation="and">
      <ProcessCreate onmatch="include">
        <Image condition="contains">timeout.exe</Image>
        <CommandLine condition="contains">100</CommandLine>
      </ProcessCreate>
    </RuleGroup>
    <RuleGroup groupRelation="or">
      <ProcessTerminate onmatch="include">
        <Image condition="contains">timeout.exe</Image>
        <Image condition="contains">ping.exe</Image>
      </ProcessTerminate>        
    </RuleGroup>
    <ImageLoad onmatch="include"/>
  </EventFiltering>

DownloadSysmon をダウンロード(4.6 MB)

実行場所:

  • クライアント: Windows 10以降。
  • サーバー: Windows Server 2016 以降。