web-dev-qa-db-ja.com

Windowsレジストリへのプログラムのアクセスを制限する

特定のプログラムがWindowsレジストリにアクセスするのを防ぐことはできますか?ユーザーをロックアウトするACLがあることは知っていますが、実行可能ファイルごとの制御についてはどうでしょうか。

2

申し訳ありませんが、少なくともあなたが望む範囲では、それは不可能です。 コメントに記載 Ƭᴇcʜιᴇ007によると、Windowsのアクセス制御はすべてユーザーに基づいています。すべてのプロセスには、実行中のユーザーを決定するトークンが添付されています。アクションを実行する場合と、そのアクションを実行するアカウントで実行されているプログラムとの間に違いはありません。文字通り、すべてを1つのプロセスまたは別のプロセスで実行するからです。 「プログラムはユーザーを攻撃しません。usersはユーザーを攻撃します。」

さらに、事実上すべてのプロセスがレジストリにアクセスします。プログラム自体がレジストリへのアクセスを明示的に行わない場合でも、 Process Monitor を使用して調べると、すべてのGUIアプリが、グラフィカルコントロールの設定方法を理解するためのレジストリ読み取りのボートロードで開始することがわかります。レジストリを必要としないと思われるアプリでProcessMonitorを実行します。あなたは驚かれることでしょう。

ただし、すべての書き込みをブロックし、書き込みのみをブロックする場合は、実際に役立つことがあります。 Windowsには、UACの一部である「整合性レベル」の概念があります。基本的に、特定の整合性レベルで実行されているプログラムは、より高い整合性レベルでラベル付けされたオブジェクトに書き込むことができません。通常のプロセスと通常のファイル(およびレジストリキー)の整合性レベルは中程度ですが、プロセスを手動で低レベルで起動できます。 PsExec ツールをダウンロードします。通常の場所に書き込めないコマンドプロンプトを作成する場合は、次のコマンドを実行します。

psexec -l -i cmd

-lスイッチは低整合性を設定します。 -iスイッチは、プロセスをインタラクティブにします。結果のコマンドプロンプトは、特に整合性が低いとマークされた場所にのみ書き込むことができます。

C:\Users\Ben>reg add HKCU\Test
ERROR: Access is denied.

このコマンドは通常のコマンドプロンプトで機能しますが、この種のロックダウンされたコマンドでは機能しません。

3
Ben N

別の解決策は、 Sandboxie を使用することです。このプログラムはサンドボックス内の任意のプロセスを実行できるため、そのプロセスによって行われたシステムへの変更はすべて元に戻すことができます。

1