ファイルおよびレジストリ仮想化
Windows XP は非常に高い人気を誇るオペレーティングシステムで、今なお、
何百万ものユーザーに愛用されています。 しかしながら、今日の’ 要求の多い環境に対応できるようには
考案されておらず、本来、ユーザーを最新のセキュリティ上の問題から完全保護することができません。
2007年にWindows Vista が登場すると、
Microsoft は、Windows XP の代用のセキュリティ機能の徹底的な改良に
取り掛かりました。
主な問題点の1つは、
Windows XP でアプリケーションを起動する際、アプリケーションに対して、
" システムファイル" および "レジストリキー" 、
とりわけソフトウェアハイブ(KLM\ソフトウェア)のキーを自由に読み書きする許可が付与されていたことです。 こうしたことは、セキュリティの悪夢と
言うべきことです。
Windows Vista (および後のWindows 7)の登場により、
ソフトウェア開発者たちは、オペレーティングシステムにおいて、読み書きのできる厳格なガイドラインに縛られた
アプリケーションに読み書きする必要に迫られるようになりました。
このことは新しいアプリケーションにとって申し分のないことですが、新たなセキュリティ変化と
特異的に書き込めなかったレガシーアプリケーション… ソフトウェアについては
どうでしょうか?
もしソフトウェア ハイブ(HKLM\ソフトウェア)にあるいずれかのレジストリキーに書き込みをしたら、アプリケーションが起動されずに、
停止あるいはPC がクラッシュしてしまう恐れがあります。
こうした
旧バージョンとの互換性問題を念頭に入れ、 Microsoft は、システムファイルやレジストリキーなどの
重要な保管場所の "仮想化" という概念を導入しました。
この " ファイルおよびレジストリの仮想化" は、
Windows Vista やWindows 7 におけるUAC (ユーザーアクセス コントロール)メカニズムに関して書かれたことの一部です。
さて、レガシーアプリケーションが制限された
ソフトウェア ハイブ(HKLM\ソフトウェア)に書き込みを行おうとします。 レジストリ仮想化は、キーやデータを
HKCU\Software\Classes\VirtualStore サブキーにリダイレクトします。
Windows Vista およびWindows 7 が
C:\Program Files や
C:\Windir\system32 といった保護されたシステム場所にデータを書き込ませようとどこにリダイレクトするのでしょうか。 既定では、アプリケーションは、
ユーザーのプロファイル内に保管されている特別フォルダーにリダイレクトされます。 既定での場所::
C:\Users\User_name\AppData\Local\VirtualStore\Program Files\Application_name
Windows Vista およびWindows 7 のあらゆるビジネス版で利用可能なグループポリシー エディタ コンソール(Gpedit.msc)にある
ローカルセキュリティポリシー経由で、"ファイル仮想化およびプリユーザーの場所に対するレジストリ書き込みエラー" と呼ばれる設定を
消すことは可能です。
しかしながら、このことは
Microsoft にて推奨されていません。 注記: コントロールパネルにある
UAC 設定経由ではこの設定にアクセスできません。
AccessChk
AccessChk は、自由にダウンロードすることのできるWindows XP、Vista および7 のコマンドライン
ユーティリティです。 Windows 環境におけるトラブルシューティング用の数多くのMicrosoft のWindows SysInternals ユーティリティの
一部です。
accesschk.exe
ユーティリティには、数多くの機能があり、フォルダーやファイルアクセスの確認だけでなく、
プロセス、サービス、レジストリキーおよびOS コンポーネントへのアクセスも可能です。
こちらからダウンロードできます:
http://technet.microsoft.com/en-us/sysinternals/bb664922.aspx
PC 上の主要なプログラムファイル フォルダー内にアクセスと呼ばれる新規フォルダーを作成してから、
ユーティリティ accesschk.exe および
EULA.txt ファイルを新規フォルダーに解凍します。
注記:
Windows Vista/Windows 7 上では、管理者としてCMD を起動する必要があります。
コマンドライン ウィンドウを開き、以下のコマンドに入力します:
cd %programfiles%\accesschk
これで、自由に
利用し始めることができます。 accesschk.exe /? と入力すると、このユーティリティに利用可能なすべての
スイッチや構文を入手することができます。
例えば、レジストリキー上の(読み込みや書き込みなどの)セキュリティ、仮に
HKLM\software と呼ぶものを確認するには、次のように入力します:
accesschk -k hklm\software
テキストファイルにダンプされた詳細をノートパッドに読ませたい場合の
入力:
accesschk -k hklm\software > filedump
ファイルダンプと呼ばれるファイルが
PC のaccesschk フォルダー内に作成されました。
ローカルレジストリ アクセス防止
レジストリに関連するよくある質問: "ローカルレジストリへの
アクセス防止方法とは?"
明快な回答:不可能。
各ユーザー’ のプロファイルは、様々な段階でレジストリへのアクセスを要求するため、
アクセスを防止することは不可能です。 しかしながら、レジストリエディタへのユーザーアクセスを
制限して、
ハイブ/キーの直接編集が起きないようにすることができます。
しかし、
"レジストリ編集ツールへのアクセス防止
" 等、レジストリ内の編集を制限する既存のポリシーを使ったとしても、これはRegedit.exe にのみ適用され、
インターネット経由でダウンロード可能な数多くの第3者シェアウェアエディタには適用されません。
しかしながら、セキュリティ反応ネットワーク管理者は、
gpedit.msc を支援するWindows
XP、Windows Vista およびWindows 7 に利用可能なソフトウェア制限ポリシー(ドメインのコンピューター上で起動しているソフトウェアプログラムを特定するポリシー主導メカニズム)を
利用することができます。 詳細情報:
http://technet.microsoft.com/en-us/library/bb457006.aspx
Note: Microsoft は、AppLocker と呼ばれる新しい "ソフトウェア制限"
ツールを導入しましたが、このツールは、ソフトウェア制限ポリシーの完全改正版ですが、
Windows 7 のUltimate およびEnterprise 版でのみ利用可能です。
リモートレジストリ アクセス制限
ほとんど知られていない事実ですが、Windows レジストリは、
別のPC/サーバー経由でリモートアクセスを可能にします。
これはすべてにとってのオープンアクセスではなく、Windows
がローカルPC 上のセキュリティを維持できるように多くの制限を設定しています。
第一に、ユーザー(またはグループ)を以下のサブキーのACL
(アクセスコントロール リスト)に明確に追加する必要があります:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg
この手順だけでは十分ではありません。 なぜならば、リモートアクセスを付与するに過ぎず、編集されることになる
各レジストリキー上のACL をすり抜けることはないからです。 リモートユーザー(またはグループ)が、
キー’ のACL に追加されなければなりません。
セキュリティの観点から言うと、
winreg サブキーに追加されるのはドメイン管理者のみである必要があります。
容易にリモートアクセスをユーザーに付与なさらないでください!
