KDU

Kernel Driver Utility
Configuration requise
- Windows 7/8/8.1/10/11 x64 ;
- Privilèges administratifs requis.
Objectif et fonctionnalités
L'objectif de cet outil est d'offrir un moyen simple d'explorer le noyau et les composants de Windows sans nécessiter de configuration complexe ni de débogueur local.
Il propose :
- Détournement de processus protégés via un PPL arbitraire ou des handles de processus arbitraires, tous deux par modification de l'objet EPROCESS ;
- Contournement de la vérification de signature des pilotes (similaire à DSEFix) ;
- Chargeur de pilotes pour contourner la vérification de signature des pilotes (similaire à TDL/Stryker) ;
- Prise en charge de divers pilotes vulnérables utilisés comme « fournisseurs » de fonctionnalités.
Utilisation
KDU -list
KDU -listcsv
KDU -diag
KDU -prv ProviderID
KDU -ps ProcessID
KDU -pse Commandline
KDU -psw Commandline
KDU -pho ProcessID
KDU -dmp ProcessID
KDU -dse value
KDU -map filename
- -list - liste les fournisseurs actuellement disponibles ;
- -listcsv [file] - liste les fournisseurs disponibles au format CSV, avec écriture optionnelle dans un fichier ;
- -diag - exécute des diagnostics système pour le dépannage ;
- -prv - optionnel, sélectionne le fournisseur de pilote vulnérable ;
- -ps - modifie l'objet processus du ProcessID donné, en abaissant toutes les protections ;
- -pse - lance un programme en tant que ProtectedProcessLight-AntiMalware (PPL) ;
- -psw - lance un programme en tant que ProtectedProcessLight-WinTcb (PPL) ;
- -pho - ouvre un processus arbitraire avec un accès complet
- -pht - ouvre également tous les threads de ce processus avec un accès complet
- -phc - ligne de commande (processus enfant) pour hériter du flag, par défaut powershell
- -phe - démarre également le processus enfant en tant que ppl
- -dmp - dump la mémoire virtuelle du processus donné ;
- -dse - écrit une valeur définie par l'utilisateur dans les flags d'état DSE du système ;
- -map - mappe un pilote dans le noyau et exécute son point d'entrée ; cette commande a les dépendances listées ci-dessous ;
- -scv version - optionnel, sélectionne la version du shellcode, par défaut 1 ;
- -drvn name - nom de l'objet pilote (valide uniquement pour la version 3 du shellcode) ;
- -drvr name - optionnel, nom de la clé de registre du pilote (valide uniquement pour la version 3 du shellcode).
Exemple :
- kdu -ps 1234
- kdu -map c:\driverless\mysuperhack.sys
- kdu -dmp 666
- kdu -prv 1 -ps 1234
- kdu -prv 1 -map c:\driverless\mysuperhack.sys
- kdu -prv 6 -scv 3 -drvn DrvObj -map c:\install\e3600bm.sys
- kdu -prv 6 -scv 3 -drvn edrv -drvr e3600bl -map c:\install\e3600bl.sys
- kdu -dse 0
- kdu -dse 6
- kdu -pse "C:\Windows\System32\notepad.exe C:\TEMP\words.txt"
- kdu -psw "C:\Windows\System32\cmd.exe"
- kdu -pho 1234 -pht -phe 3
- kdu -listcsv "c:\kdu\out.csv"
Exécution sur Windows 11 24H2*
Exécution sur Windows 10 20H2*
Compilé et exécuté sur Windows 8.1*
Exécution sur Windows 7 SP1 entièrement patché (version précompilée)*
Exécution sur Windows 10 19H2 (version précompilée, SecureBoot activé)*
La plupart des captures d'écran proviennent de la version 1.0X.
Limitations de la commande -map
En raison du mode de chargement inhabituel qui n'implique pas le chargeur de noyau standard, mais utilise l'écrasement de modules déjà chargés par du shellcode, il existe certaines limitations :
- Les pilotes chargés DOIVENT ÊTRE spécialement conçus pour fonctionner en mode « driverless » ;
Cela signifie que vous ne pouvez pas utiliser les paramètres spécifiés dans votre DriverEntry car ils ne seront pas valides. Cela signifie également que vous ne pouvez pas charger n'importe quel pilote, mais uniquement des pilotes spécialement conçus, ou vous devez modifier les routines du shellcode.
- Pas de prise en charge SEH pour les pilotes cibles ;
Il n'y a pas de code SEH en x64. À la place, vous disposez d'une table de régions try/except/finally décrite par un pointeur dans l'en-tête PE. En cas d'exception, cela peut entraîner un BSOD.
- Pas de déchargement de pilote ;
Le code mappé ne peut pas se décharger lui-même ; cependant, vous pouvez libérer toutes les ressources allouées par votre code mappé.
DRIVER_OBJECT->DriverUnload doit être défini à NULL.
- Seul l'import ntoskrnl est résolu, tout le reste est à votre charge ;
Si votre projet nécessite une autre dépendance de module, vous devez réécrire cette partie du chargeur.
- Plusieurs primitives Windows sont interdites d'utilisation par du code dynamique par PatchGuard.
En raison du mode de chargement inhabituel, le pilote mappé ne sera pas dans PsLoadedModulesList. Cela signifie que tout callback enregistré par un tel code aura son handler situé en mémoire en dehors de cette liste. PatchGuard peut le détecter et faire planter le système.
En général, si vous voulez savoir ce que vous ne devez pas faire en mode noyau, consultez https://github.com/hfiref0x/KDU/tree/master/Source/Examples/BadRkDemo qui contient quelques exemples de choses interdites.
Note sur les traces du noyau
Cet outil ne modifie pas (et ne modifiera pas à l'avenir) les structures internes de Windows MmUnloadedDrivers et/ou PiDDBCacheTable. En effet :
- KDU n'est pas conçu pour contourner des logiciels de sécurité tiers ou divers logiciels douteux (par exemple les anti-triches) ;
- Ces données peuvent être une cible pour la protection PatchGuard dans la prochaine mise à jour majeure de Windows 10.
Vous l'utilisez à vos propres risques. Certains antivirus paresseux peuvent signaler cet outil comme hacktool/malware.
Fournisseurs pris en charge
Liste complète incluant toutes les métadonnées disponibles ici :
D'autres fournisseurs pourront être ajoutés à l'avenir.
Fonctionnement
Il utilise des pilotes connus comme vulnérables (ou des wormholes par conception) provenant de logiciels légitimes pour accéder à la mémoire arbitraire du noyau avec des primitives de lecture/écriture.
Selon la commande, KDU fonctionnera soit comme TDL/DSEFix, soit modifiera les objets processus en mode noyau (EPROCESS).