連載
ClickOnceの真実

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

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

信頼された発行元か?

 次にClickOnceアプリが信頼された発行元かをチェックする。信頼された発行元かどうかの判定は、「信頼できる組織が発行したデジタル証明書で、そのClickOnceアプリが署名されているかどうか」によって決まる。信頼できる組織とは、主にVeriSignなどの第三者機関である(証明書による署名について詳しくは後述する)。

 発行元が完全に信頼できる場合、アプリケーションはそのまま実行される。「完全に信頼できる」とは、ユーザーごとにWindowsにより管理されている「信頼されたルート証明機関」と「信頼された発行元」にその証明書が登録(=インストール)されている状態である(なおVeriSignが発行した証明書はデフォルトで「信頼されたルート証明機関」に登録されているので、実質的には「信頼された発行元」にだけ登録すればよい)。従って、単にClickOnceアプリを証明書で署名しただけでは、そのまま起動されずに、以降のセキュリティ検証処理は行われるので注意してほしい。

 なお、証明書の登録方法については、「ClickOnce! オンライン・デモ ― 警告メッセージを表示せずに直接実行するには?」で説明しているので本稿では割愛する。

ゾーンごとのCAS制限を超えたアクセス許可は要求しないか?

 その次に、ClickOnceアプリが要求する権限(以降、ClickOnceアプリの権限要求)が、ゾーンごとに設定されているコード・アクセス・セキュリティ(以降、CAS)の制限(以降、ゾーンごとのCAS制限)を超えていないかどうかが検証される。

【コラム】コード・アクセス・セキュリティ(CAS)とは?

インサイド .NET Framework [改訂版] コード・アクセス・セキュリティ

 .NET FrameworkのCLR上で動作するアプリケーションは“サンドボックス”(sandbox)内で実行される。サンドボックスとは、すなわち「砂場の中でしか子供を遊ばせない」のと同じように、プログラムの実行を保護された領域内でのみ許可することで、外の世界へ悪影響が及ぶのを防ぐセキュリティ・モデルのことである。

 CASはまさにこのセキュリティ・サンドボックスを実現する機能で、.NET FrameworkのCLRに標準搭載されているものだ。CASのおかげで、.NETアプリケーションが(外部リソースなどを操作する)コードにアクセスする権限(つまりコードの実行権限。以降、アクセス許可)を細かく管理できるようになっている。例えば「自分のプログラムから、レジストリを操作するメソッド(コード)を許可できるようにするか、できないようにするか」というレジストリ操作コードへのアクセス許可を管理できるわけだ。

 .NET FrameworkのCASによるアクセス許可セット(=アプリケーションが実行できる機能)は、起動元(もしくはダウンロード元)のURLが所属するゾーン(インターネット、イントラネット、ローカル・コンピュータ、信頼済みサイトなど)に基づいて自動的に決定される。例えばClickOnceアプリが、インターネット上から実行/インストールされた場合は「インターネット・ゾーン」、共有フォルダ上から実行/インストールされた場合は「イントラネット・ゾーン」となる。

 実行しているアプリケーションが「ネットワーク上から起動するモード」(以降、オンライン・モード)の場合、もしClickOnceアプリの権限要求がゾーンごとのCAS制限を下回っている(CAS制限の範囲内)なら、何も表示せずにClickOnceアプリが起動される。一方、「ローカル環境へインストールするモード」(以降、インストール・モード)の場合は、そのように下回っているときでも、以降の処理に進むので注意が必要だ。

 なおClickOnceアプリの権限要求には、次の2つのモードが用意されている。

  • 完全信頼(Full Trust)
  • 部分信頼(Partial Trust)

 完全信頼の場合は(基本的に)すべてのアクセス許可を要求するので、必然的にゾーンごとのCAS制限を超えてしまう。従って、ほぼ必ず次の処理に進むことになる。部分信頼の場合は、ゾーンごとのCAS制限を超えるか下回るかは、権限要求の設定(詳細後述)によって変わってくる。

セキュリティ警告をユーザーに表示。「権限の昇格」が承認されたか?

 検証処理の最後には、「ゾーンごとのCAS制限で認められていない権限を要求するClickOnceアプリを実行してもよいかどうか」をユーザーに問い合わせる、次のようなダイアログが表示される。

アプリケーションの実行をユーザーに問い合わせるダイアログ
[アプリケーションのインストール − セキュリティの警告]ダイアログが表示されているところ。詳しくは「第1回 ClickOnceの基本動作を見てみよう」を参照されたい。
深刻な警告を通知する場合には、左下の盾マークが赤色である。軽度の警告メッセージの場合、盾マークは黄色だ。

 ここで[インストール]ボタンや[実行]ボタンをクリックすると、そのClickOnceアプリの権限要求を認めることになる。このことを「権限の昇格」と呼ぶ。

 赤色の盾マークは「深刻な警告メッセージ」を意味し、それが表示された場合は、プログラムをインストールもしくは実行しないように、エンド・ユーザーに徹底しておいた方がよい。また「軽度の警告メッセージ」を意味する黄色の盾マークが表示された場合は、比較的安心できるアプリケーションといえる。

 表示される警告メッセージの種類は、

  • インストール・モードかオンライン・モードか、

  • ClickOnceアプリの権限要求がCAS制限を越えるか以下か、

  • ClickOnceアプリを署名している証明書はユーザーのクライアント・コンピュータに登録済みかどうか(厳密にいうと、まずは「信頼されたルート証明機関」、次に「信頼された発行元」に登録されているか)

によって、変わってくる。それをまとめたのが次の表だ。

モード 権限要求 信頼されていない証明書 信頼されたルート証明機関に登録済み証明書 信頼されたルート証明機関に登録済みで、信頼された発行元にも登録済みの証明書
インストール CAS制限超越
発行元に関する警告+権限の昇格に関する警告

権限の昇格に関する警告
直接起動
CAS制限以下
発行元に関する警告+権限の昇格に関する警告

権限の昇格に関する警告
直接起動
オンライン CAS制限超越
発行元に関する警告+権限の昇格に関する警告

権限の昇格に関する警告
直接起動
CAS制限以下 直接起動 直接起動 直接起動
表示される警告メッセージの種類
表示される警告メッセージの内容をまとめた。「直接起動」とは警告メッセージを表示せずに起動するモードのことで、権限の昇格が自動的に行われることに注意してほしい。
以下は表中にある用語と実際のメッセージの対応付け。

・発行元に関する警告:発行元を確認できません。
・権限の昇格に関する警告:インストール・モードの場合「このアプリケーションをインストールしますか?」。オンライン・モードでは「このアプリケーションを実行しますか?」。

 この表を見ると分かるように、警告メッセージを表示しないようにするには、(先ほどの証明書のチェックでも述べたように)「信頼されたルート証明機関」と「信頼された発行元」の両方に証明書を登録しなければならない。さらにオンライン・モードのClickOnceアプリでは、ClickOnceの権限要求がゾーンごとのCASの制限を下回っていれば、警告メッセージが表示されない。

 逆に、ClickOnceアプリを署名した証明書が「信頼されたルート証明機関」にさえも登録されておらず、さらにClickOnceの権限要求がゾーンごとのCASの制限を上回っていれば、常に赤い盾マークの深刻な警告メッセージが表示されてしまうので、このようなClickOnceアプリの配置は避けたい。

 以上が一連のセキュリティの流れだ。このような仕組みによってClickOnceは、信用できないサイト上のハイパーリンクをクリックしてClickOnceアプリを起動しようとした際には、(セキュリティの危険性をユーザーに知らせないまま)そのリンク先のClickOnceアプリが即座に実行されるのをブロックしてくれる(例えば「Yahoo!」と書いたハイパーリンクの先が悪意を持ったアプリケーションに結びつけられたしても直接実行されることはない)。

 次にセキュリティの実践的な内容として、証明書による署名方法とClickOnceの権限要求の設定方法について説明しよう。


 INDEX
  ClickOnceの真実
  第7回 ClickOnceが持つセキュリティ機構とは?
    1.セキュリティの仕組み(1)
  2.セキュリティの仕組み(2)
    3.ClickOnceセキュリティの設定方法
    4.ClickOnceの将来展望
 
インデックス・ページヘ  「ClickOnceの真実」

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

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

RSSフィード

キャリアアップ

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

.NET開発者中心コーナー

- PR -

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

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

@IT Sepcial
ソリューションFLASH