ファイル操作を監視し、場合によってはフィルター処理 (呼び出しを拒否) するアプリケーションを開発する必要があります。
ミニフィルターの開発が「標準」ソリューションのようです。別の潜在的な方法は、API フックを使用することです。
これらは関連するソリューションですか?(いくつかの場所で、API フックが適切でない可能性があることを読みましたが、説明はありませんでした)
他のオプションはありますか?
ファイル操作を監視し、場合によってはフィルター処理 (呼び出しを拒否) するアプリケーションを開発する必要があります。
ミニフィルターの開発が「標準」ソリューションのようです。別の潜在的な方法は、API フックを使用することです。
これらは関連するソリューションですか?(いくつかの場所で、API フックが適切でない可能性があることを読みましたが、説明はありませんでした)
他のオプションはありますか?
API フック (少なくともカーネル スペース内) は、Microsoft によって基本的にサポートされていません。x64 (Vista 以降) では、システムの重要なコンポーネントで SSDT フックまたは何らかの変更が検出された場合、patchguard は通常、マシンを強制終了します。Windows が使用する同期プリミティブがエクスポートされないため、API フックをシステム全体のレベルで取得するのは非常に困難です。そのため、コードをフックできたとしても、EIP のファンキーな値が原因でマシンがクラッシュしないという保証はありません。特定の時点で (これは、関数をフックしたドライバーをアンロードする場合に特に有効です)。
おそらく、ミニフィルタードライバーを使用せずにそれを行うための最善の策は、メモリカーネルオブジェクトのフックを試みて指示することです。すべてのオブジェクト ウィンドウ (FILE、EVENT、PORT など - Google でそれらを確認) がメンバーとして持つOBJECT_TYPE_INITIALIZER定義構造を見たいと思うかもしれません。*Procedure 関数ポインタに特に関心があります。
セキュリティの観点から特定のリソース (ファイル) へのユーザー アクセスを防止している場合、正しい方法はミニフィルターです。これは、フィルター処理されたリソースにユーザーがアクセスできないことを確認する唯一の方法であるためです。
API フックを使用すると、kernel32.dll (CreateFileW、FindFirstFile など) での呼び出しを傍受できますが、攻撃者はネイティブ API (ntdll.dl) を使用できます。もちろん、ネイティブ レベルでインターセプトすることはできますが (文書化されていないため、より困難です)、攻撃者はカーネル スイッチ レベルでさまざまな API を使用できます。そのレベルでは、フックに移植できません。創造的な攻撃者が API フックを使用してリソースにアクセスするのを防ぐことはほとんど不可能であるため、セキュリティ ソフトウェアには推奨されません。
私の意見では、API フックは監視に適したオプションです。アプリケーションが何をしているかを確認したい場合は、API フックを使用すると、カーネル モードよりも高レベルの機能をインターセプトできるため、非常に有効です。
それはすべて、あなたが何をしたい/何を達成する必要があるかにかかっています。
ファイル操作 (カーネル レベルでのファイル オープン/ファイル クローズ) だけが必要で、ミニフィルターよりもシステム全体で必要な場合。これは長くて退屈で時間のかかる道ですが、より安全です (Sysinternals procmon をチェックして、この方法で得られるものを確認してください)。
よりアプリケーション固有の制御が必要な場合、または WINAPI レベルを制御したい場合は、API フックを使用してください。開発は簡単ですが、途中で顔を爆破する「鉱山」がたくさんあります(EasyHookをチェックしてください。最小限の作業でかなり良い仕事をしています).
幸運を!
フックなしでタスクを達成できる場合は、それを実行してください。フックは、アプリケーションの開発方法としてサポートされていないためです。多くの落とし穴があり、ウイルス対策ソフトウェアはアプリケーションをより危険なものとして扱います。また、新しい/古いバージョンのオペレーティング システムで問題が発生する場合があります。
ただし、ユーザー モード コードはカーネル モードよりもはるかに簡単であることを考慮してください。したがって、ユーザーモードのフックが要件を満たすことができる場合は、それらについて考えることができます。
メールでフォローアップの質問があったので、使用した解決策をここに追加します
プロジェクトはライブになる前にキャンセルされましたが、ユーザー空間コードを使用してカーネル フィルターを記述できる製品 ( Eldos CallbackFilter ) を評価しました。
製品には、フィルタリング ロジックを定義するユーザー空間コードと通信する汎用カーネル ドライバーがあります。