Ir al contenido

Mitigaciones de vulnerabilidades de la CPU

Ditana activa de forma predeterminada las mitigaciones de vulnerabilidades de la CPU en modo de alta seguridad. El instalador detecta qué mitigaciones necesita su CPU concreta leyendo /sys/devices/system/cpu/vulnerabilities/ y luego ofrece cada una como una casilla que se puede marcar o desmarcar por separado en el diálogo Expert Settings → CPU Vulnerability Mitigation Options. Esta página documenta cada opción en detalle.

Configuración predeterminada del kernel frente a las mitigaciones de Ditana

Sección titulada «Configuración predeterminada del kernel frente a las mitigaciones de Ditana»

Los valores predeterminados del kernel Linux buscan un equilibrio entre seguridad y rendimiento, y dejan ciertas vulnerabilidades sin mitigar salvo que se activen explícitamente. Ditana las activa de forma predeterminada: para la mayoría de las cargas de trabajo, el costo es insignificante, mientras que el beneficio para la seguridad es considerable. En el instalador puede revertir cualquier mitigación por separado si tiene una carga de trabajo que se beneficia de ello de forma demostrable.

La lógica de mitigación depende del hardware. Solo se configuran las vulnerabilidades que la CPU realmente presenta; todo lo demás se deja con el valor predeterminado del kernel.

Varias mitigaciones implican desactivar Simultaneous Multi-Threading (SMT, también conocido como Hyper-Threading) como reserva. El encabezado de terminal personalizado de Ditana muestra qué mitigaciones están activas y si SMT está activado o desactivado.

También puede comprobarlo con:

Ventana de terminal
lscpu

Para comparar el rendimiento con y sin una mitigación concreta, edite la línea de comandos del kernel para un solo arranque y quite el parámetro asociado a la mitigación que quiere probar. En una instalación ZFS, que es lo que genera el perfil Standard, esto se hace con el editor de entornos de arranque de ZFSBootMenu; en un sistema que arranca mediante GRUB, presione e en el menú. Más abajo, cada entrada indica sus parámetros en «Parámetro aplicado». Reinicie y ejecute su carga de trabajo real; las pruebas de rendimiento sintéticas rara vez reflejan el impacto real.

Para que un cambio sea permanente en una instalación ZFS, establezca la línea de comandos en el entorno de arranque:

Ventana de terminal
sudo zfs set org.zfsbootmenu:commandline="rw <options>" ditana-root/ROOT
zfs get org.zfsbootmenu:commandline ditana-root/ROOT

Para que sea permanente en un sistema que arranca mediante GRUB, edite /etc/default/grub, busque la línea GRUB_CMDLINE_LINUX_DEFAULT (antes, guarde una copia de seguridad), quite el parámetro y luego ejecute:

Ventana de terminal
sudo grub-mkconfig -o /boot/grub/grub.cfg

Si un cambio impide el arranque, edite la línea de comandos del kernel en el menú de GRUB para recuperar el sistema y luego repita la edición y grub-mkconfig.

Mitigaciones que Ditana activa de forma predeterminada

Sección titulada «Mitigaciones que Ditana activa de forma predeterminada»

Ataque de ejecución especulativa que permite a los atacantes leer datos confidenciales mediante predictores de saltos indirectos mal entrenados. Ditana aplica la mitigación completa (Indirect Branch Prediction Barrier siempre activa en lugar de condicional).

Todas las mitigaciones de Spectre variante 2 pueden forzarse en el arranque para todos los programas. Esto agregará sobrecarga, ya que se restringirán las especulaciones de saltos indirectos de todos los programas.

kernel.org: Spectre

Identificador de lscpu Spectre v2
Nombre de la opción Enforce Spectre Variant 2 Mitigation
Parámetro aplicado spectre_v2=on

Afecta a las CPU Intel y permite el acceso no autorizado a los datos de la caché L1. Ditana impone la mitigación completa con un vaciado agresivo de la caché.

De forma predeterminada, el kernel no impone la desactivación de SMT, lo que deja vulnerables a los sistemas con SMT cuando ejecutan invitados que no son de confianza con EPT activado.

kernel.org: L1TF

Identificador de lscpu L1tf
Nombre de la opción Enforce L1 Terminal Fault Mitigation
Parámetro aplicado l1tf=full,force

Permite a los atacantes tomar muestras de datos de los búferes de la CPU. La mitigación completa puede desactivar SMT si es necesario.

De forma predeterminada, el kernel no impone la desactivación de SMT, lo que deja vulnerables a los sistemas con SMT cuando ejecutan código que no es de confianza.

kernel.org: MDS

Identificador de lscpu Mds
Nombre de la opción Enforce MDS Mitigation
Parámetro aplicado mds=full,nosmt

Afecta a las CPU con Transactional Synchronization Extensions. La mitigación completa puede desactivar SMT si es necesario.

Es posible que TSX se desactive si el microcódigo proporciona un MSR de control de TSX. En ese caso, el sistema no es vulnerable.

kernel.org: TAA

Identificador de lscpu Tsx async abort
Nombre de la opción Enforce TSX Async Abort Mitigation
Parámetro aplicado tsx_async_abort=full,nosmt

Ataque de ejecución especulativa que permite leer la memoria del kernel desde el espacio de usuario. Ditana fuerza el vaciado de la caché de datos L1.

La línea de comandos del kernel permite controlar las mitigaciones de vaciado de L1D en el arranque con la opción l1d_flush=. De forma predeterminada, el mecanismo está desactivado.

kernel.org: vaciado de L1D

Identificador de lscpu Meltdown
Nombre de la opción Enforce Meltdown Mitigation
Parámetro aplicado l1d_flush=on

Fuga de datos a través de E/S asignada a memoria. La mitigación completa puede desactivar SMT.

full,nosmt: igual que full, con SMT desactivado en las CPU vulnerables. Esta es la mitigación completa.

kernel.org: MMIO stale data

Identificador de lscpu Mmio stale data
Nombre de la opción Enforce MMIO Stale Data Mitigation
Parámetro aplicado mmio_stale_data=full,nosmt

Retbleed: Cross-Thread Return Address Predictions

Sección titulada «Retbleed: Cross-Thread Return Address Predictions»

Ataque de ejecución especulativa que filtra direcciones de retorno. La mitigación seleccionada automáticamente puede desactivar SMT.

auto,nosmt: selecciona automáticamente una mitigación y desactiva SMT si es necesario para la mitigación completa.

kernel.org: parámetros del kernel

Identificador de lscpu Retbleed
Nombre de la opción Enforce Retbleed Mitigation
Parámetro aplicado retbleed=auto,nosmt

Consulte también kernel.org: Cross-Thread Return Address Predictions.

Ataques especulativos a través del búfer de la pila de retorno. Combina barreras IBPB con el modo estricto de spectre_v2-user.

Mitigation: IBPB: protección similar a «safe RET», pero emplea una barrera IBPB en los cambios de dominio de privilegios (usuario→kernel, invitado→anfitrión).

kernel.org: SRSO

Identificador de lscpu Spec rstack overflow
Nombre de la opción Enforce SRSO Mitigation
Parámetro aplicado spec_rstack_overflow=ibpb spectre_v2_user=on

Afecta a las instrucciones AVX. Fuerza la mitigación por microcódigo, o desactiva AVX donde no hay microcódigo disponible.

Si se especifica gather_data_sampling=force, se usará la mitigación por microcódigo cuando esté disponible, o se desactivará AVX en los sistemas afectados cuyo microcódigo no se haya actualizado para incluir la mitigación.

kernel.org: Gather Data Sampling

Identificador de lscpu Gather data sampling
Nombre de la opción Enforce Gather Data Sampling Mitigation
Parámetro aplicado gather_data_sampling=force

Permite tomar muestras de datos de los registros de la CPU.

Este parámetro anula el valor predeterminado en tiempo de compilación que establece CONFIG_MITIGATION_RFDS.

kernel.org: parámetros del kernel

Identificador de lscpu Reg file data sampling
Nombre de la opción Enforce RFDS Mitigation
Parámetro aplicado reg_file_data_sampling=on

Consulte también kernel.org: RFDS.

Vulnerabilidades que no aparecen en el instalador

Sección titulada «Vulnerabilidades que no aparecen en el instalador»

Para estas, el kernel aplica de forma predeterminada la mitigación máxima: Ditana no tiene nada que agregar.

El kernel informa de otras cinco que no se mencionan en ningún lugar de arriba, porque Ditana tampoco les agrega nada: Ghostwrite, Indirect Target Selection, old microcode, TSA y VMSCAPE. El kernel decide lo que necesita cada una según el procesador que encuentra y deja el resultado donde lo muestran lscpu y /sys/devices/system/cpu/vulnerabilities/.

No hay garantía de que estén cubiertos todos los posibles vectores de ataque de Spectre variante 1.

kernel.org: Spectre

Identificador de lscpu: Spectre v1

Identificador de lscpu: Itlb multihit. Consulte kernel.org: iTLB multihit.

SRBDS: Special Register Buffer Data Sampling

Sección titulada «SRBDS: Special Register Buffer Data Sampling»

Identificador de lscpu: Srbds. Consulte kernel.org: SRBDS.

El kernel ofrece mitigación para este tipo de vulnerabilidades de diversas formas.

kernel.org: spec_ctrl

Identificador de lscpu: Spec store bypass.

Reducción de mitigaciones: por su cuenta y riesgo

Sección titulada «Reducción de mitigaciones: por su cuenta y riesgo»

El instalador también ofrece dos opciones que reducen las mitigaciones. Aumentan considerablemente su exposición a vulnerabilidades conocidas de la CPU. Úselas solo si tiene un motivo claro y justificado.

Desactivar el Indirect Branch Tracking de Intel: ibt=off

Sección titulada «Desactivar el Indirect Branch Tracking de Intel: ibt=off»

Desactiva el Indirect Branch Tracking del kernel. IBT es la mitad de Control-flow Enforcement Technology que protege las transferencias de control hacia adelante (forward-edge): el hardware comprueba que todo salto o llamada indirecta termine en una instrucción endbr, y eso es lo que dificulta la programación orientada a saltos y la orientada a llamadas. Se trata de integridad del flujo de control, no de una mitigación de ejecución especulativa: Branch Target Injection es Spectre v2, tratada más arriba en spectre_v2=on. Este parámetro del kernel no está documentado en la referencia oficial de parámetros del kernel, aunque en ciertas distribuciones suele estar activado de forma predeterminada sin que se comunique explícitamente.

El kernel documenta la otra mitad de CET, la pila de sombra (shadow stack) del espacio de usuario, en shstk; el propio IBT no tiene allí una página propia.

Desactivar todas las mitigaciones: mitigations=off

Sección titulada «Desactivar todas las mitigaciones: mitigations=off»

Esto es más drástico que desmarcar cada una de las mitigaciones del diálogo. Con mitigations=off, el kernel omite todas las mitigaciones que conoce, incluidas las que Ditana no muestra porque están activadas de forma predeterminada. El techo de rendimiento sube; el piso de seguridad cae en picada.

Solo es útil para pruebas de rendimiento, sistemas totalmente desconectados de cualquier red y bajo pleno control físico, o entornos en los que dispone de defensas de una categoría completamente distinta.

Consulte kernel.org: parámetros del kernel.

Las indicaciones de esta página se basan en la documentación oficial sobre vulnerabilidades de la CPU y en la referencia de parámetros de la línea de comandos del kernel. Las distintas ramas del kernel se apartan ocasionalmente de estos valores predeterminados de forma sutil; nuestras pruebas abarcan los kernels que admite Ditana, pero las combinaciones de hardware poco habituales pueden producir casos límite.

Si tiene una carga de trabajo que se beneficia de otro valor predeterminado, o si encuentra un modelo de CPU en el que la detección de Ditana es incompleta o incorrecta: abra una incidencia en GitHub o escriba a [email protected]. La lógica de detección son datos, no código; por eso, las mejoras suelen ser unas pocas líneas de KDL.

Esta traducción la hizo una máquina. Los lectores la mejoran en Weblate.