ユーザー アカウント制御のしくみ
ユーザー アカウント制御 (UAC) は、Microsoft の全体的なセキュリティ ビジョンの基本的なコンポーネントです。 UAC は、マルウェアの影響を軽減するために役立ちます。
UAC のプロセスと相互作用
管理者アクセス トークンを必要とする各アプリは、同意を要求する必要があります。1 つの例外は、親プロセスと子プロセスの間に存在する関係です。子プロセスは、親プロセスからユーザーのアクセス トークンを継承します。ただし、親と子の両方のプロセスは、同じ整合性レベルを持つ必要があります。Windows 10 は、これらの整合性レベルをマークすることによって、プロセスを保護します。整合性レベルは、信頼性の測定値です。"高" 整合性アプリケーションはディスク パーティション アプリケーションなどのシステム データを変更するタスクを実行するアプリケーションで、"低" 整合性アプリケーションは Web ブラウザーなどのオペレーティング システムを危険にさらす可能性があるタスクを実行するアプリケーションです。整合性レベルの低いアプリは、整合性レベルの高いアプリケーションのデータを変更することはできません。標準ユーザーが管理者アクセス トークンを必要とするアプリを実行しようとすると、UAC が有効な管理者の資格情報を提供するようユーザーに求めます。
このプロセスのしくみを詳しく理解するために、Windows のログオン プロセスを見てみましょう。
ログオン プロセス
管理者のログオン プロセスと標準ユーザーのログオン プロセスの違いを以下に示します。
既定では、標準ユーザーと管理者はリソースにアクセスし、標準ユーザーのセキュリティ コンテキストでアプリを実行します。ユーザーがコンピューターにログオンすると、そのユーザーのアクセス トークンがシステムにより作成されます。アクセス トークンには、固有のセキュリティ識別子 (SID) や Windows 特権などの、ユーザーが許可されるアクセスのレベルについての情報が含まれています。
管理者がログオンするときは、2 つの異なるアクセス トークンがユーザー用に作成されます。標準ユーザー アクセス トークンと、管理者アクセス トークンです。標準ユーザー アクセス トークンには管理者アクセス トークンと同じユーザー固有の情報が含まれていますが、管理用の Windows 特権と SID は削除されます。標準ユーザー アクセス トークンは、管理タスクを実行しないアプリ (標準ユーザー アプリ) を起動するために使われます。標準ユーザー アクセス トークンはその後、デスクトップを表示するために使われます (explorer.exe)。explorer.exe は、他のすべてのユーザー側から開始されるプロセスのアクセス トークンの継承元となる親プロセスです。この結果、アプリが完全な管理アクセス トークンを使うことを承認するための同意または資格情報をユーザーが提供しない限り、すべてのアプリは標準ユーザーとして実行されます。
Administrators グループのメンバーであるユーザーは、標準ユーザー アクセス トークンを使って、ログオン、Web の閲覧、電子メールの読み取りを行うことができます。管理者が管理者アクセス トークンを必要とするタスクを実行する必要がある場合、Windows 10 が自動的にユーザーに承認を求めます。これは昇格時のプロンプトと呼ばれ、ローカル セキュリティ ポリシー スナップイン (Secpol.msc) またはグループ ポリシーを使って動作を構成することができます。詳しくは、「ユーザー アカウント制御セキュリティ ポリシー設定」をご覧ください。
UAC ユーザー エクスペリエンス
UAC を有効にしている場合、標準ユーザーのユーザー エクスペリエンスと管理者承認モードでの管理者のユーザー エクスペリエンスは異なります。Windows 10 を実行するための推奨されるより安全な方法は、プライマリ ユーザー アカウントを標準ユーザー アカウントにすることです。標準ユーザーとして実行することは、管理環境のセキュリティを最大化するために役立ちます。組み込みの UAC 昇格コンポーネントにより、標準ユーザーはローカル管理者アカウントの有効な資格情報を入力することで、簡単に管理タスクを実行できます。既定では、標準ユーザーの組み込みの UAC 昇格コンポーネントは、資格情報プロンプトです。
標準ユーザーとして実行するための別の方法は、管理者承認モードで管理者として実行することです。組み込みの UAC 昇格コンポーネントにより、ローカルの Administrators グループのメンバーは承認を提供することで管理タスクを簡単に実行できます。既定では、管理者承認モードでの管理者アカウント用の組み込みの UAC 昇格コンポーネントは、同意のプロンプトと呼ばれます。
同意のプロンプトと資格情報プロンプト
UAC が有効になっている場合、Windows 10 は完全な管理者アクセス トークンが必要なプログラムまたはタスクを開始する前に、同意または有効なローカル管理者アカウントの資格情報を求めます。このプロンプトにより、悪意のあるソフトウェアが警告なしにインストールされないようになります。
同意のプロンプト
ユーザーがユーザーの管理アクセス トークンを必要とするタスクを実行しようとした場合、同意のプロンプトが表示されます。UAC の同意のプロンプトの例を次に示します。
資格情報プロンプト
標準ユーザーがユーザーの管理アクセス トークンを必要とするタスクを実行しようとした場合、資格情報プロンプトが表示されます。[ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作] ポリシー設定値が [資格情報を要求する] に設定されることで、管理者は資格情報の提供も求められる場合があります。
UAC の資格情報プロンプトの例を、次に示します。
UAC の昇格時のプロンプト
UAC の昇格時のプロンプトはアプリ固有に色分けされていて、アプリケーションのセキュリティ リスクの可能性をすぐに識別できるようになっています。アプリが管理者のフル アクセス トークンで実行を試みた場合、Windows 10 はまず発行元を判断するために実行可能ファイルを分析します。アプリはまず、ファイルの発行元に基づいて 3 つのカテゴリに分けられます。Windows 10、検証済み (署名済み) の発行元、検証されていない (署名のない) 発行元です。次の図は、Windows 10 がユーザーにどの色の昇格時のプロンプトを提示するかを決定する方法を示しています。
昇格のプロンプトの色分けは、次のように行われます。
赤色の背景に赤色の盾アイコン: アプリはグループ ポリシーによってブロックされているか、ブロックされている発行元のアプリです。
青色の背景に青色と金色の盾アイコン: アプリケーションはコントロール パネル項目などの Windows 10 管理アプリです。
青色の背景に青色の盾アイコン: アプリケーションは Authenticode を使って署名され、ローカル コンピューターによって信頼されています。
黄色の背景に黄色の盾アイコン: アプリケーションは署名されていないか、署名されていますがローカル コンピューターによって信頼されていません。
盾アイコン
[日付と時刻のプロパティ] などの一部のコントロール パネル項目には、管理者と標準ユーザーの操作の組み合わせが含まれています。標準ユーザーは時計を表示しタイム ゾーンを変更することができますが、ローカル システム時刻を変更するには完全な管理者アクセス トークンが必要です。[日付と時刻のプロパティ] コントロール パネル項目のスクリーン ショットを次に示します。
[日付と時刻の変更] ボタンの上にある盾アイコンは、プロセスに完全な管理者アクセス トークンが必要で、UAC の昇格時のプロンプトが表示されることを示します。
昇格時のプロンプトの保護
昇格プロセスは、プロンプトをセキュリティで保護されたデスクトップに誘導することでより保護されます。Windows 10 の既定では、セキュリティで保護されたデスクトップに同意のプロンプトと資格情報プロンプトが表示されます。Windows プロセスのみがセキュリティで保護されたデスクトップにアクセスできます。セキュリティのレベルを高めるために、[ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] ポリシー設定を有効のままにすることをお勧めします。
実行可能ファイルが昇格を要求するときは、ユーザー デスクトップとも呼ばれる対話機能を持つデスクトップがセキュリティで保護されたデスクトップに切り替わります。セキュリティで保護されたデスクトップではユーザー デスクトップが暗くなり、続行する前に応答する必要がある昇格時のプロンプトが表示されます。ユーザーが [はい] または [いいえ] をクリックすると、デスクトップがユーザー デスクトップに戻ります。
マルウェアが偽のセキュリティで保護されたデスクトップを表示することがありますが、[ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作] ポリシー設定が [同意を要求する] に設定されている場合、ユーザーが偽の [はい] をクリックした場合でもマルウェアは昇格されません。ポリシー設定が [資格情報を要求する] に設定されている場合、資格情報プロンプトを模倣するマルウェアによりユーザーから資格情報が収集される可能性があります。ただし、マルウェアが管理者特権を持つことはなく、収集されたパスワードが使われた場合でも、システムにはマルウェアによるユーザー インターフェイスの制御を軽減する別の保護があります。
マルウェアが偽のセキュリティで保護されたデスクトップを表示する可能性がありますが、ユーザーが前にマルウェアを PC にインストールしていない限り、この問題は起こりません。UAC が有効になっている場合、管理者アクセス トークンを必要とするプロセスを警告なしにインストールすることはできないため、ユーザーは [はい] をクリックするか、管理者の資格情報を提供して明示的に同意する必要があります。UAC の昇格時のプロンプトの特定の動作は、グループ ポリシーに依存します。
UAC のアーキテクチャ
次の図は、UAC のアーキテクチャの詳細を示しています。
各コンポーネントについて詳しく理解するには、次の表を確認してください。
コンポーネント | 説明 |
---|---|
ユーザー | |
ユーザーが特権を必要とする操作を行う |
操作によりファイル システムやレジストリが変更される場合は、仮想化が呼び出されます。その他のすべての操作では ShellExecute が呼び出されます。 |
ShellExecute |
ShellExecute は CreateProcess を呼び出します。ShellExecute は CreateProcess から ERROR_ELEVATION_REQUIRED エラーを探します。エラーを受け取った場合、ShellExecute はアプリケーション情報サービスを呼び出し、管理者特権のプロンプトで要求されたタスクの実行を試みます。 |
CreateProcess |
アプリケーションが昇格を必要とする場合、CreateProcess は ERROR_ELEVATION_REQUIRED で呼び出しを拒否します。 |
システム | |
アプリケーション情報サービス |
ローカル管理タスクなどの実行するために 1 つ以上の管理者特権またはユーザー権利を必要とするアプリと、高い整合性レベルを必要とするアプリを起動するために役立つシステム サービスです。アプリケーション情報サービスは、昇格が必要で (グループ ポリシーによっては) ユーザーにより昇格の同意が与えられているときに管理ユーザーのフル アクセス トークンを使ってアプリケーション用に新しいプロセスを作成することで、このようなアプリの起動を支援します。 |
ActiveX インストールの昇格 |
ActiveX がインストールされていない場合、システムは UAC スライダー レベルをチェックします。ActiveX がインストールされている場合、[ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] グループ ポリシー設定がチェックされます。 |
UAC スライダー レベルのチェック |
UAC には、選択する 4 つのレベルの通知と、通知レベルを選択するために使うスライダーがあります。
|
セキュリティで保護されたデスクトップが有効 |
[ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] ポリシー設定がチェックされます。
|
CreateProcess |
CreateProcess は AppCompat、フュージョン、インストーラー検出を呼び出し、アプリが昇格を必要とするかどうかを評価します。ファイルはその後調べられ、そのファイルのアプリケーション マニフェストに格納されている要求実行レベルが判断されます。マニフェストで指定された要求実行レベルがアクセス トークンと一致しない場合、CreateProcess は失敗し、ShellExecute にエラー (ERROR_ELEVATION_REQUIRED) を返します。詳しくは、「要求実行レベル」をご覧ください。 |
AppCompat |
AppCompat データベースには、アプリケーションのアプリケーション互換性修正エントリの情報が保存されます。 |
Fusion |
Fusion データベースには、アプリケーションを記述するアプリケーション マニフェストからの情報が保存されます。マニフェスト スキーマが更新されて、新しい要求実行レベル フィールドが追加されます。 |
インストーラーの検出 |
インストーラーの検出はセットアップ ファイルを検出し、ユーザーが気づかないうちに、またはユーザーの同意なくインストールが実行されないようにするために役立ちます。詳しくは、「インストーラー検出テクノロジ」をご覧ください。 |
カーネル | |
仮想化 |
仮想化テクノロジは、標準に準拠していないアプリが通知なしに実行を失敗することや、原因を判断できない方法で失敗することがないようにします。UAC もファイルとレジストリの仮想化と、保護された領域への書き込みを行うアプリケーションのログ記録を提供します。詳しくは、「仮想化」をご覧ください。 |
ファイル システムとレジストリ |
ユーザーごとのファイルとレジストリの仮想化は、コンピューターごとのレジストリとファイルの書き込み要求を、ユーザーごとの同等の場所にリダイレクトします。読み取り要求はまず仮想化されたユーザーごとの場所にリダイレクトされ、次にコンピューターごとの場所にリダイレクトされます。 |
スライダーにより UAC が完全にオフになることはありません。[通知しない] に設定した場合でも、次のことを行います。
UAC サービスが実行され続けます。
管理者によって開始されたすべての昇格要求が、UAC プロンプトを表示せずに自動的に承認されるようにします。
標準ユーザーのすべての昇格要求を自動的に拒否します。
重要
UAC を完全に無効にするためには、ポリシー [ユーザー アカウント制御: 管理者承認モードですべての管理者を実行する] を無効にする必要があります。
警告
UAC が無効にされている場合、ユニバーサル Windows アプリは機能しません。
仮想化
エンタープライズ環境のシステム管理者はシステムをセキュリティで保護しようとするとため、多くの基幹業務 (LOB) アプリケーションは標準ユーザー アクセス トークンのみを使うように設計されています。このため、UAC をオンにしたときに、大半のアプリは交換する必要がありません。
Windows 10 には、UAC 準拠ではなく、正しく実行するために管理者のアクセス トークンを必要とするアプリのためのファイルとレジストリの仮想化テクノロジが含まれています。UAC 準拠でない管理アプリがプログラム ファイルなどの保護されたフォルダーに書き込もうとすると、変更しようとしているリソースの独自の仮想化されたビューが UAC によりアプリに与えられます。この仮想化コピーは、ユーザーのプロファイル内に保持されます。この戦略では、標準に準拠していないアプリを実行する各ユーザー用に、仮想化されたファイルの個別のコピーを作成します。
仮想化機能を使うことで、ほとんどのアプリのタスクが正常に動作します。仮想化ではほとんどのアプリケーションを実行できますが、これは短期的な修正であり、長期的なソリューションではありません。アプリの開発者は、ファイル、フォルダー、レジストリの仮想化に依存するのではなく、できるだけ早く標準に準拠するようにアプリを変更する必要があります。
仮想化は、次のシナリオではオプションになりません。
仮想化は、完全な管理アクセス トークンで昇格と実行が行われるアプリには適用されません。
仮想化は、32 ビット アプリのみをサポートしています。管理者特権でない 64 ビット アプリでは、Windows オブジェクトに対するハンドル (一意な識別子) を取得しようとしたときに、アクセス拒否のメッセージだけが表示されます。ネイティブの Windows 64 ビット アプリは、UAC と互換性があり、データを正しい場所に書き込むことが要求されます。
要求実行レベル属性を使ったアプリ マニフェストがアプリに含まれている場合、仮想化は無効になります。
要求実行レベル
アプリ マニフェストとは、アプリが実行時にバインドする必要がある共有およびプライベートのサイド バイ サイド アセンブリの記述と指定を行う XML ファイルです。アプリ マニフェストには、UAC アプリ互換性のためのエントリが含まれています。アプリ マニフェストにエントリを含む管理アプリは、ユーザーのアクセス トークンにアクセスするための許可をユーザーに求めます。アプリ マニフェストにエントリがない場合でも、多くの管理アプリはアプリ互換性修正プログラムを使って変更を行わなくても実行できます。アプリ互換性修正プログラムは、UAC 準拠でないアプリケーションを正常に動作させるためのデータベース エントリです。
すべての UAC 準拠のアプリには、アプリケーション マニフェストに追加されている要求実行レベルが必要です。アプリケーションがシステムへの管理アクセスを必要とする場合は、"管理者の特権が必要です" の要求実行レベルでアプリをマークすることでシステムがこのプログラムを管理アプリとして識別するようになり、必要な昇格手順が実行されます。要求実行レベルは、アプリに必要な特権を指定します。
インストーラー検出テクノロジ
インストール プログラムはソフトウェアを展開するために設計されたアプリです。ほとんどのインストール プログラムは、システム ディレクトリとレジストリ キーに書き込みます。これらの保護されたシステムの場所は、通常、インストーラー検出テクノロジで管理者だけが書き込むことができます。これは、標準ユーザーにはプログラムをインストールするための十分なアクセス権がないことを意味します。Windows 10 はインストール プログラムをヒューリスティックによって検出し、アクセス特権で実行するために、管理者の資格情報または管理者ユーザーからの承認を要求します。Windows 10 は、更新プログラムとアプリケーションをアンインストールするプログラムもヒューリスティックによって検出します。UAC の設計上の目標の 1 つは、インストール プログラムがファイル システムとレジストリの保護されている領域に書き込むことで、ユーザーの知らない間に、またはユーザーの同意なくインストールが実行されないようにすることです。
インストーラー検出は次の対象にのみ適用されます。
32 ビット実行可能ファイル。
要求実行レベル属性を持たないアプリケーション。
UAC が有効になった標準ユーザーとして実行されている対話型プロセス。
32 ビット プロセスが作成される前に、インストーラーであるかどうかを判断するため、次の属性が確認されます。
ファイル名に "install"、"setup"、"update" などのキーワードが含まれているかどうか。
バージョン管理リソース フィールドに次のキーワードが含まれているかどうか。ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、エクスポート名。
サイド バイ サイド マニフェスト内のキーワードが実行可能ファイルに埋め込まれているかどうか。
特定の StringTable エントリのキーワードが実行可能ファイルでリンクされているかどうか。
リソース スクリプト データのキー属性が実行可能ファイルでリンクされているかどうか。
実行可能ファイル内に対象となるバイトのシーケンスがあるかどうか。
注
キーワードとバイトのシーケンスは、さまざまなインストーラー テクノロジから確認された共通の特徴から取得されました。
注
インストーラー検出がインストール プログラムを検出するには、[ユーザー アカウント制御: アプリケーションのインストールを検出し、昇格をプロンプトする] ポリシー設定が有効にされている必要があります。詳しくは、「ユーザー アカウント制御セキュリティ ポリシー設定」をご覧ください。