4.3 ユーザー アカウント制御 (UAC: User Account Control)4. 新機能や機能変更に伴う互換性問題 この章では、以下のような新機能や機能変更に伴う、互換性問題について紹介します。
セキュリティに関する問題点ここ数年の間に、Windows を狙ったウイルスやワームが増加しました。こうした攻撃のために、企業や家庭のコンピューターを使用するユーザーは、修復に膨大な時間や費用を費やしました。スパイウェアなどの悪意のあるソフトウェア (マルウェア) は 、疑いを持たないユーザーによってインストール、起動されることもあります。これらは、有用で一見害のないソフトウェアに潜んでいることがあるからです。 管理者としてログオンしているときに悪意のあるコードが実行されると、被害が大きくなります。これは、管理者特権で悪意のあるコードが実行されてしまうからです。たとえば、管理者としてログオンしていると、ブラウザーや電子メールクライアントなどのアプリケーションも、管理者権限を持つことになります。これらのアプリケーションが悪意のあるソフトウェアを起動すると、悪意のあるソフトウェアは、それ自体をインストールし、ウイルス対策ソフトウェアを操作して OS から見えなくすることさえできてしまいます。そして、セキュリティ侵害されたサイトにアクセスしたり、電子メールのリンクをクリックしたりすることで、ユーザーが意図していないにもかかわらず、悪意のあるソフトウェアが実行されてしまう可能性があります。 ページのトップへ Windows XP での対策と問題点この脅威に対抗するため、Windows XP では、LUA (Least-privileged User Account) を採用しました。LUA アプローチでは、管理者は 2 つのユーザー アカウントを使い分けます。つまり、管理者といえども、ブラウザーや電子メール クライアントなどを利用するときには、「制限付きユーザー アカウント」を使います。そして、ディスク操作やユーザー作成などの管理作業をおこなうときには、「管理者ユーザー アカウント」を利用します。 この方法は、管理者が管理タスクをおこなうときに、ログオンしなおさなければなりません。そのわずらわしさのため、結局は「常に管理者ユーザーでログオンする」という状況を生む結果となりました。また、管理者権限でないと正常に動作しないアプリケーションが多いことも、この状況に拍車をかけてしまいました。 制限付きユーザー アカウントとは、権限が制限されていて、偶発的または故意によるシステム全体への変更が許可されていないユーザー アカウントです。最小限の権限しか持っていないため、攻撃によるシステムへの影響が少ないアカウントといえます。具体的には、ローカル コンピュータの Users グループのメンバーです。また、ドメインに参加しているコンピューターでは、Domain Users グループのユーザー アカウントは、既定でローカル コンピュータの Users グループのメンバーに含まれます。 ページのトップへ UAC の目的と特徴Windows Vista や Windows 7 では、LUA の代わりに、UAC (User Account Control: ユーザー アカウント制御) 権限モデルを採用しています。UAC は、LUA 同様、ユーザーが意図しないコードが実行されないようにします。しかし、使い勝手が大幅に改善されています。以下に UAC の特徴を挙げます。
UAC はコントロール パネルの設定により、無効にすることもできます。しかし無効にすることでセキュリティ上のメリットがなくなってしまうため、推奨されません。 ページのトップへ UAC のしくみWindows Vista や Windows 7 では、管理者を含む全てのユーザーは、既定で「標準ユーザー」としてアプリケーションを実行します。「標準ユーザー」とは Users グループのユーザーです。標準ユーザーが実行するプロセスは「中 IL」の整合性レベルが使用されるため、システム領域のリソースへのアクセスが制限されます。 管理者権限が必要なアプリケーションやタスクを実行する際は、標準ユーザーでは権限が足りません。そこで、管理権限が必要な場合には、図 4-2 のような「承認ユーザー インターフェイス」を表示します。このダイアログボックスで「はい」ボタンをクリックすると、管理者に「昇格」され、そのアプリケーションやタスクは、管理者権限で実行されることになります。昇格により実行されるプロセスは「高 IL」の整合性レベルが使用されるため、システム領域のリソースへのアクセスも可能です。
図 4-2: 承認ユーザー インターフェイス 権限の昇格を実現するために、ログオン時にユーザーのトークンを「フルトークン」と「フィルター済みトークン」に分割します。そして、いずれかのトークンがアプリケーションに渡されます。 ユーザーや所属するグループ、保持している特権などの情報により、ユーザーをあらわしたものです。システムはトークンを使用して、セキュリティで保護されたオブジェクトへのアクセスや、システム関連の操作を実行する権限を制御します。 「フルトークン」は、ユーザーが保持している全ての権限が定義されているトークンです。一方、「フィルター済みトークン」は、ユーザーが保持している全ての権限のうち、標準ユーザーが持つものだけを定義したトークンです。「フィルター済みトークン」では管理作業はおこなえません。 既定では、全てのユーザーは、「フィルター済みトークン」でアプリケーションを実行します。管理者としてログオンしている場合も例外ではありません。そして、管理権限が必要になった場合には、図 4-2 のような「承認ユーザー インターフェイス」が表示され、「はい」ボタンをクリックすると、権限が昇格されフルトークンで動作します。 ビルトインの Administrator ユーザーは、はじめから管理者権限で全てのアプリケーションが実行されます。そのため、「昇格」の必要はありません。ただし、既定では、Administrator ユーザー アカウントは無効になっています。
図 4-3: Administrator は既定では無効 管理者としてログオンしていて、権限の昇格が必要になると、図 4-2 のような「承認ユーザー インターフェイス」が表示されます。ここで「はい」ボタンをクリックすることで、そのアプリケーションやタスクがフルトークンで実行されることになります。「キャンセル」ボタンをクリックした場合には、昇格はおこなわれません。 一方、標準ユーザーなどでログオンしている場合には、昇格が必要になると、図 4-4 のような「資格情報ユーザー インターフェイス」が表示されます。このダイアログボックスでは、管理者の資格情報を入力できます。これにより、標準ユーザーでログオンしていても、特定のタスクだけ管理者で実行することができます。
図 4-4: 資格情報ユーザー インターフェイス また、どちらのダイアログボックスの場合にも、タイトルバーのすぐ下の帯の色に注目する必要があります。この色は、アプリケーションの発行元によって色が変わります。
盾アイコンとは 昇格が必要なアプリケーションやタスクには、図 4-5 のような「盾」が表示されます。
図 4-5: 盾アイコン 図 4-6 のようにファイルのアイコン自体に盾が含まれる場合は、アプリケーションを起動しようとしたタイミングで、昇格するための「承認ユーザー インターフェイス」ダイアログが表示されます。そして、アプリケーション全体が管理者権限で実行されます。
図 4-6: 盾が含まれているファイルのアイコン これに対し、一部のタスクでのみ昇格を必要とする場合は、図 4-7 のように、ボタンなどに盾アイコンが表示されます。ここで盾アイコンの付いたボタンをクリックすると、「承認ユーザー インターフェイス」ダイアログが表示され、そのタスクのみが管理者権限で実行されます。
図 4-7: 盾が含まれているボタン いずれの場合にも、管理者権限で実行されるのは、そのアプリケーションやタスクのみです。それ以外のアプリケーションやタスクは、標準ユーザーのまま実行されます。 盾アイコンの目的は、盾アイコンの付いた操作を実行すると特権の昇格が必要になることを、一目でわかるようにすることです。ユーザーは、盾アイコンの付いたアイテムをクリックすると、権限の昇格が求められることを予測できます。 UAC を無効にしていたり、ユーザーが組み込みの Administrator アカウントを使用していたりする場合は、昇格の必要はありませんが、盾アイコンは表示されます。また、盾アイコンには、1 つの状態しかありません。盾アイコンが無効になったり、カーソルを合わせたときに外観が変わったり、選択された状態になったりすることはありません。 開発者は、クリックするとその操作が特権の昇格を必要とするコントロールに、容易に盾アイコンを付けることができます。詳細はこの節の「UAC 対応アプリケーションを新規に作成するには」を参照してください。 できる限り、標準ユーザーが昇格なしで実行できるようにプログラムを設計します。標準ユーザーの生産性を十分に確保し、初期配置後に管理操作をおこなう必要がないように製品を設計します。 管理権限が必要な既存のアプリケーションを実行する場合は、アプリケーションの起動時に昇格する必要があります。そのためには、以下の 4 つの方法がありますが、これらはいずれも Windows Vista や Windows 7 での設定を必要とするだけで、アプリケーション自体を変更する必要がありません。 アプリケーションを起動する際、アイコンやスタート メニューを右クリックし、コンテキスト メニューから「管理者として実行」を選択します。 これにより昇格し、そのアプリケーションは、管理者権限で実行されます。
図 4-8: [管理者として実行] コンテキスト メニュー アプリケーションのプロパティを開き、[互換性] タブで、「管理者としてこのプログラムを実行する」を選択します。これにより、常に管理者権限で実行することができます。この方法は、各コンピューターで設定できるので、ユーザー向けといえます。
図 4-9: [互換性] タブ 企業内の多数のコンピューターに適用するためには、Compatibility Administrator ツールを使用して、互換フィックスを適用します。利用可能な互換フィックスは以下のとおりです。
Compatibility Administrator についての詳細は、「5.2 Compatibility Administrator」を参照してください。 アプリケーション マニフェストを作成することで、アプリケーション開発者が昇格を要求することができます。アプリケーション マニフェストの詳細については、この節の「アプリケーション マニフェストの作成」を参照してください。 ページのトップへ Windows 7 での変更点UAC はセキュリティを高めるための機能なので、その機能を無効にしてしまうことは推奨されません。ただ、Windows Vista では、すべての管理作業で権限昇格ダイアログが表示されるため、煩わしさを感じるユーザーが多かったことも確かです。
図 4-10: ユーザー アカウント制御設定の変更
ページのトップへ UAC 対応アプリケーションを新規に作成するには新規に作成するアプリケーションは、UAC を考慮して開発します。そして、ユーザーが特別な操作をしなくても、必要に応じて権限を昇格できるようにします。 まずは、標準権限で動作できるようにすることを優先します。標準権限で実行できるようにするためには、特に以下の点に注意します。
アプリケーションを検証し、昇格が必要かどうかを確認します。これを確認するための最も分かりやすい方法は、標準ユーザーでアプリケーションを実行してみることです。ただ、このやり方は、バグを 1 つずつ見つけて修正していく必要があるため、時間がかかる可能性があります。 そこで、「Standard User Analyzer」ツールを使用すると、特権に関する問題を予測・診断することができます。このツールは、ACT (Application Compatibility Toolkit) に含まれています。Standard User Analyzer の使用方法は、以下のとおりです。
作成するプログラムが、どんなユーザーをターゲットにしているのかを考えます。アプリケーションが一般ユーザー向けのものであるならば、全ての機能が標準ユーザーで動作するよう、作られていなければなりません。一方、管理者を対象としたアプリケーションで、ほぼ全ての操作に管理者権限が必要ならば、全てのコードが管理者権限で実行されるようにすることが考えられます。標準ユーザーで実行するコードと、管理者権限で実行するコードが混在する場合には、プログラムを分割することを考えます。そして、管理者権限を必要とするプログラムのみを昇格するようにすれば、一部だけ管理者権限で実行するアプリケーションを作成することができます。 ただし、プロセスのトークンは起動時に決定し、変更することはできません。そのため、管理者権限で実行するためには、分離したプロセスを、以下のいずれかの方法を使用して、メインのアプリケーションから呼び出します。
COM 昇格モニカについては、以下の MSDN サイトに「CoCreateInstanceAsAdmin()」(英語) という名前でサンプルコードが紹介されています。 盾アイコンは、特権の昇格が必要となることをユーザーに知らせることを目的としています。この盾アイコンは、以下の 4 種類のアイテム上に表示することができます。
図 4-14: 盾アイコンの表示されたコントロール 昇格を必要とするアプリケーションでは、アプリケーション マニフェストに管理者権限が必要であることを定義します。Windows Vista や Windows 7 では、アプリケーション マニフェストの属性が拡張されていて、「requestedExecutionLevel」要素を使用することで、アプリケーションの実行に必要な権限レベルを設定することができます。「level」属性で設定できる値は以下のとおりです。
次に、以下の 3 種類のうちのいずれかの方法でアプリケーション マニフェストを作成します。 Windows XP SP2 で、「requestedExecutionLevel」などの Windows Vista の拡張機能を持つマニフェストを .exe ファイルまたは .dll ファイルに追加すると、コンピューターが再起動することがあります。この問題に関しては、修正プログラムが提供されています。詳細は、「Windows XP Service Pack 2 (SP2) で Windows Vista の拡張機能を持つマニフェストを .exe ファイルまたは .dll ファイルに追加するとコンピュータが再起動することがある」のサイトを参照してください。 埋め込みマニフェストを作成する アプリケーション マニフェストを、アプリケーション ファイル (exeや dll など) とは別に、Xml 形式のファイルで提供する方法です。アプリケーションと同じディレクトリに、「アプリケーション名.exe.manifest」という名前で保存すると、アプリケーションの起動時に、マニフェスト ファイルが自動的に読み込まれます。 ただし、この情報はキャッシュされているため、一度実行した後でマニフェスト ファイルを配置すると、マニフェストが有効にならないことがあります。更新されない場合には、以下のいずれかの対応をとる必要があります。
以下に具体的な手順を示します。
mt.exe コマンドを使用すると、アプリケーションをビルドした後に、アプリケーション マニフェストを埋め込むことができます。使用方法は以下の通りです。 ・C/C++ プロジェクトでマニフェストを作成するには アプリケーション マニフェストを、アプリケーション ファイル (exe など) に埋め込む方法です。Visual Studio 2008 の GUI 環境を利用して設定することができます。
・マネージ コード (C#、Visual Basic) でマニフェストを埋め込むには アプリケーション マニフェストを、マネージ コードに埋め込む方法です。Visual Studio 2008 でマニフェストを追加することができます。
アプリケーションに署名を追加することで、権限の昇格ダイアログが表示されたときに、帯の色を黄色ではなく、青で表示させることができます。 署名については、「3.4 ファイルへの署名」を参照してください。 ページのトップへ Windows 7 での既存アプリケーションへの対応Windows Vista や Windows 7 では、既存のアプリケーションが標準ユーザーで動作できるように、いくつかの機能を提供しています。この機能により、多くの既存のアプリケーションは、コードを書き換えることなく Windows Vista や Windows 7 上で実行できるようになっています。 アプリケーションから、以下のような標準ユーザーに書き込み権限のない領域 (システム領域など) への書き込みを要求すると、ユーザーごとの領域へリダイレクトされます。
Windows Vista や Windows 7 では、アプリケーションをインストールするには管理者権限が必要です。そのため、インストール プログラムを実行するときには、昇格が必要となります。そこで Windows Vista や Windows 7 では、経験則に基づき特定のパターンに合致するプログラムを、インストーラーとして検出する機能が追加されています。インストーラーとして検出されると、自動的に権限昇格ダイアログが表示され、管理者権限で実行することができます。たとえば、ファイル名やバージョン情報に「setup」、「update」、「install」という文字列が含まれている場合、Windows Vista や Windows 7 はアプリケーションの実行時にインストラーとみなし、実行には昇格が必要であると認識します。そこで自動的に権限昇格用のダイアログ ボックスが表示されます。ここで昇格すれば、問題なくアプリケーションをインストールすることができます。ただし、自動検出するにはインストーラーが以下の要件を満たしている必要があります。
ユーザーごとの領域へのリダイレクト機能や、インストーラーの自動検出の機能は、既存のアプリケーション向けの一時的な互換性機能です。将来はサポートされなくなる可能性もあるため、新規に Windows 7 用のアプリケーションを作成する場合には、適切なストア パスを指定したり、Windows インストーラーを使用したりすべきです。 ページのトップへ 互換性を検証するには昇格が必要かどうかを確認するため、標準ユーザーで実行しテストします。そして、すべての機能が昇格なしに実行できることを確認します。しかし、この方法ではアプリケーションの一部で問題が発生した場合、そのアプリケーションが終了することがあります。よって、バグを 1 つずつ見つけて修正していかなければならないため、時間がかかります。「Standard User Analyzer」ツールを使用することで、効率よく特権に関する問題を発見することができます。 以下のような現象が起こった場合、管理者権限がないために実行が失敗している可能性があります。
このような問題が発生する場合には、そのアプリケーションを管理者として実行するか、エラーが起こるコードの前で、UAC の権限昇格ダイアログを表示し、管理者で実行するなどの修正が必要です。 以下のユーザーを使用し、1 ~ 4 の順番で、アプリケーションの互換性をテストします。
テストの結果、1 や 2 で問題が起こり、3 や 4 では起こらないという場合は、UAC に起因している可能性が高いといえます。また、別のウィンドウとのやり取りにのみ問題があるという場合は、UIPI の問題である可能性があります。さらに、IE (Internet Explorer) がアプリケーションに関連している場合、保護モードの IE による問題の可能性もあります。UIPI については「4.4 ユーザーインターフェイス特権の分離 (UIPI)」、保護モードの IE については「4.5 IE のセキュリティ機能」を参照してください。 ページのトップへ UAC 事例ここでは、UAC を使用する上で発生する可能性の高い問題と対応策を 5 つ紹介します。
|
|
ページのトップへ