Aller au contenu

Persistance

Pilotes noyau (.sys, services de pilote, BYOVD)

Fiche pilotes noyau : services de pilote (Type 1/2), événement 7045, DriverStore, setupapi.dev.log, Amcache et journaux CodeIntegrity contre BYOVD et rootkits.

Emplacement
C:\Windows\System32\drivers\*.sys
Prouve
Un pilote noyau a été installé ou déclaré comme service, quand, depuis quel chemin, et si Windows l'a bloqué ou chargé
Horodatages
LastWrite de la clé Services (FILETIME, UTC), événements 7045/4697 et CodeIntegrity (UTC), sections de setupapi.dev.log (heure locale), dates $SI/$FN du .sys
Rétention
Clés de service et fichiers .sys restent jusqu'à suppression ; System.evtx et le journal CodeIntegrity tournent (20 Mo et environ 1 Mo par défaut) ; setupapi.dev.log grossit jusqu'à purge
Accès
Administrateur pour le registre, les journaux et le dossier des pilotes à chaud ; ruche SYSTEM, Amcache.hve et .evtx actifs verrouillés : copie brute ou VSS
Type
Fichier / système de fichiers
Windows
XPVista / 78 / 8.11011
Cible KAPE
RegistryHivesSystemEventLogsAmcacheUSBDevicesLogs
Velociraptor
Windows.Triage.Targets:RegistryHivesSystemEventLogsAmcacheUSBDevicesLogs

Présentation

Les pilotes noyau sont l'équivalent Windows des modules du noyau Linux : des fichiers PE .sys chargés en ring 0 par le Service Control Manager, le gestionnaire Plug and Play ou un appel direct à NtLoadDriver. Le matériel et les produits de sécurité en ont besoin ; les attaquants s'en servent pour des rootkits et, bien plus souvent aujourd'hui, pour le Bring Your Own Vulnerable Driver (BYOVD) : ils déposent un pilote signé mais exploitable (par exemple RTCore64.sys, gdrv.sys, dbutil_2_3.sys, procexp152.sys) et l'utilisent pour tuer les processus EDR ou modifier la mémoire du noyau. Tout pilote a besoin d'une entrée de service, d'un fichier sur disque et d'une vérification de signature réussie, et chacune de ces étapes laisse des traces.

Emplacement

SourceChemin
Binaires des pilotesC:\Windows\System32\drivers\*.sys (mais un pilote peut se charger depuis n'importe quel chemin)
Déclaration du serviceHKLM\SYSTEM\<ControlSet00x>\Services\<nom> avec Type = 1 (pilote noyau) ou 2 (pilote de système de fichiers)
Installation de serviceSystem.evtx événement 7045 (Service Control Manager) ; Security.evtx événement 4697 si l'audit « Extension système de sécurité » est actif
Paquets de pilotes PnPC:\Windows\System32\DriverStore\FileRepository\<inf>_<arch>_<hash>\, C:\Windows\INF\oem*.inf
Journal d'installation PnPC:\Windows\INF\setupapi.dev.log (Vista et suivants)
AmcacheAmcache.hve, clés Root\InventoryDriverBinary et Root\InventoryDriverPackage (Windows 10 et suivants)
Contrôle de signatureMicrosoft-Windows-CodeIntegrity%4Operational.evtx
Liste de blocage des pilotes vulnérablesC:\Windows\System32\CodeIntegrity\driversipolicy.p7b ; interrupteur HKLM\SYSTEM\CurrentControlSet\Control\CI\Config\VulnerableDriverBlocklistEnable

Ce que l'artefact prouve

  • Déclaration : une clé Services avec Type 1 ou 2 montre qu'un pilote a été configuré pour se charger, avec son ImagePath et son mode Start (0 boot, 1 système, 2 automatique, 3 à la demande, 4 désactivé).
  • Date et compte d'installation : l'événement 7045 donne le nom du service, le chemin du fichier, le type « pilote en mode noyau » et le type de démarrage ; le 4697 ajoute le compte à l'origine.
  • Identité du fichier : InventoryDriverBinary d'Amcache conserve le SHA-1, l'état de signature, l'éditeur et la version du pilote, même après suppression du fichier.
  • Chargements bloqués : les événements CodeIntegrity montrent que Windows a refusé un pilote pour cause de niveau de signature ou de stratégie.

Il ne prouve pas que le pilote a réellement été chargé ou exploité. Un service créé avec sc create et démarré une seule fois peut ne laisser aucune trace de chargement avec la journalisation par défaut. Confirmez avec la mémoire (modules chargés), l'événement Sysmon 6 (pilote chargé) si Sysmon était déployé, ou les effets induits comme l'arrêt des services EDR.

Champs clés

ChampSignification
Type1 = pilote noyau, 2 = pilote de système de fichiers (16/32 = services en mode utilisateur)
Start0 boot, 1 système, 2 auto, 3 à la demande, 4 désactivé
ImagePathChemin du pilote, souvent \SystemRoot\System32\drivers\x.sys ou System32\drivers\x.sys ; tout autre dossier est suspect
Group, TagGroupe d'ordre de chargement ; rarement renseigné par les pilotes malveillants
DriverId (InventoryDriverBinary)SHA-1 du fichier (précédé de zéros de remplissage)
DriverSigned, DriverCompany, Product, DriverLastWriteTimeIndicateur de signature et ressources de version
setupapi.dev.log >>> Section startSections horodatées d'installation de pilotes PnP avec le nom de l'INF

Horodatages

  • LastWrite de la clé Services (FILETIME, UTC) : création ou dernière modification du service. Changer Start ou ImagePath le met à jour.
  • 7045 / 4697 : horodatages UTC, le repère d'installation le plus fiable.
  • setupapi.dev.log : les heures de début et de fin de section sont écrites en heure locale ; convertissez-les avant de construire la chronologie.
  • Fichier .sys : dates $SI et $FN dans la $MFT ; $FN est plus difficile à falsifier et trahit souvent un pilote déposé puis antidaté pour ressembler à un fichier système.
  • Amcache : le LastWrite de la clé reflète le passage de l'inventaire, pas forcément l'arrivée du pilote.

Rétention et effacement

La clé de registre et le fichier restent jusqu'à leur suppression. Les attaquants suppriment souvent le service et le .sys après usage : cherchez la suppression dans le journal USN, l'entrée Amcache orpheline et l'événement 7045, qui survit à la suppression du service jusqu'à la rotation du journal System (20 Mo par défaut). Le journal CodeIntegrity/Operational est petit (souvent environ 1 Mo) : les événements de blocage peuvent être écrasés vite. L'effacement d'un journal produit l'événement 104 (System) ou 1102 (Security).

Collecte

KAPE RegistryHivesSystem, EventLogs, Amcache et USBDevicesLogs (qui inclut les journaux setupapi), plus les fichiers de pilotes eux-mêmes :

driverquery /v /fo csv > E:\case\driverquery.csv
driverquery /si /fo csv > E:\case\driver_signing.csv
sc query type= driver state= all > E:\case\sc_drivers.txt
robocopy C:\Windows\System32\drivers E:\case\drivers *.sys /COPY:DAT
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} |
  Where-Object Message -match 'kernel mode driver|file system driver' |
  Select-Object TimeCreated, Message | Export-Csv E:\case\7045_drivers.csv -NoTypeInformation
Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' |
  Select-Object TimeCreated, Id, Message | Export-Csv E:\case\codeintegrity.csv -NoTypeInformation

Sur un système en français, le texte des messages 7045 est traduit : adaptez le filtre (« pilote en mode noyau ») ou filtrez sur les champs de l'événement.

Outils d'analyse

  • Autoruns (Sysinternals) : onglet Drivers avec « Verify code signatures » et contrôle VirusTotal ; autorunsc -a d -h -s -c pour un CSV.
  • sigcheck (sigcheck -e -h -c C:\Windows\System32\drivers) pour le signataire et les hashs de chaque .sys.
  • Registry Explorer / RegRipper pour les ruches SYSTEM hors ligne (pensez à choisir le jeu de contrôle actif).
  • AmcacheParser pour InventoryDriverBinary.
  • EvtxECmd pour les événements 7045, 4697 et CodeIntegrity.
  • Volatility 3 : windows.modules, windows.modscan et windows.driverscan pour comparer modules listés et modules retrouvés par scan, et repérer les pilotes déliés ; voir le guide d'analyse mémoire.

Conseils d'investigation

  • Hachez chaque pilote non Microsoft et comparez-le au projet LOLDrivers (loldrivers.io) et à la liste de blocage Microsoft. Un pilote signé d'un éditeur de jeux, d'overclocking ou de matériel sur un serveur est un signe classique de BYOVD.
  • Un ImagePath dans \Users\, \ProgramData\, \Windows\Temp\ ou un nom de service court et aléatoire associé à Type 1 et Start 3 est typique d'un pilote déposé par un outil.
  • Dans CodeIntegrity/Operational, des événements comme 3033 (image ne respectant pas le niveau de signature requis), 3077 (bloqué par une stratégie de contrôle d'application appliquée) et 3076 (mode audit) sont les points de départ habituels ; les identifiants et libellés exacts varient selon la version et la stratégie, lisez le message.
  • La liste de blocage des pilotes vulnérables est active par défaut sur les versions récentes de Windows 11 et avec HVCI ou Smart App Control, mais elle a du retard sur les nouveaux pilotes : vérifiez VulnerableDriverBlocklistEnable et la version de la stratégie avant de conclure qu'un pilote n'a pas pu se charger.
  • Rapprochez la minute d'installation du pilote de la chronologie des programmes installés, des arrêts de service de Windows Defender et des événements de protection contre les falsifications.
  • Les installations de pilotes PnP (clés USB, imprimantes) arrivent aussi dans setupapi.dev.log et le DriverStore : séparez le bruit matériel légitime des installations manuelles via pnputil /add-driver.

Artefacts liés

Termes du glossaire

Guides

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