¿Es la instrucción de lavado de predictor de bifurcación una corrección completa de Specter?

6

He entendido que Spectre funciona principalmente al explotar el estado del predictor de rama. El bypass de comprobación de límites y la inyección de rama derivada son dos caras de la misma moneda, la interacción de la ejecución especulativa con el predictor de rama.

Ahora, inmediatamente después de escuchar esto, pensé que necesitamos una instrucción para borrar el estado del predictor de rama. Dicha instrucción podría usarse al cambiar el contexto del espacio del usuario al espacio del kernel o viceversa o entre dos procesos del espacio del usuario.

Al parecer no estoy solo en esto. Mark tiene una excelente respuesta a la pregunta ¿Qué tan malo es Specter? y Mark propone lo mismo. Esto también se ha propuesto en foros de discusión de Real World Tech .

Sin embargo, ¿es esto una solución completa para Specter? ¿Qué pasa con las máquinas virtuales como las JVM que necesitan ejecutar código no confiable en el mismo proceso de espacio de usuario que también ejecuta código de confianza? ¿Podría la instrucción ayudar a asegurar tales máquinas virtuales?

    
pregunta juhist 04.01.2018 - 14:20
fuente

1 respuesta

5

Una instrucción de limpieza de predictor es necesaria pero no suficiente para la protección contra Specter. Una protección completa contra el ataque de Spectre requiere dos cosas :

  1. Vaciar el estado del predictor de rama en el cambio de contexto. Esto evita que un proceso ataque a otro dando a cada proceso su propio estado de predictor de ramificación. Sin embargo, no impide que un componente aislado de un proceso (como el Javascript compilado por JIT) ataque a otros componentes del mismo proceso.
  2. El estado del predictor de rama debe tener en cuenta la dirección completa de la instrucción de rama (actualmente, para ahorrar espacio, solo se utilizan los bits de orden inferior). Esto evitará que un proceso se ataque a sí mismo, ya que las diferentes partes del proceso deben tener direcciones diferentes. Sin embargo, no impide que un proceso ataque a otro, ya que diferentes procesos pueden usar la misma dirección.
respondido por el Mark 05.01.2018 - 00:11
fuente

Lea otras preguntas en las etiquetas