GNU/Linux >> Tutoriels Linux >  >> Linux

Une explication simple du fonctionnement de Dirty COW ?

Vous et 3 autres personnes étudiez pour un test, en utilisant les mêmes notes.

Vous dites "Je dois y aller, je dois faire une copie de ces notes pour moi-même que je peux annoter... laissez-moi faire une copie !"

Vous apportez les notes à la photocopieuse, les copiez, modifiez l'original , puis prenez l'original modifié retour au reste du groupe. Cette version modifiée est mauvaise; vous avez modifié certaines réponses pour qu'elles soient fausses.

Le reste du groupe étudie une mauvaise version des notes, tandis que vous ramenez la bonne version à la maison.

Vous réussissez le test.

Ils échouent.

La seule nuance entre cet exemple et Dirty COW est que dans Dirty COW vous n'êtes pas censé être remis l'original; le noyau fait la copie pour vous. Mais il y a une condition de concurrence qui vous donne par erreur accès à l'original lorsque vous demandez une copie. "Condition de concurrence" signifie "vous pouvez vous faufiler pour accéder à quelque chose auquel vous ne devriez pas avoir accès."


Je ne suis pas un expert du noyau Linux, mais je connais les concepts impliqués et j'ai lu le commentaire de Linus et le diff. Je vais essayer - peut-être que les gens pourront me corriger si je me trompe et nous discuterons ensemble.

Copy On Write est un concept de mémoire interne où, principalement pour des raisons de performances, les opérations qui font une copie d'une section de mémoire n'obtiennent pas réellement leur propre copie à moins et jusqu'à ce qu'elles apportent une modification à cette mémoire - à quel point, vous rapidement faites leur copie, apportez la modification et remettez-la-leur. L'avantage est que vous n'avez pas à faire le travail de création de la copie à moins et jusqu'à ce qu'ils la modifient - plus rapide, moins d'utilisation de la mémoire, meilleure mise en cache.

Le bogue ici est dans le code qui fait cette copie. Il semble qu'il y ait une condition de concurrence dans cette copie (ou en fait dans la comptabilité autour de cette copie). Une condition de concurrence se produit lorsque deux processus ou threads différents accèdent à la même ressource et se chevauchent. Dans ce cas, ce qui se passe, c'est que la mémoire est signalée comme étant inscriptible avant d'être réellement copiée - si deux threads travaillent très étroitement l'un sur l'autre, le second peut tirer parti de l'indicateur inscriptible et écrire réellement dans la mémoire d'origine, pas la copie.

L'exploit est que cela permet à un processus de s'élever en obtenant un accès en écriture à la propre compréhension du noyau. Le noyau sait à quel utilisateur chaque processus s'exécute - en prenant une copie de cette mémoire que le noyau utilise pour stocker ces informations à l'aide de Copy On Write, puis en utilisant ce bogue Dirty COW, ils peuvent en fait écrire les informations utilisateur dans la propre copie du noyau . Alors ils écrivent que le processus est exécuté en tant que root... et ensuite ils peuvent faire n'importe quoi.

Le programme de démonstration l'utilise pour écrire dans un fichier uniquement accessible en écriture par root, mais il aurait pu faire littéralement n'importe quoi. Le correctif consistait à séparer un nouveau drapeau indiquant qu'ils faisaient un CopyOnWrite, au lieu d'utiliser le drapeau Write pour les deux.


Linux
  1. Comment écrire un fichier dans un autre ?

  2. Comment écrire votre propre module de noyau Linux avec un exemple simple

  3. Comment copier des liens symboliques ?

  4. Comment vérifier si un proxy Socks5 fonctionne

  5. Comment m'assurer que mon système d'exploitation n'est pas affecté par CVE-2016-5195 (Dirty COW) ?

Comment écrire un script bash avec des exemples

Comment faire un screencasting simple sur Linux

Comment copier un grand nombre de fichiers sous Linux

Une explication simple de la commande NAMEI sous Linux

Comment copier un répertoire sous Linux

Comment écrire et exécuter un programme C sous Linux