¿Se pueden guardar los secretos en la memoria?

8

Diga, estoy ejecutando una aplicación en un servidor en la nube como AWS. Supongamos que proporciono una clave en tiempo de ejecución (por lo que no se almacena junto con el código interno), ¿hay alguna forma de asegurar esta clave en la memoria?

Por lo tanto, si un atacante obtiene acceso al servidor remoto más adelante, aún no podrá extraer la clave de la memoria. ¿Hay alguna manera de lograr esto? ¿O se sabe que es teóricamente imposible?

La técnica analizada aquí , la seguridad de tiempo de ejecución transparente, se afirma que lo hace" difícil ", pero aún puede ser computacionalmente viable.

EDITAR: las soluciones basadas en hardware también están bien.

    
pregunta Jus12 03.05.2016 - 08:51
fuente

5 respuestas

6

Respondí una pregunta similar aquí . Para una solución de hardware normal, un módulo de seguridad de hardware (HSM) hace esto. Para el software, .NET ofrece Secure String Mecanismo para cifrar y proteger datos sensibles en la memoria RAM. Otras plataformas pueden ofrecer algo similar. Para una solución de AWS, Amazon ofrece CloudHSM para hacer más o menos lo que estás pidiendo, creo.

Desde AWS:

  

HSM es la abreviatura de Hardware Security Module. Es una pieza de hardware -   un dispositivo dedicado que proporciona almacenamiento de claves seguro y un conjunto de   Operaciones criptográficas dentro de un recinto resistente a la manipulación. Usted puede   almacene sus claves dentro de un HSM y utilícelas para cifrar y descifrar datos   Manteniéndolos sanos y salvos y bajo su control total. Usted está   el único con acceso a las claves almacenadas en un HSM.

     

El servicio AWS CloudHSM trae los beneficios de los HSM a la nube. Tú   Mantener el control total de las claves y las operaciones criptográficas.   realizado por el (los) HSM (s) que usted crea, incluyendo un único inquilino exclusivo   Acceso a cada una. Sus claves criptográficas están protegidas por una   HSM resistente a la manipulación indebida que está diseñado para cumplir con una serie de   Normas internacionales y del gobierno de los EE. UU., incluidas NIST FIPS 140-2   y Common Criteria EAL4 +.

    
respondido por el md_1976 03.05.2016 - 20:14
fuente
3

Mientras que todos los demás han sugerido una solución de hardware, sugeriré una solución de software (aunque no quiero decir que sea mejor o peor que usar un HSM, que tendrá que decidir por su cuenta) en sus propias necesidades). Esta solución es un parche de kernel que encripta procesos.

RamCrypt es un proyecto que cifra la mayoría de la memoria de los procesos individuales con AES128 en modo XEX, por lo que todos los secretos de los procesos están a salvo en la memoria, incluso si toda la memoria se adquiere de forma forense. La memoria está cifrada con TRESOR, por lo que la clave de cifrado nunca está presente en la RAM. Mantiene la clave en los registros de depuración x86, por lo que están fuera de la memoria, y realiza todos los cálculos AES utilizando AES-NI, registros generales y registros SSE, por lo que nunca ingresa a la memoria principal o al caché de la CPU. La clave se utiliza para cifrar y descifrar páginas de memoria para un proceso completo. Solo 4 páginas se mantienen sin cifrar, y todas las demás están encriptadas. Cuando se necesita acceder a una página cifrada, se descifra con la clave AES y se cifra una de las 4 páginas no cifradas. RamCrypt viene como un parche para el kernel, y puede ajustar la cantidad de páginas que permanecen sin cifrar para elegir un compromiso entre rendimiento y seguridad. Consulte la página principal del proyecto, y trabajo de investigación asociado .

    
respondido por el forest 04.05.2016 - 00:17
fuente
1

No estoy seguro de si te entiendo bien. Pero en algún punto, el simple secreto tiene que estar en algún tipo de memoria (lo más probable es que la RAM). Si el atacante puede leer la memoria en ese momento y si puede encontrar el secreto, podrá descifrar los datos posteriormente.

Creo que, en teoría, no puede haber una manera (tal vez con algún módulo de seguridad especial que contenga el código de su programa) de guardar el secreto en la memoria sin que el atacante pueda encontrarlo. Siempre hay un algoritmo que puede encontrar la clave (tiene que haberlo porque quiere usar la clave en su propio código). Pero como se señala en el documento, puede ser muy difícil encontrar la clave.

Solo una nota al margen: tampoco veo el caso de uso de generar un secreto aleatorio que nadie conoce y luego no lo almacena en ningún lugar.

Saludos

    
respondido por el alive-and-well 03.05.2016 - 09:21
fuente
1

Fundamentalmente, no hay nada que pueda resolver este problema en absoluto. Se está encontrando en el problema de DRM, que es que necesita acceso de texto simple a algunos datos en un sistema para cumplir con alguna funcionalidad, pero también está colocando ese sistema bajo el control de una parte que no es confiable. Lo mejor que puedes hacer es hacer que sea increíblemente difícil para todos, excepto para los atacantes más decididos y hábiles, lo que esencialmente lo convierte en una desventaja de costo / beneficio para ellos.

En cuanto a las soluciones que lo hacen difícil, los dispositivos como Módulos de seguridad de hardware (HSM) deberían ser bastante parte superior de su lista. Utilizan una gama de funciones diseñadas para que resulte extremadamente difícil recuperar información de forma ilegítima. Por ejemplo, una característica común es cifrar los datos con una clave almacenada en la memoria volátil (por ejemplo, DRAM) en una placa separada, unida físicamente a la carcasa superior del dispositivo. Las conexiones de alimentación y datos para esta placa se suministran a través de un conector de contacto (a menudo hecho de polímero o espuma conductora) a través de las almohadillas de la placa principal, que están unidas físicamente a la carcasa inferior del dispositivo. Si intenta abrir el dispositivo, separa las placas, desconectando así la alimentación de la DRAM y perdiendo las claves. Sensores adicionales como luz, temperatura, presión, aceleración y posición (incluido GPS) e incluso campos magnéticos o radiación pueden estar presentes para detectar diferentes tipos de manipulación.

Un sistema potencial adicional que puede serle de utilidad en algunas circunstancias es el concepto de criptosistemas homomórficos . El homomorfismo, en términos laicos, es esencialmente la propiedad de un sistema criptográfico que permite que ciertas operaciones se realicen en datos en su forma encriptada, sin necesidad de descifrar primero los datos. Hay una variedad de esquemas disponibles, algunos de los cuales son incluso prácticos para ciertos tipos de escenarios, pero generalmente son de naturaleza bastante compleja y pueden ser particularmente lentos. No conozco ningún sistema criptográfico existente que proporcione homomorfismo de una manera que sea propicio para las aplicaciones de almacenamiento en la nube.

    
respondido por el Polynomial 03.05.2016 - 21:20
fuente
1

Depende.

Otros carteles sugieren un HSM. Esta puede ser una buena solución para un conjunto limitado de propósitos en los que necesita acceso temporal a una clave, luego se borra de la memoria activa y la clave del HSM no se almacena en la memoria a largo plazo.

Parece que necesitas el secreto para estar activo en la memoria todo el tiempo, y que no está almacenado en un HSM la mayor parte del tiempo. En ese caso, no veo mucho valor en las capacidades de almacenamiento de claves de un HSM, ya que no puede proteger las claves que ya están almacenadas en la memoria.

Y HSM también puede realizar las funciones criptográficas en el propio módulo. Si esto es útil para usted o no dependería de su aplicación.

    
respondido por el Steve Sether 03.05.2016 - 23:09
fuente

Lea otras preguntas en las etiquetas