¿Qué enfoques existen para garantizar la seguridad al implementar software en entornos que no son de confianza?

3

¿Es posible implementar software de tal manera que un actor deshonesto que tenga acceso físico al hardware no pueda recopilar ninguna información sobre el código que se está ejecutando o qué se está almacenando en la memoria?

Sé que hay algunos enfoques más "experimentales" como el cifrado de datos en el nivel de RAM y el almacenamiento de datos no cifrados en la memoria caché de la CPU (por ejemplo, TRESOR). ¿Hay alguna otra forma de resolver esto actualmente? ¿Ayudará algo como un esquema de cifrado totalmente homomórfico con esto una vez que se convierta en práctico en cuanto a velocidad?

    
pregunta narruc 19.02.2018 - 22:43
fuente

2 respuestas

2

El cifrado de memoria completo está fuera de la fase experimental, pero no puedo nombrar ningún servicio de alojamiento que lo use todavía. Se admite como un modo de operación para AMD Epyc y Ryzen Pro - enlace - así que probablemente lo veremos disponible pronto.

La intención es específicamente evitar que un administrador deshonesto robe los datos de la máquina virtual del cliente que opera en su infraestructura de nube.

El cifrado utilizado es AES en el modo ECB ajustado, sin autenticación, por lo que no es un sistema seguro. Se han propuesto ataques específicos contra él: enlace

El cifrado homomórfico dista mucho de ser práctico para el alojamiento remoto: si puedes pagar los gastos generales, puedes ejecutarlo en una Raspberry. El interés en él está actualmente dirigido a preservar la privacidad de los registros públicos para la votación y las transacciones. El cifrado homomórfico realmente se establece en un contexto de cadena de bloques, por lo que es probable que veamos más aplicaciones.

Es posible diseñar un sistema que proteja los datos incluso con hardware comprometido. Pero la arquitectura x86 no fue diseñada teniendo en cuenta los ataques, y está resultando difícil solucionar su confianza implícita. Dado que está preguntando sobre las formas actuales, la forma más sencilla de obtener una seguridad demostrable es crear un ASIC que aplique el cifrado autenticado ("Solo hay un modo de operación, y es seguro") y solo acepta comandos y datos firmados.

Sin embargo, incluso el cifrado de memoria inseguro actual (cifrado fuerte, modo débil) hace que sea más difícil robar sus datos a escondidas. No sirve para obtener información clasificada o altamente valiosa, lo que vale la pena arriesgar la exposición, pero, combinada con medidas de seguridad y supervisión activas, puede hacer que la extracción de datos oportunistas sea mucho menos probable.

    
respondido por el Therac 20.02.2018 - 10:18
fuente
1
  

¿Es posible implementar software de tal manera que un actor deshonesto que tenga acceso físico al hardware no pueda recopilar ninguna información sobre el código que se está ejecutando o qué se está almacenando en la memoria?

No, esto es imposible, por las siguientes razones:

  1. El acceso físico casi siempre significa que se acabó el juego, así que esto solo sería una indicación sólida de que lo que quieres no es factible.

  2. No importa cuánto intente proteger su código y los datos que produce, al final, el procesador debe tener acceso tanto al código de máquina de su programa como a los datos con los que trabaja. Incluso si su código se descifra y encripta cada parte de los datos antes de que se mueva de un registro de CPU a RAM, las claves de cifrado deben almacenarse en algún lugar (posiblemente también en registros, pero eso solo significa que son más difíciles de acceder, no imposible). Puedo imaginar varias formas de acceder a estos datos, como descargar toda la memoria RAM en un archivo, ejecutar el código en un depurador, suspender la máquina y almacenar el estado suspendido para su inspección después de que la máquina se despierte nuevamente, cambiando el kernel o libc para ayudar a espiar su código y así sucesivamente.

No entiendo a lo que te refieres con "algo como un esquema de encriptación totalmente homomórfico ayuda con esto", pero dudo mucho que cambie el punto 2, sea cual sea.

Los TPM proporcionan una forma de almacenar claves y realizar el cifrado y descifrado dentro del TPM, por lo que las claves no están expuestas, pero nuevamente, esto solo hace que sea más difícil obtener información relevante, no imposible.

    
respondido por el Pascal 19.02.2018 - 23:17
fuente

Lea otras preguntas en las etiquetas