Dependencia del tiempo de ejecución de instrucciones de los datos en CPU ARM e Intel

Eric Biggers, uno de los desarrolladores del cifrado Adiantum y mantenedor del subsistema fscrypt del kernel de Linux, propuso un conjunto de parches para bloquear los problemas de seguridad derivados de una característica de los procesadores Intel que no garantiza tiempos de ejecución constantes para los diferentes datos procesados. El problema aparece en los procesadores Intel empezando por la familia Ice Lake. Se observa un problema similar en los procesadores ARM.

El autor de los parches considera que la dependencia del tiempo de ejecución de las instrucciones de los datos procesados ​​en estas instrucciones es una vulnerabilidad en los procesadores, ya que dicho comportamiento no puede garantizar la seguridad de las operaciones criptográficas realizadas en el sistema. Muchas implementaciones de algoritmos criptográficos están diseñadas para garantizar que los datos no afecten el tiempo de ejecución de las instrucciones, y violar este comportamiento puede llevar a la creación de ataques de canal lateral que recuperan datos basándose en el análisis de su tiempo de procesamiento.

Potencialmente, la dependencia de los datos en tiempo de ejecución también se puede utilizar para lanzar ataques para determinar los datos del kernel desde el espacio del usuario. Según Eric Biggers, el tiempo de ejecución constante no se proporciona de forma predeterminada ni siquiera para instrucciones que realizan operaciones de suma y XOR, así como para instrucciones especializadas AES-NI (información no confirmada por pruebas, según otros datos, hay un retraso de uno ciclo durante la multiplicación de vectores y el conteo de bits).

Para deshabilitar este comportamiento, Intel y ARM han propuesto nuevos indicadores: PSTATE bit DIT (Data Independent Timing) para CPU ARM y MSR bit DOITM (Data Operand Independent Timing Mode) para CPU Intel, devolviendo el comportamiento anterior con tiempo de ejecución constante. Intel y ARM recomiendan habilitar la protección según sea necesario para el código crítico, pero en realidad, el cálculo crítico puede ocurrir en cualquier parte del kernel y del espacio del usuario, por lo que estamos considerando habilitar los modos DOITM y DIT para todo el kernel en todo momento.

Para los procesadores ARM, la rama del kernel Linux 6.2 ya ha adoptado parches que cambian el comportamiento del kernel, pero estos parches se consideran insuficientes ya que solo cubren el código del kernel y no cambian el comportamiento del espacio de usuario. Para los procesadores Intel, la inclusión de protección aún se encuentra en etapa de revisión. El impacto del parche en el rendimiento aún no se ha medido, pero según la documentación de Intel, habilitar el modo DOITM reduce el rendimiento (por ejemplo, al deshabilitar algunas optimizaciones, como la precarga de datos específicos) y en futuros modelos de procesador la reducción del rendimiento puede aumentar. .

Fuente: opennet.ru

Añadir un comentario