33C3: Deduplicación de memoria, el amigo hacker

Alberto Gimenez
Alberto Gimenez

En el 33 ° Congreso Anual de Comunicación del Caos, [Antonio Barresi] y [Erik Bosman] presentó no uno, ni dos, sino tres (¡3 !!) excelentes trucos, todos ellos basados ​​en la explotación de la duplicación de memoria en máquinas virtuales. Si está interesado en la seguridad, definitivamente debería ver la charla que se incluye a continuación. Y agarra las diapositivas también. (PDF)

La duplicación de la memoria es la fruta prohibida para los arreglos de VM grandes, obviamente peligrosa pero muy tentadora. Imagine que está alojando máquinas virtuales y se da cuenta de que muchas de las máquinas tienen las mismas memorias al mismo tiempo. Quizás todos veamos los mismos videos de gatos. Pueden ahorrar memoria global a través de las máquinas simplemente almacenando una copia del video del gato y mostrando el bloque de memoria compartida de cada una de las máquinas que lo utilizan. Las máquinas separadas ficticias comparten memoria. ¿Qué puede salir mal?

Básicamente, se tarda un poco más en acceder a esa memoria cuando está duplicada, porque la máquina virtual tiene que buscar la dirección de la memoria fuera de sí misma. Si un atacante estuviera interesado en saber si otra VM está viendo videos de gatos, podría guardar el video del gato en su memoria, esperar a que el administrador de la VM lo duplique y luego dedicar todo el tiempo que sea necesario para hacer una modificación en su memoria. . Si supera un umbral, significa que otra persona está viendo videos de gatos. El resto del discurso explica tres logros de esta vulnerabilidad.

El ataque CAIN permite al atacante averiguar qué dirección tiene una página de memoria determinada en una VM adyacente. Piense, por ejemplo, en la DLL de Windows. La idea básica es como se explicó anteriormente, pero averiguar la compensación del código dentro de una página de memoria es difícil, pero lo matan escribiendo el mismo fragmento de código en todas las compensaciones y averiguando cuál coincide. Hasta ahora, este ataque solo filtra la ubicación de la memoria de los programas que se ejecutan en otra máquina virtual, pero considérelo un trampolín.

El segundo ataque agrega un error del dispositivo, el ataque Rowhammer, para explotar un proceso que se ejecuta en la misma máquina. En particular, utilizan código JavaScript para explotar el navegador Edge “seguro” de Microsoft. Obtienen la dirección de un código y un puntero masivo con su ataque de duplicación de memoria, crean un objeto de código y usan Rowhammer para convertir la dirección del objeto en un puntero y operarlo. Todo gracias a la auto-duplicación.

Finalmente, “Flip Feng Shui” escribe nuevos datos en la VM de la víctima corrompiendo una copia local de la memoria compartida, que luego se refleja en la víctima. Debido a que un poco volcado en Rowhammer es impredecible pero repetible, el primer paso es averiguar dónde se volcarán las piezas y luego alinear una copia de los datos que desea cambiar en la VM de la víctima en la memoria. Entonces el recuerdo es Rowhammered, y dado que no fue escrito explícitamente, después de un tiempo puede atravesar a la víctima.

La demostración incluye invertir algunos bits en la clave SSH pública de la víctima para convertirla en una clave fácilmente factorizable y luego iniciar sesión. En un segundo ataque, combinan ligeramente la clave con la propiedad del sitio web “ubunvu.com” para instalar un programa arbitrario en la máquina virtual de la víctima a través de su mecanismo de actualización automática. Santa vaca.

Este discurso a veces es un poco pesado, pero los extractos son asombrosos. Es “obvio” que la auto-duplicación tiene que ser un problema, pero en realidad explotarlo (¡de tres maneras!) Es una fortaleza. No dicen que fueron los responsables, pero vale la pena señalar que Windows 10 ya no usa la duplicación de memoria.


  • GotNoTime dice:

    El uso compartido de páginas entre computadoras se ha desactivado en vSphere durante varios años. Agregaron la opción de usar salt, que de forma predeterminada es única para cada VM, por lo que no se comparte nada. Puede configurar la misma sal en un grupo de máquinas virtuales si desea compartir algunas o simplemente apagar la sal, para que todo se comparta.

    La adición de Rowhammer es interesante.

  • Saabman dice:

    He leído esto y quiero entenderlo, pero, por desgracia, solo soy un mortal.

    Lo mejor que puedo administrar es que la copia de memoria en las máquinas virtuales es mala.

    • Jack acostado dice:

      Siento lo mismo, pero de nuevo algunas personas no relacionadas con la tecnología piensan que soy un “genio” porque puedo hacer un proyecto Arduino simple. El caso es que esas cosas suenan como una locura, pero si sabes un poco, o aprendes una o dos cosas, el resto funcionará. Lees La-Tecnologia. Apuesto a que la mayoría de la gente en tu vida diaria piensa que eres una especie de supergenio.

    • Steven-X dice:

      No se sienta mal, me perdí después de que dejaron los números de línea.

  • Ostraco dice:

    Algo memorable es que la duplicación barata no sería necesaria.

    • rewolff dice:

      La memoria deja de ser barata cuando desea ejecutar cientos de máquinas virtuales en una sola máquina maestra.

      • CanuckFire dice:

        A medida que entiendo la idea de densidad y la asombrosa eficiencia, me he dado cuenta de que mucho antes de instalar cientos de máquinas en un solo host, tengo una memoria.
        Sin mencionar el hecho de que evito fanáticamente cualquier cosa “única” en busca de redundancia y carga compartida.
        También me pregunto cómo funcionan estas debilidades vacías cuando las máquinas migran.
        Me imagino que sería muy importante apuntar a las máquinas específicas, por lo que si una máquina requiere más recursos de los que tenía el host, y ellos o incluso la máquina de ataque migran a otro host, ya no comparten el mismo grupo de memoria, y esta explotación parece que ya no tendría efecto.

    • Martín dice:

      Nunca está de más tener más 🙂

  • no engranajes dice:

    opinó que el proyecto cero descubrió que no pueden convertir piezas en ECC y que un ariete más nuevo usa TRR y MAC para ablandar una muralla

  • Todd Hubers dice:

    ¿Es la duplicación de memoria el problema o cómo se implementó? Sospecho lo último. Rowhammer está configurado para una RAM más nueva, e incluso con eso, puede deducir segmentos de memoria de solo lectura sin problemas. La detección detectable se puede eliminar mediante la duplicación asincrónica. No digo que esto sea fácil, pero si significa más máquinas virtuales y sin fallas de seguridad, alguien lo construirá.

    • Todd Hubers dice:

      ¿Cuáles son las posibilidades de que la duplicación esté deshabilitada en Windows y otros a petición de los socios de hardware? La seguridad es la gran excusa. Aunque podrían corregir las vulnerabilidades, no lo hacen por el costo, la presión del hardware y, afortunadamente, por deshabilitarlo y parecer responsables.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *