Contrôle d’intégrité obligatoire

Le contrôle d’intégrité obligatoire (MIC, Mandatory Integrity Control) fournit un mécanisme permettant de contrôler l’accès aux objets sécurisables. Ce mécanisme s'ajoute au contrôle d’accès discrétionnaire et évalue l’accès avant que les vérifications d’accès sur la liste de contrôle d’accès discrétionnaire d’un objet soient évaluées.

Le MIC utilise des niveaux d’intégrité et une stratégie obligatoire pour évaluer l’accès. Les principaux de sécurité et les objets sécurisables sont affectés à des niveaux d’intégrité qui déterminent leurs niveaux de protection ou d’accès. Par exemple, un principal avec un niveau d’intégrité faible ne peut pas écrire dans un objet avec un niveau d’intégrité moyen, même si la liste DACL de cet objet autorise l’accès en écriture au principal.

Windows définit les quatre niveaux d’intégrité suivants : faible, moyen, élevé et système. Les utilisateurs standard reçoivent le niveau moyen. Les utilisateurs avec privilège élevé reçoivent le niveau élevé. Les processus que vous démarrez et les objets que vous créez reçoivent votre niveau d’intégrité (moyen ou élevé), ou le niveau faible si le niveau du fichier exécutable est faible. Les services système reçoivent le niveau d'intégrité système. Les objets qui n’ont pas d’étiquette d’intégrité sont traités comme moyens par le système d’exploitation ; cela empêche le code d’intégrité faible de modifier des objets non étiquetés. De plus, Windows garantit que les processus s’exécutant avec un niveau d’intégrité faible ne puissent pas obtenir l’accès à un processus associé à un conteneur d’application.

Étiquettes d’intégrité

Les étiquettes d’intégrité spécifient les niveaux d’intégrité des objets sécurisables et des principaux de sécurité. Les étiquettes d’intégrité sont représentées par des SID d’intégrité. Le SID d’intégrité d’un objet sécurisable est stocké dans sa liste de contrôle d’accès système (SACL, system access control list). La SACL contient une entrée de contrôle d’accès SYSTEM_MANDATORY_LABEL_ACE qui contient à son tour le SID d’intégrité. Tout objet dépourvu de SID d’intégrité est traité comme s’il avait une intégrité moyenne.

Le SID d’intégrité d’un principal de sécurité est stocké dans son jeton d’accès. Un jeton d’accès peut contenir un ou plusieurs SID d’intégrité.

Pour plus d’informations sur les SID d’intégrité définis, consultez la page SID connus.

Création de processus

Lorsqu’un utilisateur tente de lancer un fichier exécutable, le nouveau processus est créé avec le niveau d’intégrité utilisateur et fichier minimal. Autrement dit, le nouveau processus ne s’exécutera jamais avec un niveau d'intégrité supérieur à celui du fichier exécutable. Si l’utilisateur administrateur exécute un programme à intégrité faible, le jeton pour le nouveau processus fonctionne avec le niveau d’intégrité faible. Cela permet de protéger un utilisateur qui lance du code non fiable contre les actes malveillants effectués par ce code. Les données utilisateur, qui se situent au niveau d’intégrité utilisateur standard, sont protégées en écriture par rapport à ce nouveau processus.

Stratégie obligatoire

L'ACE SYSTEM_MANDATORY_LABEL_ACE dans la SACL d’un objet sécurisable contient un masque d’accès qui spécifie l’accès accordé aux principaux dont les niveaux d’intégrité sont inférieurs à l’objet. Les valeurs définies pour ce masque d’accès sont SYSTEM_MANDATORY_LABEL_NO_WRITE_UP, SYSTEM_MANDATORY_LABEL_NO_READ_UP et SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP. Par défaut, le système crée chaque objet avec un masque d’accès de SYSTEM_MANDATORY_LABEL_NO_WRITE_UP.

Chaque jeton d’accès spécifie également une stratégie obligatoire définie par l’autorité de sécurité locale (LSA) lors de la création du jeton. Cette stratégie est spécifiée par une structure TOKEN_MANDATORY_POLICY associée au jeton. Cette structure peut être interrogée en appelant la fonction GetTokenInformation avec la valeur du paramètre TokenInformationClass définie sur TokenMandatoryPolicy.