必須整合性コントロール (英語: Mandatory Integrity Control, MIC)[1] はWindows Vistaで追加されたコアセキュリティ機能で、WindowsシリーズのデスクトップOSに実装されており、実行プロセスを整合性レベル (Integrity Levels, IL) で区分する。ILはオブジェクトの信頼度を表す。この仕組みの目的は、既存の整合性制御ポリシーと関連オブジェクトのILを使うことで、信頼済みとされている同じユーザーアカウントのコンテキストで実行することに比べ、低レベルの信頼性を持つと考えられるコンテキストのアクセス権限を選択的に制限することにある。
必須整合性コントロールはオブジェクトのILを表すために新しいアクセス制御エントリー (access control entry, ACE) タイプを使って定義づけられる。Windowsでは、アクセス制御リスト (ACL) はユーザーまたはグループに権限(読取り、書き込み、実行許可)を付与するものである。ILは対象の初期化時にそのアクセストークンに割り当てられる。対象がファイルなどのオブジェクトにアクセスを試みたとき、セキュリティ参照モニター (Security Reference Monitor) は対象のアクセストークンとオブジェクトのセキュリティディスクリプタにある整合性レベルを比較する。Windowsは対象のILがオブジェクトよりも高いか低いか、および新しいアクセス制御エントリー (ACE) の整合性ポリシーフラグで許可アクセス権限を制限する。整合性レベルを含むセキュリティサブシステムはACLが提供するユーザー制御の下で任意のアクセスを区別するために必須ラベルとして整合性レベルを実装している。
Windows Vistaでは4つの整合性レベルを定義している。低 (SID: S-1-16-4096)、中 (SID: S-1-16-8192) 、高 (SID: S-1-16-12288)、システム (SID: S-1-16-16384) である[2] 。既定では、標準ユーザーによって開始されたプロセスには中ILが与えられ、権限昇格プロセスは高ILを持つ[3]。整合性レベルの登場によって、MICはアプリケーションの階級を区別することを可能にし、インターネットに接するアプリケーションなど潜在的脆弱性を持つアプリケーションをサンドボックス上で実行するようなシナリオを可能にする。低ILのプロセスは低整合性プロセス (low-integrity processes) と呼ばれ、Windowsのアクセス制御実施下にある高いILのプロセスよりも低いアクセス権を持つ。
ファイル、レジストリキー、プロセスやスレッドなど、名前が付けられたオブジェクトといったACLのオブジェクトはそれらへのアクセスを管理するシステムアクセス制御リスト (System Access Control List) にエントリを持ち、オブジェクトを使用できる最小整合性レベルを定義している。Windowsはオブジェクトによって特定される要求整合性レベルと等しいかそれよりも高い整合性レベルを持つプロセスに、オブジェクトの書き込みや削除を認めている[3]。また、プライバシーの理由からより高いILを持つプロセスオブジェクトは低い整合性レベルを持つプロセスからの読み取りアクセスも禁じている[4]。
その結果、プロセスはより高いILを持つプロセスと対話することができない。そのためプロセスはCreateRemoteThread()
APIファンクション[5]を使ってより高いILプロセスに対してDLLインジェクションを行ったり、WriteProcessMemory()
ファンクション[6]を使って異なるプロセスへデータを送ったりすることはできない。