必須整合性コントロール (英語: Mandatory Integrity Control, MIC)[1] は、Windows Vistaから追加された、セキュリティ保護可能なオブジェクトのアクセスを制御する方法である。
子プロセスが作成される際、親プロセスの整合性レベル(英語: Integrity Level, IL)に応じて整合性レベルが付与され、UIPIはこれを使用して整合性レベルが低いプロセスから高いプロセスへのプロセス間通信をブロックする。プロセスの整合性レベルは、各プロセスオブジェクトに存在するアクセストークン内で定義される。プロセスが、あるセキュリティ保護可能なオブジェクトにアクセスしようとした際、セキュリティ参照モニタ(英語: Security Reference Monitor, SRM)は、そのプロセスのアクセストークン内の整合性レベルと、そのオブジェクトのセキュリティ記述子内のシステムアクセス制御リスト(英語: SACL)内に存在する、オブジェクトを使用できる最小整合性レベルが定義された整合性レベル専用のアクセス制御エントリを比較し、プロセスの整合性の方がそれより低ければ、アクセス拒否エラーコード(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を持つプロセスオブジェクトは低い整合性レベルを持つプロセスからの読み取りアクセスも禁じている[2]。
その結果、プロセスはより高いILを持つプロセスと対話することができない。そのためプロセスはCreateRemoteThread()
APIファンクション[3]を使ってより高いILプロセスに対してDLLインジェクションを行ったり、WriteProcessMemory()
ファンクション[4]を使って異なるプロセスへデータを送ったりすることはできない。