更新日: 2004 年 4 月 21 日

このコンテンツのポイント
  • ノータッチ デプロイメントにおけるコード アクセス セキュリティのポリシー設定

今回紹介するコード

C#
private void button1_Click(object sender, System.EventArgs e)
{
	RegistryKey regTest;
	// キーを作成します
	regTest = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestCAS");

	// キーが作成できた場合は値を設定します
	if (regTest != null)
	{
		regTest.SetValue("test", "テスト");
		regTest.Close();
	}
}
 

 

目次
はじめに
作成するアプリケーションの概要
クライアントアプリケーションの開発準備
画面のデザイン
コードの実装
実行する
ノータッチ デプロイメントの設定
ノータッチ デプロイメントの実行
セキュリティ ポリシー設定
おわりに

Visual Basic .NET の内容はこちらに掲載しています。
10 行でズバリ !! コード アクセス セキュリティ (VB)


はじめに

コード アクセス セキュリティとは、不正なコードがシステム リソースに対して攻撃できないよう、セキュリティ ポリシーに従って、コードのシステム リソースへのアクセスを制限するセキュリティ チェックの仕組みです。デフォルトのポリシー設定では、コード アクセス セキュリティによってシステムが守られているため、インターネットやイントラネットからノータッチ デプロイメントによって実行されたアプリケーションは、システム リソースへアクセスすることはできません。ここでは、信頼するコードに対して、どのようにシステム リソースへのアクセス許可を付与するかを解説します。

作成するアプリケーションの概要

今回作成するのは、レジストリ キーを作成し、そのレジストリに値を設定する Windows アプリケーションです。ノータッチ デプロイメントを利用せずに、普通にアプリケーションを起動した場合、処理は正常に行われますが、ノータッチ デプロイメントを利用した場合、レジストリ キーを作成するコードでセキュリティ例外が発生します。

クライアントアプリケーションの開発準備

Visual Studio .NET 2003 を起動して、新規にプロジェクトを作成します。ここでは、"Visual C# プロジェクト" を選択し、"Windows アプリケーション" テンプレートを選択します。"プロジェクト名" テキストボックスに "WindowsApplication1" を入力したら "OK" ボタンをクリックします。
これでレジストリ キーを作成するアプリケーションの開発準備が完了しました。

図 1. Windows アプリケーションのプロジェクトを新規に作成

 

画面のデザイン

フォームのデザインは、ドラッグ アンド ドロップという一貫性のある手順で行うことができます。Windows フォームアプリケーションについては「10 行でズバリ !! Windows フォームによるクライアント アプリケーション開発」をご参照ください。
画面左側に表示されている "ツールボックス" の [Windows フォーム] コントロールの中から、Button コントロールをフォーム上にドラッグ アンド ドロップします。

図 2. 画面上に Button コントロールを配置したところ

 

コードの実装

画面上に配置された Button コントロールをダブルクリックするとコードエディタが表示されるので、必要な処理をコードとして記述していきます。

using 文を使用して Microsoft.Win32 ネームスペースを宣言します.この宣言により Microsoft.Win32 ネームスペース内のクラス名が暗黙的に解決されます。

C#
using Microsoft.Win32
 

次に自動生成された button1_Click ハンドラ内に以下のコードを記述します。

C#
private void button1_Click(object sender, System.EventArgs e)
{
	RegistryKey regTest;
	// キーを作成します
	regTest = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\TestCAS");

	// キーが作成できた場合は値を設定します
	if (regTest != null)
	{
		regTest.SetValue("test", "テスト");
		regTest.Close();
	}
}
 

実行する

コードの記述が完了したら、実行します。
アプリケーションを実行させるには [F5] キーを押すか、[デバッグ] メニューから [開始] をクリックします。アプリケーションが起動しますので、ウィンドウ内のボタンを押します。

図 3. アプリケーションを実行しているところ

 

ボタンを押すことでレジストリ キーが作成されますので、レジストリエディタ (regedit.exe) を使って追加したキーを確認します。また、確認後はキーを削除します。

重要 : 追加したキー以外を削除した場合は、システムに影響を及ぼす可能性があります。十分に注意して作業を行って下さい。編集する前に、問題が発生した場合に備えて、レジストリの復元方法を理解しておくことをお勧めします。復元方法の詳細については、レジストリ エディタ のヘルプ トピック「レジストリを復元する」を参照してください。

ノータッチ デプロイメントの設定

次にノータッチ デプロイメントの設定を行います。ノータッチ デプロイメントの設定は「10 行でズバリ !! ノータッチ デプロイメント」と全く同じ設定を行いますので、既に設定済みの方はこの作業は省略して頂いて構いません。
ノータッチ デプロイメントで実行するために、 Web サイトの設定を行います。最初に インターネット インフォーメーション サービスの管理ツール ("管理ツール" メニューから選択します) を起動します。そして "規定の Web サイト" をクリックして右ボタンで [新規作成] - [仮想ディレクトリ] をクリックします。

図 4. 仮想ディレクトリを新規作成するところ

 

そうすると "仮想ディレクトリの新規作成ウイザード" (図 5) が起動します。"次へ" ボタンを押して "仮想ディレクトリ エイリアス" に "deployment" を入力します (図 6)。"次へ" ボタンを押して "Web サイトのコンテンツのディレクトリパス" に "C:\Inetpub\wwwroot\deployment" を入力します (図 7、実際には "deployment" というディレクトリを作成する必要がありますので"参照ボタンを押してディレクトリを作成することになります)。"次へ" ボタンを押して "アクセス許可" はデフォルトのままで "次へ" ボタンを押します (図 8)。"仮想ディレクトリが正常に作成されました" が表示されますので "完了" ボタンを押します。(図 9)

図 5. 仮想ディレクトリの新規作成ウイザード

 

図 6. 仮想ディレクトリのエイリアス

 

図 7. Web サイトのコンテンツのディレクトリパス

 

図 8. アクセス許可

 

図 9. 仮想ディレクトリの新規作成ウイザードの終了

 

仮想ディレクトリの準備が出来ましたので開発したアプリケーションを仮想ディレクトリへ配置します。作成した "WindowsApplication1.exe" アプリケーションを "C:\Inetpub\wwwroot\deployment" へエクスプローラでコピーします。

図 10. 仮想ディレクトリへファイルをコピーしたところ

 

ノータッチ デプロイメントの実行

次にノータッチ デプロイメントでの実行です。[スタート] メニューから [ファイル名を指定して実行] をクリックするか、インターネット エクスプローラの "アドレス" に URL を "http://localhost/deployment/WindowsApplication1.exe" を入力します (図 11)。

図 11. インターネット エクスプローラで URL を入力したところ

 

アプリケーション起動後、"ボタン" をクリックすると 図 12 のようにエラーが表示されます。

図 12. ノータッチ デプロイメント コードでエラーが表示されたところ

 

このエラーが発生した理由は、イントラネットからダウンロードされた .NET のアプリケーションは、セキュリティ ポリシーによりレジストリへのアクセスが許可されていないからです。

セキュリティ ポリシー設定

次にノータッチ デプロイメントでの実行でも作成したアプリケーションが正常に動作するように、セキュリティ ポリシーの設定を行います。ここでは、作成したアプリケーション "WindowsApplication1.exe" がイントラネット内でノータッチ デプロイメント実行された場合に、レジストリ アクセスを可能にするための設定を行います。

重要 : 今回に限らず、セキュリティ ポリシーを変更する際は、必ず、必要最小限の範囲でアクセス許可を与えるように設定して下さい。

最初に Microsoft .NET Framework 1.1 構成 ("管理ツール" メニューから選択します) を起動します。そして "マイ コンピュータ" をクリックして、[ランタイム セキュリティ ポリシー] - [コンピュータ(Machine)] - [コード グループ] - [All_Code] - [LocalIntranet_Zone] を右クリックします。
表示されたコンテキスト メニューから "新規作成" を選択します。選択すると "コード グループの作成" (図 13) が起動します。

図 13. コード グループの新規作成ウィザード

 

以降の操作は以下の表に従います。

表 1 - コード グループの新規作成ウィザード

No. ウィザード コメント 作業内容
1 新しいコード グループの識別 名前に "TestGroup" と入力します。
2 条件の種類を選択する コードグループの条件の種類で "ハッシュ" を選択します。"ハッシュ" を選択することで、指定したアプリケーションのみに設定したポリシーが適用されます(リビルドするとポリシーが適用されなくなります)。
    "インポート" ボタンを押し、作成したアプリケーションを選択します。
3 コード グループにアクセス許可セットを割り当てる "新しいアクセス許可セットの作成" を選択します。
4 新しいアクセス許可セットの識別 名前に "Registry" と入力します。
5 アクセス許可セットに個々のアクセス許可を割り当てます "レジストリ" を追加します。
6 アクセス許可の設定 [キー]
HKEY_CURRENT_USER\Software\Microsoft

を設定し、"読み取り", "書き込み", "作成" の各チェックボックスをチェックします。

 

上記ポリシー設定の結果、作成した Windows アプリケーションのみがイントラネット経由のノータッチ デプロイメントで実行しても、レジストリの操作を行うことができるようになります。
それでは、再度、ノータッチ デプロイメントでの実行を行います。手順は先ほどと同様、[スタート] メニューから [ファイル名を指定して実行] をクリックするか、インターネット エクスプローラの "アドレス"に URL を "http://localhost/deployment/WindowsApplication1.exe" を入力します。"ボタン" をクリックすることで、レジストリ キーの作成を行うことができることを確認できます。

注意 : "WindowsApplication1.exe" をリビルドするとハッシュ値が変わりますので、上記で設定したポリシーは適用されません。その場合は上記作業表の No.2 を参考に、ハッシュ値を設定し直して下さい。

今回は、ポリシーを適用するアプリケーションをより厳密にするために "コード グループの条件の種類" で "ハッシュ" を利用しました。もちろん、コード アクセス セキュリティでは、"ハッシュ" だけでなく、署名情報やアプリケーション配置場所を利用したポリシー設定も可能なので、要件に合わせて必要最小限の範囲で適用されるポリシー設定を行って下さい。

おわりに

このようにコード アクセス セキュリティでは、ノータッチ デプロイメントで実行されるモバイル コードを安全に実行するための機能を持っています。また、高度なカスタマイズが可能なポリシーにより、堅牢なセキュリティは維持しながら、ユーザの利便性を向上させることも可能になります。


Code Recipe

ページのトップへ