【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

連載
ClickOnceの真実

第7回 ClickOnceが持つセキュリティ機構とは?

デジタルアドバンテージ 一色 政彦
2006/12/02
2006/12/02 更新
Page1 Page2 Page3 Page4

Back Issue
1
ClickOnceの基本動作を見てみよう
2
ClickOnceの仕組みを理解しよう
3
Visual Studio 2005でClickOnceを極めよう
4
ClickOnceテクノロジを最大限に生かす開発
5
実行環境を確実に整える必須コンポーネントの開発
6
ClickOnceの運用を成功させる5つのポイント

 本連載ではこれまで、ClickOnceの基本的な動作や仕組み、開発方法と運用方法について説明してきたが、今回が最終回となる。最後は、ClickOnceで特に気になるセキュリティについての話である。具体的には次の内容を説明する。

  • ClickOnceセキュリティの仕組み
    ― ClickOnceローダーで働くTrustManager

  • ClickOnceセキュリティの設定方法
    ― 1. デジタル証明書による署名方法
    ― 2. ClickOnceの権限要求の設定方法

  • ClickOnceの将来展望
    ― 次期ClickOnceで拡張予定の機能

セキュリティの仕組み ― ClickOnceローダーで働くTrustManager

 ClickOnceによって配置されたアプリケーション(以降、ClickOnceアプリ)が配布される仕組み(ClickOnceローダー)は「第2回 ClickOnceの仕組みを理解しよう」の「ClickOnceデプロイメントの流れ(ClickOnceローダー)」の項で解説した。その項のの「実際にそれらをダウンロードする前に、エンド・ユーザーに対してそのアプリケーションをインストール/実行してもよいかどうかを尋ねるためのセキュリティ警告を表示する。」という処理の中では、セキュリティ検証作業が行われている。この作業を行っているのがTrustManager(信頼マネージャ)という機能である。

 TrustManagerの働きを簡略化して示したのが次の図だ。まずはこの図の内容について説明していこう。

ClickOnceのセキュリティを高めるTrustManagerの働き

 以下では、この図内のの各項目について解説していく。

 「信頼されたアプリケーション」一覧に登録済みか?

  ClickOnceローダーは、インストールもしくは実行しようとしているClickOnceアプリが「信頼されたアプリケーション」の一覧(ATL:Application Trust List)に登録されているかをチェックする。ここに登録されていれば、そのアプリケーションは「信頼できるもの」と判定して、何も表示せずに即座にアプリケーションを起動する。登録されていなければTrustManagerを呼び出し、次の処理ステップに進む。

【コラム】信頼されたアプリケーションとは?
 「信頼されたアプリケーション」一覧は、ClickOnceによって信頼されているアプリケーションに関する情報を格納したもので、ClickOnceアプリをいったん起動すると自動的に一覧に追加される。この一覧情報は、アセンブリのバージョン名までをも含めた完全名でユーザーごとに管理され、さらにアプリケーションに適用されるセキュリティ・ポリシー(詳細後述)もここで管理されている。

 この一覧の内容は、GUIツールによって参照/削除したり、プログラミング・コードによって参照/追加/削除したりできる。

 GUIツールとしては、.NET Framework 2.0 SDKをインストールすると追加される(コントロール・パネルの)管理ツール「.NET Framwork 2.0 構成」を用いる。具体的には次の画面を参考にしてほしい。

「.NET Framwork 2.0 構成」を用いた「信頼されたアプリケーション」一覧の参照/削除
各項目をダブルクリックすると、アプリケーションの内容や利用可能な機能(=アクセス許可)の詳細について参照・設定できる。

 またコードからは、ApplicationSecurityManagerクラス(System.Security.Policy名前空間)を使ってアクセスを行う。具体的には次のサンプル・プログラムを参考にしてほしい(コード内容の説明は割愛する。コメントを参考にしてほしい)。

using System;
using System.Security;
using System.Security.Policy;
using System.IO;
using System.Xml;

class Program
{
  static void Main(string[] args)
  {
    bool first = true;

    foreach (ApplicationTrust appTrust
      in ApplicationSecurityManager.UserApplicationTrusts)
    {
      string fullname = appTrust.ApplicationIdentity.FullName;

      if (first)
      {
        first = false;

        // アプリケーションに関する情報をXML形式に変換
        SecurityElement se = appTrust.ToXml();
        Console.WriteLine(se.ToString());
        Console.WriteLine(
          "\"" + fullname + "\"には上記の設定が含まれています。");

        // 信頼されたアプリケーションの一覧から削除
        ApplicationIdentity appIdDelete =
          appTrust.ApplicationIdentity;
        ApplicationSecurityManager.UserApplicationTrusts.Remove(
          appIdDelete, ApplicationVersionMatch.MatchExactVersion);
        Console.WriteLine(
          "\"" + fullname + "\"を削除しました。");

        // 信頼されたアプリケーションの一覧に追加
        ApplicationIdentity appIdAdd =
          new ApplicationIdentity(fullname);
        ApplicationTrust appTrustAdd =
          new ApplicationTrust(appIdAdd);
        appTrustAdd.FromXml(se);
        ApplicationSecurityManager.UserApplicationTrusts.Add(
          appTrustAdd);
        Console.WriteLine(
          "\"" + fullname + "\"を追加しました。");

        Console.WriteLine("\n以下に一覧を生成します。");
      }

      Console.WriteLine(fullname);
    }
  }
}
ApplicationSecurityManagerクラスを用いた「信頼されたアプリケーション」一覧の参照/削除/追加

 このプログラムの実行例は以下のようになる。

<ApplicationTrust version="1"
FullName="http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"
TrustedToRun="true"
Persist="true">
<DefaultGrant>
<PolicyStatement version="1">
<PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>
</PolicyStatement>
</DefaultGrant>
<ExtraInfo Data="0001000000FFFFFFFF01000000000000000C020000005753797374656D2E57696E646F77732E466F726D732C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D6237376135633536313933346530383905010000003053797374656D2E53656375726974792E506F6C6963792E4170706C69636174696F6E54727573744578747261496E666F010000001872657175657374735368656C6C496E746567726174696F6E000102000000000B"/>
</ApplicationTrust>

"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"には上記の設定が含まれています。
"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"を削除しました。
"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"を追加しました。

以下に一覧を生成します。
http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32
http://www.cyborg.ne.jp/~xelf/GalaxyGUI/GalaxyGUI.application#GalaxyGUI.application, Version=0.0.0.11, Culture=neutral, PublicKeyToken=6906c585feb180b1, processorArchitecture=msil/GalaxyGUI.exe, Version=0.0.0.11, Culture=neutral, PublicKeyToken=6906c585feb180b1, processorArchitecture=msil, type=win32
file:///C:/WINDOWS/Microsoft.Net/Framework/v3.0/WPF/XamlViewer/XamlViewer_v0300.xbap#XamlViewer_v0300.application, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c3bce3770c238a49, processorArchitecture=msil/XamlViewer_v0300.exe, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c3bce3770c238a49, processorArchitecture=msil, type=win32

上記サンプル・プログラムの実行例

 なお、ClickOnceアプリが実行される前に、プログラムによって「信頼されたアプリケーション」一覧にそのアプリケーションを登録しても、それが実際にローカル・ディスクにインストール/ダウンロードされていなければ、以下で説明するTrustManagerによるセキュリティ検証処理が実行される。

 

 INDEX
  ClickOnceの真実
  第7回 ClickOnceが持つセキュリティ機構とは?
  1.セキュリティの仕組み(1)
    2.セキュリティの仕組み(2)
    3.ClickOnceセキュリティの設定方法
    4.ClickOnceの将来展望
 
更新履歴
【2006/7/19】本記事の一部に以下のような誤りがありました。お詫びして訂正させていただきます。

これを利用すれば、プログラムによってClickOnceアプリが実行される前に「信頼されたアプリケーション」一覧にそのアプリケーションを登録することも可能である。そのようにすれば、以下で説明するTrustManagerによるセキュリティ検証処理はスキップされて、即座にアプリケーションを起動できる。
なお、ClickOnceアプリが実行される前に、プログラムによって「信頼されたアプリケーション」一覧にそのアプリケーションを登録しても、それが実際にローカル・ディスクにインストール/ダウンロードされていなければ、以下で説明するTrustManagerによるセキュリティ検証処理が実行される。

インデックス・ページヘ  「ClickOnceの真実」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

.NET開発者中心に生まれ変わりました

.NET開発者中心コーナー

- PR -

- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?