管理者権限処理の分離実装の知識マップ(知識グラフ)
type: Dataset
description: この記事はWindowsアプリで管理者権限が必要な処理だけを分離する具体的な実装を扱います。UACはプロセスの整合性レベルで制御され親子プロセスは同じレベルでトークンを継承するため、同じプロセス内の一部だけを昇格させることはできず、標準ユーザーのUIと管理者権限のhelper EXEを組み合わせるAdministrator Broker Modelが基本形になります。helperの起動にはrunasを使い、UIとhelperの通信には既定ACLに頼らず明示的なPipeSecurityを設定した名前付きパイプを使い、接続元PIDの検証とhelper側で固定operationのみを受け付けるallowlistによって任意コマンド実行の口を塞ぎます。PipeOptions.CurrentUserOnlyは整合性レベルの違いまで確認してしまうため、この用途には使えません。

Administrator Broker Model
type: Concept
definition: 標準ユーザーで動くUIアプリと、管理者権限で動く別プロセス(helper EXE)を組み合わせ、必要な操作の瞬間だけ昇格させるWindowsアプリの権限分離モデルである。
alternative label: 管理者ブローカーモデル
alternative label: broker EXEモデル
uses: UAC(ユーザーアカウント制御)
uses: helperのoperation allowlist
requires: requestedExecutionLevel(実行レベル宣言)
recommended for: 散発的な管理者操作

UAC(ユーザーアカウント制御)
type: Concept
definition: 管理者レベルのアクセス許可が必要な変更を行う瞬間に同意を求め、プロセスがどのアクセストークンで動作するかを制御するWindowsのセキュリティ機能である。
alternative label: User Account Control
uses: 整合性レベル

整合性レベル
type: Concept
definition: プロセスがどのトークンで動作しているかをlow/medium/high/systemの段階で表し、保護領域への書き込み可否を左右するWindowsのアクセス制御の仕組みである。
alternative label: Mandatory Integrity Control
alternative label: medium/high integrity
broader: UAC(ユーザーアカウント制御)

管理者権限
type: Concept
definition: コンピューター全体の設定を変更できる権限。
alternative label: 昇格

requestedExecutionLevel(実行レベル宣言)
type: Concept
definition: アプリケーションマニフェストで宣言する、asInvoker・highestAvailable・requireAdministratorのいずれかの起動時権限レベルである。
alternative label: asInvoker
alternative label: highestAvailable
alternative label: requireAdministrator
alternative label: requestedExecutionLevel(マニフェスト)

runas起動(ShellExecute Verb)
type: Concept
definition: UseShellExecute=trueと組み合わせて、対象プロセスを管理者として起動するよう要求するProcessStartInfo.Verbの指定値である。
alternative label: Verb="runas"
alternative label: ProcessStartInfo.Verb
broader: UAC(ユーザーアカウント制御)
uses: UAC(ユーザーアカウント制御)

名前付きパイプ
type: Concept
definition: Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。
configured by: PipeSecurityによる明示的ACL

PipeSecurityによる明示的ACL
type: Concept
definition: 名前付きパイプへの接続を許可するユーザーSIDを、既定のセキュリティ記述子に頼らず明示的に組み立てて限定する.NETの設定方式である。
alternative label: PipeSecurity
alternative label: NamedPipeServerStreamAcl
broader: 名前付きパイプ
mitigates: パイプへの不正な接続

パイプへの不正な接続
type: Concept
definition: 名前付きパイプの既定のセキュリティ記述子ではEveryoneや匿名にも読み取り権が入りうるため、想定していない主体がパイプへ接続できてしまう状態である。
alternative label: 名前付きパイプの既定ACLのリスク

接続元PIDの検証
type: Concept
definition: GetNamedPipeClientProcessIdで名前付きパイプへの接続元プロセスIDを取得し、想定したプロセスからの接続かどうかを確認する検証手段である。
alternative label: GetNamedPipeClientProcessId
broader: 名前付きパイプ
mitigates: パイプへの不正な接続

helperのoperation allowlist
type: Concept
definition: 管理者helperが受け付ける操作を、あらかじめ決めた固定の操作名(operation)だけに限定する設計である。
alternative label: 固定operationのみ受付
broader: Administrator Broker Model
prevents: 任意コマンド実行口

任意コマンド実行口
type: Concept
definition: 呼び出し元から渡された任意のコマンド文字列やパスをそのまま実行してしまう、汎用的な実行口である。
alternative label: command executor化

散発的な管理者操作
type: Concept
definition: 普段は不要で、設定画面の特定ボタンを押した時だけ必要になるような、頻度の低い管理者権限の操作である。

Operating System Service Model
type: Concept
definition: 標準ユーザーのUIアプリから常駐サービスへ通信し、昇格プロンプトなしで管理者権限の処理を行わせる権限分離モデルである。
alternative label: サービスモデル
recommended for: 常時・無人・頻繁な管理者操作
requires: 管理者権限

常時・無人・頻繁な管理者操作
type: Concept
definition: 常時監視、ログ収集、バックグラウンド更新のように、無人かつ高頻度で継続的に必要になる管理者権限の処理である。

Elevated Task Model
type: Concept
definition: 標準ユーザーのUIアプリから、管理者権限で動くスケジュールタスクを起動して短い定型処理を行わせる権限分離モデルである。
alternative label: 最高権限タスクモデル
recommended for: 短い定型の管理者ジョブ
requires: 管理者権限

短い定型の管理者ジョブ
type: Concept
definition: 1回ごとに短時間で終わる、定型化された管理者権限のジョブである。

Administrator COM Object Model
type: Concept
definition: 標準ユーザーのUIアプリから、昇格したCOMオブジェクト(COM elevation moniker)を呼び出して管理者権限の処理を行わせる権限分離モデルである。
alternative label: 昇格COMモデル
alternative label: COM elevation moniker
recommended for: 既存COM前提の統合
requires: 管理者権限

既存COM前提の統合
type: Concept
definition: 既にCOMベースで設計された機能があり、管理者権限が必要な操作の範囲がかなり限定される統合の場面である。

PipeOptions.CurrentUserOnly
type: Concept
definition: 名前付きパイプへの接続を、現在のユーザー(かつ同じ昇格レベル)に限定する.NETのアクセス制御オプション。
alternative label: CurrentUserOnly
incompatible with: Administrator Broker Model

subject: Administrator Broker Model
predicate: uses
object: UAC(ユーザーアカウント制御)
description: broker EXEモデルは、管理者helperの起動時にUACの同意プロンプトまたは資格情報プロンプトを経由させることで、必要な瞬間だけ昇格させる
evidence: administrator-broker-model
verified at: 2026-08-01
certainty: established

subject: UAC(ユーザーアカウント制御)
predicate: uses
object: 整合性レベル
description: UACは標準ユーザーと昇格したプロセスをそれぞれmedium/high整合性レベルのトークンで区別して制御する
evidence: mandatory-integrity-control
verified at: 2026-08-01
certainty: established

subject: UAC(ユーザーアカウント制御)
predicate: requires
object: 管理者権限
description: 管理者アカウントに対するUACの同意プロンプトは、そのアカウント自身の管理者アクセストークンを求める。ただし標準ユーザーに対する資格情報プロンプトでは、要求されるのは呼び出し元とは別の管理者アカウントの資格情報であり、UAC自体は標準ユーザーでも機能するため、呼び出し元が常に管理者権限を持つとは限らない
evidence: how-it-works
verified at: 2026-08-01
certainty: context-dependent

subject: Administrator Broker Model
predicate: requires
object: requestedExecutionLevel(実行レベル宣言)
description: broker EXEモデルでは、UIのマニフェストをasInvoker、helperのマニフェストをrequireAdministratorに宣言し分ける
evidence: developing-applications-that-require-administrator-privilege
verified at: 2026-08-01
certainty: established

subject: runas起動(ShellExecute Verb)
predicate: uses
object: UAC(ユーザーアカウント制御)
description: UseShellExecute=trueとVerb="runas"でプロセスを起動すると、対象のマニフェストの要求に応じてUACの昇格プロンプトが表示される
evidence: system-diagnostics-processstartinfo-useshellexecute
verified at: 2026-08-01
certainty: established

subject: Administrator Broker Model
predicate: uses
object: 名前付きパイプ
description: 本記事が組み立てるbroker EXE実装のように、runasと標準入出力リダイレクトの相性の悪さを避けたい場合、UIとhelperの通信には名前付きパイプなどのIPCを使う
evidence: named-pipe-security-and-access-rights
verified at: 2026-08-01
certainty: context-dependent

subject: 名前付きパイプ
predicate: configuredBy
object: PipeSecurityによる明示的ACL
description: 名前付きパイプは既定のセキュリティ記述子に頼らず、明示的なPipeSecurityで接続を許可するユーザーSIDを限定して構成する
evidence: https://learn.microsoft.com/en-us/dotnet/api/system.io.pipes.namedpipeserverstreamacl.create
verified at: 2026-08-01
certainty: established

subject: 名前付きパイプ
predicate: mayCause
object: パイプへの不正な接続
description: 既定のセキュリティ記述子のまま名前付きパイプを使うと、Everyoneや匿名にも読み取り権が入りうる
evidence: named-pipe-security-and-access-rights
verified at: 2026-08-01
certainty: context-dependent

subject: PipeSecurityによる明示的ACL
predicate: mitigates
object: パイプへの不正な接続
description: 呼び出し元ユーザーSIDにだけ接続権を与える明示的なACLを設定することで、別ユーザーからのパイプ接続を遮断できる。ただし同一ユーザーで動く別プロセスからの接続は防げないため、記事はクライアントPIDの検証を併用している
evidence: https://learn.microsoft.com/en-us/dotnet/api/system.io.pipes.namedpipeserverstreamacl.create
verified at: 2026-08-01
certainty: established

subject: 接続元PIDの検証
predicate: mitigates
object: パイプへの不正な接続
description: 同じユーザーで動く別プロセスが先に接続してくる余地に備え、接続元PIDが想定したUIプロセスと一致するかを確認する追加防御である
evidence: nf-winbase-getnamedpipeclientprocessid
verified at: 2026-08-01
certainty: established

subject: Administrator Broker Model
predicate: uses
object: 接続元PIDの検証
description: 同じユーザーで動く別プロセスからのなりすまし接続まで防ぎたい本記事のbroker EXE実装のように、helperはパイプ接続後にGetNamedPipeClientProcessIdで接続元PIDを検証する
evidence: nf-winbase-getnamedpipeclientprocessid
verified at: 2026-08-01
certainty: context-dependent

subject: Administrator Broker Model
predicate: uses
object: helperのoperation allowlist
description: helperはoperation名で処理をdispatchし、固定の操作しか受け付けないようにする
evidence: developing-applications-that-require-administrator-privilege
verified at: 2026-08-01
certainty: established

subject: helperのoperation allowlist
predicate: prevents
object: 任意コマンド実行口
description: 操作自体を固定しbool/enum/数値などの型付き要求だけを受け付けることで、helperが昇格した何でも実行できる口になることを防ぐ
evidence: Command Injection
verified at: 2026-08-01
certainty: established

subject: Administrator Broker Model
predicate: recommendedFor
object: 散発的な管理者操作
description: 管理者操作が散発的で必要な瞬間だけUACを出せばよい場合は、常駐serviceより管理者helper EXEを一回だけ起動する形が本記事の推奨である
evidence: developing-applications-that-require-administrator-privilege
verified at: 2026-08-01
certainty: established

subject: Operating System Service Model
predicate: recommendedFor
object: 常時・無人・頻繁な管理者操作
description: 常時監視やバックグラウンド更新など、常時・無人・頻繁な管理者操作にはserviceが向く
evidence: operating-system-service-model
verified at: 2026-08-01
certainty: established

subject: Elevated Task Model
predicate: recommendedFor
object: 短い定型の管理者ジョブ
description: 1回ごとに短く終わる定型ジョブにはElevated Task Modelが向く
evidence: elevated-task-model
verified at: 2026-08-01
certainty: established

subject: Administrator COM Object Model
predicate: recommendedFor
object: 既存COM前提の統合
description: 既存のCOM設計があり機能がかなり限定される場合にAdministrator COM Object Modelが向く
evidence: administrator-com-object-model
verified at: 2026-08-01
certainty: established

subject: PipeOptions.CurrentUserOnly
predicate: incompatibleWith
object: Administrator Broker Model
description: CurrentUserOnlyは昇格レベルも確認するため、medium整合性のUIとhigh整合性のhelperという構成のbroker EXEモデルの通信には使えない
evidence: https://learn.microsoft.com/en-us/dotnet/api/system.io.pipes.pipeoptions
verified at: 2026-08-01
certainty: established

subject: Operating System Service Model
predicate: requires
object: 管理者権限
description: 常駐serviceは管理者権限で登録され、以後は昇格プロンプトなしで管理者権限の処理を代行する
evidence: operating-system-service-model
verified at: 2026-08-01
certainty: established

subject: Elevated Task Model
predicate: requires
object: 管理者権限
description: 最高権限のスケジュールタスクは管理者権限で登録・実行される
evidence: elevated-task-model
verified at: 2026-08-01
certainty: established

subject: Administrator COM Object Model
predicate: requires
object: 管理者権限
description: 昇格COMは管理者権限のプロセスとして実行される
evidence: administrator-com-object-model
verified at: 2026-08-01
certainty: established