2 puntos por GN⁺ 2023-11-15 | 1 comentarios | Compartir por WhatsApp

Descubrimiento de un misterio en la CPU

  • Si te interesan los errores que pueden ocurrir dentro de las CPU modernas, vale la pena seguir leyendo.
  • Si has escrito ensamblador x86, probablemente estés familiarizado con la instrucción rep movsb, usada para mover memoria.
  • Después de configurar la fuente, el destino, la dirección y el contador, el procesador se encarga de todos los detalles.

Interpretación de prefijos de instrucciones

  • Una de las características de x86 es que la decodificación de instrucciones suele ser muy flexible.
  • Incluso si se usan prefijos sin sentido o que entran en conflicto con otros prefijos, la mayoría de las veces se ignoran.
  • Los compiladores pueden usar prefijos innecesarios para ajustarse al límite de alineación deseado.

Prefijo REX

  • i386 tenía 8 registros de propósito general, así que se podían especificar registros con 3 bits.
  • x86-64 introdujo 8 registros de propósito general adicionales, por lo que se necesitaron más bits.
  • El prefijo rex permite que la siguiente instrucción tome prestados bits adicionales, lo que hace posible codificar 16 registros de propósito general.

Reglas de codificación

  • El prefijo rex amplía el espacio disponible para codificar operandos.
  • Los prefijos innecesarios o redundantes suelen ignorarse en x86.
  • La instrucción rex.rxb rep movsb no tiene operandos, por lo que los bits rex no tienen significado y el procesador ignora el prefijo rex.

Fast Short Repeat Move (FSRM)

  • FSRM es una función nueva introducida en Ice Lake para resolver las desventajas de ERMS.
  • En ERMS, la parte difícil de mover cadenas de manera eficiente consiste en alinear el búfer para usar el almacenamiento más ancho posible.
  • FSRM busca mover más rápido cadenas cortas de 128 bytes o menos.

Descubrimiento

  • Usando una técnica de verificación de procesadores llamada Oracle Serialization, se comprobó si dos formas de programas generados aleatoriamente terminaban en el mismo estado final.
  • En agosto, el pipeline de verificación encontró un caso en el que agregar un prefijo rex.r redundante a una operación rep movs optimizada con FSRM provocaba resultados impredecibles.
  • Se confirmó que, cuando varios núcleos activaban el mismo bug, el procesador reportaba una excepción de verificación de máquina y se detenía.

Reproducción

  • Los resultados de la investigación se publicaron en un repositorio de investigación de seguridad.
  • Para reproducir la vulnerabilidad, se puede usar la herramienta icebreak.
  • En sistemas no afectados no debería haber ninguna salida, pero en sistemas afectados se imprime . cada vez que la reproducción tiene éxito.

Análisis

  • Cómo funciona el microcódigo en los sistemas modernos se mantiene en secreto, así que solo es posible plantear teorías basadas en observaciones.
  • Se estima que el bug hace que el frontend calcule mal el tamaño de la instrucción movsb, provocando que las entradas posteriores del ROB (reorder buffer) queden asociadas con direcciones incorrectas.

Preguntas

  • Puede haber dudas sobre qué es posible en este estado inesperado de “glitch”.
  • Se sabe que puede corromper suficientemente el estado del sistema como para provocar un error de machine check, y que un hilo puede afectar la ejecución del procesador hermano SMT.
  • Como no hay forma de depurar la ejecución de μops, no se sabe si es posible lograr una escalada de privilegios.

Solución

  • Intel publicó microcódigo actualizado para todos los procesadores afectados.
  • Es posible que el sistema operativo o el proveedor del BIOS ya hayan proporcionado la actualización.

Alternativa

  • Si no es posible actualizar, se pueden desactivar las fast strings mediante el registro específico de modelo IA32_MISC_ENABLE.
  • Esto provoca una degradación considerable del rendimiento, por lo que solo debe usarse si es absolutamente necesario.

Opinión de GN⁺

Lo más importante de este artículo es que muestra el descubrimiento de un estado inesperado de “glitch” que puede ocurrir en CPU modernas y que podría derivar en una vulnerabilidad de seguridad. Este texto puede resultar interesante para ingenieros de software y ayuda a crear conciencia sobre la complejidad de las CPU y la fragilidad de los sistemas. Además, contribuye a entender cómo este tipo de hallazgos puede convertirse en una amenaza de seguridad real y resalta la importancia del microcódigo actualizado.

1 comentarios

 
GN⁺ 2023-11-15
Opiniones de Hacker News
  • El equipo de Konrad Magnusson descubrió un problema relacionado con mimalloc.

    • Konrad Magnusson de Paradox Interactive encontró un issue relacionado con mimalloc, que podría estar vinculado a una nueva vulnerabilidad de CPU descubierta por investigadores de Google.
  • Varios equipos de investigación dentro de Google descubrieron el bug de forma independiente.

    • Múltiples equipos de investigación dentro de Google, incluidos el equipo de silifuzz y el equipo de Google Information Security Engineering, descubrieron el mismo bug de forma independiente.
  • El procesador reporta una excepción de comprobación de máquina y se detiene.

    • Se menciona el fenómeno en el que el procesador reporta una excepción de comprobación de máquina y deja de funcionar.
  • Se hace evidente la falta de comprensión sobre el hardware.

    • Se reconoce que falta conocimiento sobre hardware y se pregunta por qué se necesita un "prefijo" para cambiar el comportamiento de una instrucción.
  • Recuerda el diagnóstico de qemu cuando enfrentó el problema de repz ret.

    • Rememora la situación en la que qemu diagnosticó el problema de repz ret.
  • Empleados de Intel y de Google reportaron el problema.

    • Intel expresó su agradecimiento a sus propios empleados y a empleados de Google por descubrir y reportar internamente este problema.
  • Es mucho más interesante que el artículo de Google.

    • Expresa que esta discusión es mucho más interesante que el artículo de Google.
  • Duda sobre si es posible diseñar una CPU que no ejecute en orden sino de forma especulativa, sin problemas de seguridad.

    • Plantea dudas sobre los problemas de seguridad que podrían surgir al diseñar una CPU que no ejecute en orden sino de forma especulativa, y pregunta si en el futuro se avanzará hacia un modelo en el que cada núcleo A55 ejecute una aplicación de manera independiente.
  • Explicación del aviso de seguridad de Intel.

    • El aviso de seguridad de Intel explica que existe una secuencia de instrucciones que provoca un comportamiento inesperado en ciertos procesadores Intel, mediante la cual un usuario autenticado podría causar escalación de privilegios, divulgación de información o denegación de servicio.