(2) 信頼された発行元か?
次にClickOnceアプリが信頼された発行元かをチェックする。信頼された発行元かどうかの判定は、「信頼できる組織が発行したデジタル証明書で、そのClickOnceアプリが署名されているかどうか」によって決まる。信頼できる組織とは、主にVeriSignなどの第三者機関である(証明書による署名について詳しくは後述する)。
発行元が完全に信頼できる場合、アプリケーションはそのまま実行される。「完全に信頼できる」とは、ユーザーごとにWindowsにより管理されている「信頼されたルート証明機関」と「信頼された発行元」にその証明書が登録(=インストール)されている状態である(なおVeriSignが発行した証明書はデフォルトで「信頼されたルート証明機関」に登録されているので、実質的には「信頼された発行元」にだけ登録すればよい)。従って、単にClickOnceアプリを証明書で署名しただけでは、そのまま起動されずに、以降のセキュリティ検証処理は行われるので注意してほしい。
なお、証明書の登録方法については、「ClickOnce! オンライン・デモ ― 警告メッセージを表示せずに直接実行するには?」で説明しているので本稿では割愛する。
(3) ゾーンごとのCAS制限を超えたアクセス許可は要求しないか?
その次に、ClickOnceアプリが要求する権限(以降、ClickOnceアプリの権限要求)が、ゾーンごとに設定されているコード・アクセス・セキュリティ(以降、CAS)の制限(以降、ゾーンごとのCAS制限)を超えていないかどうかが検証される。
【コラム】コード・アクセス・セキュリティ(CAS)とは?
.NET FrameworkのCLR上で動作するアプリケーションは“サンドボックス”(sandbox)内で実行される。サンドボックスとは、すなわち「砂場の中でしか子供を遊ばせない」のと同じように、プログラムの実行を保護された領域内でのみ許可することで、外の世界へ悪影響が及ぶのを防ぐセキュリティ・モデルのことである。
CASはまさにこのセキュリティ・サンドボックスを実現する機能で、.NET FrameworkのCLRに標準搭載されているものだ。CASのおかげで、.NETアプリケーションが(外部リソースなどを操作する)コードにアクセスする権限(つまりコードの実行権限。以降、アクセス許可)を細かく管理できるようになっている。例えば「自分のプログラムから、レジストリを操作するメソッド(コード)を許可できるようにするか、できないようにするか」というレジストリ操作コードへのアクセス許可を管理できるわけだ。
.NET FrameworkのCASによるアクセス許可セット(=アプリケーションが実行できる機能)は、起動元(もしくはダウンロード元)のURLが所属するゾーン(インターネット、イントラネット、ローカル・コンピュータ、信頼済みサイトなど)に基づいて自動的に決定される。例えばClickOnceアプリが、インターネット上から実行/インストールされた場合は「インターネット・ゾーン」、共有フォルダ上から実行/インストールされた場合は「イントラネット・ゾーン」となる。
実行しているアプリケーションが「ネットワーク上から起動するモード」(以降、オンライン・モード)の場合、もしClickOnceアプリの権限要求がゾーンごとのCAS制限を下回っている(CAS制限の範囲内)なら、何も表示せずにClickOnceアプリが起動される。一方、「ローカル環境へインストールするモード」(以降、インストール・モード)の場合は、そのように下回っているときでも、以降の処理に進むので注意が必要だ。
なおClickOnceアプリの権限要求には、次の2つのモードが用意されている。
完全信頼の場合は(基本的に)すべてのアクセス許可を要求するので、必然的にゾーンごとのCAS制限を超えてしまう。従って、ほぼ必ず次の処理に進むことになる。部分信頼の場合は、ゾーンごとのCAS制限を超えるか下回るかは、権限要求の設定(詳細後述)によって変わってくる。
(4) セキュリティ警告をユーザーに表示。「権限の昇格」が承認されたか?
検証処理の最後には、「ゾーンごとのCAS制限で認められていない権限を要求するClickOnceアプリを実行してもよいかどうか」をユーザーに問い合わせる、次のようなダイアログが表示される。
ここで[インストール]ボタンや[実行]ボタンをクリックすると、そのClickOnceアプリの権限要求を認めることになる。このことを「権限の昇格」と呼ぶ。
表示される警告メッセージの種類は、
によって、変わってくる。それをまとめたのが次の表だ。
この表を見ると分かるように、警告メッセージを表示しないようにするには、(先ほどの証明書のチェックでも述べたように)「信頼されたルート証明機関」と「信頼された発行元」の両方に証明書を登録しなければならない。さらにオンライン・モードのClickOnceアプリでは、ClickOnceの権限要求がゾーンごとのCASの制限を下回っていれば、警告メッセージが表示されない。
以上が一連のセキュリティの流れだ。このような仕組みによってClickOnceは、信用できないサイト上のハイパーリンクをクリックしてClickOnceアプリを起動しようとした際には、(セキュリティの危険性をユーザーに知らせないまま)そのリンク先のClickOnceアプリが即座に実行されるのをブロックしてくれる(例えば「Yahoo!」と書いたハイパーリンクの先が悪意を持ったアプリケーションに結びつけられたしても直接実行されることはない)。
次にセキュリティの実践的な内容として、証明書による署名方法とClickOnceの権限要求の設定方法について説明しよう。
Copyright© Digital Advantage Corp. All Rights Reserved.