User Access Control

1.1 Pourquoi UAC ?

Pourquoi avoir créé la technologie UAC et tous les verrouillages de sécurité qui en découle ?

La plus part du temps, tout le monde, chez soi, dispose d’un compte administrateur sous Windows XP. Le problème à ce niveau est que si vous exécutez un virus dans un mail, ou encore directement téléchargé d’Internet, le virus va s’exécuter avec vos privilèges, donc les privilèges administrateur. Le fait de s’exécuter avec ces privilèges permet donc au virus de faire ce qu’il veut sur la machine. Même problématique dans une entreprise. Si on dispose des privilèges Administrateurs du domaine, ou mieux, Administrateurs de l’entreprise, et qu’on exécute un virus, nous allons non seulement contaminer sa propre machine, mais également toutes les autres machines du réseau puisque le virus disposera des privilèges Administrateurs du domaine/entreprise. Pour information, certains virus ne s’exécutent si et seulement la personne qui le lance dispose des droits administratifs sur la machine.

Il peut aussi arriver que certaines applications demandent des privilèges administrateur pour s’exécuter simplement parce qu’elles vont essayer d’écrire dans un espace protégé du système comme le répertoire « Program Files » par exemple. Bien sur, pour d’autres applications demandant ces droits, c’est totalement justifié. Par exemple, une application allant modifier des paramètres Windows, demandant des fichiers système verrouillés, ou encore lors du déploiement d’applications.

Sous Windows XP, en tant qu’utilisateur standard, beaucoup d’actions n’étaient pas possibles. Entre autre, vous ne pouviez pas changer le fuseau horaire, ce qui est contraignant pour les personnes voyageant. De même, lors d’une présentation, si vous ne voulez pas que l’écran s’éteigne parce qu’il est resté inactif durant un certain temps, il était impossible de changer de profil d’économie d’énergie. Windows XP avait même des problèmes lors de l’ajout de clef WEP ou WAP. Toutes ces actions ont été corrigées pour permettre l’utilisation d’un compte standard sous Windows Vista.

C’est donc pour répondre à ces points que Microsoft a implémenté l’User Account Control, et le principe du moindre privilège. Ces technologies ont pour but de sécuriser vos stations de travail et votre environnement de travail. L’année dernière, ce principe a déjà été présenté sous le nom de LUA ou List User account.

1.2 Elévation de privilèges

Le principe d’UAC est de lancer toutes les fenêtres en tant qu’utilisateur standard et ce, quelque soit votre type (administrateur ou non). Les privilèges administrateur ne seront donc utilisés seulement pour des tâches administratives. Dans ce cas, la méthode d’élévation de privilège est claire et explicite puisque Microsoft a voulu faire une refonte complète du système et de l’interface. Ainsi, vous savez à quel moment vous utilisez vos privilèges et pour quelle application. Cette méthode d’élévation de privilège va pouvoir être faite de deux façons différentes : en mode consentement, ou en mode saisie.

Le mode consentement est le mode utilisé par défaut lorsque vous utilisez un compte administrateur. C’est un mode dans lequel on ne vous demande pas de mot de passe, mais juste si vous voulez lancer l’application avec tous les privilèges. Dans ce mode, vous avez une notion de signature des applications. En effet, vous pouvez directement voir dans la fenêtre l’éditeur et son emplacement. Vous avez également des effets visuels qui sont directement gérés par Windows Vista. Je fais notamment allusion à la couleur du bandeau « Windows needs your permission to use this program« . Selon l’éditeur et ce que demande l’application, la couleur changera : Gris pour approuvé et Orange pour déconseillé.

Le deuxième mode d’élévation de privilèges est le mode saisie. C’est un mode qui sera utilisé dans beaucoup de fonctionnalités de Windows Vista (comme le control parental) puisqu’il demande à l’utilisateur de rentrer un compte et un mot de passe pour accéder à l’application en administrateur. C’est donc le mode utilisé en tant qu’utilisateur standard.

Dans la version finale de Windows Vista, ces fenêtres devraient apparaitre dans un bureau différent de Windows. Par exemple, un bureau sous Windows correspond à la fenêtre Ctrl+alt+Suppr d’une station Windows 2000 ou d’une station appartenant à un domaine. De cette manière, on s’assure que la personne qui lance l’application est bien l’utilisateur de la machine et non un pirate.

Certains programmes d’installation requièrent également les droits administrateurs car ils vont placer des fichiers dans des dossiers systèmes ou protégés. Avec Windows XP, dans un environnement limité, vous lanciez l’installation jusqu’au moment où un fichier a besoin d’être écrit dans un espace protégé comme la clef « HKLM » ou « Program Files« . Cet opération va faire « crasher » l’installation rendant le logiciel à moitié installé et donc inutilisable. Avec Windows Vista, ce genre de problème n’existera plus. Windows Vista va détecter le logiciel d’installation et il vérifiera si celui-ci ira écrire dans un répertoire protégé afin de demander avant le lancement si vous voulez faire une élévation de privilège.

Ainsi, lorsque vous allez avoir une application, ou bien une option dans une fenêtre, qui demande les privilèges administratif, vous aurez la présence du bouclier quadricolore vous indiquant que vous devrez faire une élévation de privilège pour accéder à cette fonctionnalité ou ce programme.

1.3 Comment ca marche ?

Sans expliquer en détail le fonctionnement de l’UAC, nous allons poser quelques bases de cette technologie.

Lorsque vous ouvrez une session de manière générale avec Windows, le service de sécurité LSASS va créer un jeton qui contiendra tous les SID de l’utilisateur auxquels on ajoute les privilèges administrateurs. C’est ce jeton qui sera utilisé pour lancer des applications. Avec Windows Vista, lorsque vous ouvrez une session, LSASS va créer deux jetons. Un qui va contenir toutes les informations comme dans Windows XP et un autre jeton « restreint » qui ne contiendra que les privilèges d’un utilisateur standard. C’est donc ce deuxième jeton qui sera utilisé pour lancer les différentes applications. Pour utiliser le premier jeton, celui avec tous les privilèges, vous devrez passer par une élévation de privilège. Concrètement, vous devez faire un clic droit sur l’application pour la lancer en tant qu’administrateur. Il existe aussi une autre méthode pour lancer ses applications en utilisant tout le temps le jeton avec tous les privilèges. Il suffit de cocher une case dans les propriétés de l’exécutable.

Vous pouvez voir avec les deux images ci-dessous une application lancée avec le jeton « restreint » (à gauche) et une application lancée avec le jeton disposant de tous les privilèges. On peut tout de suite voir une différence au niveau des privilèges disponibles.

La configuration de l’UAC se passe directement dans la console d’administration de Windows : Stratégie de sécurité locale. On peut imaginer que dans la prochaine version de Windows Server, une GPO puisse nous permettre de configurer facilement toutes ces options.

Dans l’ordre, nous avons les paramètres suivants :

  • La première option permet de configurer le comportement de l’interface d’élévation de privilèges pour les administrateurs. Vous disposez de trois paramètres pour cette option : demande si on approuve l’élévation de privilège, demande de mot de passe lors de l’élévation de privilège ou bien désactiver la fonctionnalité.
  • La deuxième option concerne l’élévation des privilèges d’un point de vue utilisateur standard. Vous disposez des mêmes paramètres que l’option précédente, hormis que la désactivation est bien sur impossible.
  • La troisième option concerne la détection des installations. Est-ce qu’on active ou non l’élévation de privilège pour un installeur.
  • Quatrième option qui permet d’activer ou non UAC.
  • La cinquième option concerne la vérification des signatures des exécutables.
  • La dernière option permet de désactiver ou d’activer la virtualisation de fichier.

1.4 La clef de la compatibilité grâce à la virtualisation.

Vous devez vous en douter mais l’UAC peut avoir quelques problèmes pour fonctionner avec certaines applications. Pour prévoir ce type de problème, Microsoft a créer tout un système de virtualisation de dossier dans Windows Vista. Ainsi, une application, devant être exécutée avec les privilèges administrateur parce qu’elle va écrire dans Program Files ou dans la clef de registre HKLM, est exécutée avec un jeton « restreint« , il n’y aura aucune erreur de la part du système. En effet, au final toutes les applications peuvent écrire dans les dossiers systèmes et sécurisés de Windows. Seulement, ce ne sont pas les vrais dossiers systèmes de Windows. Ce sont en fait des dossiers virtualisés situés dans le compte de l’utilisateur. Lors du lancement de l’application, celle-ci ira dans un premier temps regarder dans le dossier virtuel du profil, et si elle ne trouve rien, elle chargera les paramètres dans le Program Files réél.

Grâce à ce système, près de 90% des applications allant écrire dans Program Files ou dans des dossiers systèmes fonctionnent. Seulement, comme les informations sont stockées dans le répertoire utilisateur, cela peut être gênant. Par exemple, une application qui stocke les meilleurs scores : l’utilisateur fera toujours le meilleur score. Il faut également noter que ce système de dossier virtuel est utilisé pour les contrôles ActiveX d’Internet Explorer 7.

1.5 LUA Predictor.

Ce petit outil permet de savoir si l’application que vous lui soumettez va pouvoir s’exécuter en tant qu’utilisateur standard et si elle va écrire dans un répertoire protégé du système. Il doit être utilisé pour déterminer si l’application va être compatible ou non avec Windows Vista. Vous pourrez trouver cet utilitaireici.

Isolation des processus

2.1 Contrôle d’intégrité obligatoire (MIC)

Dans Windows XP, si on est propriétaire d’un fichier, on peut faire ce que l’on veut dessus même si l’on est pas administrateur de la machine. C’est pourquoi, Windows Vista intègre un contrôle d’intégrité. Ce système de contrôle d’intégrité permet de faire une isolation au niveau des différentes couches d’intégrités. Ainsi, pour pouvoir communiquer avec des processus, il faut être au même niveau d’intégrité. Vous pouvez voir sur le schéma ci-dessous, présenté lors des Journées Microsoft de la Sécurité et refait pour des raisons de lisibilité, les différentes couches disponible.

Dans Windows Vista, les processus, les threads, etc, auront un niveau d’intégrité spécifique. Par exemple, le mode protégé d’Internet Explorer 7. Si vous lancez IE7 sur Windows Vista, vous aurez deux processus : IEUser qui possédera un niveau d’intégrité moyen (utilisateur) car il va permettre l’accès aux favoris ou encore aux préférences de l’utilisateur, tandis que le processus IExplore servant à afficher les pages web, télécharger le contenu, lui va s’exécuter avec un niveau d’intégrité bas (limité). De cette manière, on limite les risques d’attaque provenant des fichiers téléchargés ou des ActiveX dans les pages web puisque le processus s’occupant de toutes ces fonctions s’exécute avec le niveau d’intégrité le plus bas évitant toutes modifications des processus ayant une intégrité supérieure.

2.2 Isolation des privilèges au niveau de l’interface graphique (UIPI)

Lorsque l’on regarde au niveau des jetons contenant les privilèges, on constate la présence de deux niveaux d’intégrité. Nous avons en fait un niveau d’intégrité pour tout ce qui concerne processus ou encore les attaques de type injection de DLL, tandis que nous avons un autre niveau d’intégrité pour toutes les attaques de type Shatter, attaques utilisant la communication des fenêtres Windows. En effet, sous Windows, les fenêtres graphiques peuvent communiquer afin d’envoyer des messages entre elles, comme par exemple des lettres dans le cas du clavier visuel.

Ce contrôle d’intégrité permet d’isoler les fenêtres de différent niveau d’intégrité. Lors de la session, nous avons un exemple avec le clavier visuel des options d’accessibilités. Ce clavier permet d’envoyer des caractères via la souris dans une fenêtre du bureau Windows, comme notepad par exemple. Lorsqu’on lance ces deux applications avec notre niveau d’intégrité, c’est à dire en tant qu’utilisateur standard, l’interaction est possible, et le clavier visuel arrive parfaitement à écrire dans notepad. Par contre, si on lance notepad en tant qu’administrateur et le clavier visuel en tant qu’utilisateur standard, l’interaction n’est plus possible, et notre notepad reste vierge.

2.3 En résumé

Nous vous avions parlé des jetons restreint et administrateur dans le chapitre précédent. Chacun de ces jetons possède le même SID utilisateur plus, un SID de type S-1-5-40-xXxxXx représente le niveau d’intégrité afin de les isoler. C’est donc grâce à ces niveaux d’intégrité obligatoire et inchangeable durant leur durée de vie que va se baser toute la partie contrôle d’intégrité. Lors de chaque appel d’objet par un processus, il y a vérification du contrôle d’intégrité

Il faut savoir que les processus Utilisateur / LUA ne peuvent pas modifier les processus s’exécutant dans un niveau d’intégrité supérieur, comme par exemple Admin. Par contre, ils peuvent lire les informations appartenant aux processus Administrateur puisque le but est de protéger les processus au niveau de la modification. On vient de le voir avec UIPI, les processus ayant un niveau d’intégrité LUA ne pourront pas communiquer, envoyer des messages, avec les fenêtres graphiques de Windows qui ont un niveau d’intégrité plus haut.

Conclusion

Avec Windows Vista, Microsoft joue la carte de la sécurité. En implémentant des technologies comme UAC, MIC, UIPI, Windows Vista donne la possibilité à tout le monde d’être un simple utilisateur pouvant travailler comme si il était administrateur.

UAC permet de changer et de corriger la base du système d’exploitation de Microsoft, puisqu’il permet l’accès à certaines fonctionnalités en tant qu’utilisateur normal, comme par exemple le changement de fuseau horaire ou le changement de profil de batterie. Du coté des comptes administrateur, toutes les applications sont exécutés en tant qu’utilisateur standard, il faut passer par une élévation de privilège pour avoir toutes les permissions administratives. L’interface d’élévation a été remodelée pour bien souligner l’impact des actions sur le système, et enfin, il a eu un travail de compatibilité avec la virtualisation des dossiers systèmes et du registre.

MIC/UIPI permettent quant à eux de sécuriser la communication interprocessus afin de les isoler selon leur niveau d’intégrité.

Windows Vista va donc complètement révolutionner la façon, que nous avons d’utiliser Windows dans un futur très proche. Bien sûr, il existe une possibilité de désactiver toutes ces options pour revenir à un système plus classique mais beaucoup moins sécurisé. L’avenir nous dira ce qu’en pense les utilisateurs …