En seguridad informática , un ataque de arranque en frío (o en menor medida, un ataque de reinicio de plataforma ) es un tipo de ataque de canal lateral en el que un atacante con acceso físico a una computadora realiza un volcado de memoria de la memoria de acceso aleatorio (RAM) de una computadora realizando un reinicio completo de la máquina de destino. Por lo general, los ataques de arranque en frío se utilizan para recuperar claves de cifrado de un sistema operativo en ejecución por razones de investigación maliciosa o criminal. [1] [2] [3] El ataque se basa en la propiedad de remanencia de datos de DRAM y SRAM para recuperar contenidos de memoria que permanecen legibles en los segundos a minutos posteriores a un apagado. [2] [4] [5]
Un atacante con acceso físico a una computadora en funcionamiento normalmente ejecuta un ataque de arranque en frío arrancando en frío la máquina y arrancando un sistema operativo ligero desde un disco extraíble para volcar el contenido de la memoria física previa al arranque a un archivo. [6] [2] Un atacante entonces es libre de analizar los datos volcados de la memoria para encontrar datos confidenciales, como las claves , utilizando varias formas de ataques de búsqueda de claves . [7] [8] Dado que los ataques de arranque en frío apuntan a la memoria de acceso aleatorio , los esquemas de cifrado de disco completo , incluso con un módulo de plataforma confiable instalado, son ineficaces contra este tipo de ataque. [2] Esto se debe a que el problema es fundamentalmente un problema de hardware (memoria insegura) y no de software . Sin embargo, el acceso malintencionado se puede prevenir limitando el acceso físico y utilizando técnicas modernas para evitar almacenar datos confidenciales en la memoria de acceso aleatorio .
Los módulos de memoria DIMM pierden datos gradualmente con el tiempo a medida que pierden energía, pero no pierden todos los datos inmediatamente cuando se pierde la energía. [2] Con ciertos módulos de memoria, la ventana de tiempo para un ataque se puede extender a horas o incluso una semana enfriándolos con spray congelante y nitrógeno líquido. Además, a medida que los bits desaparecen en la memoria con el tiempo, se pueden reconstruir, ya que se desvanecen de una manera predecible. [2] En consecuencia, un atacante puede realizar un volcado de memoria de su contenido ejecutando un ataque de arranque en frío. La capacidad de ejecutar el ataque de arranque en frío con éxito varía considerablemente entre diferentes sistemas, tipos de memoria, fabricantes de memoria y propiedades de la placa base, y puede ser más difícil de llevar a cabo que los métodos basados en software o un ataque DMA . [9] Si bien el foco de la investigación actual está en el cifrado de discos, cualquier dato confidencial almacenado en la memoria es vulnerable al ataque. [2]
Los atacantes ejecutan ataques de arranque en frío reiniciando de manera abrupta y forzada una máquina de destino y luego iniciando un sistema operativo preinstalado desde una unidad flash USB , CD-ROM o a través de la red . [3] En los casos en los que no es práctico reiniciar por completo la máquina de destino, un atacante puede, alternativamente, quitar físicamente los módulos de memoria del sistema original y colocarlos rápidamente en una máquina compatible bajo el control del atacante, que luego se inicia para acceder a la memoria. [2] Luego, se puede realizar un análisis más detallado de los datos volcados de la RAM .
También se puede utilizar un tipo de ataque similar para extraer datos de la memoria, como un ataque DMA que permite acceder a la memoria física a través de un puerto de expansión de alta velocidad como FireWire . [3] Un ataque de arranque en frío puede ser preferible en ciertos casos, como cuando existe un alto riesgo de daño al hardware. El uso del puerto de expansión de alta velocidad puede provocar un cortocircuito o dañar físicamente el hardware en ciertos casos. [3]
Los ataques de arranque en frío se utilizan normalmente para investigaciones forenses digitales , fines maliciosos como el robo y la recuperación de datos. [3]
En ciertos casos, se utiliza un ataque de arranque en frío en la disciplina de la ciencia forense digital para preservar forensemente los datos contenidos en la memoria como evidencia criminal. [3] Por ejemplo, cuando no es práctico preservar los datos en la memoria a través de otros medios, se puede utilizar un ataque de arranque en frío para realizar un volcado de los datos contenidos en la memoria de acceso aleatorio . Por ejemplo, un ataque de arranque en frío se utiliza en situaciones en las que un sistema está protegido y no es posible acceder a la computadora. [3] Un ataque de arranque en frío también puede ser necesario cuando un disco duro está cifrado con cifrado de disco completo y el disco potencialmente contiene evidencia de actividad criminal. Un ataque de arranque en frío proporciona acceso a la memoria, que puede proporcionar información sobre el estado del sistema en ese momento, como qué programas se están ejecutando. [3]
Los atacantes pueden utilizar un ataque de arranque en frío para obtener acceso a información cifrada, como información financiera o secretos comerciales, con intenciones maliciosas. [10]
Un objetivo común de los ataques de arranque en frío es eludir el cifrado de disco basado en software. Se ha demostrado que los ataques de arranque en frío, cuando se utilizan junto con ataques de búsqueda de claves, son un medio eficaz para eludir los esquemas de cifrado de disco completo de varios proveedores y sistemas operativos , incluso cuando se utiliza un criptoprocesador seguro con módulo de plataforma segura (TPM) . [2]
En el caso de aplicaciones de cifrado de disco que se pueden configurar para permitir que el sistema operativo arranque sin necesidad de introducir un PIN previo al arranque o de que esté presente una clave de hardware (por ejemplo, BitLocker en una configuración simple que utiliza un TPM sin un PIN de autenticación de dos factores o una clave USB), el marco temporal para el ataque no es limitante en absoluto. [2]
BitLocker en su configuración predeterminada utiliza un módulo de plataforma confiable que no requiere un PIN ni una clave externa para descifrar el disco. Cuando se inicia el sistema operativo , BitLocker recupera la clave del TPM, sin ninguna interacción del usuario. En consecuencia, un atacante puede simplemente encender la máquina, esperar a que el sistema operativo comience a arrancar y luego ejecutar un ataque de arranque en frío contra la máquina para recuperar la clave. Debido a esto, se debe utilizar la autenticación de dos factores , como un PIN previo al arranque o un dispositivo USB extraíble que contenga una clave de inicio junto con un TPM para solucionar esta vulnerabilidad en la implementación predeterminada de BitLocker. [11] [5] Sin embargo, esta solución alternativa no impide que un atacante recupere datos confidenciales de la memoria, ni recupere claves de cifrado almacenadas en caché en la memoria.
Dado que un volcado de memoria se puede realizar fácilmente ejecutando un ataque de arranque en frío, el almacenamiento de datos confidenciales en la RAM, como las claves de cifrado para el cifrado de disco completo, no es seguro. Se han propuesto varias soluciones para almacenar claves de cifrado en áreas distintas de la memoria de acceso aleatorio . Si bien estas soluciones pueden reducir la posibilidad de romper el cifrado de disco completo, no brindan protección para otros datos confidenciales almacenados en la memoria.
Una solución para mantener las claves de cifrado fuera de la memoria es el almacenamiento de claves basado en registros. Las implementaciones de esta solución son TRESOR [12] y Loop-Amnesia [13] . Ambas implementaciones modifican el núcleo de un sistema operativo de modo que los registros de la CPU (en el caso de TRESOR, los registros de depuración x86 y en el caso de Loop-Amnesia, los registros de perfil AMD64 o EMT64) se puedan usar para almacenar claves de cifrado, en lugar de en la RAM. Las claves almacenadas en este nivel no se pueden leer fácilmente desde el espacio de usuario [ cita requerida ] y se pierden cuando la computadora se reinicia por cualquier motivo. Tanto TRESOR como Loop-Amnesia deben usar la generación de claves sobre la marcha debido al espacio limitado disponible para almacenar tokens criptográficos de esta manera. Por seguridad, ambos deshabilitan las interrupciones para evitar que la información de la clave se filtre a la memoria desde los registros de la CPU mientras se realiza el cifrado o descifrado, y ambos bloquean el acceso a los registros de depuración o perfil.
Hay dos áreas potenciales en los procesadores x86 modernos para almacenar claves: los registros SSE , que en efecto podrían volverse privilegiados al deshabilitar todas las instrucciones SSE (y necesariamente, cualquier programa que dependa de ellas), y los registros de depuración, que eran mucho más pequeños pero no tenían esos problemas.
Se ha desarrollado una distribución de prueba de concepto llamada 'paranoix' basada en el método de registro SSE. [14] Los desarrolladores afirman que "al ejecutar TRESOR en una CPU de 64 bits que admita AES-NI , no hay ninguna penalización de rendimiento en comparación con una implementación genérica de AES ", [15] y se ejecuta ligeramente más rápido que el cifrado estándar a pesar de la necesidad de recálculo de clave. [12] La principal ventaja de Loop-Amnesia en comparación con TRESOR es que admite el uso de múltiples unidades cifradas; las principales desventajas son la falta de soporte para x86 de 32 bits y un peor rendimiento en CPU que no admiten AES-NI.
La "caché congelada" (a veces conocida como "caché como RAM") [16] se puede utilizar para almacenar de forma segura claves de cifrado. Funciona desactivando la caché L1 de una CPU y la utiliza para el almacenamiento de claves; sin embargo, esto puede degradar significativamente el rendimiento general del sistema hasta el punto de ser demasiado lento para la mayoría de los propósitos. [17] [ se necesita una mejor fuente ]
Guan et al. (2015) [18] propusieron una solución similar basada en caché al emplear el modo de caché WB (Write-Back) para mantener los datos en cachés, reduciendo los tiempos de cálculo de los algoritmos de clave pública.
Mimosa [19] presentó en IEEE S&P 2015 una solución más práctica para los cálculos criptográficos de clave pública contra ataques de arranque en frío y ataques DMA. Emplea memoria transaccional de hardware (HTM), que se propuso originalmente como un mecanismo de acceso especulativo a la memoria para aumentar el rendimiento de aplicaciones multiproceso. La fuerte garantía de atomicidad proporcionada por HTM se utiliza para derrotar accesos concurrentes ilegales al espacio de memoria que contiene datos confidenciales. La clave privada RSA se cifra en la memoria mediante una clave AES protegida por TRESOR. A pedido, se realiza un cálculo de clave privada RSA dentro de una transacción HTM: primero se descifra la clave privada en la memoria y luego se realiza el descifrado o la firma RSA. Debido a que una clave privada RSA de texto simple solo aparece como datos modificados en una transacción HTM, cualquier operación de lectura de estos datos abortará la transacción; la transacción volverá a su estado inicial. Tenga en cuenta que la clave privada RSA está cifrada en el estado inicial y es el resultado de operaciones de escritura (o descifrado AES). Actualmente, HTM se implementa en cachés o búferes de almacenamiento, ambos ubicados en las CPU, no en chips de RAM externos. De este modo, se evitan los ataques de arranque en frío. Mimosa es capaz de derrotar a los ataques que intentan leer datos confidenciales de la memoria (incluidos los ataques de arranque en frío, los ataques DMA y otros ataques de software) y solo supone una pequeña sobrecarga de rendimiento.
Las mejores prácticas recomiendan desmontar cualquier disco cifrado que no sea del sistema cuando no esté en uso, ya que la mayoría del software de cifrado de discos está diseñado para borrar de forma segura las claves almacenadas en caché en la memoria después del uso. [20] Esto reduce el riesgo de que un atacante pueda recuperar claves de cifrado de la memoria ejecutando un ataque de arranque en frío. Para minimizar el acceso a la información cifrada en el disco duro del sistema operativo, la máquina debe apagarse por completo cuando no esté en uso para reducir la probabilidad de un ataque de arranque en frío exitoso. [2] [21] Sin embargo, los datos pueden permanecer legibles desde decenas de segundos hasta varios minutos según el dispositivo de RAM físico en la máquina, lo que potencialmente permite que un atacante recupere algunos datos de la memoria. Configurar un sistema operativo para que se apague o hiberne cuando no se utiliza, en lugar de usar el modo de suspensión, puede ayudar a mitigar el riesgo de un ataque de arranque en frío exitoso.
Por lo general, un ataque de arranque en frío se puede prevenir limitando el acceso físico de un atacante a la computadora o haciendo que sea cada vez más difícil llevar a cabo el ataque. Un método implica soldar o pegar los módulos de memoria en la placa base , de modo que no se puedan quitar fácilmente de sus zócalos e insertar en otra máquina bajo el control de un atacante. [2] Sin embargo, esto no impide que un atacante arranque la máquina de la víctima y realice un volcado de memoria utilizando una unidad flash USB extraíble . Una mitigación como el arranque seguro UEFI o enfoques de verificación de arranque similares pueden ser eficaces para evitar que un atacante arranque un entorno de software personalizado para volcar el contenido de la memoria principal soldada. [22]
El cifrado de la memoria de acceso aleatorio (RAM) mitiga la posibilidad de que un atacante pueda obtener claves de cifrado u otro material de la memoria mediante un ataque de arranque en frío. Este enfoque puede requerir cambios en el sistema operativo, las aplicaciones o el hardware. Un ejemplo de cifrado de memoria basado en hardware se implementó en la Xbox de Microsoft . [23] Las implementaciones en hardware x86-64 más nuevo están disponibles en AMD y en Intel Willow Cove y más nuevos.
El cifrado de memoria completa basado en software es similar al almacenamiento de claves basado en CPU, ya que el material de la clave nunca se expone a la memoria, pero es más completo, ya que todo el contenido de la memoria está cifrado. En general, solo las páginas inmediatas son descifradas y leídas sobre la marcha por el sistema operativo. [24] Las implementaciones de soluciones de cifrado de memoria basadas en software incluyen: un producto comercial de PrivateCore . [25] [26] [27] y RamCrypt, un parche de kernel para el kernel de Linux que cifra los datos en la memoria y almacena la clave de cifrado en los registros de la CPU de una manera similar a TRESOR . [12] [24]
Desde la versión 1.24, VeraCrypt admite el cifrado de RAM para claves y contraseñas. [28]
Más recientemente, se han publicado varios artículos que destacan la disponibilidad de procesadores x86 y ARM de uso general con seguridad mejorada. [29] [30] En ese trabajo, se utiliza un procesador ARM Cortex A8 como sustrato sobre el que se construye una solución de cifrado de memoria completa. Los segmentos de proceso (por ejemplo, pila, código o montón) se pueden cifrar individualmente o en composición. Este trabajo marca la primera implementación de cifrado de memoria completa en un procesador de uso general. El sistema proporciona tanto confidencialidad como protección de integridad del código y los datos que se cifran en todas partes fuera del límite de la CPU.
Dado que los ataques de arranque en frío tienen como objetivo la memoria de acceso aleatorio no cifrada , una solución es borrar los datos confidenciales de la memoria cuando ya no se utiliza. La "Especificación de mitigación de ataques de reinicio de plataforma TCG", [31] una respuesta de la industria a este ataque específico, obliga al BIOS a sobrescribir la memoria durante la POST si el sistema operativo no se apagó correctamente. Sin embargo, esta medida aún se puede eludir quitando el módulo de memoria del sistema y leyéndolo nuevamente en otro sistema bajo el control del atacante que no admita estas medidas. [2]
Una característica de borrado seguro eficaz sería que, si se interrumpe el suministro eléctrico, la RAM se borre en menos de 300 ms antes de que se pierda el suministro eléctrico junto con un BIOS seguro y un controlador de disco duro/SSD que encripte los datos en los puertos M-2 y SATAx. Si la RAM en sí no contuviera presencia serial u otros datos y los tiempos se almacenaran en el BIOS con algún tipo de mecanismo de seguridad que requiriera una clave de hardware para cambiarlos, sería casi imposible recuperar los datos y también sería inmune a los ataques TEMPEST , man-in-the-RAM y otros posibles métodos de infiltración. [ cita requerida ] [32]
Algunos sistemas operativos como Tails ofrecen una función que escribe de forma segura datos aleatorios en la memoria del sistema cuando el sistema operativo se apaga para mitigar un ataque de arranque en frío. [33] Sin embargo, el borrado de la memoria de vídeo todavía no es posible y, a fecha de 2022, sigue siendo un ticket abierto en el foro de Tails. [34] Los posibles ataques que podrían explotar esta falla son:
Se puede prevenir un ataque de arranque en frío garantizando que el hardware atacado no almacene claves.
La codificación de memoria se puede utilizar para minimizar los efectos parásitos indeseables de los semiconductores como una característica de los procesadores Intel Core modernos. [38] [39] [40] [41] Sin embargo, debido a que la codificación solo se utiliza para descorrelacionar cualquier patrón dentro del contenido de la memoria, la memoria se puede descifrar mediante un ataque de descifrado. [42] [43] Por lo tanto, la codificación de memoria no es una mitigación viable contra los ataques de arranque en frío.
El modo de suspensión no ofrece protección adicional contra un ataque de arranque en frío porque los datos normalmente siguen residiendo en la memoria mientras se encuentra en este estado. Por ello, los productos de cifrado de disco completo siguen siendo vulnerables a ataques porque las claves residen en la memoria y no es necesario volver a introducirlas una vez que la máquina se reanuda desde un estado de bajo consumo de energía.
Aunque limitar las opciones del dispositivo de arranque en el BIOS puede dificultar un poco el arranque de otro sistema operativo, el firmware de los chipsets modernos tiende a permitir al usuario anular el dispositivo de arranque durante la POST pulsando una tecla de acceso rápido específica. [5] [44] [45] Limitar las opciones del dispositivo de arranque no impedirá que el módulo de memoria se extraiga del sistema y se vuelva a leer en un sistema alternativo. Además, la mayoría de los chipsets proporcionan un mecanismo de recuperación que permite restablecer la configuración del BIOS a los valores predeterminados incluso si están protegidos con una contraseña. [10] [46] La configuración del BIOS también se puede modificar mientras el sistema está en funcionamiento para eludir cualquier protección impuesta por este, como el borrado de la memoria o el bloqueo del dispositivo de arranque. [47] [48] [49]
El ataque de arranque en frío se puede adaptar y llevar a cabo de manera similar en los teléfonos inteligentes Android . [50] Dado que los teléfonos inteligentes carecen de un botón de reinicio, se puede realizar un arranque en frío desconectando la batería del teléfono para forzar un reinicio completo. [50] Luego, se flashea el teléfono inteligente con una imagen del sistema operativo que puede realizar un volcado de memoria . Por lo general, el teléfono inteligente se conecta a la máquina de un atacante mediante un puerto USB .
Normalmente, los teléfonos inteligentes Android borran de forma segura las claves de cifrado de la memoria de acceso aleatorio cuando el teléfono está bloqueado. [50] Esto reduce el riesgo de que un atacante pueda recuperar las claves de la memoria, incluso si logra ejecutar un ataque de arranque en frío contra el teléfono.
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )