ユーザー アカウント制御のしくみ

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016

ユーザー アカウント制御 (UAC) を使用すると、悪意のあるプログラム (別名: マルウェア) がコンピューターに損害を与えるのを防ぐことができ、また組織は適切に管理されたデスクトップをデプロイできます。 UAC を使用すると、管理者が特にシステムへの管理者レベルのアクセスを承認しない限り、アプリケーションとタスクは常に非管理者アカウントのセキュリティ コンテキストで実行されます。 UAC により、未承認のアプリケーションが自動的にインストールされるのをブロックでき、またシステム設定を誤って変更するのを防止できます。

UAC のプロセスと相互作用

管理者アクセス トークンを必要とする各アプリケーションでは、プロンプトで管理者に同意を求める必要があります。 1 つの例外は、親プロセスと子プロセスの間に存在する関係です。 子プロセスは、親プロセスからユーザー アクセス トークンを継承します。 ただし、親と子の両方のプロセスは、同じ整合性レベルを持つ必要があります。 Windows Server 2012 は、整合性レベルをマーキングすることでプロセスを保護します。 整合性レベルは、信頼性の測定値です。 "高" 整合性アプリケーションはディスク パーティション アプリケーションなどのシステム データを変更するタスクを実行するアプリケーションで、"低" 整合性アプリケーションは Web ブラウザーなどのオペレーティング システムを危険にさらす可能性があるタスクを実行するアプリケーションです。 整合性レベルが低いアプリケーションは、整合性レベルが高いアプリケーションのデータを変更できません。 標準ユーザーが管理者アクセス トークンを必要とするアプリケーションを実行しようとすると、UAC は、有効な管理者資格情報を入力するようにユーザーに要求します。

このプロセスがどのように実行されるか適切に理解するには、Windows Server 2012 のログオン プロセスを詳しく確認することが重要になります。

Windows Server 2012 のログオン プロセス

次の図は、管理者のログオン プロセスと標準ユーザーのログオン プロセスがどのように違うのかを示しています。

Illustration demonstrating how the logon process for an administrator differs from the logon process for a standard user

既定では、標準ユーザーと管理者は、標準ユーザーのセキュリティ コンテキストでリソースにアクセスし、アプリケーションを実行します。 ユーザーがコンピューターにログオンすると、そのユーザーのアクセス トークンがシステムにより作成されます。 アクセス トークンには、固有のセキュリティ識別子 (SID) や Windows 特権などの、ユーザーが許可されるアクセスのレベルについての情報が含まれています。

管理者がログオンするときは、2 つの異なるアクセス トークンがユーザー用に作成されます。標準ユーザー アクセス トークンと、管理者アクセス トークンです。 標準ユーザー アクセス トークンには管理者アクセス トークンと同じユーザー固有の情報が含まれていますが、管理用の Windows 特権と SID は削除されます。 標準ユーザー アクセス トークンは、管理タスクを実行しないアプリケーション (標準ユーザー アプリケーション) を起動するために使用されます。 標準ユーザー アクセス トークンは、次に、デスクトップ (Explorer.exe) を表示するために使用されます。 explorer.exe は、他のすべてのユーザー側から開始されるプロセスのアクセス トークンの継承元となる親プロセスです。 このため、ユーザーが同意または資格情報を提供して、アプリケーションが完全な管理アクセス トークンを使用することを承認しない限り、すべてのアプリケーションは標準ユーザーとして実行されます。

Administrators グループのメンバーであるユーザーは、標準ユーザー アクセス トークンを使って、ログオン、Web の閲覧、電子メールの読み取りを行うことができます。 管理者が、管理者アクセス トークンを必要とするタスクを実行する必要がある場合、Windows Server 2012 は、承認するようユーザーに求めるプロンプトを自動的に表示します。 これは昇格時のプロンプトと呼ばれ、ローカル セキュリティ ポリシー スナップイン (Secpol.msc) またはグループ ポリシーを使って動作を構成することができます。

注意

"昇格" という用語は、完全管理者アクセス トークンを使用するための同意または資格情報をユーザーに求める、Windows Server 2012 のプロセスを示すために使用されます。

UAC ユーザー エクスペリエンス

UAC を有効にしている場合、標準ユーザーのユーザー エクスペリエンスと管理者承認モードでの管理者のユーザー エクスペリエンスは異なります。 Windows Server 2012 を実行するための、より安全で推奨される方法は、プライマリ ユーザー アカウントを標準ユーザー アカウントにする方法です。 標準ユーザーとして実行することは、管理環境のセキュリティを最大化するために役立ちます。 組み込みの UAC 昇格コンポーネントにより、標準ユーザーはローカル管理者アカウントの有効な資格情報を入力することで、簡単に管理タスクを実行できます。 既定では、標準ユーザーの組み込みの UAC 昇格コンポーネントは、資格情報プロンプトです。

標準ユーザーとして実行するための別の方法は、管理者承認モードで管理者として実行することです。 組み込みの UAC 昇格コンポーネントにより、ローカルの Administrators グループのメンバーは承認を提供することで管理タスクを簡単に実行できます。 既定では、管理者承認モードでの管理者アカウント用の組み込みの UAC 昇格コンポーネントは、同意のプロンプトと呼ばれます。 UAC の昇格プロンプトの動作は、ローカル セキュリティ ポリシー スナップイン (Secpol.msc) またはグループ ポリシーを使用して構成できます。

同意のプロンプトと資格情報プロンプト

UAC が有効になっている場合、Windows Server 2012 では、完全管理者アクセス トークンを必要とするプログラムまたはタスクが開始される前に、同意を求めるプロンプトが表示されるか、有効なローカル管理者アカウントの資格情報を求めるプロンプトが表示されます。 このプロンプトにより、悪意のあるソフトウェアが警告なしにインストールされないようになります。

同意のプロンプト

ユーザーがユーザーの管理アクセス トークンを必要とするタスクを実行しようとした場合、同意のプロンプトが表示されます。 UAC の同意プロンプトのスクリーンショットを次に示します。

Screen shot of the UAC consent prompt

資格情報のプロンプト

標準ユーザーがユーザーの管理アクセス トークンを必要とするタスクを実行しようとすると、資格情報のプロンプトが表示されます。 この標準ユーザーの既定のプロンプトの動作は、ローカル セキュリティ ポリシー スナップイン (Secpol.msc) またはグループ ポリシーを使用して構成できます。 [ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作] ポリシー設定値が [資格情報を要求する]に設定されることで、管理者は資格情報の提供も求められる場合があります。

次のスクリーンショットは、UAC の資格情報プロンプトの例です。

Screen shot showing an example of the UAC credential prompt

UAC の昇格プロンプト

UAC の昇格プロンプトは、アプリケーション固有のものになるように色分けされています。これにより、アプリケーションの潜在的なセキュリティ リスクをただちに認識できます。 アプリケーションが管理者の完全アクセス トークンを使用して実行しようとすると、Windows Server 2012 は最初に実行可能ファイルを分析して発行元を特定します。 アプリケーションは、最初に実行可能ファイルの発行元に基づいて 3 つのカテゴリに分類されます。3 つのカテゴリは、Windows Server 2012、発行元確認済み (署名あり)、発行元未確認 (署名なし) です。 次のダイアグラムは、Windows Server 2012 が、どの色の昇格プロンプトをユーザーに表示するか決定する方法を示しています。

昇格のプロンプトの色分けは、次のように行われます。

  • 赤色の背景に赤色の盾アイコン: アプリケーションは、グループ ポリシーによってブロックされています。またはアプリケーションは、ブロックされている発行元からのアプリケーションです。

  • 青色の背景に青色と金色の盾アイコン: アプリケーションは、Windows Server 2012 の管理アプリケーションです (コントロール パネル項目など)。

  • 青色の背景に青色の盾アイコン: アプリケーションは Authenticode を使って署名され、ローカル コンピューターによって信頼されています。

  • 黄色の背景に黄色の盾アイコン: アプリケーションは署名されていないか、署名されていますがローカル コンピューターによって信頼されていません。

盾アイコン

[日付と時刻のプロパティ]などの一部のコントロール パネル項目には、管理者と標準ユーザーの操作の組み合わせが含まれています。 標準ユーザーは時計を表示しタイム ゾーンを変更することができますが、ローカル システム時刻を変更するには完全な管理者アクセス トークンが必要です。 [日付と時刻のプロパティ] コントロール パネル項目のスクリーンショットを次に示します。

Screen shot showing the Date and Time Properties Control Panel item

[日付と時刻の変更] ボタン上の盾アイコンは、プロセスに完全管理者アクセス トークンが必要であることを示し、UAC の昇格プロンプトが表示されます。

昇格時のプロンプトの保護

昇格プロセスは、プロンプトをセキュリティで保護されたデスクトップに誘導することでより保護されます。 Windows Server 2012 では、既定では、同意と資格情報のプロンプトはセキュリティで保護されたデスクトップに表示されます。 Windows プロセスのみがセキュリティで保護されたデスクトップにアクセスできます。 セキュリティのレベルを高めるために、 [ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] ポリシー設定を有効のままにすることをお勧めします。

実行可能ファイルが昇格を要求するときは、ユーザー デスクトップとも呼ばれる対話機能を持つデスクトップがセキュリティで保護されたデスクトップに切り替わります。 セキュリティで保護されたデスクトップではユーザー デスクトップが暗くなり、続行する前に応答する必要がある昇格時のプロンプトが表示されます。 ユーザーが [はい] または [いいえ]をクリックすると、デスクトップがユーザー デスクトップに戻ります。

マルウェアが偽のセキュリティで保護されたデスクトップを表示することがありますが、 [ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作] ポリシー設定が [同意を要求する]に設定されている場合、ユーザーが偽の [はい] をクリックした場合でもマルウェアは昇格されません。 ポリシー設定が [資格情報を要求する]に設定されている場合、資格情報プロンプトを模倣するマルウェアによりユーザーから資格情報が収集される可能性があります。 ただし、マルウェアが管理者特権を持つことはなく、収集されたパスワードが使われた場合でも、システムにはマルウェアによるユーザー インターフェイスの制御を軽減する別の保護があります。

マルウェアがセキュリティで保護されたデスクトップのイミテーションを表示する可能性がありますが、この問題は、ユーザーが前にコンピューターにマルウェアをインストールしていない限り、発生することはありません。 UAC が有効になっている場合、管理者アクセス トークンを必要とするプロセスを警告なしにインストールすることはできないため、ユーザーは [はい] をクリックするか、管理者の資格情報を提供して明示的に同意する必要があります。 UAC の昇格時のプロンプトの特定の動作は、グループ ポリシーに依存します。

UAC のアーキテクチャ

次の図は、UAC のアーキテクチャの詳細を示しています。

Diagram detailing the UAC architecture

各コンポーネントを詳しく理解するには、次の表を確認してください。

コンポーネント 説明
User
ユーザーが特権を必要とする操作を行う 操作によりファイル システムやレジストリが変更される場合は、仮想化が呼び出されます。 その他のすべての操作では ShellExecute が呼び出されます。
ShellExecute ShellExecute は CreateProcess を呼び出します。 ShellExecute は、CreateProcess から ERROR_ELEVATION_REQUIRED エラーを探します。 エラーを受け取った場合、ShellExecute はアプリケーション情報サービスを呼び出し、管理者特権のプロンプトで要求されたタスクの実行を試みます。
CreateProcess アプリケーションが昇格を要求すると、CreateProcess は ERROR_ELEVATION_REQUIRED によってその呼び出しを拒否します。
システム
アプリケーション情報サービス ローカル管理タスクや、より高い整合性レベルを必要とするアプリケーションなど、実行に 1 つ以上の昇格された特権またはユーザー権限を必要とするアプリケーションを開始できるようにするシステム サービス。 昇格が要求され、(グループ ポリシーに基づいて) ユーザーがそれに同意すると、アプリケーション情報サービスは、管理ユーザーのフル アクセス トークンを使用してアプリケーション用の新しいプロセスを作成することで、そのようなアプリケーションを開始できるようにします。
ActiveX インストールの昇格 ActiveX がインストールされていない場合、システムは UAC スライダー レベルをチェックします。 ActiveX がインストールされている場合、 [ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] グループ ポリシー設定がチェックされます。
UAC スライダー レベルのチェック UAC には、4 つのレベルの通知があり、スライダーを使用してその通知レベルを選択できます。

  • スライダーが [常に通知する]に設定されている場合、システムはセキュリティで保護されたデスクトップが有効になっているかどうかをチェックします。

  • Medium

    スライダーが [Default-Notify me only when programs try to make changes to my computer](既定 - プログラムがコンピューターに変更を加えようとした場合にのみ通知する) に設定されている場合、[User Account Control: Only elevate executable files that are signed and validated](ユーザー アカウント制御: 署名され検証された実行可能ファイルのみ昇格する) ポリシー設定がチェックされます。

    • このポリシー設定が有効になっている場合、指定された実行可能ファイルの実行が許可される前に、その実行可能ファイルに対して、公開キー基盤 (PKI) 証明書パス検証が実施されます。
    • このポリシー設定が有効になっていない場合 (既定)、指定された実行可能ファイルの実行が許可される前に、PKI 証明書パス検証は実施されません。 [ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] グループ ポリシー設定がチェックされます。
  • スライダーが [Notify me only when programs try to make changes to my computer (do not dim by desktop)](プログラムがコンピューターに変更を加えようとした場合にのみ通知する (デスクトップを暗転しない)) に設定されている場合、CreateProcess が呼び出されます。

  • 通知しない

    スライダーが [Never notify me when](次の場合は通知しない) に設定されている場合、プログラムがコンピューターに変更を加えようとしても、UAC プロンプトでは通知されません。 重要: この設定は推奨されていません。 この設定は、 [ユーザー アカウント制御: 管理者承認モードでの管理者に対する昇格時のプロンプトの動作] ポリシー設定を [確認を要求しないで昇格する]に設定するのと同じです。

セキュリティで保護されたデスクトップが有効 [ユーザー アカウント制御: 昇格のプロンプト時にセキュリティで保護されたデスクトップに切り替える] ポリシー設定がチェックされます。

- セキュリティで保護されたデスクトップが有効になっている場合、管理者および標準ユーザーのプロンプト動作ポリシー設定に関係なく、すべての昇格要求はセキュリティで保護されたデスクトップに送られます。
- セキュリティで保護されたデスクトップが有効になっていない場合、すべての昇格要求は対話ユーザーのデスクトップに送られ、管理者および標準ユーザーのユーザーごとの設定が使用されます。

CreateProcess CreateProcess は、AppCompat、Fusion、インストーラー検出を呼び出して、アプリケーションに昇格が必要かどうかを評価します。 その後、実行可能ファイルが検査され、その要求実行レベルが特定されます。これは、実行可能ファイルのアプリケーション マニフェストに保存されています。 マニフェストで指定されている要求実行レベルがアクセス トークンと一致しない場合、CreateProcess は失敗となり、エラー (ERROR_ELEVATION_REQUIRED) を ShellExecute に返します。
AppCompat AppCompat データベースには、アプリケーションのアプリケーション互換性修正エントリの情報が保存されます。
Fusion Fusion データベースには、アプリケーションを記述するアプリケーション マニフェストからの情報が保存されます。 マニフェスト スキーマが更新されて、新しい要求実行レベル フィールドが追加されます。
インストーラーの検出 インストーラー検出では、セットアップ実行可能ファイルが検出されます。これにより、ユーザーが知らずに、および同意せずに、インストールが実行されるのを防ぐことができます。
カーネル
仮想化 仮想化テクノロジにより、非対応アプリケーションは、通知なしで実行失敗することがなくなります。つまり、原因を特定できないような形で失敗することがなくなります。 UAC もファイルとレジストリの仮想化と、保護された領域への書き込みを行うアプリケーションのログ記録を提供します。
ファイル システムとレジストリ ユーザーごとのファイルとレジストリの仮想化は、コンピューターごとのレジストリとファイルの書き込み要求を、ユーザーごとの同等の場所にリダイレクトします。 読み取り要求はまず仮想化されたユーザーごとの場所にリダイレクトされ、次にコンピューターごとの場所にリダイレクトされます。

Windows Server 2012 UAC には、以前の Windows バージョンからの変更があります。 新しいスライダーでは、UAC が完全にオフになることはありません。 新しい設定では、以下が行われます。

  • UAC サービスが実行され続けます。

  • 管理者によって開始されたすべての昇格要求が、UAC プロンプトを表示せずに自動的に承認されるようにします。

  • 標準ユーザーのすべての昇格要求を自動的に拒否します。

重要

UAC を完全に無効にするためには、ポリシー [ユーザー アカウント制御: 管理者承認モードですべての管理者を実行する]を無効にする必要があります。

警告

UAC が無効になっている場合、Windows Server 2012 では、カスタマイズされたアプリケーションは動作しません。

仮想化

エンタープライズ環境のシステム管理者はシステムをセキュリティで保護しようとするとため、多くの基幹業務 (LOB) アプリケーションは標準ユーザー アクセス トークンのみを使うように設計されています。 このため、IT 管理者は、UAC を有効にした状態で Windows Server 2012 を実行した場合、アプリケーションの大部分を置き換える必要がありません。

Windows Server 2012 には、UAC に対応しておらず、正しく実行するために管理者のアクセス トークンを必要とするアプリケーションのために、ファイルとレジストリの仮想化テクノロジが組み込まれています。 仮想化により、UAC に対応していないアプリケーションでも Windows Server 2012 と互換性を持つようになります。 UAC に対応していない管理アプリケーションが、Program Files などの保護されたディレクトリに書き込もうとすると、UAC により、そのアプリケーションに対して、そのアプリケーションが変更しようとしているリソースの独自の仮想化ビューが提供されます。 この仮想化コピーは、ユーザーのプロファイル内に保持されます。 この方法では、非対応アプリケーションを実行するユーザーごとに、仮想化されたファイルの個別のコピーが作成されます。

ほとんどのアプリケーション タスクは、仮想化機能を使用して正常に動作します。 仮想化ではほとんどのアプリケーションを実行できますが、これは短期的な修正であり、長期的なソリューションではありません。 アプリケーション開発者は、ファイル、フォルダー、レジストリの仮想化に頼るのではなく、Windows Server 2012 ロゴ プログラムに準拠するようにアプリケーションをできるだけは早く変更する必要があります。

仮想化は、次のシナリオでは選択できません。

  1. 仮想化は、昇格され、完全な管理アクセス トークンで実行されるアプリケーションには適用されません。

  2. 仮想化では、32 ビット アプリケーションのみサポートされます。 昇格されていない 64 ビット アプリケーションは、Windows オブジェクトのハンドル (一意識別子) を取得しようとすると、アクセス拒否メッセージを受け取ります。 ネイティブの Windows 64 ビット アプリケーションは、UAC との互換性が必要であり、正しい場所にデータを書き込む必要があります。

  3. アプリケーションに、要求実行レベル属性が設定されたアプリケーション マニフェストが含まれる場合、そのアプリケーションに対して仮想化は無効になります。

要求実行レベル

アプリケーション マニフェストは、アプリケーションが実行時にバインドする必要がある共有 side-by-side アセンブリとプライベート side-by-side アセンブリを記述および指定する XML ファイルです。 Windows Server 2012 では、アプリケーション マニフェストに、UAC アプリケーションの互換性を目的としたエントリが含まれます。 アプリケーション マニフェストにエントリが含まれる管理アプリケーションでは、ユーザーのアクセス トークンにアクセスするためのアクセス許可を求めるプロンプトがユーザーに表示されます。 ほとんどの管理アプリケーションは、アプリケーション マニフェストにエントリがありませんが、アプリケーション互換性の修正プログラムを使用して変更を行わずに実行できます。 アプリケーション互換性の修正プログラムは、UAC 非対応のアプリケーションを Windows Server 2012 で正しく動作させることができるデータベース エントリです。

すべての UAC 対応アプリケーションでは、要求実行レベルをアプリケーション マニフェストに追加する必要があります。 システムへの管理アクセス権がアプリケーションで必要な場合、"管理者が必要" という要求実行レベルをアプリケーションにマーキングすることで、システムはこのプログラムを管理アプリケーションとして識別し、必要な昇格手順を実行します。 要求実行レベルで、アプリケーションに必要な特権を指定します。

インストーラー検出テクノロジ

インストール プログラムは、ソフトウェアをデプロイするために設計されたアプリケーションです。 ほとんどのインストール プログラムは、システム ディレクトリとレジストリ キーに書き込みます。 これらの保護されたシステムの場所は、通常、インストーラー検出テクノロジで管理者だけが書き込むことができます。これは、標準ユーザーにはプログラムをインストールするための十分なアクセス権がないことを意味します。 Windows Server 2012 は、インストール プログラムをヒューリスティックに検出し、アクセス特権で実行するために、管理者の資格情報または管理者ユーザーからの承認を要求します。 また Windows Server 2012 は、更新プログラムと、アプリケーションをアンインストールするプログラムもヒューリスティックに検出します。 UAC の設計上の目標の 1 つは、インストール プログラムがファイル システムとレジストリの保護されている領域に書き込むことで、ユーザーの知らない間に、またはユーザーの同意なくインストールが実行されないようにすることです。

インストーラー検出は次の対象にのみ適用されます。

  • 32 ビット実行可能ファイル。

  • 要求実行レベル属性を持たないアプリケーション。

  • UAC が有効になった標準ユーザーとして実行されている対話型プロセス。

32 ビット プロセスが作成される前に、インストーラーであるかどうかを判断するため、次の属性が確認されます。

  • ファイル名に "install"、"setup"、"update" などのキーワードが含まれているかどうか。

  • バージョン管理リソース フィールドに次のキーワードが含まれているかどうか。ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、エクスポート名。

  • サイド バイ サイド マニフェスト内のキーワードが実行可能ファイルに埋め込まれているかどうか。

  • 特定の StringTable エントリのキーワードが実行可能ファイルでリンクされているかどうか。

  • リソース スクリプト データのキー属性が実行可能ファイルでリンクされているかどうか。

  • 実行可能ファイル内に対象となるバイトのシーケンスがあるかどうか。

注意

キーワードとバイトのシーケンスは、さまざまなインストーラー テクノロジから確認された共通の特徴から取得されました。

注意

インストーラー検出がインストール プログラムを検出するには、[ユーザー アカウント制御: アプリケーションのインストールを検出し、昇格をプロンプトする] ポリシー設定が有効にされている必要があります。 この設定は既定で有効になっており、ローカル セキュリティ ポリシー スナップイン (Secpol.msc) を使用してローカルで構成でき、またグループ ポリシー (Gpedit.msc) によってドメイン、OU、または特定グループ用に構成できます。