ファイル改ざん検知の仕組み
Windowsのファイルシステム変更通知の仕組みと、EDRツールがそれをどう使って改ざんに気づくのかを解説します。
ファイルの変更に「気づく」ための2つのアプローチ
重要なファイルが勝手に書き換えられたり削除されたりしたことに気づく方法は、大きく2つあります。
- 定期的な比較(ポーリング): 一定間隔でファイルのハッシュ値やタイムスタンプを記録しておき、前回との差分を比較する方式。実装は簡単ですが、変更から検知までにタイムラグが生じ、間隔を短くするほどCPU負荷が増えます。
- イベント通知(リアルタイム監視): OSが提供する「ファイルが変更されたら教えてくれる」仕組みを使い、変更が起きた瞬間に検知する方式。タイムラグがほぼなく、CPU負荷も低く抑えられます。
シールドガードEDRは後者、リアルタイム監視の方式を採用しています。
Windowsの仕組み: ReadDirectoryChangesW
Windowsには、指定したディレクトリ配下のファイル作成・変更・削除・名前変更をOSレベルで通知してくれる
ReadDirectoryChangesWというAPIがあります。アプリケーションはこのAPIを呼び出して
「このフォルダの変更を教えてください」と登録しておくだけで、実際に変更が起きた際にOSから
イベントが通知される仕組みです。
この方式の利点は、アプリケーション側がファイルを繰り返しチェックしに行く必要がない点です。 変更が起きない限りCPUをほとんど使わず、変更が起きた瞬間にほぼ遅延なく検知できます。
「検知」と「防御」は別の話
ここで重要なのは、ReadDirectoryChangesWのようなAPIは「変更が起きたことを知る」ための仕組みであり、 「変更そのものを止める」仕組みではないという点です。改ざんが起きるのを未然にブロックするには、 ファイルシステムドライバレベルでの介入(ミニフィルタドライバなど、署名済みカーネルドライバが必要) が必要になります。
シールドガードEDRはあえてこの「防御」領域には踏み込まず、検知・警告に特化しています。 改ざん検知の仕組み自体(ウォッチドッグによるエージェント停止の検知を含む)も、 攻撃者による強制終了を完全に防ぐものではなく、ベストエフォートである点を明記しています。
実運用での考え方
ファイル改ざん検知は「防御の最後の砦」ではなく、「何かがあったときに、それに早く気づくための仕組み」 と捉えるのが実用的です。重要なファイルについては、改ざん検知に加えて、世代管理されたバックアップを 別途用意しておくことで、実際に改ざん・暗号化された場合にも復旧できる体制を整えることをおすすめします。