¿Explicación simple de cómo funciona Dirty COW?

7

Estoy seguro de que muchos de ustedes recuerdan la Explicación de XKCD Heartbleed . Con el mismo espíritu, me gustaría solicitar una explicación de cómo funciona la última vulnerabilidad de marca, Dirty COW .

¿Es posible explicárselo a alguien como yo, que no tiene idea de cómo funciona el kernel de Linux o qué es una "copia en escritura"? Tenga en cuenta que no estoy buscando una explicación de lo que hace , pero de cómo y por qué funciona.

    
pregunta Anders 21.10.2016 - 20:52
fuente

2 respuestas

14

No soy un experto en el kernel de Linux, pero estoy familiarizado con los conceptos involucrados y leo el comentario de Linus y la diferencia. Voy a intentarlo, tal vez la gente pueda corregirme si me equivoco y nos arreglaremos las cosas juntos.

Copia en escritura es un concepto de memoria interna en el que, principalmente por motivos de rendimiento, las operaciones que hacen una copia de una sección de la memoria en realidad no obtienen su propia copia a menos que realicen un cambio en esa memoria, momento en el que , usted rápidamente hace su copia, hace el cambio a eso y se lo devuelve. La ventaja es que no tiene que hacer el trabajo de hacer la copia a menos y hasta que realmente la cambien: más rápido, menos uso de memoria, mejor almacenamiento en caché.

El error aquí está en el código que hace esa copia. Parece que hay una condición de carrera en esa copia (o en la contabilidad en torno a esa copia). Una condición de carrera ocurre cuando dos procesos o subprocesos diferentes acceden al mismo recurso y se pisan entre sí. En este caso, lo que sucede es que la memoria está marcada para poder escribirse antes de que realmente se copie: si dos subprocesos están trabajando muy cerca el uno del otro, la segunda puede aprovechar la marca grabable y escribir en la memoria original, no la copia.

La vulnerabilidad es que esto permite que un proceso se eleve a sí mismo al obtener acceso de escritura al propio entendimiento del kernel. El kernel sabe a qué usuario se está ejecutando cada proceso. Al tomar una copia de esa memoria que el kernel está usando para almacenar esa información usando Copia en escritura, luego, utilizando este error de COW sucio, realmente pueden escribir la información del usuario en la copia del kernel. . Entonces escriben que el proceso se está ejecutando como root ... y luego pueden hacer cualquier cosa.

El programa de demostración lo utiliza para escribir en un archivo que solo se puede escribir por root, pero podría haber hecho literalmente cualquier cosa. La solución fue separar una nueva bandera que dice que están haciendo un CopyOnWrite, en lugar de usar la bandera de escritura para ambas.

    
respondido por el crovers 21.10.2016 - 21:33
fuente
14

Usted y otras 3 personas están estudiando para un examen, usando las mismas notas.

Dices: "Tengo que irme, necesito hacer una copia de estas notas para mí mismo, que puedo marcar ... ¡déjame hacer una copia!"

Lleva las notas a la fotocopiadora, las copia, altera el original y luego lleva el original modificado al resto del grupo. Esa versión modificada es mala; Has alterado algunas respuestas para que estén equivocadas.

El resto del grupo se queda estudiando una mala versión de las notas, mientras se lleva la buena versión a casa.

Pasas la prueba.

Ellos fallan.

El único matiz entre este ejemplo y Dirty COW es que en Dirty COW no se le otorga el original supuestamente ; El kernel hace la copia por ti. Pero hay una condición de carrera que por error le da acceso al original cuando solicita una copia. "Condición de carrera" significa "puedes acceder a algo a lo que no deberías tener acceso".

    
respondido por el gowenfawr 22.10.2016 - 04:22
fuente

Lea otras preguntas en las etiquetas