知識マップ: Windowsのセッション分離をどう理解するか ── Session 0・RDP・複数ユーザー同時実行
記事「Windowsのセッション分離をどう理解するか ── Session 0・RDP・複数ユーザー同時実行」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsのサービスはセッション0という隔離されたセッションで動作し、この分離がウィンドウメッセージ経由の権限昇格を構造的に遮断する一方、サービスは直接UIを出せないためUIが必要な場合はプロセス間通信で別プロセスに分離するか、タスクスケジューラの昇格タスクモデルで対話ユーザー側にUIを持たせる。Remote Desktop Services(RDS)はRDPを使って複数ユーザーの同時セッションを提供するが、通常のクライアントOSは単一セッションが基本で、Windows Enterpriseマルチセッションのみが例外となる。Mutexなどの名前付きカーネルオブジェクトはセッションごとに独立した名前空間を持つため、マシン全体で1つに絞りたい場合はGlobal\プレフィックスを明示しないと意図しない多重起動を招く。共有PCやRDS環境では、一時フォルダーやHKCUの扱いを誤ると複数ユーザー間で状態が意図せず共有される。
flowchart LR
accTitle: Windowsのセッション分離の知識マップ
accDescr: サービスが動くセッション0による権限昇格の遮断、RDSとRDPによる複数同時セッション、名前付きカーネルオブジェクトのセッション名前空間とGlobalプレフィックスの関係を示す図
session_zero["セッション0"]
rds["Remote Desktop Services(RDS)"]
kernel_object_session_namespace["名前付きカーネルオブジェクトのセッション名前空間"]
windows_service["Windowsサービス"]
window_message_privilege_escalation["ウィンドウメッセージ経由の権限昇格"]
ipc["プロセス間通信(IPC)"]
named_pipe["名前付きパイプ"]
elevated_task_model["Elevated Task Model"]
task_scheduler["タスクスケジューラの無人実行"]
admin_rights["管理者権限"]
named_mutex["名前付きMutex"]
global_namespace_prefix["Global\プレフィックス"]
unintended_multi_instance["意図しない多重起動"]
single_instance_enforcement["多重起動防止(シングルインスタンス化)"]
rdp["RDP(リモートデスクトッププロトコル)"]
rds_cal["RDS CAL(クライアントアクセスライセンス)"]
wtsgetactiveconsolesessionid["WTSGetActiveConsoleSessionId"]
sm_remotesession["GetSystemMetrics(SM_REMOTESESSION)"]
processidtosessionid["ProcessIdToSessionId"]
temp_folder_per_session["セッションごとの一時フォルダー"]
device_redirection["デバイスリダイレクション"]
hkcu["HKEY_CURRENT_USER(HKCU)"]
cross_session_state_leak["セッション間の意図しない状態共有"]
windows_service -->|"前提とする"| session_zero
session_zero -->|"防止する"| window_message_privilege_escalation
windows_service -.->|"前提とする"| ipc
ipc -.->|"利用する"| named_pipe
elevated_task_model -->|"前提とする"| task_scheduler
elevated_task_model -->|"前提とする"| admin_rights
named_mutex -->|"に保存される"| kernel_object_session_namespace
named_mutex -->|"で構成できる"| global_namespace_prefix
kernel_object_session_namespace -.->|"原因になり得る"| unintended_multi_instance
single_instance_enforcement -->|"防止する"| unintended_multi_instance
rds -->|"利用する"| rdp
rds -.->|"前提とする"| rds_cal
wtsgetactiveconsolesessionid -->|"用いるのは非推奨"| rds
rdp -->|"で確認できる"| sm_remotesession
rds -->|"で確認できる"| processidtosessionid
rds -->|"利用する"| temp_folder_per_session
rds -->|"利用する"| device_redirection
hkcu -.->|"原因になり得る"| cross_session_state_leak
elevated_task_model -.->|"推奨される対応"| session_zero
rds -.->|"原因になり得る"| cross_session_state_leak
概念間の関係(全20件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Windowsサービスはセッション0を前提とします。
- セッション0はウィンドウメッセージ経由の権限昇格を防ぎます。
- Windowsサービスはプロセス間通信(IPC)を前提とします。
- プロセス間通信(IPC)は名前付きパイプを利用します。
- Elevated Task Modelはタスクスケジューラの無人実行を前提とします。
- Elevated Task Modelは管理者権限を前提とします。
- 名前付きMutexは名前付きカーネルオブジェクトのセッション名前空間に保存されます。
- 名前付きMutexはGlobal\プレフィックスで構成できます。
- 名前付きカーネルオブジェクトのセッション名前空間は意図しない多重起動の原因になることがあります。
- 多重起動防止(シングルインスタンス化)は意図しない多重起動を防ぎます。
- Remote Desktop Services(RDS)はRDP(リモートデスクトッププロトコル)を利用します。
- Remote Desktop Services(RDS)はRDS CAL(クライアントアクセスライセンス)を前提とします。
- WTSGetActiveConsoleSessionIdをRemote Desktop Services(RDS)に用いることは推奨されません。
- RDP(リモートデスクトッププロトコル)はGetSystemMetrics(SM_REMOTESESSION)で確認できます。
- Remote Desktop Services(RDS)はProcessIdToSessionIdで確認できます。
- Remote Desktop Services(RDS)はセッションごとの一時フォルダーを利用します。
- Remote Desktop Services(RDS)はデバイスリダイレクションを利用します。
- HKEY_CURRENT_USER(HKCU)はセッション間の意図しない状態共有の原因になることがあります。
- Elevated Task Modelはセッション0に対する本記事の推奨です。
- Remote Desktop Services(RDS)はセッション間の意図しない状態共有の原因になることがあります。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。