Rowhammer (también escrito como row hammer o RowHammer) es una vulnerabilidad de seguridad informática que aprovecha un efecto secundario no deseado en la memoria de acceso aleatorio dinámico (DRAM), en el cual las células de memoria interactúan eléctricamente entre sí al filtrar sus cargas, pudiendo alterar el contenido de filas de memoria cercanas que no fueron direccionadas en el acceso original a la memoria. Esta violación del aislamiento entre las células de memoria DRAM resulta de la alta densidad de células en las memorias DRAM modernas y puede desencadenarse mediante patrones de acceso a la memoria diseñados específicamente que activan repetidamente las mismas filas de memoria numerosas veces.
El efecto Rowhammer ha sido utilizado en algunos exploits de escalada de privilegios en seguridad informática, y también son teóricamente posibles los ataques basados en redes.
Existen diferentes técnicas basadas en hardware para prevenir el efecto Rowhammer, incluyendo soporte requerido en algunos procesadores y tipos de módulos de memoria DRAM.
Antecedentes
En la memoria DRAM, cada bit de datos almacenados ocupa una célula de memoria separada que se implementa eléctricamente con un condensador y un transistor. El estado de carga de un condensador (cargado o descargado) determina si una célula DRAM almacena "1" o "0" como un valor binario. Enormes cantidades de células de memoria DRAM se empaquetan en circuitos integrados, junto con lógica adicional que organiza las células para leer, escribir y refrescar los datos.
Las células de memoria (cuadrados azules en ambas ilustraciones) se organizan además en matrices y se direccionan a través de filas y columnas. Una dirección de memoria aplicada a una matriz se divide en la dirección de fila y la dirección de columna, que son procesadas por los decodificadores de direcciones de fila y columna (en ambas ilustraciones, rectángulos verdes verticales y horizontales, respectivamente). Después de que una dirección de fila selecciona la fila para una operación de lectura (la selección también se conoce como activación de fila), los bits de todas las células en la fila se transfieren a los amplificadores de detección que forman el búfer de fila (cuadrados rojos en ambas ilustraciones), desde donde se selecciona el bit exacto usando la dirección de columna. En consecuencia, las operaciones de lectura son de naturaleza destructiva porque el diseño de DRAM requiere que las células de memoria se reescriban después de que sus valores han sido leídos al transferir las cargas de las células al búfer de fila. Las operaciones de escritura decodifican las direcciones de manera similar, pero debido al diseño, se deben reescribir filas completas para cambiar el valor de un solo bit.
Debido a que los datos se almacenan utilizando condensadores que tienen una tasa de descarga natural, las células de memoria DRAM pierden su estado con el tiempo y requieren una reescritura periódica de todas las células de memoria, un proceso conocido como refresco. Como otro resultado del diseño, la memoria DRAM es susceptible a cambios aleatorios en los datos almacenados, conocidos como errores de memoria suaves y atribuidos a rayos cósmicos y otras causas. Existen diferentes técnicas que contrarrestan los errores de memoria suaves y mejoran la fiabilidad de DRAM, de las cuales la memoria de código de corrección de errores (ECC) y sus variantes avanzadas (como la memoria en lockstep) son las más comúnmente utilizadas.
Descripción general
El aumento de la densidad de los circuitos integrados de DRAM ha llevado a células de memoria físicamente más pequeñas que contienen menos carga, lo que resulta en márgenes de ruido operativo más bajos, tasas aumentadas de interacciones electromagnéticas entre las células de memoria y una mayor posibilidad de pérdida de datos. Como resultado, se han observado «errores de perturbación», causados por la interferencia de las células entre sí y que se manifiestan como cambios aleatorios en los valores de los bits almacenados en las células de memoria afectadas. La conciencia de los errores de perturbación data de principios de la década de 1970 con el Intel 1103, los primeros circuitos integrados DRAM disponibles comercialmente; desde entonces, los fabricantes de DRAM han empleado diversas técnicas de mitigación para contrarrestar los errores de perturbación, como mejorar el aislamiento entre las células y realizar pruebas de producción. Sin embargo, los investigadores demostraron en un análisis de 2014 que los chips de DDR3 SDRAM fabricados en 2012 y 2013 son susceptibles a errores de perturbación, utilizando el término "Rowhammer" para nombrar el efecto secundario asociado que condujo a los cambios de bits observados.
La oportunidad para que el efecto Rowhammer ocurra en la memoria DDR3 se atribuye principalmente a la alta densidad de células de memoria de DDR3 y a los resultados de las interacciones asociadas entre las células, mientras que las activaciones rápidas de filas DRAM se han determinado como la causa principal. Las activaciones frecuentes de filas causan fluctuaciones de voltaje en las líneas de selección de filas asociadas, lo que se ha observado que induce tasas de descarga más altas de lo normal en los condensadores pertenecientes a filas de memoria cercanas (adyacentes, en la mayoría de los casos), conocidas como "filas víctimas"; si las células de memoria afectadas no se refrescan antes de que pierdan demasiada carga, ocurren errores de perturbación. Las pruebas muestran que puede observarse un error de perturbación después de realizar alrededor de 139,000 accesos consecutivos a filas de memoria (con limpiezas de caché), y que hasta una célula de memoria en cada 1,700 células puede ser susceptible. Las pruebas también muestran que la tasa de errores de perturbación no se ve afectada sustancialmente por un aumento en la temperatura ambiental, mientras que depende del contenido real de DRAM porque ciertos patrones de bits resultan en tasas de error de perturbación significativamente más altas.
Una variante llamada "martilleo de doble cara" implica activaciones dirigidas de dos filas DRAM que rodean una fila víctima: en la ilustración proporcionada en esta sección, esta variante activaría ambas filas amarillas con el objetivo de inducir cambios de bits en la fila púrpura, que en este caso sería la fila víctima. Las pruebas muestran que este enfoque puede resultar en una tasa de errores de perturbación significativamente más alta, en comparación con la variante que activa solo una de las filas DRAM vecinas de la fila víctima.
A medida que los proveedores de DRAM han implementado mitigaciones, los patrones han tenido que volverse más sofisticados para eludir las mitigaciones de Rowhammer. Los patrones más recientes incluyen patrones no uniformes basados en frecuencia. Estos patrones consisten en muchos pares de agresores de doble cara donde cada uno de ellos es martilleado con una frecuencia, fase y amplitud diferentes. Usando esto y sincronizando los patrones con el comando REFRESH, es posible determinar de manera muy efectiva «puntos ciegos» donde la mitigación ya no puede proporcionar protección. Basándose en esta idea, académicos construyeron un fuzzer de Rowhammer llamado "Blacksmith" que puede eludir las mitigaciones existentes en todos los dispositivos DDR4.
Mitigación Existen diferentes métodos para la detección, prevención, corrección o mitigación más o menos exitosa del efecto Rowhammer. Las pruebas muestran que el simple código de corrección de errores, que proporciona capacidades de corrección de errores de un solo bit y detección de errores dobles (SECDED), no es capaz de corregir o detectar todos los errores de perturbación observados porque algunos de ellos incluyen más de dos bits invertidos por palabra de memoria. Además, la investigación muestra que los cambios de bits de Rowhammer dirigidos con precisión a tres bits impiden que la memoria ECC note las modificaciones.
Una solución menos efectiva es introducir un refresco de memoria más frecuente, con intervalos de refresco más cortos que los habituales 64 ms, pero esta técnica resulta en un mayor consumo de energía y un mayor sobrecarga de procesamiento; algunos proveedores proporcionan actualizaciones de firmware que implementan este tipo de mitigación. Una de las medidas de prevención más complejas realiza la identificación basada en contadores de filas de memoria accedidas frecuentemente y refresca proactivamente sus filas vecinas; otro método emite refrescos aleatorios poco frecuentes de filas de memoria vecinas a las filas accedidas, independientemente de su frecuencia de acceso. La investigación muestra que estas dos medidas de prevención causan impactos insignificantes en el rendimiento.
Desde el lanzamiento de la microarquitectura Ivy Bridge, los procesadores Intel Xeon soportan el llamado «refresco de fila objetivo pseudo» (pTRR) que puede usarse en combinación con módulos de memoria de doble línea DDR3 (DIMMs) compatibles con pTRR para mitigar el efecto Rowhammer al refrescar automáticamente las posibles filas víctimas, sin impacto negativo en el rendimiento o el consumo de energía. Cuando se usan con DIMMs que no son compatibles con pTRR, estos procesadores Xeon por defecto realizan refrescos de DRAM al doble de la frecuencia habitual, lo que resulta en una latencia de acceso a memoria ligeramente mayor y puede reducir el ancho de banda de memoria hasta en un 2–4%.
El estándar de memoria móvil LPDDR4 publicado por JEDEC incluye soporte de hardware opcional para el llamado «refresco de fila objetivo» (TRR) que previene el efecto Rowhammer sin impactar negativamente el rendimiento o el consumo de energía. Además, algunos fabricantes implementan TRR en sus productos DDR4, aunque no es parte del estándar de memoria DDR4 publicado por JEDEC. Internamente, TRR identifica posibles filas víctimas contando el número de activaciones de filas y comparándolo con valores predefinidos específicos del chip de "conteo máximo de activaciones" (MAC) y "ventana máxima de activaciones" (tMAW). TRR también puede marcar una fila como víctima si la suma de activaciones de filas para sus dos filas vecinas alcanza el límite MAC dentro de la ventana de tiempo tMAW. La investigación mostró que las mitigaciones TRR implementadas en UDIMMs DDR4 y chips LPDDR4X de dispositivos producidos entre 2019 y 2020 no son efectivas para proteger contra Rowhammer.
Debido a la necesidad de enormes cantidades de activaciones rápidas de filas DRAM, los exploits de Rowhammer emiten grandes cantidades de accesos a memoria sin caché que causan fallos de caché, los cuales pueden detectarse monitoreando la tasa de fallos de caché para picos inusuales usando contadores de rendimiento de hardware.
La versión 5.0 del software de diagnóstico de memoria MemTest86, lanzada el 3 de diciembre de 2013, añadió una prueba de Rowhammer que verifica si la RAM de la computadora es susceptible a errores de perturbación, pero solo funciona si la computadora arranca con UEFI; sin UEFI, arranca una versión anterior sin la prueba de martilleo.
Implicaciones La protección de memoria, como una forma de prevenir que los procesos accedan a memoria que no les ha sido asignada, es uno de los conceptos detrás de la mayoría de los sistemas operativos modernos. Al usar la protección de memoria en combinación con otros mecanismos relacionados con la seguridad, como los anillos de protección, es posible lograr una separación de privilegios entre procesos, en la cual los programas y los sistemas informáticos en general se dividen en partes limitadas a los privilegios específicos que requieren para realizar una tarea particular. Usar la separación de privilegios también puede reducir la extensión del daño potencial causado por ataques de seguridad informática al restringir sus efectos a partes específicas del sistema.