Introduction
Le Registre Windows ou Base De Registre (BDR) est une base de données utilisée par le système d’exploitation Windows. Elle contient les données de configuration du système d’exploitation et des autres logiciels installés désirant s’en servir. Certains logiciels malveillants peuvent utilliser ces registres pour modifier le fonctionnement du système et exécuter leurs actions malicieuses.
A l’origine, la base de registre servait uniquement à associer une extension de fichier avec l’application qui permettait de l’éditer ou de le visualiser.
A la première version de Windows NT, elle est étendue et comprend un ensemble de clés hiérarchiques et de valeurs. La base de registre est enregistrée dans plusieurs fichiers différents appelés ruches (hives). La base de registre sert donc de base de données de configuration et remplace l’usage de multiples fichiers .ini pour stocker ces configurations.
Localisation
-
Les configurations des registres pour le système globale est stocké dans
C:\Windows\System32\Config
-
Les configurations spécifiques à un utilisateurs sont stockés dans
C:\Windows\Users\{UserName}\NTUSER.dat
Cependant, vous ne pouvez pas modifier ces fichiers directement. Windows fournit une solution à ce problème, à savoir Regedit, une application qui peut vous aider à jouer avec les clés et les valeurs de votre registre.
Base de registre :: Hivelist 🐝
La base de registre (aussi appelé Hivelist) contient les emplacements physiques des différentes ruches utilisées par le systèmes (indiqués sous la clé de registre dans HKLM\SYSTEM\CurrentControlSet\Control\
). La base de registre est partagée en différentes sections logiques. les noms commencent par HKEY (Handle to a KEY == gestionnaire de clé) :
HKEY_LOCAL_MACHINE (HKLM)
contient les informations qui sont générales à tous les utilisateurs de l’ordinateur (Matériel, Sécurité, SAM, Logicielle, Système)
HKEY_USERS
contient les informations spécifiques de chaque utilisateur. Elle contient la sous clé HKEY_CURRENT_USER (HKCU)
Attention cette ruche n’est visible que si l’utilisateur associé est connecté.
HKEY_CURRENT_CONFIG
contient des informations qui sont mises à jour immédiatement, elles sont régénérées après chaque boot.
HKEY_CLASSES_ROOT (HKCR)
contient les informations sur les applications enregistrées ; cela inclut entre autres les associations entre extensions de fichiers et identifiants de classe d’objet OLE, ce qui permet de lancer automatiquement l’exécutable correspondant. Cela correspond à HKLM\SOFTWARE\Classes
. Exemple : “.bat” et “XML” sont respectivement associés à “batfile” et “XML script engine”.
Chacune de ces clés est divisée en sous-clé(s), qui peuvent contenir d’autre(s) sous-clé(s) et ainsi de suite, constituant toute une arborescence.
Type et Valeurs
Chaque clé peut contenir des valeurs typées : il existe une quinzaine de types de données possibles :
1) Binaire REG_BINARY, création possible avec REGEDIT
Entier
2) Dword REG_DWORD, 32 bits, création possible avec REGEDIT
3) REG_DWORD_BIG_ENDIAN, voir Endianness
4) REG_DWORD_LITTLE_ENDIAN
5) Qword REG_QWORD 64 bits, création possible avec REGEDIT
6) REG_QWORD_BIG_ENDIAN (mais inusité et non-documenté)
7) REG_QWORD_LITTLE_ENDIAN
Chaîne de caractères
8) Chaîne simple REG_SZ, création possible avec REGEDIT
9) Chaîne extensible REG_EXPAND_SZ, permet d'utiliser des variables d'environnement, création possible avec REGEDIT
10) Chaîne multiple REG_MULTI_SZ, création possible avec REGEDIT
11) NONE, REG_NONE : signifie donnée non typée
Ressource
12) REG_RESOURCE_LIST
13) REG_RESOURCE_REQUIREMENTS_LIST
14) REG_FULL_RESOURCE_DESCRIPTOR
15) REG_LINK
ATTCK :: Persistence
La persistance est une tactique permettant à un attaquant de maintenir son emprise sur une machine compromise. Il existe plusieurs techniques qui permettent à l’attaquant d’atteindre son objectif( persister malgré les redémarrages du système, les changements d’identifiants ou les arrêts ). Il est à noter qu’un utilisateur lambda ne lancera sans doute pas rundll32.exe, cscript, wmic ou cmd.exe dans les premières minutes du démarrage d’une session.
Lancement au démarrage
%SYSTEMROOT%\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
%SYSTEMROOT%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
(privilèges administrateur)
Une méthode de persistance consiste à créer un exécutable dans le dossier “Startup”. L’excutable se lancera à chaque première connexion de l’utilisateur.
Boot Keys
HKLM\SYSTEM\ControlSet002\Control\Session Manager::BootExecute
Le gestionnaire de session (ssms.exe) gère les sessions de chacun des utilisateurs dans l’environnement Windows. Ensuite, le processus WinLogon démarre. La clé mentionnée ci-dessus doit toujours pointer vers autochk.exe ou authochk qui vont vérifier l’intégrité des disques avant le démarrage. S’il y a d’autres valeurs, le malware sera chargé en même temps que l’exécutable autochk et s’exécutera pendant toute la durée de fonctionnement du système.
User Logon
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
La clé UserInit est utilisée par Windows pour lancer des scripts de connexion pour l’utilisateur. Initialement, elle pointe vers userinit.exe, qui lance ensuite le Shell de Windows (explore.exe). Si le logiciel malveillant remplace userinit.exe, ce script ou exécutable pourra prendre en charge le processus de connexion.
La clé Shell pointe vers explorer.exe. Il ne devrait pas y avoir d’autres valeurs. Bien qu’il s’agisse de valeurs de type String, l’identification des changements devrait être plus facile.
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\system.ini\boot
La valeur Shell doit pointer vers WinLogon uniquement.
Run/RunOnce, ASEPs
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
Les clés Run et RunOnce sont utilisées pour lancer des programmes à chaque fois qu’un utilisateur se connecte au système, et font donc partie des points d’extension AutoStart (ASEP). La clé Run lancera le programme à chaque fois que l’utilisateur se connectera, tandis que la clé RunOnce ne s’exécute qu’une fois, puis la clé est supprimée. En cas d’échec, l’ordinateur ne l’exécutera pas à nouveau dans le cas des clés RunOnce. Toutefois, vous pouvez modifier ce comportement en plaçant un " !" devant votre valeur afin qu’elle attende la fin de la commande ou de l’exécution du programme et que la clé soit supprimée.
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKLM\SYSTEM\CurrentControlSet\Services
La plupart des services doivent être exécutés au moment du démarrage. Les clés RunServices, RunServicesOnce et Services ( avec les clés correspondantes ) sont utilisées pour démarrer les services en arrière-plan. Ils sont une cible de choix pour les malwares.
Si le malware ne parvient pas à obtenir des privilèges d’administrateur, il ne pourra pas se charger dans les clés Run du HKEY_LOCAL_MACHINE. Il va plutôt modifier les clés HKEY_CURRENT_USER. Les logiciels malveillants utilisent régulièrement ces clés simplement en raison de leur facilité d’utilisation. Surveillez ces clés pour vous assurer qu’aucun exécutable non légitime n’est chargé.
Startup
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Windows stocke les dossiers personnels de chaque utilisateur dans les clés identifiées ci-dessus. Il s’agit notamment des dossiers de musique, de documents, de téléchargements, etc. Cependant, les logiciels malveillants peuvent les modifier pour charger un exécutable malveillant plutôt que d’ouvrir le dossier prévu.
AppInit DLLs
HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
Cette clef spécifie une liste arbitraire de dll à charger dans chaque processus en mode utilisateur sur le système. Cette clé de registre mérite d’être mentionnée et surveillée pour la résidence des logiciels malveillants. À compter de Windows 8, l’infrastructure AppInit_DLLs est désactivée lorsque le démarrage sécurisé (secure boot) est activé.
Known DLLs
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
Cette clé permet de modifier la liste des DLL connues pour ajouter une DLL malveillante à charger avant les versions signées. Windows suit un ordre de recherche lorsqu’il cherche une DLL à charger. Cette clé permet de s’assurer que les DLL sont connues du système et qu’elles peuvent être incluses à partir d’un chemin placé volontairement avant le chemin du fichier d’origine. On parle également de DLL Search Order Hijacking (détournement de l’ordre de recherche des DLL) lorsqu’une DLL malveillante prend la place d’une DLL bien connue, simplement en raison de son emplacement.
Automatisation
L’outil le plus populaire pour analyser les clés de registre liées à la persistance est Autoruns des Sysinternals : Autoruns
Il est également possible de récupérer ce type d’information via un script powershell :
$ErrorActionPreference = "Continue"
Echo "`n`n///// User Run"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Echo "`n`n///// Machine Run"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\Windows\CurrentVersion\Run
Echo "`n`n///// User RunOnce"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
Echo "`n`n///// Machine RunOne"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
####################################################
Echo "`n`n///// User Explorer Shell Folders"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\"Shell Folders"
Echo "`n`n///// User Explorer User Shell Folders"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\"User Shell Folders"
Echo "`n`n///// Machine Explorer Shell Folders"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\"Shell Folders"
Echo "`n`n///// Machine Explorer User Shell Folders"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\"User Shell Folders"
Echo "`n`n///// User Explorer Policies"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
Echo "`n`n///// Machine Explorer Policies"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
####################################################
Echo "`n`n///// User Winlogon (Userinit=C:\WINDOWS\system32\userinit.exe , Shell=explorer.exe)"; Get-ItemProperty -Path Registry::HKCU\Software\Microsoft\"Windows NT"\CurrentVersion\Winlogon | select Userinit, Shell, PSPath, PSChildName, PSProvider
Echo "`n`n///// Machine Winlogon (Userinit=C:\WINDOWS\system32\userinit.exe , Shell=explorer.exe)"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\"Windows NT"\CurrentVersion\Winlogon | select Userinit, Shell, PSPath, PSChildName, PSProvider
####################################################
Echo "`n`n///// Machine System Boot Shell"; Get-ItemProperty -Path Registry::HKLM\SOFTWARE\Microsoft\"Windows NT"\CurrentVersion\IniFileMapping\system.ini\boot
Echo "`n`n///// Machine Boot Execute (autochk.exe or authochk) "; Get-ItemProperty -Path Registry::HKLM\SYSTEM\CurrentControlSet\Control\"Session Manager" | select BootExecute
Echo "`n`n///// Machine Known DLLs"; Get-ItemProperty -Path Registry::HKLM\SYSTEM\CurrentControlSet\Control\"Session Manager"\KnownDLLs
Echo "`n`n///// Machine App Init DLL Loading (if secure boot is disabled)"; Get-ItemProperty -Path Registry::HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
Sources
- wikipedia