Sysmon v15.15
作成者: Mark Russinovich および Thomas Garnier
公開日: 2024 年 7 月 23 日
Sysmon をダウンロード (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 アドレス、ポート番号、ホスト名、ポート名など、必要に応じてネットワーク接続をログに記録します。
- ファイルの作成時間の変更を検出して、ファイルが実際に作成された時点を把握します。 ファイル作成タイムスタンプの変更は、マルウェアがその証拠を隠すのに通常使用する手法です。
- レジストリで変更された場合、構成を自動的に再読み込みします。
- 特定のイベントを動的に包含または除外するためのルール フィルター処理。
- 巧妙なカーネル モード マルウェアによって行われたアクティビティをキャプチャするために、ブート プロセスの早い段階からイベントを生成します。
スクリーンショット
使用方法
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: プロセスが終了した
プロセス終了イベントは、プロセスが終了した時点を報告します。 プロセスの UtcTime
、ProcessGuid
、ProcessId
を提供します。
イベント ID 6: ドライバーが読み込まれた
ドライバー読み込みイベントは、システムに読み込まれているドライバーに関する情報を提供します。 構成されたハッシュが署名情報と共に提供されます。 署名はパフォーマンス上の理由から非同期的に作成され、読み込み後にファイルが削除されたかどうかを示します。
イベント ID 7: イメージが読み込まれた
イメージ読み込みイベントは、モジュールが特定のプロセスに読み込まれた時点をログに記録します。 このイベントは既定で無効になっており、"–l
" オプションを使用して構成する必要があります。 モジュールが読み込まれるプロセス、ハッシュ、署名情報を示します。 署名はパフォーマンス上の理由から非同期的に作成され、読み込み後にファイルが削除されたかどうかを示します。 すべてのイメージ読み込みイベントを監視すると大量のログが生成されるため、このイベントは慎重に構成する必要があります。
イベント ID 8: CreateRemoteThread
CreateRemoteThread
イベントは、プロセスが別のプロセスでスレッドを作成する時点を検出します。 この手法は、他のプロセスでコードを挿入して隠すためにマルウェアによって使用されます。 このイベントは、ソース プロセスとターゲット プロセスを示します。 新しいスレッドで実行されるコードに関する情報 StartAddress
、StartModule
および 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 (値セット)
このレジストリ イベントの種類は、レジストリ値の変更を識別します。 このイベントは、種類 DWORD
と QWORD
のレジストリ値に対して書き込まれた値を記録します。
イベント 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.exe は c:\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.exe
が 100
のコマンド ライン引数でのみ実行されると、プロセス作成イベントが生成されますが、ping.exe
と timeout.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>
Sysmon をダウンロード (4.6 MB)
実行場所:
- クライアント: Windows 10以降。
- サーバー: Windows Server 2016 以降。