¿Cómo verificar que KPTI esté habilitado en mi Ubuntu?


64

La vulnerabilidad actual del procesador Meltdown Intel se soluciona actualmente al habilitar el aislamiento de la tabla de páginas. Hay una pregunta sobre cómo desactivar esto: ¿Cómo deshabilitar el aislamiento de la tabla de páginas para recuperar el rendimiento perdido debido al parche de seguridad de la CPU Intel?

Mi pregunta es opuesta: ¿hay alguna forma de verificar en un sistema en ejecución si el mecanismo PTI es efectivo en el sistema y, por lo tanto, el sistema está protegido? Estoy buscando específicamente cat /proc/somethingo cat /sys/somethingno comprobando la versión del kernel o el parámetro de configuración o similares.

Respuestas:


4

Puede ejecutar el siguiente comando para ver todas las mitigaciones disponibles (no solo para PTI sino también para otras vulnerabilidades):

$ cat /sys/devices/system/cpu/vulnerabilities/*
Mitigation: PTE Inversion
Mitigation: Clear CPU buffers; SMT vulnerable
Mitigation: PTI
Mitigation: Speculative Store Bypass disabled via prctl and seccomp
Mitigation: usercopy/swapgs barriers and __user pointer sanitization
Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: conditional, RSB filling

Impresionante respuesta - breve y al grano. Gracias.
Martin Vysny

63
  • Grepping CONFIG_PAGE_TABLE_ISOLATION en la configuración del kernel como sugirió Raniz no ayuda en Ubuntu de escritorio, pero puede ayudar en instancias de la nube:

    grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && \
    echo "patched :)" || echo "unpatched :("
    

  • Puede verificar /proc/cpuinfocomo JonasCz sugirió :

    grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo && echo "patched :)" \
    || echo "unpatched :("
    

  • O de dmesg(gracias a Jason Creighton ):

    dmesg | grep -q "Kernel/User page tables isolation: enabled" \
    && echo "patched :)" || echo "unpatched :("
    

  • Puede compilar el programa de prueba de Raphael Carvalho para la detección de Meltdown:

    sudo apt-get install git build-essential
    cd /tmp
    git clone https://github.com/raphaelsc/Am-I-affected-by-Meltdown.git
    cd Am-I-affected-by-Meltdown
    make
    sudo sh -c "echo 0  > /proc/sys/kernel/kptr_restrict"
    ./meltdown-checker
    

en el sistema parcheado debería terminar con salida

...
so far so good (i.e. meltdown safe) ...

System not affected (take it with a grain of salt though as false negative
may be reported for specific environments; Please consider running it once again).

En el sistema parcheado, debería mostrar lo siguiente:

Spectre and Meltdown mitigation detection tool v0.27

Checking for vulnerabilities against live running kernel Linux 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64
...
CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

¡No instale 4.4.0-108-generic en Xenial! ¡ Rompe la funcionalidad de arranque / reinicio / apagado / suspensión !

¡Instale 4.4.0-109-generic ( consulte USN-3522-3 para más detalles)!


Como Robie Basak ya escribió , hay una página sobre el estado de las vulnerabilidades de Spectre y Meltdown en Ubuntu .

También hay:


3
Las actualizaciones para Ubuntu están programadas para el 9 de enero. Pueden aterrizar antes, pero no contaría con eso. insights.ubuntu.com/2018/01/04/…
Raniz

44
Las respuestas de tipo "aislamiento dmesg | grep" son preferibles a esto, OMI. Algunas distribuciones (al menos Debian stretch, tal vez otras) portaron PTI a su núcleo anterior, pero no el indicador cpu_insecure en / proc / cpuinfo. En esos sistemas, buscar en el registro dmesg es la única forma de verificar, AFAICT.
Jason Creighton el

3
Creo que el dmesg | grep isolation && echo "patched :)" || echo "unpatched :("comando que figura en la lista es innecesariamente peligroso : no muestra qué línea coincidió realmente, y también imprimiría felizmente "parcheado :)" si una otra instancia aleatoria de "aislamiento" coincidiera ...
Jaap Eldering

2
Recomendaría contra la segunda sugerencia (grepping /proc/cpuinfopara cpu_insecure). Si coloca eso en un script y tiene una CPU en el futuro donde el problema se soluciona en su microarquitectura, /proc/cpuinfoya no lo dirá cpu_insecurey su script creerá que el kernel no está parcheado aunque esté parcheado . También recomendaría contra la tercera sugerencia, ya que es muy probable que haya una palabra isolationen la dmesgsalida en algún momento sin que se refiera al aislamiento de la tabla de páginas del núcleo.
blubberdiblub

44
Tras una investigación adicional, las tres sugerencias se rompen. Grepping para isolationcoincidirá con ambos Kernel/User page tables isolation: enabledy Kernel/User page tables isolation: disabled on command line.
Marcar el

18

Ejecute el siguiente comando:

dmesg | grep 'page tables isolation'

Si se muestra habilitado, entonces PTI está habilitado. Si no se muestra nada o ve 'deshabilitado' en el terminal, entonces PTI está deshabilitado. Ubuntu aún no ha publicado el parche, por lo que no mostrará ningún mensaje.


... o posteriores mensajes del núcleo han eliminado los mensajes de arranque del búfer de registro del núcleo. Si su núcleo imprime avisos para cosas de baja gravedad como paquetes de red extraños, es común que los mensajes de tiempo de arranque no formen parte de la dmesgsalida. Vea /var/log/kern.log*si se remonta lo suficiente como para tener los mensajes de arranque. Ubuntu solía grabar la dmesgsalida del tiempo de arranque /var/log/dmesg, pero ya no parece hacerlo.
Peter Cordes

El 14.04, tengo dmesg: invalid option -- 'w'. -HTambién es inválido. Quitar las banderas funcionó bien para mí, como en esta respuesta
wjandrea

/var/log/kern.log el 14.04
eckes

12

Puede consultar con cat /proc/cpuinfo, si informa cpu_insecurebajo "errores", entonces PTI está habilitado.

Si está en blanco (o simplemente no aparece en la lista cpu_insecure), entonces lo más probable es que esté ejecutando un kernel que aún no ha sido parcheado (Ubuntu no lo ha hecho), o tiene un procesador AMD (para el cual esto posiblemente no estará habilitado, ya que No eres vulnerable).

Actualmente, todas las CPU son tratadas como vulnerables en el último kernel 4.15.


4.15 aún no se ha lanzado al público
Aadhil RF

Lo es, si descarga la última versión candidata desde kernel.org y la compila usted mismo. @Mohammedaadhil
JonasCz - Restablece a Mónica el

1
Un candidato de liberación no es una liberación.
Ruslan

El artículo que vinculó ha sido actualizado
nixpower

2
Kernel 4.14.11 se configurará cpu_insecurepara cualquier CPU x86; 4.14.12 y posteriores solo lo configurarán para las CPU Intel (incluidas las que sean demasiado antiguas o demasiado primitivas para ser vulnerables. Ambos lo configurarán incluso si KPTI está desactivado.)
Marque el


2

Puede comprobar /proc/config.gz para CONFIG_PAGE_TABLE_ISOLATION=ylo cual significa que el kernel fue compilado con KPTI.

Esto está en mi parcheado sistema Arch Linux que ejecuta 4.14.11-1:

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz 
CONFIG_PAGE_TABLE_ISOLATION=y

3
Desafortunadamente, la configuración del núcleo actualmente en ejecución /proc/no está habilitada por defecto en los núcleos de Ubuntu. La solución (mucho menos elegante) es grepping /boot/config-$( uname -r )en su lugar.
blubberdiblub

55
Eso solo le indica si el núcleo se compiló con KPTI, no si KPTI está activo (se puede desactivar en el momento del arranque y posiblemente en tiempo de ejecución).
Marcar el

Si ha deshabilitado explícitamente KPTI a través de los parámetros de la línea de comandos del núcleo, no debería necesitar verificar si está activo o no.
Raniz

1

En mi instancia de AWS Ubuntu 14.04.5 LTS EC2, ejecuté

grep CONFIG_PAGE_TABLE_ISOLATION /boot/config-$(uname -r)

Debería decir:

CONFIG_PAGE_TABLE_ISOLATION=y

Para la actualización hice:

sudo apt-get update && sudo apt-get install linux-image-generic

Creo que esto también está bien:

sudo apt-get update
sudo apt-get dist-upgrade

Para verificar la versión del kernel:

uname -r

Debe ser 3.13.0-139-genérico o más reciente.


Este método ya se menciona en la respuesta principal
wjandrea
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.