Tout sur UAC (contrôle de compte utilisateur) Les droits et les privilèges dans Windows

J’avais rédigé il y a quelques années un article à destination des développeurs nommé :

Les 12 commandements d’un administrateur de parc pour un développeur

Cette page est d’ailleurs toujours d’actualité !

Je viens de participer à un meetup très intéressant pour expliquer comment Windows se protège … https://devapps.ms/meetup

L’occasion d’écrire cette page à propos d’UAC.

Commençons par quelques définitions :

UAC signifie User Account Control, en Français le contrôle de compte utilisateur.

Un droit est appliqué à un objet d’une arborescence (fichier, répertoire, clé de registre…) pour un ou plusieurs utilisateurs ou un ou plusieurs groupes d’utilisateurs. Ainsi on parlera du droit de lecture, d’écriture, d’exécution, de parcours et d’autres droits encore liés à la gestion d’une arborescence.

Un privilège s’applique à un ou plusieurs utilisateurs ou à un ou plusieurs groupes d’utilisateurs et il concerne une opération spécifique possible sur le noyau ou le système. Ainsi, on parlera du privilège d’arrêter le système, du privilège de modifier l’heure du système…

La notion de privilège est apparue avec Windows Vista. On peut faire certaines analogies avec la commande sudo en environnement Linux : l’utilitaire sudo s’utilise en ligne de commande, dans un terminal. Il sert par exemple à exécuter, en mode superutilisateur, des commandes ou des applications en console. Il faut faire précéder chacune des commandes à exécuter en mode superutilisateur par la commande sudo.

Fonctionnement de UAC sous Windows 10 :

Avec UAC, lorsqu’un utilisateur administrateur de son PC (ou serveur) ouvre sa session, un token administrateur lui est bien délivré, mais l’interface (explorer.exe) est ouverte en mode Standard, sans privilèges élevés.

clip_image001[4]

Contrairement au moment ou UAC a été créé dans Windows Vista, ou a chaque fois qu’il y avait besoin d’un privilège nous devions le confirmer, Windows 10 détecte automatiquement de nombreuses actions nécessitant un privilège élevé :

– le lancement d’un programme d’installation (avec un vrai installer, signé numériquement et correctement paramétré)

– l’accès au panneau de configuration

– si des paramètres de compatibilité ont été définis sur une application

clip_image001[6]

Par contre si vous souhaitez lancer une action entrant dans le périmètre protégé par UAC, vous allez devoir comprendre ce qui se passe pour pouvoir le contourner.

  • Protection des dossiers :

Par exemple UAC détourne les écritures sur certains dossiers sensibles afin de les protéger.

Cela signifie que si vous cherchez à placer autre chose qu’un fichier identifié comme “programme” .EXE, .DLL, …. alors l’écriture sera redirigée : on parle de virtualisation UAC.

Dossier Emplacement par défaut Redirigé vers Emplacement par défaut 
%ProgramFiles% C:\Program Files %LOCAL­APP­DATA%\Virtual­Store\%ProgramFiles% %USERPROFILE%\AppData\Local\VirtualStore\ProgramFiles
%ProgramData% C:\ProgramData %LOCAL­APP­DATA%\Virtual­Store\%ProgramData% %USERPROFILE%\Admin\AppData\Local\VirtualStore\ProgramData
%SystemRoot% C:\WINDOWS %LOCAL­APP­DATA%\Virtual­Store\%SystemRoot% %USERPROFILE%\AppData\LocalVirtualStore\Windows

Notez bien que tous ces dossiers peuvent être déplacés dans Windows, il n’est donc pas prudent de scripter ou développer en utilisant des chemins “en dur “ mais bien d’utiliser les variables.

Pour visualiser les variables, ouvrez un CMD, puis tapez SET.

C’est ainsi que %USERPROFILE%  est en général C:\Users\%USERNAME%, mais peut changer !!

Explication :

Lorsque un programme va chercher à enregistrer un fichier.INI dans C:\Program Files\XXXX, UAC va rediriger ce fichier dans l’arborescence des fichiers du profil utilisateur : C:\Users\[user]\VirtualStore\Program Files.

Pourquoi ?

Pour protéger le dossier ProgramFiles qui ne doit contenir que les programmes !!

Pour rendre l’application multiutilisateur : si deux utilisateurs partagent le même PC, ils pourront avoir des réglages différents dans leur fichier.INI bien que le programme aura l’impression de l’ouvrir toujours au même endroit.

Mieux que cela : si les profil itinérants sont activés dans un réseau d’entreprise l’utilisateur retrouvera le même les données (pas le .INI de mon exemple qui est enregistré dans un dossier non “roaming” mais des données enregistrées dans ProgramData le seront).

Sans UAC, l’accès aurait été refusé dans Programfiles, ce qui aurait provoqué une erreur dans le programme si il cherche à modifier le fichier.INI.

image

Protection du registre :

Le registre est assez similaire, si vous voulez en savoir plus sur le registre lisez cette page : https://www.toutwindows.com/la-base-de-registre/

Il y a :

HKeyLocalMachine (HKLM) qui contient les informations système

HKeyLocalUser qui contient les paramètres utilisateur

UAC protège plusieurs clefs de HKLM, mais la plus notable est :

Clef Redirigée vers Stocké dans le fichier
HKEY_LOCAL_MACHINE\Software HKEY_ CURRENT_USER\Software\Classes\VirtualStore %LocalAppData%\Microsoft\Windows\UsrClass.dat

Ainsi il est impossible à un programme d’écrire dans les clefs importantes du système : un virus, un programme malveillant ne pourront par exemple s’installer sans confirmation d’une élévation de privilège et seront simplement “cantonnées” au profil utilisateur et à ses privilèges réduits pour s’exécuter.

image

  • Voici le problème que je rencontre le plus souvent :

Un programme ancien est installé.

Il crée une arborescence de fichiers (paramètres + base de donnée) dans C:\Program Files.

Un problème se produit, et un technicien (hot line) incorrectement formé intervient, il commence par désactiver UAC et ne retrouve donc pas le paramétrage de l’utilisateur, et le dépanne en ne comprennant pas ce qui se passe (il récrée tout).

Conclusion du HotLiner : c’est encore UAC qui a posé problème il faut toujours le désactiver….

Vous n’imaginez pas combien de fois je vis cette situation !!

  • Comment “contourner” UAC

Exemple : vous avez besoin d’écrire dans c:\windows, et je vais prendre un scénario classique : modifier le fichier hosts se trouvant dans c:\Windows\System32\drivers\etc

Si vous ne faites pas attention, vous ouvrez le fichier depuis l’explorateur de fichiers dans le bloc note, et au moment de l’enregistrer vous n’y parvenez pas (“quoi j’ai pas les droits, je ne suis pas admin ???”).

Voici un moyen rapide d’y parvenir :

Ouvrez un prompt CMD en mode administrateur (en mode privilégié, donc)

image

Confirmez l’élévation de privilèges

tapez la ligne de commande suivante :

notepad drivers\etc\hosts

C’est fait : votre bloc note à ouvert le fichier avec les bon privilèges, vous pourrez donc enregistrer le fichier :

image

Conclusion

UAC est un des outils mis en place dans Windows pour le protéger. Il rends énormément de service pour diminuer les surfaces d’attaque de Windows et ne devrait jamais être désactivé.

Il suffit d’en comprendre son fonctionnement pour l’utiliser et le gérer efficacement, sur un PC ou un serveur.

Donc par pitié, ne désactivez pas UAC !!!

Quelques liens intéressants :

l’article le plus approfondi que je connaisse écrit par Marc Russinovitch : Il est ancien (date de Vista) mais les principes sont toujours là !

https://docs.microsoft.com/en-us/previous-versions/technet-magazine/cc138019(v=msdn.10)?redirectedfrom=MSDN

Ma FAQ sur UAC : https://www.toutwindows.com/controle-de-compte-utilisateur-uac/

Tout sur le fonctionnement de la base de registre : https://www.toutwindows.com/la-base-de-registre/

Et https://www.toutwindows.com/5416/les-12-commandements-dun-administrateur-de-parc-pour-un-dveloppeur/

Promis je vais réactualiser cette article, et j’adorerais que tous les développeurs / éditeurs que je croise le lisent !!


image

Laurent Gébeau

www.Toutwindows.com

  Pour me suivre :

Facebook Linkedin Twitter RSSimage

Pas de commentaires. - Comments are closed.