demande de rappel immédiat

Le registre de Windows 7, L'UAC et la redirection 32-bits 64-bits

Posted by Jean-Paul Blanc Wednesday, March 10, 2010 5:37:00 AM
Rate this Content 0 Votes



 

 

La sécurisation du poste (UAC) ainsi que le passage du 32-bits au 64-bits sont à l'origine du changement de comportement de certains programmes qui accèdent à la base de registre. 

 


A partir de Windows Vista, si un "vieux programme", éxécuté par un simple utilisateur, tente d'écrire dans HKEY_LOCAL_MACHINE, il peut le faire, mais la clef semble ne pas apparaitre dans regedit.exe alors que le programme, lui, arrive à la relire. Reste à savoir ce qu'est un  "vieux programme" et ou ce "vieux programme" à écrit. Cela s'explique par la Virtualisation des espaces de noms, un principe lié à l'UAC.

Virtualisation des espaces de noms des fichiers et de le base registre.

 

A partir de Windows Vista, des dossiers et des clefs de base de registre ont étés interdit à l’écriture par un utilisateur standard afin de protéger le système :

  • HKLM\Software (paramètres machine d’un logiciel)
  • %ProgramFiles% (installation des logiciels)

Il existe sur le marché beaucoup d’applicatifs qui utilisent ces emplacements au lieu des emplacements dédiés que sont :

  • HCU\Software (paramètres utilisateur d’un logiciel)
  • %AppData% (données utilisateur)

Le système « détecte » certains de ces programmes et les estampille comme « utilisateur d’espace de noms virtualisés ». Les caractéristiques de tels processus (appelés legacy process en anglais) sont :

  • Processus 32 bit (versus 64)
  • Ne s’exécutant pas avec des droits administrateurs
  • N’ayant pas de manifeste indiquant qu’ils sont écrit pour Windows Vista

Un processus estampillé comme « utilisateur d’espace de noms virtualisés » va avoir l’impression d’écrire dans des dossiers tels que %programFiles%, %ProgramData%, %SystemRoot%, mais a l’exception de quelques sous dossiers spécifiques ils écrivent dans de l’espace disque réservé à l’utilisateur %LocalAppData%\virtualstore. Il en va de même pour la base de registre une écriture dans la pluspart des clef de HKLM se traduit pour un processus legacy par une écriture dans HCU\Software\Classes\Virtualstore\Machine\Software\App

Une difficutée pour un administrateur ou un intégrateur est de déterminer la nature d'un fichier exécutable. Un programme est-il 32 bits ou 64 bits ? Un programme est il doté d'un manifeste ou non ?

 


Sur un système Windows 64-Bits, si un programme 32-bits permettant de lire une clef de base de registre éxécuté en tant qu'administrateur  tente d'accéder à une clef de HKEY_LOCAL_MACHINE\software il y a une forte chance pour qu'il reçoive l'erreur : "Le fichier spécifié est introuvable". Ce programme tentent en fait de touver la clef dans HKEY_LOCAL_MACHINE\software\Wow6432Node. Il y a redirection de l'accès à la base de registre depuis un programme 32-Bits.

La redirection de base de registre 32/64 bits

 

On distingue un principes et deux dérivés :

  • Le principe de redirection de base de registre.

Par défaut une application 32-bits s’exécutant dans un environnement Windows 32 Over Windows 64 (WOW64) accède à la vue 32-bits de la base de registre, une application 64-bit accède à la vue 64-bits. Le principe de redirection de base de registre isole les applications 32-bits et 64-bits. Le redirecteur de base de registre intercepte les appels de base de registre 32-bits et 64-bits fait sur leur vue logique respective et les transforme en leurs vues physique correspondante. La redirection est transparente pour l’application. Ainsi une application 32-bits peut accéder aux données de base de registre comme si elle s’exécutait sur un système 32 bits même si les données sont physiquement stockée ailleurs sur un système Windows 64-bits. Les clefs redirigées sont stockées sous Wow6432Node. Par exemple HKLM\Software\Silogix est stockée dans HKLM\Software\Wow6432Node\Silogix

  •  Le principe de partage d'une clef de base de registre redirigée.

Un sous ensemble des clefs de bases de registre redirigées sont partagées. Les appels 32-bits sur des clefs partagées ne sont pas redirigés. Au lieu de cela, il existe une seule copie physique de ce type de clef et de leurs valeurs vers laquelle pointe les vues logiques 32-bits et 64-bits.

  •  Le principe de réplication de clef de base de registre redirigé

Dans Windows Server 2008, Windows Vista, Windows Server 2003, et Windows XP : afin de permettre l’interopérabilité à travers COM mais aussi d’autres mécanismes, certaines clefs redirigées sont aussi répliquées. Le principe de réplication (réflexion) consiste à recopier les clefs de base de registre ainsi que les valeurs associées entre les deux vues pour les maintenir synchronisées. Ce principe a été retiré avec Windows 7 et Windows server 2008 R2.

 


Le tableau suivant liste les clefs de base de registre qui sont redirigées et partagées à la fois par les applications 32-bits et 64-bits.

 

Clefs

Windows 7 et Windows Server 2008 R2

Windows Server 2008, Windows Vista, Windows Server 2003, et Windows XP

HKEY_LOCAL_MACHINE

Partagée

Partagée

            SOFTWARE

Redirigée

Redirigée

                       Classes

Partagée

Redirigée et Réfléchie

                                   Appid

Partagée

Redirigée et Réfléchie àl’exception de DllSurrogate et DllSurrogateExecutable Les valeurs de registre ne sont pas réfléchies si elles contiennent des chaînes vides.

                                   CLSID

Redirigée

Redirigée et Réfléchie seulement pour les CLSIDs qui ne spécifient pas InprocServer32 ou InprocHetler32.

                                   DirectShow

Redirigée

Redirigée et Réfléchie

                                   HCP

Partagée

Partagée

                                   Interface

Redirigée

Redirigée et Réfléchie

                                   Media Type

Redirigée

Redirigée et Réfléchie

                                   MediaFoundation

Redirigée

Redirigée et Réfléchie

                       Clients

Partagée

Redirigée

                       Microsoft\COM3

Partagée

Redirigée et Réfléchie

                       Microsoft\Cryptography\Calais\Current

Partagée

Partagée

                       Microsoft\Cryptography\Calais\Readers

Partagée

Partagée

                       Microsoft\Cryptography\Services

Partagée

Partagée

                       Microsoft\CTF\SystemPartagée

Partagée

Partagée

                       Microsoft\CTF\TIP

Partagée

Partagée

                       Microsoft\DFS

Partagée

Partagée

                       Microsoft\Driver Signing

Partagée

Partagée

                       Microsoft\EnterpriseCertificates

Partagée

Partagée

                       Microsoft\EventSystem

Partagée

Redirigée et Réfléchie

                       Microsoft\MSMQ

Partagée

Partagée

                       Microsoft\Non-Driver Signing

Partagée

Partagée

                       Microsoft\Notepad\DefaultFonts

Partagée

Redirigée

                       Microsoft\OLE

Partagée

Redirigée et Réfléchie

                       Microsoft\RAS

Partagée

Partagée

                       Microsoft\RPC

Partagée

Redirigée et Réfléchie

                       Microsoft\SOFTWARE\Microsoft\Partagée Tools\MSInfo

Partagée

Partagée

                       Microsoft\SystemCertificates

Partagée

Partagée

                       Microsoft\TermServLicensing

Partagée

Partagée

                       Microsoft\TransactionServer

Partagée

Partagée

                       Microsoft\Windows\CurrentVersion\App Paths

Partagée

Redirigée

                       Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes

Partagée

Partagée

                       Microsoft\Windows\CurrentVersion\Explorer\AutoplayHetlers

Partagée

Redirigée

                       Microsoft\Windows\CurrentVersion\Explorer\DriveIcons

Partagée

Redirigée

                       Microsoft\Windows\CurrentVersion\Explorer\KindMap

Partagée

Redirigée

                       Microsoft\Windows\CurrentVersion\Group Policy

Partagée

Partagée

                       Microsoft\Windows\CurrentVersion\Policies

Partagée

Partagée

                       Microsoft\Windows\CurrentVersion\PreviewHetlers

Partagée

Redirigée

                       Microsoft\Windows\CurrentVersion\Setup

Partagée

Partagée

                        Microsoft\Windows\CurrentVersion\Telephony\Locations

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Console

Partagée

Redirigée

                       Microsoft\Windows NT\CurrentVersion\FontDpi

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\FontLink

Partagée

Redirigée

                       Microsoft\Windows NT\CurrentVersion\FontMapper

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Fonts

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\FontSubstitutes

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Gre_Initialize

Partagée

Redirigée

                       Microsoft\Windows NT\CurrentVersion\Image File Execution Options

Partagée

Redirigée

                       Microsoft\Windows NT\CurrentVersion\Language Pack

Partagée

Redirigée

                       Microsoft\Windows NT\CurrentVersion\NetworkCards

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Perflib

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Ports

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Print

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\ProfileList

Partagée

Partagée

                       Microsoft\Windows NT\CurrentVersion\Time Zones

Partagée

Partagée

                       Policies

Partagée

Partagée

                       RegisteredApplications

Partagée

Partagée

Windows Server 2003 et Windows XP:  Cette clef a été ajoutée  dans Windows Vista

HKEY_CURRENT_USER

Partagée

Partagée

            SOFTWARE

Partagée

Partagée

                       Classes

Partagée

Redirigée et Réfléchie

                                   Appid

Partagée

Redirigée et Réfléchie àl’exception de DllSurrogate et DllSurrogateExecutable Les valeurs de registre ne sont pas réfléchies si elles contiennent des chaînes vides..

                                   CLSID

Redirigée

Redirigée et Réfléchie

                                   DirectShow

Redirigée

Redirigée et Réfléchie

                                   Interface

Redirigée

Redirigée et Réfléchie

                                   Media Type

Redirigée

Redirigée et Réfléchie

                                   MediaFoundation

 

Redirigée

 

Redirigée et Réfléchie

 


D'un point de vue programmation, un développeur peut accéder aus différentes vues depuis n'importe quel type de programme, il doit juste utilisé les "flags" qui vont bien.

Le coin du développeur.

deux mecanismes de Windows WRP (Windows Resource Protection) et WRP (Windows File Protection) permettent de retrouver la liste des fichiers protégés, ou l'état d'une clef de registre.

FonctionDescription
SfcGetNextProtectedFile Récupère la liste des fichiers protégés. Disponible avec WRP et WFP.
SfcIsFileProtected Indique si un fichier est protégé. Disponible avec WRP et WFP.
SfcIsKeyProtected Indique si une clef de base de registre est protégé. Disponible avec WRP

 

Par ailleurs les API classiques "RegOpenKeyEx", "RegDeleteKeyEx", "RegOpenKeyEx" disposent depuis XP des drapeaux d'accès à la base de registre suivants :

 Nom du drapeau Description
 KEY_WOW64_64KEY  Accède à une clef 64-bits depuis une application 32-bits ou 64-bits.
 KEY_WOW64_32KEY  Accède à une clef 32-bits depuis une application 32-bits ou 64-bits.
Comments are closed on this post.