知識マップ: Windowsアプリで「管理者権限が必要な処理だけ」を分離する具体的な書き方
記事「Windowsアプリで「管理者権限が必要な処理だけ」を分離する具体的な書き方」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事はWindowsアプリで管理者権限が必要な処理だけを分離する具体的な実装を扱います。UACはプロセスの整合性レベルで制御され親子プロセスは同じレベルでトークンを継承するため、同じプロセス内の一部だけを昇格させることはできず、標準ユーザーのUIと管理者権限のhelper EXEを組み合わせるAdministrator Broker Modelが基本形になります。helperの起動にはrunasを使い、UIとhelperの通信には既定ACLに頼らず明示的なPipeSecurityを設定した名前付きパイプを使い、接続元PIDの検証とhelper側で固定operationのみを受け付けるallowlistによって任意コマンド実行の口を塞ぎます。PipeOptions.CurrentUserOnlyは整合性レベルの違いまで確認してしまうため、この用途には使えません。
flowchart LR
accTitle: 管理者権限処理の分離実装の知識マップ
accDescr: UACの整合性レベルという制約のもとで、Administrator Broker Modelがなぜ標準ユーザーUIと管理者helper EXEを名前付きパイプでつなぎ、ACLとPID検証とoperation allowlistで境界を守るのかを、他の分離モデルとの使い分けとあわせて示した図。
administrator_broker_model["Administrator Broker Model"]
uac["UAC(ユーザーアカウント制御)"]
integrity_level["整合性レベル"]
admin_rights["管理者権限"]
requested_execution_level["requestedExecutionLevel(実行レベル宣言)"]
runas_verb["runas起動(ShellExecute Verb)"]
named_pipe["名前付きパイプ"]
pipe_security_acl["PipeSecurityによる明示的ACL"]
unauthorized_pipe_access["パイプへの不正な接続"]
client_pid_verification["接続元PIDの検証"]
helper_operation_allowlist["helperのoperation allowlist"]
arbitrary_command_execution["任意コマンド実行口"]
sporadic_admin_operation["散発的な管理者操作"]
os_service_model["Operating System Service Model"]
continuous_unattended_admin_operation["常時・無人・頻繁な管理者操作"]
elevated_task_model["Elevated Task Model"]
short_scheduled_admin_task["短い定型の管理者ジョブ"]
admin_com_object_model["Administrator COM Object Model"]
existing_com_integration["既存COM前提の統合"]
currentuseronly_pipeoption["PipeOptions.CurrentUserOnly"]
administrator_broker_model -->|"利用する"| uac
uac -->|"利用する"| integrity_level
uac -.->|"前提とする"| admin_rights
administrator_broker_model -->|"前提とする"| requested_execution_level
runas_verb -->|"利用する"| uac
administrator_broker_model -.->|"利用する"| named_pipe
named_pipe -->|"で構成できる"| pipe_security_acl
named_pipe -.->|"原因になり得る"| unauthorized_pipe_access
pipe_security_acl -->|"軽減する"| unauthorized_pipe_access
client_pid_verification -->|"軽減する"| unauthorized_pipe_access
administrator_broker_model -.->|"利用する"| client_pid_verification
administrator_broker_model -->|"利用する"| helper_operation_allowlist
helper_operation_allowlist -->|"防止する"| arbitrary_command_execution
administrator_broker_model -->|"推奨される対応"| sporadic_admin_operation
os_service_model -->|"推奨される対応"| continuous_unattended_admin_operation
elevated_task_model -->|"推奨される対応"| short_scheduled_admin_task
admin_com_object_model -->|"推奨される対応"| existing_com_integration
currentuseronly_pipeoption -->|"両立しない"| administrator_broker_model
os_service_model -->|"前提とする"| admin_rights
elevated_task_model -->|"前提とする"| admin_rights
admin_com_object_model -->|"前提とする"| admin_rights
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Administrator Broker ModelはUAC(ユーザーアカウント制御)を利用します。
- UAC(ユーザーアカウント制御)は整合性レベルを利用します。
- UAC(ユーザーアカウント制御)は管理者権限を前提とします。
- Administrator Broker ModelはrequestedExecutionLevel(実行レベル宣言)を前提とします。
- runas起動(ShellExecute Verb)はUAC(ユーザーアカウント制御)を利用します。
- Administrator Broker Modelは名前付きパイプを利用します。
- 名前付きパイプはPipeSecurityによる明示的ACLで構成できます。
- 名前付きパイプはパイプへの不正な接続の原因になることがあります。
- PipeSecurityによる明示的ACLはパイプへの不正な接続を軽減します。
- 接続元PIDの検証はパイプへの不正な接続を軽減します。
- Administrator Broker Modelは接続元PIDの検証を利用します。
- Administrator Broker Modelはhelperのoperation allowlistを利用します。
- helperのoperation allowlistは任意コマンド実行口を防ぎます。
- Administrator Broker Modelは散発的な管理者操作に対する本記事の推奨です。
- Operating System Service Modelは常時・無人・頻繁な管理者操作に対する本記事の推奨です。
- Elevated Task Modelは短い定型の管理者ジョブに対する本記事の推奨です。
- Administrator COM Object Modelは既存COM前提の統合に対する本記事の推奨です。
- PipeOptions.CurrentUserOnlyはAdministrator Broker Modelと両立しません。
- Operating System Service Modelは管理者権限を前提とします。
- Elevated Task Modelは管理者権限を前提とします。
- Administrator COM Object Modelは管理者権限を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。