¿Cómo pueden los diseñadores de CPU evitar las fugas de información de la ejecución especulada?

7

Sabemos sobre medidas a corto plazo para mitigar las vulnerabilidades de Meltdown y Specter en ciertos microprocesadores donde la ejecución especulativa tiene efectos mensurables en los tiempos de caché (principalmente parches a microcódigo, sistemas operativos y cualquier aplicación que contenga límites de confianza).

¿Cuáles son las soluciones a largo plazo para el problema?

Es poco probable que las soluciones obvias y obvias como "no especular" o "ignorar el caché cuando especule" sean aceptables debido a las consideraciones de rendimiento que introdujeron la especulación en primer lugar.

¿Quizás las instrucciones especuladas podrían usar un caché separado, que solo se copia al caché principal si la especulación tiene éxito? Si no, ¿por qué no?

¿Podrían los procesadores agregar información de privilegios a las entradas de la tabla de páginas, para hacer que el Aislamiento de la Tabla de Páginas del Kernel sea automático (y reducir su impacto en el rendimiento)?

¿Hay otros cambios de diseño que mejoren la seguridad sin un gran impacto en el rendimiento?

    
pregunta Toby Speight 19.01.2018 - 14:13
fuente

3 respuestas

5

Arreglar la fusión es simple: si la CPU está realizando una ejecución especulativa, no lea los datos de las áreas protegidas de la memoria. El hecho de que Meltdown sea casi exclusivamente solo para Intel muestra que es un defecto de diseño, en lugar de un efecto secundario inherente de la ejecución especulativa.

Fijar Specter en el caso general es mucho más difícil. Espectro se trata de inducir a un programa a funcionar incorrectamente de manera especulativa, y luego observar los efectos secundarios de esa falla. Usted no puede deshacerse de todos los efectos secundarios: incluso si pudiera revertir todos los cachés, buffers, tablas y todo eso, existe el simple hecho de que la ejecución especulativa implica la ejecución especulativa . Ejecutar instrucciones especulativas lleva una cantidad de tiempo (algo controlable por datos), que no se puede deshacer antes de descifrar el viaje en el tiempo.

Lo que se puede hacer es aumentar en gran medida la dificultad de inducir un mal funcionamiento especulativo. Actualmente, la mayoría de las CPU no tienen el concepto de "proceso" y utilizan solo una parte de la dirección al realizar búsquedas en la tabla de predicción de la rama. Si los datos de predicción de ramificación se etiquetan para indicar a qué proceso pertenece, o si la tabla de predicción de ramificación se vacía en cada cambio de contexto, la capacidad de un programa para entrenar mal las acciones del predictor de ramificación para otro programa se elimina de manera efectiva. De manera similar, si la predicción de bifurcaciones se realiza utilizando la dirección completa, un programa no puede atacarse a sí mismo (por ejemplo, Javascript no podría usar Spectre para salir de la caja de arena de un navegador web).

    
respondido por el Mark 19.01.2018 - 23:02
fuente
1

Los tres ataques usan canales laterales donde la ejecución especulativa produce efectos secundarios que pueden observarse en la práctica.

Para evitar esta clase de ataques, los circuitos de ejecución especulativa deberán cambiarse para no producir ningún cambio observable en el estado del procesador (aparte de los resultados temporales que produjeron). Por ejemplo, el procesador puede hacer una instantánea de todos los cachés, buffers y tablas antes de la ejecución especulativa y restaurarlos si no se tomó la rama. Alternativamente, puede evitar que se observe el efecto haciendo que el acceso a todas las líneas de caché sea igualmente lento por primera vez después de un fallo de predicción de rama, por ejemplo.

Lamentablemente, cualquier solución significará un gran cambio en los diseños y metodologías actuales del procesador y probablemente anulará muchos de los beneficios de la predicción de bifurcaciones y la ejecución especulativa.

    
respondido por el billc.cn 19.01.2018 - 20:06
fuente
-2

Bueno, que yo sepa, las medidas a corto plazo para mitigar las vulnerabilidades de Meltdown y Specter en ciertos microprocesadores donde la ejecución especulativa tiene efectos mensurables en los tiempos de caché (principalmente parches a microcódigo, sistemas operativos y cualquier aplicación que contenga límites de confianza).

Entonces, puedo decir que la forma correcta de prevenir CUALQUIER fuga de información de una CPU / GPU / PSU sería el paradigma "Ziploc". El paradigma ziploc A.K.A Ziparadignloc, es la única forma de evitar que se cierre correctamente una vez sellado.

    
respondido por el Jew Shew 19.01.2018 - 15:17
fuente

Lea otras preguntas en las etiquetas