Fuck security: deshabilitando todas las protecciones de seguridad de Intel en Debian

Los últimos años han sido una catástrofe tras otra para Intel en lo que a seguridad respecta. Todas las variantes de los ataques Meltdown y Spectre, al igual que el reciente ZombieLoad, requieren parches y protecciones que terminan degradando la performance de los procesadores Intel. Para el caso de ZombieLoad no hay forma de estar seguro sin deshabilitar Hyper-Threading, lo cual es un altísimo precio a pagar. Apple ha confirmado que el parche para mitigar ZombieLoad trae consigo una pérdida del 40% de rendimiento:

Full mitigation requires using the Terminal app to enable an additional CPU instruction and disable hyper-threading processing technology. This capability is available for macOS Mojave, High Sierra, and Sierra in the latest security updates and may reduce performance by up to 40 percent2, with the most impact on intensive computing tasks that are highly multithreaded.

Pero para agravar aún más la situación, deshabilitar SMT/Hyper-Threading para obtener protección total contra MDS/ZombieLoad en conjunto con el código para mitigar Meltdown y Spectre (y todas sus variantes), y otras vulnerabilidades, resulta catastrófico para el rendimiento de la CPU.

Cabe destacar que se trata de vulnerabilidades del hardware, no son vulnerabilidades del sistema operativo, y tanto en Linux como Windows u otro sistema operativo las soluciones implican pérdidas de rendimiento. La solución sería cambiar los procesadores por otra marca (léase AMD).

Ahora bien, ¿que tal si uno tiene un procesador Intel y no está dispuesto a perder tanto rendimiento en un sistema hogareño que será utilizado para juegos o películas? Este artículo explica cómo deshabilitar todas las protecciones de seguridad del kernel Linux que degradan el rendimiento en procesadores Intel. ¡Al carajo con la seguridad!







ADVERTENCIA: Claro está, esto es un ejemplo de lo que NO HAY QUE HACER. Cada uno sabrá cuánto riesgo decide tomar deshabilitando estas protecciones. Por supuesto JAMÁS se debe aplicar este tipo de configuración en un servidor o sistema mínimamente crítico. Sólo aplicarlo en un sistema hogareño y preferentemente desconectado de Internet (si es que existe alguno hoy en día).

Para deshabilitar todas las protecciones de seguridad del kernel Linux y quedar expuestos a absolutamente todos los riesgos, pero disfrutando al máximo y exprimiendo cada gota de rendimiento de nuestra CPU, sólo basta con establecer las siguientes opciones del kernel Linux:

noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off

Configurando parámetros del kernel Linux en Debian y derivados

Para agregar estas opciones del kernel, es necesario editar el archivo de configuración del gestor de arranque GRUB:

root@hal9000:/home/emi# nano /etc/default/grub

Insertar las opciones en la variable GRUB_CMDLINE_LINUX . Debe quedar así:

GRUB_CMDLINE_LINUX="noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off"

Finalmente correr update-grub para actualizar la configuración del gestor de arranque:

root@hal9000:/home/emi# update-grub

Y reiniciar el sistema:

root@hal9000:/home/emi# reboot

Una vez iniciado, verificar las opciones de inicio del kernel Linux examinando el archivo /proc/cmdline :

root@hal9000:/home/emi# cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.19.0-0.bpo.4-amd64 root=UUID=b8683b97-87b4-47b2-8e3e-1b31c3a9c8f7 ro noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off quiet

¿Qué significa cada una de las opciones?

Veamos qué hace cada opción:

noibrs : deshabilitar IBRS (restricción de especulación para saltos indirectos).

: deshabilitar IBRS (restricción de especulación para saltos indirectos). noibpb : deshabilitar IBPB (barrera para predicción de saltos indirectos).

: deshabilitar IBPB (barrera para predicción de saltos indirectos). nospectre_v1 , nospectre_v2 : deshabilitar las protecciones para ambas variantes de Spectre ( bounds check bypass e indirect branch prediction ).

, : deshabilitar las protecciones para ambas variantes de Spectre ( e ). l1tf=off : deshabilitar el flush de caché L1 que mitiga vulnerabilidades side-channel con ejecución especulativa utilizando técnicas de timing de caché (L1TF).

: deshabilitar el flush de caché L1 que mitiga vulnerabilidades con ejecución especulativa utilizando técnicas de de caché (L1TF). nospec_store_bypass_disable : deshabilitar la protección contra Speculative Store Bypass (Spectre variante 4).

: deshabilitar la protección contra (Spectre variante 4). no_stf_barrier : ?

: ? mds=off : deshabilitar la protección contra MDS/ZombieLoad.

: deshabilitar la protección contra MDS/ZombieLoad. mitigations=off : deshabilitar todas las mitigaciones/protecciones (versiones 5.1.13 en adelante).

Por supuesto, cuáles y cuántas de las opciones anteriores tienen algún efecto depende de la versión del kernel Linux utilizado. Las versiones anteriores a 5.1.13 no soportan la opción mitigations=off , la cual deshabilita todas las protecciones. Los parámetros y opciones no soportadas simplemente son ignoradas, con lo cual es seguro utilizar la configuración anterior.

Recomiendo leer las siguientes referencias para comprender la gravedad de este tipo de vulnerabilidades de hardware y por qué no es recomendable deshabilitarlas.

Referencias



Tal vez pueda interesarte

