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