Aller au contenu

Persistance

Persistance IFEO et Winlogon

Fiche IFEO et Winlogon : détournement par Debugger, GlobalFlag et SilentProcessExit, porte dérobée sticky keys, Userinit/Shell, Notify, AppInit_DLLs.

Emplacement
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<exe>
Prouve
Un lancement, une fin de processus ou une ouverture de session a été détourné vers un autre binaire
Horodatages
LastWrite des clés IFEO, SilentProcessExit et Winlogon en FILETIME, UTC ; binaires d'accessibilité remplacés avec horodatages NTFS $SI/$FN
Rétention
Valeurs conservées jusqu'à suppression ; anciennes valeurs dans les journaux de transaction, les clichés instantanés et l'espace non alloué de la ruche
Accès
Administrateur ; SOFTWARE et NTUSER.DAT verrouillés à chaud : reg query à chaud, sinon NTFS brut (KAPE) ou VSS
Preuve de
Persistance
Type
Registre
Windows
XPVista / 78 / 8.11011
Cible KAPE
RegistryHivesSystemRegistryHivesUser
Velociraptor
Windows.Triage.Targets:RegistryHivesSystemRegistryHivesUser

Présentation

Cette fiche regroupe des persistances par le registre qui détournent un comportement natif de Windows au lieu d'ajouter une entrée de démarrage visible. Tout se trouve dans la ruche SOFTWARE (plus une clé Winlogon propre à l'utilisateur) et leur mise en place exige des droits d'administrateur.

  • Image File Execution Options (IFEO) est une fonction de débogage : une valeur Debugger sous IFEO\<nom>.exe fait lancer le « débogueur » à la place du programme, avec le chemin du programme en argument. La faire pointer vers une charge détourne chaque lancement de cet exécutable.
  • La surveillance des fins de processus silencieuses (Windows 7 et suivants) lance un MonitorProcess quand un programme surveillé se termine.
  • Les portes dérobées d'accessibilité remplacent ou détournent sethc.exe, utilman.exe et consorts : une combinaison de touches sur l'écran d'ouverture de session ouvre alors un shell SYSTEM.
  • Les valeurs Winlogon (Userinit, Shell et, sous XP, Notify) définissent ce qui s'exécute à chaque ouverture de session.
  • AppInit_DLLs charge des DLL dans chaque processus qui charge user32.dll.

Emplacement

MécanismeEmplacementVersions de Windows
Debugger / GlobalFlag IFEOSOFTWARE : Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<exe> (et WOW6432Node\...)Toutes
Fin de processus silencieuseSOFTWARE : Microsoft\Windows NT\CurrentVersion\SilentProcessExit\<exe>7 et suivants
Binaires d'accessibilitéC:\Windows\System32\sethc.exe, utilman.exe, osk.exe, Magnify.exe, Narrator.exe, DisplaySwitch.exe, AtBroker.exe (fichier ou IFEO)Toutes
Winlogon (machine)SOFTWARE : Microsoft\Windows NT\CurrentVersion\Winlogon (valeurs Userinit, Shell)Toutes
Winlogon (utilisateur)NTUSER.DAT : Software\Microsoft\Windows NT\CurrentVersion\Winlogon (Shell)Toutes
Paquets de notification WinlogonSOFTWARE : ...\Winlogon\Notify\<nom> (DLLName)XP / Server 2003 uniquement
AppInit_DLLsSOFTWARE : Microsoft\Windows NT\CurrentVersion\Windows (AppInit_DLLs, LoadAppInit_DLLs, RequireSignedAppInit_DLLs) et WOW6432Node\...Toutes ; désactivé par Secure Boot à partir de 8

Ce que l'artefact prouve

  • Un détournement a été configuré : l'exécutable visé et le binaire ou la commande qui le remplace ou le suit.
  • Un niveau de privilège : écrire ces clés (et remplacer des binaires de System32) exige des droits administrateur ou SYSTEM ; une trouvaille implique donc un accès privilégié préalable.
  • Un accès avant ouverture de session pour les portes dérobées d'accessibilité : quiconque atteint l'écran d'ouverture de session, en local ou en RDP sans authentification au niveau du réseau (NLA), obtient un processus SYSTEM.
  • Elle ne prouve pas que le détournement s'est déclenché. Cherchez l'exécution de la charge et, pour l'accessibilité, un sethc.exe/utilman.exe qui lance cmd.exe.

Champs clés

ValeurSignification
IFEO\<exe>\DebuggerProgramme lancé à la place de <exe> ; valeur légitime rare hors postes de développeurs
IFEO\<exe>\GlobalFlagLe bit 0x200 (FLG_MONITOR_SILENT_PROCESS_EXIT) active la surveillance des fins silencieuses
SilentProcessExit\<exe>\ReportingModeIndicateurs : 0x1 lancer le processus moniteur, 0x2 écrire des dumps, 0x4 afficher une notification
SilentProcessExit\<exe>\MonitorProcessLigne de commande exécutée quand <exe> se termine
SilentProcessExit\<exe>\LocalDumpFolderDossier des dumps quand ReportingMode contient 0x2
Winlogon\UserinitPar défaut C:\Windows\system32\userinit.exe, ; les entrées supplémentaires séparées par des virgules s'exécutent aussi
Winlogon\ShellPar défaut explorer.exe ; toute autre valeur remplace ou complète le shell
Winlogon\Notify\<nom>\DLLNameDLL chargée par Winlogon sous XP
AppInit_DLLs / LoadAppInit_DLLsListe des DLL et interrupteur (1 = chargement)

Horodatages

HorodatagePositionné quandFormatPièges
LastWrite de la clé IFEO\<exe>Les valeurs de la clé changentFILETIME, UTCBeaucoup de sous-clés IFEO sont légitimes et modifiées par les mises à jour
LastWrite de SilentProcessExit\<exe>Surveillance configuréeFILETIME, UTCClé absente sur la plupart des systèmes : sa présence est déjà notable
LastWrite de la clé WinlogonUne valeur Winlogon changeFILETIME, UTCWindows et les installeurs modifient aussi d'autres valeurs de cette clé
$SI / $FN des binaires d'accessibilitéFichier remplacéNTFS, UTCLes outils de copie peuvent conserver les dates d'origine ; comparez $FN, taille et hash avec une installation saine

Rétention et effacement

  • Les valeurs de registre restent jusqu'à leur suppression ; d'anciennes valeurs peuvent survivre dans les journaux de transactions de la ruche, les clichés instantanés et l'espace non alloué de la ruche.
  • Un binaire d'accessibilité remplacé peut être restauré par la protection des fichiers Windows ou le vérificateur de fichiers système : un fichier sain aujourd'hui n'exclut pas un abus passé ; cherchez renommages et écrasements dans System32 via le journal USN.
  • Quand un processus surveillé se termine silencieusement, le journal Application enregistre une entrée de la source Process Exit Monitor.
  • ReportingMode 0x2 avec LocalDumpFolder est aussi détourné pour faire écrire par Windows un dump mémoire de lsass.exe ; une clé SilentProcessExit\lsass.exe est une preuve de vol d'identifiants.

Collecte

  • Cible KAPE : RegistryHivesSystem (SOFTWARE) et RegistryHivesUser (Winlogon par utilisateur). Il n'existe pas de cible dédiée ; ces cibles ne collectent pas les binaires d'accessibilité : calculez leur hash depuis l'image ou ajoutez une collecte de fichiers de System32.
  • Velociraptor (Windows.Triage.Targets) : RegistryHivesSystem, RegistryHivesUser. En direct : Windows.Persistence.Debug (Debugger IFEO) et Windows.Persistence.SilentProcessExit.
  • Commandes natives :
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s /v Debugger
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit" /s
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs
certutil -hashfile C:\Windows\System32\sethc.exe SHA256

Outils d'analyse

  • Registry Explorer / RECmd (Eric Zimmerman) : examen des clés et export via les fichiers batch communautaires.
  • RegRipper : imagefile (Debugger IFEO, WOW6432Node compris), winlogon_tln (alerte sur un Userinit ou un Shell non standard) et appinitdlls.
  • Autoruns (Sysinternals, gratuit) : onglets Image Hijacks, Winlogon et AppInit, en direct ou hors ligne. Oddvar Moe a montré en 2018 qu'Autoruns n'affichait pas alors la persistance GlobalFlag/SilentProcessExit : contrôlez ces clés directement.
  • Velociraptor : Windows.Persistence.Debug, Windows.Persistence.SilentProcessExit.
  • Plaso : plugin de registre winlogon.

Conseils d'investigation

  • Listez toutes les sous-clés IFEO qui ont une valeur Debugger ; les binaires d'accessibilité et les outils de sécurité sont des cibles fréquentes. L'option « Replace Task Manager » de Process Explorer pose un Debugger légitime sur taskmgr.exe : vérifiez la cible de la valeur.
  • Contrôlez le bit 0x200 des valeurs GlobalFlag et associez chacune à une sous-clé SilentProcessExit.
  • Calculez le hash de sethc.exe, utilman.exe, osk.exe, Magnify.exe, Narrator.exe, DisplaySwitch.exe et AtBroker.exe : un hash identique à celui de cmd.exe ou explorer.exe, ou une ressource de version incohérente, trahit un binaire remplacé.
  • Cherchez un Userinit à plusieurs entrées et un Shell différent de explorer.exe, dans HKLM comme dans le NTUSER.DAT de chaque utilisateur.
  • Un LoadAppInit_DLLs à 1 sur une machine en Secure Boot reste inopérant mais révèle une intention.
  • Confirmez l'exécution par le Prefetch de la charge, les créations de processus 4688 du journal Security (si audité) et, pour les abus de fin silencieuse, WER ou les fichiers de dump. Les charges sont souvent des LOLBins.

Artefacts liés

Termes du glossaire

Tous les artefacts sur une page : aide-mémoire