Hace unos días se publicó un parche para el kernel que proporciona a Linux soporte para el cifrado de memoria en procesadores de AMD, un cifrado que se realiza a través del controvertido PSP.
Se trata de una tecnología llamada SME (Secure Memory Encryption). Consiste en aplicar cifrado a los datos almacenados en la memoria RAM en todos los procesadores actuales de AMD. El cifrado de memoria es algo que se lleva haciendo años en hardware específico pero no se había implementado en hardware doméstico hasta hace poco.
El cifrado de la memoria RAM sirve para proteger al sistema de algunos tipos de ataques. A día de hoy, lo habitual es encontrar los datos cifrados en las unidades de almacenamiento masivo, pero cuando esta información se descifra, queda desprotegida en la memoria RAM, dando a un atacante la posibilidad de leerla.
Por otra parte, las nuevas memorias no volátiles (NVDIMM) agravan el problema ya que esta puede ser sustraída del sistema sin que se pierda la información que hay almacenada en ella. Sin cifrado, todos los datos pueden ser leídos por cualquiera, incluyendo contraseñas y otras informaciones sensibles.
El cifrado se lleva a cabo por hardware específico integrado en el propio controlador de memoria que se encuentra en el procesador. Cada controlador dispone de un módulo que se dedica a cifrar los datos escritos en RAM usando AES (Advanced Encryption Standard). Ese mismo módulo del procesador se encarga de descifrar los datos.
El cerebro encargado de gestionar la codificación es un procesador AMD Cortex-A5 incoporado dentro del núcleo principal en lo que comercialmente se denomina AMD Secure Processor (AMD-SP). Es SoC genera una clave aleatoria cada vez que se inicia el sistema antes de que esta sea visible por cualquier programa que se puede ejecutar en los procesadores principales (x86).
Efectivamente, se trata del Platform Security Processor (PSP) al que le dedicamos una entrada hace unos días. Esta plataforma resulta controvertida desde el punto de vista de la seguridad porque obliga a usar un firmware cerrado y firmado del que no se sabe nada sobre su código fuente.
Así, aunque la información se almacene cifrada en RAM y esta no sea accesible por otras aplicaciones, los problemas de seguridad inherentes al propio PSP hacen de este cifrado una solución no muy de fiar. Se trata pues de una solución a un problema de seguridad que incorpora nuevos problemas de seguridad.
En cualquier caso, Linux ha implementado esta función identificando su disponibilidad a través del identificador del procesador (CPUID). Una vez habilitada, las entradas de la tabla de páginas establecerán de qué forma se accede a la memoria: si una página de memoria está marcada como ‘cifrada’, se accederá a ella como tal. En este parche se ha intentado cifrar todo lo posible iniciando la función al comienzo del arranque donde el kernel está cifrado.
La información sobre el parche que da soporte para el cifrado de memoria de AMD se puede consultar en la lista de correo del kernel.