Contrôle d’intégrité obligatoire

Le contrôle d’intégrité obligatoire (MIC) fournit un mécanisme de contrôle de 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 par rapport à la liste de contrôle d’accès discrétionnaire (DACL) d’un objet soient évaluées.

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 se voient attribuer 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 dont le niveau d’intégrité est moyen, même si la liste DACL de cet objet autorise l’accès en écriture au principal.

Windows définit quatre niveaux d’intégrité : faible, moyen, élevé et système. Les utilisateurs standard reçoivent un niveau élevé moyen. Les processus que vous démarrez et les objets que vous créez reçoivent votre niveau d’intégrité (moyen ou élevé) ou faible si le niveau du fichier exécutable est faible ; les services système reçoivent l’intégrité du 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 à faible intégrité de modifier des objets non étiquetés. En outre, Windows garantit que les processus exécutés avec un faible niveau d’intégrité ne peuvent 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). La liste SACL contient une entrée decontrôle d’accès (ACE) SYSTEM_MANDATORY_LABEL_ACE qui contient à son tour le SID d’intégrité. Tout objet sans 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 SIDs 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 minimal et le niveau d’intégrité du fichier. Cela signifie que le nouveau processus ne s’exécutera jamais avec une intégrité supérieure à celle du fichier exécutable. Si l’utilisateur administrateur exécute un programme d’intégrité faible, le jeton du 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 classique, sont protégées en écriture contre ce nouveau processus.

Stratégie obligatoire

Le SYSTEM_MANDATORY_LABEL_ACE ACE dans la liste 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 à ceux de 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.