セッション0
type: Concept
definition: Windows Vista以降、サービスなど対話的ユーザーに関わらないプロセス専用に予約された、ユーザーの対話的セッションとは分離されたセッション。
alternative label: Session 0
prevents: ウィンドウメッセージ経由の権限昇格

Remote Desktop Services(RDS)
type: Concept
definition: 1台のWindows Serverに複数ユーザーが同時にログオンし、それぞれ独立したセッションでデスクトップやアプリを使えるようにするサーバーの役割・機能群。
alternative label: RDS
alternative label: リモートデスクトップサービス
uses: RDP(リモートデスクトッププロトコル)
verified by: ProcessIdToSessionId
uses: セッションごとの一時フォルダー
uses: デバイスリダイレクション

名前付きカーネルオブジェクトのセッション名前空間
type: Concept
definition: Mutex・イベント・セマフォなどの名前付きカーネルオブジェクトが、プレフィックスを付けない限りセッションごとに独立して配置される名前空間。
alternative label: Kernel Object Session Namespace
alternative label: Local名前空間

Windowsサービス
type: Concept
definition: ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。
alternative label: サービス
requires: セッション0

ウィンドウメッセージ経由の権限昇格
type: Concept
definition: 標準権限のプロセスが同じセッション内のSYSTEM権限プロセスのウィンドウへ細工したメッセージを送り込み、処理を乗っ取って権限を昇格させる攻撃手法。
alternative label: Shatter Attack

プロセス間通信(IPC)
type: Concept
definition: 別プロセスとデータや合図をやり取りする仕組みの総称。
alternative label: Inter-Process Communication

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

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

タスクスケジューラの無人実行
type: Concept
definition: 指定したアカウントで、スケジュールやログオンなどのトリガーに従いプログラムを実行するWindowsの仕組み。ログオン種別(対話トークン・パスワード保存・S4Uなど)の設定によっては、ユーザーがログオンしていなくても実行できる。

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

名前付きMutex
type: Concept
definition: 名前を指定して作成し、その名前を知っている他のプロセスからも同じインスタンスを参照できる、相互排他用のWindowsカーネルオブジェクト。
alternative label: Named Mutex
alternative label: 名前付きミューテックス
stored in: 名前付きカーネルオブジェクトのセッション名前空間
configured by: Global\プレフィックス

Global\プレフィックス
type: Concept
definition: 名前付きカーネルオブジェクトを、セッション個別のLocal名前空間ではなくマシン全体で共通のGlobal名前空間へ明示的に配置するための名前の接頭辞。
alternative label: Global\
alternative label: グローバル名前空間

意図しない多重起動
type: Concept
definition: 名前付きオブジェクトが既定のセッション名前空間に置かれたままGlobal\を明示しなかった結果、RDS環境などでユーザーごとにアプリが複数起動できてしまう状態。

多重起動防止(シングルインスタンス化)
type: Concept
definition: 同一アプリケーションの起動を、セッション・ユーザー・マシンなど選んだ単位で1つに制限する設計。
alternative label: Single Instance
alternative label: 多重起動対策
prevents: 意図しない多重起動

RDP(リモートデスクトッププロトコル)
type: Concept
definition: Windowsのリモートデスクトップ接続で、画面表示や入力をネットワーク越しにやり取りするプロトコル。
alternative label: Remote Desktop Protocol
verified by: GetSystemMetrics(SM_REMOTESESSION)

RDS CAL(クライアントアクセスライセンス)
type: Concept
definition: RD Session Hostロールを介した一般利用に必要な、per deviceまたはper userで発行されるRemote Desktop Servicesのライセンス。
alternative label: RDS Client Access License

WTSGetActiveConsoleSessionId
type: Concept
definition: 物理コンソールに接続されているセッションIDを取得するWin32 APIで、RDP経由のセッションは対象に含まない。
not recommended for: Remote Desktop Services(RDS)

GetSystemMetrics(SM_REMOTESESSION)
type: Concept
definition: 呼び出しプロセスがリモートセッションに紐付いているかを判定するWin32 APIの指定値で、RemoteFX vGPU使用時に誤判定する制約がある。
alternative label: SM_REMOTESESSION

ProcessIdToSessionId
type: Concept
definition: 指定したプロセスIDが属するセッションIDを取得するWin32 APIで、クライアント/サーバー型アプリがセッションを識別するために使う。

セッションごとの一時フォルダー
type: Concept
definition: Remote Desktop Servicesが既定で作成する、ユーザープロファイル配下にセッションIDを名前に含む個別の一時フォルダー。
alternative label: TS_TEMP_PER_SESSION

デバイスリダイレクション
type: Concept
definition: RDSセッションからクライアント側のローカルドライブ・プリンター・USBデバイスなどをサーバー側セッションで使えるようにする機構。
alternative label: Peripheral Redirection

HKEY_CURRENT_USER(HKCU)
type: Concept
definition: セッションではなくログオンユーザーに紐付くレジストリのルートキーで、同一ユーザーの複数セッション間で値が共有される。
alternative label: HKCU

セッション間の意図しない状態共有
type: Concept
definition: 同一ユーザーが複数セッションを持つ環境で、セッションごとに独立させたい状態をHKCUなどユーザー単位の場所に置いたために他セッションへ影響してしまうこと。

subject: Windowsサービス
predicate: requires
object: セッション0
description: Windowsサービスはセッション0という隔離されたセッションで実行され、ユーザーと直接対話できない
evidence: service-changes-for-windows-vista
verified at: 2026-08-01
certainty: established

subject: セッション0
predicate: prevents
object: ウィンドウメッセージ経由の権限昇格
description: サービスとユーザーセッションをセッション0で分離したことで、標準権限のプロセスがサービスのウィンドウへ直接メッセージを送り込む権限昇格の経路が構造的に塞がれた
evidence: service-changes-for-windows-vista
verified at: 2026-08-01
certainty: established

subject: Windowsサービス
predicate: requires
object: プロセス間通信(IPC)
description: UIが必要な場合はサービスとUIアプリをプロセス分離し、プロセス間通信で会話する構成にする
evidence: interactive-services
verified at: 2026-08-01
certainty: context-dependent

subject: プロセス間通信(IPC)
predicate: uses
object: 名前付きパイプ
description: サービスとUIアプリ間で通信する場合、その手段の一つとして名前付きパイプなどが案内されている
evidence: interactive-services
verified at: 2026-08-01
certainty: context-dependent

subject: Elevated Task Model
predicate: requires
object: タスクスケジューラの無人実行
description: 昇格タスクモデルは、標準ユーザーが起動できるセキュリティ記述子を持つSYSTEMタスクをタスクスケジューラに登録することを前提とする
evidence: elevated-task-model
verified at: 2026-08-01
certainty: established

subject: Elevated Task Model
predicate: requires
object: 管理者権限
description: SYSTEM権限で実行されるタスクの登録には管理者権限が必要で、SYSTEMアカウント自体には対話的なログオン権がない
evidence: schtasks-create
verified at: 2026-08-01
certainty: established

subject: 名前付きMutex
predicate: storedIn
object: 名前付きカーネルオブジェクトのセッション名前空間
description: プレフィックスを付けずに作成した名前付きMutexは、既定でそのセッション専用のLocal名前空間に配置される
evidence: kernel-object-namespaces
verified at: 2026-08-01
certainty: established

subject: 名前付きMutex
predicate: configuredBy
object: Global\プレフィックス
description: マシン全体で1つのMutexに絞りたい場合は、名前の先頭にGlobal\を付けてグローバル名前空間へ明示的に配置する
evidence: kernel-object-namespaces
verified at: 2026-08-01
certainty: established

subject: 名前付きカーネルオブジェクトのセッション名前空間
predicate: mayCause
object: 意図しない多重起動
description: セッションごとに独立した名前空間があるため、既定の名前のままだと別ユーザーのセッションでは別のMutexとして扱われ、ユーザーごとに1つずつ起動できてしまう
evidence: kernel-object-namespaces
verified at: 2026-08-01
certainty: context-dependent

subject: 多重起動防止(シングルインスタンス化)
predicate: prevents
object: 意図しない多重起動
description: 名前付きMutexをGlobal\付きで作成したうえで、自分が先に作成できたか(createdNew)を確かめ、既に別のインスタンスが所有していれば終了する — この判定まで含めて初めて、RDS環境で複数ユーザーが同時ログオンしていてもマシン全体でインスタンスを1つに絞れる。Global\を付けるだけでは名前空間がマシン全体になるだけで、どのプロセスもそのMutexを開けてそのまま動き続けてしまう
evidence: kernel-object-namespaces
verified at: 2026-08-01
certainty: established

subject: Remote Desktop Services(RDS)
predicate: uses
object: RDP(リモートデスクトッププロトコル)
description: RDSはRDP接続を介して複数ユーザーの同時セッションを提供するマルチセッション型の基盤である
evidence: overview
verified at: 2026-08-01
certainty: established

subject: Remote Desktop Services(RDS)
predicate: requires
object: RDS CAL(クライアントアクセスライセンス)
description: 2つの管理接続を超える利用にはRD Session Hostロールの導入と適切なRDS CALが必要になる(2つまでの管理用リモート接続はRDS CALなしで利用できる)
evidence: rds-client-access-license
verified at: 2026-08-01
certainty: context-dependent

subject: WTSGetActiveConsoleSessionId
predicate: notRecommendedFor
object: Remote Desktop Services(RDS)
description: WTSGetActiveConsoleSessionIdが返すのは物理コンソールに接続されたセッションだけで、RDP経由でログオンしている複数ユーザーのセッション特定には使うべきでない
evidence: nf-winbase-wtsgetactiveconsolesessionid
verified at: 2026-08-01
certainty: established

subject: RDP(リモートデスクトッププロトコル)
predicate: verifiedBy
object: GetSystemMetrics(SM_REMOTESESSION)
description: 自プロセスがリモートセッションに紐付いているかはGetSystemMetrics(SM_REMOTESESSION)で確認できる
evidence: nf-winuser-getsystemmetrics
verified at: 2026-08-01
certainty: established

subject: Remote Desktop Services(RDS)
predicate: verifiedBy
object: ProcessIdToSessionId
description: 同じマシンからの複数セッションを区別したいサーバー側は、ProcessIdToSessionIdでセッションを識別できる
evidence: client-server-application-guidelines
verified at: 2026-08-01
certainty: established

subject: Remote Desktop Services(RDS)
predicate: uses
object: セッションごとの一時フォルダー
description: RDSは既定でセッションごとに個別の一時フォルダーを作成し、アプリが%TEMP%を使っていればこの分離の恩恵を受けられる
evidence: policy-csp-admx-terminalserver
verified at: 2026-08-01
certainty: established

subject: Remote Desktop Services(RDS)
predicate: uses
object: デバイスリダイレクション
description: RDSセッションからクライアント側のローカルデバイスへアクセスするにはリダイレクション機構を経由する
evidence: peripheral-hardware-guidelines
verified at: 2026-08-01
certainty: established

subject: HKEY_CURRENT_USER(HKCU)
predicate: mayCause
object: セッション間の意図しない状態共有
description: HKCUはセッションではなくログオンユーザーに紐付くため、同一ユーザーが複数セッションを持つ構成ではセッションごとに独立させたい状態をHKCUに置くと他セッションへ意図せず影響する
evidence: hkey-current-user
verified at: 2026-08-01
certainty: context-dependent

subject: Elevated Task Model
predicate: recommendedFor
object: セッション0
description: セッション0で動くサービスがUIを必要とする場合、IPCでの分離に加え、タスクスケジューラの昇格タスクモデルで対話ユーザー側にUIを持たせる方法も選択肢となる
evidence: elevated-task-model
verified at: 2026-08-01
certainty: context-dependent

subject: Remote Desktop Services(RDS)
predicate: mayCause
object: セッション間の意図しない状態共有
description: RDSで同一ユーザーアカウントを複数セッションで共有している構成では、セッションごとに独立させたい状態をHKCUなどユーザー単位の場所に置くと他セッションへ意図せず影響する
evidence: hkey-current-user
verified at: 2026-08-01
certainty: context-dependent