必須整合性コントロール

必須整合性コントロール () は、Windows Vistaから追加された、セキュリティ保護可能なオブジェクトのアクセスを制御する方法である。

 アーキテクチャ 

子プロセスが作成される際、親プロセスの整合性レベル（）に応じて整合性レベルが付与され、UIPIはこれを使用して整合性レベルが低いプロセスから高いプロセスへのプロセス間通信をブロックする。プロセスの整合性レベルは、各プロセスオブジェクトに存在するアクセストークン内で定義される。プロセスが、あるセキュリティ保護可能なオブジェクトにアクセスしようとした際、セキュリティ参照モニタ（）は、そのプロセスのアクセストークン内の整合性レベルと、そのオブジェクトのセキュリティ記述子内のシステムアクセス制御リスト（）内に存在する、オブジェクトを使用できる最小整合性レベルが定義された整合性レベル専用のアクセス制御エントリを比較し、プロセスの整合性の方がそれより低ければ、アクセス拒否エラーコード（ERROR_ACCESS_DENIED、0x5）が返される。

 整合性レベル 
整合性レベルはSIDで表され、任意の値で作成することもできるが、Windowsは6つの既定値を定義している。

+ 名前 SID 備考 Untrusted (0) S-1-16-0x0000 Anonymousグループによって作成されたプロセスによって使用される。 Low (1) S-1-16-0x1000 UWPアプリなどAppContainer上のプロセスによって使用される。 Medium (2) S-1-16-0x2000 UACが有効な状態で通常の方法で作成されたプロセスによって使用されている。 High (3) S-1-16-0x3000 UACが有効な状態で昇格されたプロセスによって使用される。もしくは、UACが無効な状態で通常の方法で作成されたプロセスによって使用される。 System (4) S-1-16-0x4000 サービスもしくはシステムコンポーネント（wininit.exe、winlogon.exe、smss.exeなど）のプロセスによって使用される。 Protected (5) S-1-16-0x5000 既定で使用されていない。カーネルモードのプロセスのみ使用可能。

また、プライバシーの理由からより高いILを持つプロセスオブジェクトは低い整合性レベルを持つプロセスからの読み取りアクセスも禁じている。

その結果、プロセスはより高いILを持つプロセスと対話することができない。そのためプロセスはCreateRemoteThread()APIファンクションを使ってより高いILプロセスに対してDLLインジェクションを行ったり、WriteProcessMemory()ファンクションを使って異なるプロセスへデータを送ったりすることはできない。

 関連項目 
 ユーザーインターフェイス特権の分離 (UIPI)
 icacls
 セキュリティ識別子
 強制アクセス制御

 脚注 

 参考文献 



 外部リンク 
 Introduction to the Protected Mode API
 Windows Vista Integrity Mechanism technical reference on MSDN
 Introduction to Windows Integrity Control: Security Focus article

Category:アクセス制御
Category:Windows NT系
Category:Windowsのセキュリティ技術