知識マップ: 「同じPC」は同じ実行環境ではない ── AppData・HKCU・DPAPI・資格情報を隔てるユーザー境界
記事「「同じPC」は同じ実行環境ではない ── AppData・HKCU・DPAPI・資格情報を隔てるユーザー境界」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
ユーザープロファイルは実行ユーザーのSIDを前提に作られ、%LOCALAPPDATA%・%APPDATA%(Roaming)・NTUSER.DATはそのプロファイル配下に保存され、CurrentUserスコープのDPAPIマスターキーもプロファイル配下に置かれる。ユーザーの証明書ストアの実体はHKCU配下のレジストリにある。通常のログオンではHKCU(Classes配下を除く)の実体はロードされたNTUSER.DATであり(LocalSystemでは既定ユーザーに関連付く)、サービスからHKCUを使うことは推奨されない。DPAPIはマスターキーで秘密を保護するため、CurrentUserスコープは別ユーザーからの復号失敗の原因になることがあり、LocalMachineスコープはそれを軽減する。資格情報マネージャーの中身はDPAPIで保護され、保存したユーザーの文脈でのみ使える。Chromium系ブラウザーのプロファイルは既定で%LOCALAPPDATA%配下にありDPAPIを利用するので、フォルダーコピーではログイン状態を持ち出せない。タスクスケジューラの実行はログオン種別で、IISアプリケーションプールのプロファイル読み込みはloadUserProfile設定で構成する。S4Uログオンは暗号化ファイル(EFS)とも資格情報マネージャーの金庫とも両立せず、管理者によるパスワードリセットはDPAPI復号失敗の原因になり得る。ASP.NET Core Data Protectionの鍵リングはプロファイルが使える環境で%LOCALAPPDATA%に置かれDPAPIで暗号化される。全ユーザー・サービスで共有するデータにはProgramData配下、サービスの証明書にはコンピューターの証明書ストアが推奨される。ネットワークドライブの割り当てはログオンセッションに保存され、UAC昇格したプロセスからは既定で見えない。実行ユーザーのSIDはwhoamiとProcess Explorerで、実際に読まれたプロファイル配下のパスはProcess Monitorで確認できる。AppData\LocalLowもプロファイル配下にあり、HKCU\Software\Classesの実体UsrClass.datは%LOCALAPPDATA%配下に置かれる。サービスがユーザーの設定を読む必要がある場合は偽装(impersonation)とRegOpenCurrentUserの利用が推奨される。LocalServiceアカウントは自分のユーザープロファイルを持ち、LocalSystemのコンテキストはPsExecで対話シェルを開いて確認できる。
flowchart LR
accTitle: Windowsのユーザー境界の知識マップ
accDescr: SIDに紐づくユーザープロファイルがAppData・NTUSER.DAT・DPAPIマスターキーを抱え、ユーザーの証明書ストアがHKCUに保存され、資格情報マネージャーとChromium系ブラウザーのプロファイルがDPAPIに依存し、DPAPIのスコープ選択が復号失敗の有無を分け、タスクスケジューラとIISアプリプールがそれぞれログオン種別とloadUserProfileで構成され、S4Uログオンの制約・パスワードリセットの影響・ProgramDataや証明書ストアの推奨・ネットワークドライブとログオンセッション・whoamiやSysinternalsによる確認手段、LocalLow・UsrClass.dat・偽装・LocalService/LocalSystemアカウントとの関係までを含む関係図
security_identifier["SID(セキュリティ識別子)"]
windows_user_profile["ユーザープロファイル"]
dpapi["DPAPI"]
credential_manager["資格情報マネージャー(cmdkey)"]
ntuser_dat["NTUSER.DAT"]
hkcu["HKEY_CURRENT_USER(HKCU)"]
windows_service["Windowsサービス"]
local_appdata["%LOCALAPPDATA%"]
roaming_appdata["%APPDATA%(Roaming)"]
dpapi_master_key["DPAPIマスターキー"]
dpapi_currentuser_scope["DataProtectionScope.CurrentUser"]
dpapi_decryption_failure["DPAPI復号失敗"]
dpapi_localmachine_scope["DataProtectionScope.LocalMachine"]
currentuser_store["ユーザーの証明書ストア"]
chromium_browser_profile["Chromium系ブラウザーのプロファイル"]
task_scheduler["タスクスケジューラの無人実行"]
task_logon_type["ログオン種別(LogonType)"]
iis_apppool["IISアプリケーションプール"]
iis_load_user_profile["loadUserProfile設定"]
s4u_logon["S4Uログオン"]
efs_encryption["NTFS暗号化(EFS)ファイル"]
admin_password_reset["管理者によるパスワードのリセット"]
aspnet_core_data_protection["ASP.NET Core Data Protection"]
programdata_storage["%ProgramData%配下の保存先"]
localmachine_store["コンピューターの証明書ストア"]
mapped_network_drive["ネットワークドライブ(マップされたドライブ文字)"]
logon_session["ログオンセッション"]
uac_elevation["UAC昇格(管理者として実行)"]
whoami["whoamiコマンド"]
process_explorer["Process Explorer"]
procmon["Process Monitor(procmon.exe)"]
appdata_locallow["AppData\LocalLow"]
hkcu_classes["HKEY_CURRENT_USER\Software\Classes"]
impersonation["偽装(impersonation)"]
localservice_account["LocalServiceアカウント"]
localsystem_account["LocalSystemアカウント"]
psexec["PsExec"]
windows_user_profile -->|"前提とする"| security_identifier
ntuser_dat -->|"に保存される"| windows_user_profile
hkcu -.->|"に保存される"| ntuser_dat
hkcu -->|"用いるのは非推奨"| windows_service
local_appdata -->|"に保存される"| windows_user_profile
roaming_appdata -.->|"に保存される"| windows_user_profile
dpapi -->|"利用する"| dpapi_master_key
dpapi_master_key -.->|"に保存される"| windows_user_profile
dpapi_currentuser_scope -.->|"原因になり得る"| dpapi_decryption_failure
dpapi_localmachine_scope -.->|"軽減する"| dpapi_decryption_failure
credential_manager -->|"利用する"| dpapi
currentuser_store -->|"に保存される"| hkcu
chromium_browser_profile -.->|"に保存される"| local_appdata
chromium_browser_profile -->|"利用する"| dpapi
task_scheduler -->|"で構成できる"| task_logon_type
iis_apppool -->|"で構成できる"| iis_load_user_profile
s4u_logon -->|"両立しない"| efs_encryption
s4u_logon -->|"両立しない"| credential_manager
admin_password_reset -.->|"原因になり得る"| dpapi_decryption_failure
aspnet_core_data_protection -.->|"利用する"| dpapi
aspnet_core_data_protection -.->|"に保存される"| local_appdata
programdata_storage -->|"推奨される対応"| windows_service
localmachine_store -->|"推奨される対応"| windows_service
mapped_network_drive -->|"に保存される"| logon_session
mapped_network_drive -.->|"両立しない"| uac_elevation
security_identifier -->|"で確認できる"| whoami
security_identifier -->|"で確認できる"| process_explorer
windows_user_profile -->|"で確認できる"| procmon
appdata_locallow -->|"に保存される"| windows_user_profile
hkcu_classes -->|"に保存される"| local_appdata
impersonation -->|"推奨される対応"| windows_service
localservice_account -->|"利用する"| windows_user_profile
localsystem_account -->|"で確認できる"| psexec
概念間の関係(全33件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- ユーザープロファイルはSID(セキュリティ識別子)を前提とします。
- NTUSER.DATはユーザープロファイルに保存されます。
- HKEY_CURRENT_USER(HKCU)はNTUSER.DATに保存されます。
- HKEY_CURRENT_USER(HKCU)をWindowsサービスに用いることは推奨されません。
- %LOCALAPPDATA%はユーザープロファイルに保存されます。
- %APPDATA%(Roaming)はユーザープロファイルに保存されます。
- DPAPIはDPAPIマスターキーを利用します。
- DPAPIマスターキーはユーザープロファイルに保存されます。
- DataProtectionScope.CurrentUserはDPAPI復号失敗の原因になることがあります。
- DataProtectionScope.LocalMachineはDPAPI復号失敗を軽減します。
- 資格情報マネージャー(cmdkey)はDPAPIを利用します。
- ユーザーの証明書ストアはHKEY_CURRENT_USER(HKCU)に保存されます。
- Chromium系ブラウザーのプロファイルは%LOCALAPPDATA%に保存されます。
- Chromium系ブラウザーのプロファイルはDPAPIを利用します。
- タスクスケジューラの無人実行はログオン種別(LogonType)で構成できます。
- IISアプリケーションプールはloadUserProfile設定で構成できます。
- S4UログオンはNTFS暗号化(EFS)ファイルと両立しません。
- S4Uログオンは資格情報マネージャー(cmdkey)と両立しません。
- 管理者によるパスワードのリセットはDPAPI復号失敗の原因になることがあります。
- ASP.NET Core Data ProtectionはDPAPIを利用します。
- ASP.NET Core Data Protectionは%LOCALAPPDATA%に保存されます。
- %ProgramData%配下の保存先はWindowsサービスに対する本記事の推奨です。
- コンピューターの証明書ストアはWindowsサービスに対する本記事の推奨です。
- ネットワークドライブ(マップされたドライブ文字)はログオンセッションに保存されます。
- ネットワークドライブ(マップされたドライブ文字)はUAC昇格(管理者として実行)と両立しません。
- SID(セキュリティ識別子)はwhoamiコマンドで確認できます。
- SID(セキュリティ識別子)はProcess Explorerで確認できます。
- ユーザープロファイルはProcess Monitor(procmon.exe)で確認できます。
- AppData\LocalLowはユーザープロファイルに保存されます。
- HKEY_CURRENT_USER\Software\Classesは%LOCALAPPDATA%に保存されます。
- 偽装(impersonation)はWindowsサービスに対する本記事の推奨です。
- LocalServiceアカウントはユーザープロファイルを利用します。
- LocalSystemアカウントはPsExecで確認できます。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。