Pilotes tiers dangereux sur votre système ou pilotes LOLD


Saviez-vous qu'un pilote complètement légitime peut donner à un attaquant la possibilité de s'inscrire dans votre système pendant une longue période, en restant à l'intérieur même après sa réinstallation? Ou transformer votre ordinateur en brique? Par exemple, certains pilotes inoffensifs apparemment fiables (signés) sont accessoirement des outils pour remplacer le BIOS. Après une telle attaque, seul le programmeur enregistrera.


Sous Windows, il existe des applications / scripts / bibliothèques de confiance avec des intéressant fonctionnalités dangereuses telles que l'exécution de code arbitraire, le téléchargement de fichiers, le contournement de l'UAC, etc. Si de telles fonctionnalités supplémentaires sont trouvées dans un composant du noyau, cela devient encore plus intéressant.


À partir de Windows Vista x64, la stratégie DSE (Driver Signature Enforcement) s'applique - tous les pilotes de niveau noyau doivent être signés. Si un attaquant (avec des droits d'utilisateur / administrateur) après avoir pénétré le système veut obtenir le niveau d'accès maximal (installer le rootkit du noyau / bootkit / SMM-rootkit / BIOS-rootkit), il devra d'une manière ou d'une autre contourner l'exigence de signature pour le pilote. La possibilité d'appeler certaines fonctions ou instructions du mode noyau en mode noyau peut donner à un attaquant un outil pour élever ses privilèges, divulguer des informations ou provoquer un déni de service. Nous appelons cette fonctionnalité une fonctionnalité à double usage (dans certains cas, cela peut être appelé des vulnérabilités ou des backdoors, cependant, la discussion sur la définition correcte dépasse le cadre de cet article).


Solutions de contournement DSE


Voyons quelles options un attaquant a généralement pour contourner DSE (vous devez en quelque sorte pénétrer ring0). Le tableau ci-dessous résume les moyens de contourner DSE avec leurs avantages et leurs inconvénients (pour l'attaquant et les agents de sécurité, veuillez en prendre note). Il convient de noter que ces informations s'appliquent à Windows x64, à commencer par Vista.


FaçonLes avantagesInconvénients
Définition des données de configuration de démarrage (mode test)Simplicité
  • Cela ne fonctionne pas pour toutes les applications.
  • Un filigrane apparaît sur le bureau
  • Redémarrage requis
Utilisation d'une clé privée compromisePossibilité d'installer n'importe quel pilote
  • Si une fuite est détectée, le certificat est ajouté à la liste de révocation de certificats (CRL)
Utilisation de la vulnérabilité dans l'implémentation du contrôle DSENon détecté par les systèmes antivirus et de sécurité Windows
  • Difficulté à trouver de telles vulnérabilités
  • Dépend de la version du système d'exploitation
Modification des mécanismes de vérification des pilotes (bootmgr, winload.exe, winresume.exe, ci.dll)Possibilité d'installer n'importe quel pilote sans vérification OC
  • Complexité des modifications
  • Nécessite un moyen de contourner le démarrage sécurisé (si activé)
  • Redémarrage requis
  • Dépend de la version du système d'exploitation
  • Autres contrôles de fichiers
Utilisation d'un pilote signé avec vulnérabilitéDifficulté de détection d'attaque
  • Difficulté à trouver de telles vulnérabilités
  • Verrou de sécurité de détection
Utilisation d'un pilote signé avec une fonctionnalité à double usageNon détecté par les systèmes antivirus et de sécurité Windows
  • La complexité de la recherche (pour un attaquant) d'un pilote avec la fonctionnalité à double usage requise

Comme vous pouvez le voir dans le tableau, un pilote signé avec des fonctionnalités à double usage est le moyen le plus attractif de contourner DSE pour un attaquant.


Fonctionnalité dangereuse ou à double usage


Examinons des exemples de capacités malveillantes qu'un attaquant apparaît en présence d'un pilote avec des fonctions à double usage dangereuses.


  • Escalade de privilèges au niveau administrateur / SYSTÈME. Mémoire physique en lecture / écriture requise. Cette attaque peut être effectuée, par exemple, en utilisant le pilote ASMMAP d'ASUS. Pour ce faire, lisez la mémoire physique et trouvez la structure EPROCESS (c'est un élément d'une liste chaînée), puis parcourez la liste à la recherche du processus dont nous voulons augmenter le niveau de privilège, ainsi que certains processus bien connus avec le niveau SYSTEM (par exemple, lsass, wininit). Copiez ensuite la valeur du champ Token de la structure de processus système dans la structure du processus cible. Une description plus détaillée de l'attaque est donnée ici .
  • Désactiver SMEP. Pour ce faire, vous devez écrire dans le registre de contrôle cr4 (plus précisément, réinitialiser son 20e bit). Par exemple, le pilote bandainamcoonline.sys désactive non seulement SMEP, mais exécute également le code en fonction du pointeur qui lui est transmis par l'utilisateur. Pour ceux qui sont intéressés, il y a un article avec une description détaillée du pilote.
  • Exécution de code arbitraire en mode noyau. Mémoire physique en lecture / écriture et MSR requis. Il s'agit de remplacer l'adresse (située dans l'un des MSR), à laquelle la transition sera effectuée lors d'un appel système, à l'adresse de l'emplacement du code de l'attaquant. Vous trouverez ici plus d'informations à ce sujet. PatchGuard interférera en cours de route, mais vous pouvez le découvrir si vous le souhaitez.


    Étant donné que le pilote et PatchGuard s'exécutent tous deux dans Ring 0, rien n'empêche le pilote de désactiver les vérifications PatchGuard (jusqu'à ce que, bien sûr, jusqu'à ce que Microsoft écoute Intel et dépasse le modèle avec deux anneaux de protection). Les développeurs du noyau chez Microsoft sont bien conscients de ce fait et effectuent diverses actions pour masquer l'emplacement de ce code, obscurcir ses actions et les structures internes utilisées. En d'autres termes, en raison de l'impossibilité de vous empêcher de modifier le code PatchGuard, ils font de leur mieux pour le cacher.

    - Blunden B. L'arsenal Rootkit: évasion et évasion dans les coins sombres du système.

    L'original
    Étant donné que le code du pilote et le code PatchGuard s'exécutent tous les deux dans Ring 0, rien n'empêche un KMD de désactiver les vérifications PatchGuard (sauf, bien sûr, que Microsoft s'inspire d'Intel et dépasse le modèle de privilège à deux anneaux). Les ingénieurs du noyau chez Microsoft sont parfaitement conscients de ce fait et effectuent toutes sortes d'acrobaties de programmation pour masquer où réside le code, ce qu'il fait et les structures de données internes qu'il manipule. En d'autres termes, ils ne peuvent pas vous empêcher de modifier le code PatchGuard, ils vont donc essayer comme l'enfer de le cacher.

    - Blunden B. L'arsenal Rootkit: évasion et évasion dans les coins sombres du système.



  • Entrée BIOS. Un exemple dans la nature est Lojax . Les attaquants ont pris le bien connu RwDrv.sys et l'ont utilisé à leurs propres fins: ils ont lu le BIOS, modifié et réécrit. La réinstallation de Windows n'aidera pas ici, car le code malveillant se trouve dans le firmware sur SPI-flash. Si l'écrasement du BIOS échoue (ou est spécialement écrasé), il sera également désagréable. Dans tous les cas, vous devrez conduire après le programmeur pour corriger les conséquences gênantes.
  • Appelez le gestionnaire SMI. Tout d'abord, tous les BIOS ne sont pas sans défense contre le code en mode ring0: il existe différents mécanismes de protection en lecture / écriture, il peut donc y avoir une situation où vous devez descendre plus bas - en mode SMM (le plus privilégié). Une façon d'y arriver à partir du mode noyau est de tirer le gestionnaire SMI (assez souvent il y en a des vulnérables). Pour appeler le gestionnaire SMI, vous devez pouvoir écrire sur le port d'E / S, et cela ne peut être fait qu'avec les privilèges ring0. Autrement dit, un pilote ayant la capacité d'écrire sur des ports d'E / S est capable de détecter un gestionnaire SMI vulnérable qui peut permettre à un attaquant d'exécuter du code en mode SMM. Dans l' exemple, l' auteur utilise le pilote RwDrv.sys.
  • Informations sur le système. Lecture de la mémoire du noyau (via la lecture de la mémoire physique), lecture du BIOS, informations sur les paramètres système, les périphériques connectés et les mécanismes de protection activés / désactivés (via la lecture de MSR, les registres de contrôle, l'accès aux ports d'entrée / sortie), dans certains cas, un hyperviseur connu peut être détecté ( comme VirtualBox via MSR ). Pour cette tâche, même un pilote qui ne sait que lire, pas nécessairement écrire, convient le plus souvent. Par exemple, RamCaptureDriver64.sys de Belkasoft convient à la lecture de la mémoire physique.

Si nous analysons divers articles et notes sur CVE, nous pouvons distinguer une classification de potentiellement dangereux lors de l'accès aux fonctions ring3 dans les pilotes. Le tableau ci-dessous répertorie les fonctions dangereuses et les sources d'informations les concernant.


Fonctions dangereuses identifiéesSources d'informations sur les pratiques de sécurité
Lecture / écriture des registres MSRCVE-2018-10711, CVE-2018-18535, CVE-2018-19323, CVE-2007-5633, CVE-2007-5761
Ports d'E / S en lecture / écritureCVE-2018-10712, CVE-2018-18536, CVE-2018-19322
Lecture / écriture de la mémoire physiqueCVE-2018-16712, CVE-2018-10710, CVE-2017-15302, CVE-2017-15303, CVE-2018-19321
Lecture / écriture des registres de contrôleCVE-2018-10709, Eset - Exploitation Windows en 2016
Accès aux compteurs de performances / d'horlogeLeif Uhsadel, Andy Georges, Ingrid Verbauwhed - Exploiter les compteurs de performances matérielles
Registre des indicateurs de lecture / écritureWojtczuk R., Rutkowska J. Après le lapin blanc: attaques logicielles contre la technologie Intel VT-d
Instructions d'accès au cacheDétection des attaques par canal latéral basée sur le cache via la technologie de surveillance du cache Intel et les compteurs de performances matérielles

Et ce n'est pas toute la liste des fonctions dangereuses possibles. Vous pouvez également parler de lecture / écriture de la mémoire virtuelle du noyau, lecture / écriture de MMIO, accès aux périphériques PCI, etc.


Les trois premières fonctions présentent le plus grand intérêt, ainsi que le plus grand danger (et les plus susceptibles de trouver un pilote avec de telles fonctions): lecture / écriture des registres MSR, lecture / écriture des ports d'E / S, lecture / écriture de la mémoire physique. En utilisant des registres de contrôle, vous pouvez contourner certains mécanismes de protection, l'écriture dans le registre des drapeaux vous permet d'activer les ports d'entrée / sortie en lecture / écriture dans ring3 (à propos, il est mentionné dans cet article sur Habré), le succès des attaques sur les canaux tiers (en accédant au cache, en surveillant les compteurs performances / cycles) est très peu probable.


En cours de création de ce matériel lors de la conférence DEFCON 27 à Las Vegas, les chercheurs Jesse Michael et Mickey Shkatov ont présenté le travail «Sortez du noyau si vous ne pouvez pas conduire» , qui traite également de ce problème, et nous vous recommandons d'étudier ce matériel pour compléter l'image. Les scénarios d'utilisation de ces pilotes sont très simples et clairs, et des exemples de sections de code responsables des fonctionnalités les plus critiques sont présentés. Et fournit également du code pour travailler et trouver des pilotes similaires.


D'une manière générale, il convient de noter que ce sujet préoccupe depuis longtemps les chercheurs en sécurité. En 2018, le chercheur Alexander Matrosov dans son article "Qu'est-ce qui rend les pilotes de système d'exploitation dangereux pour le BIOS?" soulevé cette question et démontré combien il est simple d'exploiter le BIOS.


Pilotes à double fonction


Vous trouverez ci-dessous les représentants les plus célèbres des pilotes dotés de fonctions à double usage.


  • RwDrv.sys est un pilote très populaire (fourni avec l'utilitaire RWeverything ). Lit et écrit la mémoire physique, les ports d'E / S, le MSR et les registres de contrôle. Il a été utilisé à plusieurs reprises dans divers PoC, puis dans le rootkit Lojax mentionné précédemment. Une interface est écrite pour cela en C ++, et elle est également utilisée en chipsec .


  • cpuz / gpuz



    Lit et écrit la mémoire physique, les ports et MSR. Plusieurs utilitaires PoC l'utilisent ( ici et ici ).


  • pcdsrvc_x64 - pilote de Dell, pour plus d'informations, contactez cet article. Vous permet de lire / écrire de la mémoire physique dans les ports d'E / S.


  • AsIO64.sys
    image
    Il offre la possibilité de lire / écrire la mémoire physique et les ports d'E / S, et est également livré avec une DLL pratique pour effectuer ces demandes.


  • Asmmap64.sys est un autre pilote d'ASUS qui vous permet de lire / écrire de la mémoire physique, des ports d'E / S et MSR. Ce serait particulièrement agréable pour un attaquant, car l'accès au pilote peut se faire depuis un utilisateur régulier sans droits d'administrateur. Les personnes curieuses peuvent se tourner vers la source .


  • ntiolib_x64.sys / winio64.sys - pilotes de MSI, ils sont décrits en détail dans l' article mentionné précédemment. En utilisant ntiolib_x64.sys, vous pouvez lire / écrire de la mémoire physique, des ports d'E / S et MSR, winio64.sys fournit toutes ces fonctions sauf MSR.



Habituellement, les fonctions dangereuses décrites sont reconnues comme des vulnérabilités si le pilote est accessible à l'utilisateur sans droits d'administrateur (ACL incorrect) ou lorsqu'il permet d'exécuter directement du code arbitraire (comme dans bandainamcoonline.sys). Dans d'autres cas, ce ne sont que des fonctionnalités, et puisque l'utilisateur a des droits d'administrateur, il peut utiliser toutes les fonctions du pilote et c'est la norme.


Si vous pensez qu'il n'y a pas plus d'une douzaine de ces pilotes, vous vous trompez grandement. Vous pouvez voir cette sélection de pilotes intéressants. Cette liste contient des pilotes ASUS, AVAST, Razer, LG, American Megatrends et d'autres sociétés bien connues. Il y en a donc beaucoup, il suffit de chercher. Ils représentent donc une réelle menace.


Cette menace est également comprise par les employés de Microsoft. Et ils seront reconnaissants des informations sur ces pilotes;)
image


Recommandations


Pour les utilisateurs:


  • Vous ne devez pas vous asseoir inutilement sous le compte administrateur et désactiver l'UAC (bien qu'il ne soit pas difficile de le contourner ).
  • Vous pouvez installer le détecteur en essayant d'installer des pilotes (par exemple, ici ).
  • S'il est nécessaire d'utiliser des utilitaires avec de tels pilotes (diagnostic, pour la mise à jour du BIOS, etc.), supprimez les pilotes après utilisation.
  • Configurez Device Guard (si vous êtes un heureux propriétaire de Windows 10). En utilisant cette technologie, vous pouvez créer votre propre politique d'intégrité du code et ajouter des listes blanches de programmes et de certificats. Par exemple, ajoutez à la stratégie l'exigence selon laquelle tout pilote en mode noyau doit avoir une signature Microsoft WHQL. Dans cet article, vous pouvez mieux vous familiariser avec la configuration de Device Guard à cet effet.

Les fabricants feraient mieux de ne pas signer de tels pilotes. Si l'utilisateur doit mettre à jour le BIOS, vérifier le système pour les vulnérabilités (bonjour, chipsec), mesurer les performances ou effectuer d'autres manipulations qui nécessitent l'installation de tels pilotes, il peut très bien passer en mode test, faire tout cela, puis quitter. L'utilisabilité diminuera alors, mais la sécurité augmentera.


Conclusions


Si quelque chose est signé, vous ne pouvez pas lui faire confiance de toute façon. Premièrement, vous pouvez signer quelque chose comme ça, et deuxièmement, un attaquant peut profiter de celui-ci signé (même s'il s'agit d'un fabricant de confiance).


Les spécialistes de la sécurité des informations ne doivent pas exclure du modèle de menace les situations où un attaquant a besoin d'un pilote doté de fonctionnalités dangereuses pour effectuer une attaque. Il y a suffisamment de tels pilotes, c'est assez simple à faire. Si l'attaque n'est pas effectuée avec un pilote pop tel que RwEverything, mais avec un pilote moins connu, il sera encore plus difficile de le détecter. Vous devez donc être en alerte, surveiller ces choses et ne pas permettre à chaque pilote de démarrer dans le système.


Auteur: Elizaveta Khomenko

Source: https://habr.com/ru/post/fr468691/


All Articles