Copie de fichiers en mode noyau et détection des scénarios de copie de fichiers
Cet article décrit la fonctionnalité de copie de fichiers en mode noyau de confiance introduite dans Windows 11, version 22H2. Cette fonctionnalité permet aux filtres de détecter facilement les scénarios de copie. Elle est utile pour les filtres antivirus (AV), leur permettant de déterminer s’ils peuvent différer ou totalement ignorer l’analyse des fichiers source et destination pendant la copie.
Pour garantir que les opérations de lecture et d’écriture en mode noyau soient correctement marquées comme faisant partie d’une opération de copie, les mises à jour suivantes ont été effectuées :
L’indicateur FILE_CONTAINS_EXTENDED_CREATE_INFORMATION et la structure EXTENDED_CREATE_INFORMATION ont été ajoutés. Cet indicateur et cette structure sont utilisés pour signaler l’intention de copie au moment de la création via NtCreateFile. La structure EXTENDED_CREATE_INFORMATION agit comme un wrapper autour du paramètre EaBuffer existant de NtCreateFile.
Lorsque l’indicateur FILE_CONTAINS_EXTENDED_CREATE_INFORMATION est spécifié, le gestionnaire d’E/S interprète les paramètres EaBuffer et EaLength comme une structure EXTENDED_CREATE_INFORMATION. Le gestionnaire d’E/S analyse ensuite les champs de cette structure comme s’ils étaient directement fournis à NtCreateFile. Les filtres sous-jacents ne subissent aucun changement de comportement des attributs étendus.
IoCheckFileObjectOpenedAsCopySource et IoCheckFileObjectOpenedAsCopyDestination ont été ajoutés pour que les filtres puissent vérifier si un fichier a été ouvert pour une intention de copie.
NtCopyFileChunk a été ajouté pour effectuer la copie en mode noyau.
Toutes les opérations de lecture et d’écriture de NtCopyFileChunk ont :
- Le mode de requête de l’IRP défini sur KernelMode
- Une extension d’IRP de type IopCopyInformationType.
Les filtres n’ont pas accès directement aux extensions de l’IRP, mais peuvent vérifier la présence de cette extension et obtenir les informations de copie à partir des données de rappel en appelant FltGetCopyInformationFromCallbackData.