必須整合性コントロール
必須整合性コントロール (英語: 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]を使って異なるプロセスへデータを送ったりすることはできない。
関連項目
[編集]- ユーザーインターフェイス特権の分離 (UIPI)
- icacls
- セキュリティ識別子
- 強制アクセス制御
脚注
[編集]- ^ “Windows Vista 開発者ストーリー用語集 - MSDNライブラリ”. MSDN. 2016年7月3日閲覧。
- ^ Matthew Conover. “Analysis of the Windows Vista Security Model”. シマンテック. 2007年10月8日閲覧。
- ^ a b Steve Riley. “Mandatory Integrity Control in Windows Vista”. 2007年10月8日閲覧。
- ^ Mark Russinovich. “PsExec, User Account Control and Security Boundaries”. 2007年10月8日閲覧。
- ^ “CreateRemoteThread Function (Windows)”. MSDN. 2007年10月8日閲覧。
- ^ “WriteProcessMemory Function”. MSDN. 2007年10月8日閲覧。
参考文献
[編集]- “イベント 1047 - 標準の整合性レベルのイントラネット - TechNet”. Microsoft (2010年6月). 2016年7月3日閲覧。
- “プログラマが知っておくべきWindows 7の仕組み - Windows 7時代のセキュリティと互換性の常識を身につけよう”. 日経BP (2010年10月14日). 2016年7月3日閲覧。