必須整合性制御

必須整合性制御 (MIC) は、セキュリティ保護可能なオブジェクトへのアクセスを制御するためのメカニズムを提供します。 このメカニズムでは、随意アクセス制御に加えて、オブジェクトの 分離アクセス制御リスト (DACL) に対するアクセス チェックが評価される前に、アクセスを評価します。

MIC では、整合性レベルと必須ポリシーを使用してアクセスを評価します。 セキュリティ プリンシパル およびセキュリティ保護可能なオブジェクトには、保護またはアクセスのレベルを決定する整合性レベルが割り当てられます。 たとえば、整合性レベルが低いプリンシパルは、オブジェクトの DACL でプリンシパルへの書き込みアクセスが許可されている場合でも、整合性レベルが中程度のオブジェクトに書き込むことはできません。

Windows では、整合性レベルとして低、中、高、システムの 4 つが定義されています。 標準ユーザーは「中」、昇格したユーザーは「高」レベルを受け取ります。 自分で起動したプロセスや、自分が作成したオブジェクトは、ご自身の整合性レベル (「中」または「高」) を受け、実行可能ファイルのレベルが低い場合は「低」を受け取ります。システム サービスはシステム整合性を受け取ります。 整合性ラベルがないオブジェクトは、オペレーティング システムによって「中」として扱われます。これにより、整合性の低いコードがラベル付けされていないオブジェクトを変更できなくなります。 さらに、Windows では、整合性レベルが低い状態で実行されているプロセスが、アプリ コンテナーに関連付けられているプロセスへのアクセスを取得できないようにします。

整合性ラベル

整合性ラベルは、セキュリティ保護可能なオブジェクトとセキュリティ プリンシパルの整合性レベルを指定するものです。 整合性ラベルは、整合性 SID で表されます。 セキュリティ保護可能なオブジェクトの整合性 SID は、そのシステム アクセス制御リスト (SACL) に格納されます。 SACL には、整合性 SID を含む SYSTEM_MANDATORY_LABEL_ACE アクセス制御エントリ (ACE) が含まれています。 整合性 SID を持たないオブジェクトは、中程度の整合性を持つかのように扱われます。

セキュリティ プリンシパルの整合性 SID は、そのアクセス トークンに格納されます。 アクセス トークンには、1 つ以上の整合性 SID が含まれている場合があります。

定義された整合性 SID の詳細については、「既知の SID」を参照してください。

プロセス作成

ユーザーが実行可能ファイルを起動しようとすると、ユーザー整合性レベルとファイル整合性レベルの最小値で新しいプロセスが作成されます。 つまり、新しいプロセスは実行可能ファイルよりも高い整合性で実行されることはありません。 管理者ユーザーが整合性の低いプログラムを実行する場合、新しいプロセスのトークンは整合性レベル「低」で機能します。 これは、信頼できないコードを起動するユーザーを、そのコードによって実行される悪意のある行為から保護するのに役立ちます。 一般的なユーザー整合性レベルのユーザー データは、この新しいプロセスに対して書き込み保護されます。

必須ポリシー

セキュリティ保護可能なオブジェクトの SACL 内の SYSTEM_MANDATORY_LABEL_ACE ACE には、オブジェクトより低い整合性レベルのプリンシパルに付与されるアクセスを指定するアクセス マスクが含まれています。 このアクセス マスクに定義されている値は、SYSTEM_MANDATORY_LABEL_NO_WRITE_UPSYSTEM_MANDATORY_LABEL_NO_READ_UP、および SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP です。 既定では、SYSTEM_MANDATORY_LABEL_NO_WRITE_UP のアクセス マスクを持つすべてのオブジェクトが作成されます。

また、すべてのアクセス トークンは、トークンの作成時に Local Security Authority (LSA) によって設定される必須ポリシーも指定します。 このポリシーは、トークンに関連付けられている TOKEN_MANDATORY_POLICY 構造体によって指定されます。 この構造体は、TokenInformationClass パラメーターの値を TokenMandatoryPolicy に設定して、GetTokenInformation 関数を呼び出すことによって照会できます。