GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo verificar las vulnerabilidades Meltdown y Spectre y parchearlas en Linux

A principios de esta semana, un equipo de investigadores del Proyecto Cero de Google descubrió sobre Meltdown y Espectro vulnerabilidades que afectaron a muchos procesadores modernos, incluidos ciertos procesadores de Intel, AMD y ARM. Aunque AMD ha afirmado que no hay posibilidad de que sus procesadores se vean afectados por estas fallas, los investigadores han indicado que la vulnerabilidad Meltdown es exclusiva de los procesadores Intel, mientras que la vulnerabilidad Spectre posiblemente puede afectar a algunos procesadores Intel, AMD y ARM.

Según Cableado , "los fabricantes de Intel, AMD y ARM están trabajando y colaborando estrechamente con las empresas de hardware que envían sus procesadores y empresas de software como Apple, Google, Microsoft, la fundación Linux para lanzar parches para estas fallas de seguridad. No podemos asegurar los parches resolverán por completo estos problemas. Pero, al menos, mejor de lo que parecía al principio".

¿Qué puedes hacer ahora mismo?

Greg Kroah-Hartman ya ha anunciado el lanzamiento de los kernels estables 4.14.12, 4.9.75 y 4.4.110 que vienen con correcciones de fusión y Spectre. Por lo tanto, si está utilizando un procesador Intel, AMD o ARM, se recomienda encarecidamente comprobar si su sistema Linux está afectado por las vulnerabilidades Meltdown And Spectre y parchearlo inmediatamente actualizando el último kernel de Linux. Si su distribución de Linux aún no tiene las últimas actualizaciones del kernel de Linux, se recomienda encarecidamente cambiar su distribución de Linux ahora mismo.

Comprobar las vulnerabilidades Meltdown y Spectre

En Arch Linux y derivados, puede averiguar si su sistema está afectado por vulnerabilidades de fusión/espectro utilizando los siguientes dos comandos.

$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz
$ dmesg | grep iso 

Si los comandos anteriores no devuelven NADA, su sistema aún no está parcheado. Por lo tanto, debe actualizar su sistema basado en Arch usando el comando:

$ sudo pacman -Syu

Después de actualizar completamente su sistema Arch, reinicie y ejecute los comandos anteriores nuevamente. Si su sistema está parcheado, debería ver el siguiente resultado para el primer comando:

CONFIG_PAGE_TABLE_ISOLATION=y

Y obtendrá esta salida para el segundo comando.

[ 0.000000] Aislamiento de tablas de páginas de kernel/usuario:habilitado

Ya he actualizado el Kernel en mi sistema Arch. Como puede ver en el resultado anterior, mi kernel de Linux es 4.14.12-1-ARCH y ya está parcheado. Si aún no actualizó su sistema Arch, no obtendrá ningún resultado.

Es posible que los comandos anteriores no funcionen en Ubuntu. Afortunadamente, algunos buenos samaritanos en Askubuntu foro ha publicado una solución para encontrar si sus sistemas Ubuntu están parcheados o no usando cualquiera de los siguientes comandos.

$ grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` &&echo "parcheado :)" || echo "sin parchear :("
$ grep cpu_insecure /proc/cpuinfo &&echo "parcheado :)" || echo "sin parchear :("
$ dmesg | grep "Aislamiento de tablas de páginas de kernel/usuario:habilitado" &&echo "parcheado :)" || echo "sin parchear :("

Si la salida está sin parche , su sistema aún no está parcheado. Actualice el núcleo inmediatamente para aplicar los parches.

Todavía uso 4.4.0-104-generic en mi sistema Ubuntu, por lo que me 'desparchean' en el resultado de todos los comandos.

Actualice su Kernel inmediatamente usando el comando:

$ sudo apt-obtener actualización
$ sudo apt-get dist-upgrade

O, como se describe en el siguiente enlace.

  • Utilidades del kernel de Linux:scripts para compilar y actualizar el kernel de Linux más reciente para Debian y derivados

Después de actualizar su kernel, ejecute esos tres comandos nuevamente, ¡y verá que su sistema Ubuntu está parcheado!

Para otras distribuciones de Linux, hay un script llamado "Spectre &Meltdown Checker" para comprobar las vulnerabilidades de Meltdown/Spectre. Este script le ayudará a determinar si su instalación de Linux es vulnerable frente a las 3 CVE de "ejecución especulativa".

Git clona este script:

$ git clon https://github.com/speed47/spectre-meltdown-checker.git

Esto clonará todo el contenido en un directorio llamado "spectre-meltdown-checker" en su directorio de trabajo actual.

Vaya a ese directorio:

$ cd espectro-meltdown-checker/

Haga que el script sea ejecutable:

$ chmod +x espectro-meltdown-checker.sh

Finalmente ejecútelo para encontrar las vulnerabilidades:

$ sudo ./spectre-meltdown-checker.sh

Aquí está el resultado de muestra de mi sistema Ubuntu parcheado:

Sin opciones, inspeccionará el kernel que está ejecutando actualmente. También puede especificar una imagen del kernel en la línea de comando, si desea inspeccionar un kernel que no está ejecutando.

Actualización:

El script spectre-meltdown-checker está disponible en los repositorios oficiales de algunas distribuciones de Linux.

En Debian, Ubuntu:

$ sudo apt install spectre-meltdown-checker

En CentOS, RHEL:

$ sudo yum install epel-release
$ sudo yum install spectre-meltdown-checker

En Fedora:

$ sudo dnf install $ sudo apt install spectre-meltdown-checker

Después de instalar spectre-meltdown-checker, ejecútelo como usuario root o con privilegios de sudo para verificar las vulnerabilidades de Spectre y Meltdown:

$ sudo spectre-meltdown-checker

Salida de muestra:

Herramienta de detección de mitigación de Spectre y Meltdown v0.37Comprobación de vulnerabilidades en el sistema actualKernel es Linux 4.15.0-91-generic #92-Ubuntu SMP Vie 28 Feb 11:09:48 UTC 2020 x86_64CPU es Intel(R) Core(TM) ) CPU i3-2350M a 2,30 GHz Verificación de hardware* Soporte de hardware (microcódigo de CPU) para técnicas de mitigación * Especulación restringida de rama indirecta (IBRS) * SPEC_CTRL MSR está disponible:NO * CPU indica capacidad IBRS:NO * Barrera de predicción de rama indirecta (IBPB) * PRED_CMD MSR está disponible:NO * CPU indica capacidad IBPB:NO * Predictores de bifurcación indirecta de subproceso único (STIBP) * SPEC_CTRL MSR está disponible:NO * CPU indica capacidad STIBP:NO * IBRS mejorado (IBRS_ALL) * CPU indica disponibilidad de ARCH_CAPABILITIES MSR:NO * ARCH_CAPABILITIES MSR anuncia la capacidad IBRS_ALL:NO * La CPU indica explícitamente que no es vulnerable a Meltdown (RDCL_NO):NO * Se sabe que el microcódigo de la CPU causa problemas de estabilidad:NO (modelo 42 7 ucode cpuid 0x206a7)* Vulnerabilidad de la CPU a las tres variantes de ataque de ejecución especulativa * Vulnerable a la Variante 1:SÍ   * Vulnerable a la Variante 2:SI   * Vulnerable a la Variante 3:SÍ CVE-2017-5753 [omisión de verificación de límites] también conocido como 'Variante 1 de Spectre'* Mitigado de acuerdo con la interfaz /sys:NO (Vulnerable:__desinfección de puntero de usuario y barreras de copia de usuario solamente; sin barreras de swapgs)* Kernel tiene array_index_mask_nospec (x86):DESCONOCIDO (no se pudo verificar (falta la herramienta 'readelf', instálela, generalmente está en el paquete 'binutils'))* Kernel tiene el parche Red Hat/Ubuntu:DESCONOCIDO (falta la herramienta 'strings', instálela, generalmente es en el paquete binutils)* Kernel tiene mask_nospec64 (brazo):DESCONOCIDO (no se pudo verificar (falta la herramienta 'readelf', instálela, generalmente está en el paquete 'binutils'))* Comprobando el recuento de instrucciones LFENCE después de un salto kernel... DESCONOCIDO (no se pudo comprobar (falta la herramienta 'readelf', instálela, normalmente está en el paquete 'binutils'))> ESTADO:VULNERABLE (Vulnerable:__desinfección de puntero de usuario y solo barreras de copia de usuario; sin barreras de intercambio) CVE-2017-5715 [inyección de destino de rama] también conocido como 'Variante 2 de Spectre'* Mitigado de acuerdo con la interfaz /sys:NO (Vulnerable, STIBP:deshabilitado)* Mitigación 1 * Kernel está compilado con soporte IBRS:SÍ * IBRS habilitado y activo:DESCONOCIDO * Kernel está compilado con soporte IBPB:DESCONOCIDO (en modo fuera de línea, necesitamos la imagen del kernel para poder saberlo) * IBPB habilitado y activo:NO * Mitigación 2 * El kernel tiene un endurecimiento del predictor de ramas (brazo):NO * El kernel compilado con la opción de retpoline:SÍ > ESTADO:VULNERABLE (Se necesita IBRS+IBPB o retpoline+IBPB para mitigar la vulnerabilidad)> Cómo corregir:para mitigar esta vulnerabilidad, necesita IBRS + IBPB, ambos requieren soporte de hardware del microcódigo de su CPU además del soporte del kernel, o un kernel compilado con retpoline e IBPB, con retpoline que requiere un compilador compatible con retpoline (vuelva a ejecutar este script con -v para saber si su versión de gcc es compatible con retpoline) e IBPB que requiere soporte de hardware de su microcódigo de CPU. Generalmente se prefiere el enfoque de retpoline + IBPB ya que el impacto en el rendimiento es menor. A continuación encontrará más información sobre cómo habilitar los bits que faltan para esas dos posibles mitigaciones en su sistema. Solo necesita tomar uno de los dos enfoques.> Cómo solucionarlo:el microcódigo de su CPU debe actualizarse para poder usar IBPB. Su kernel generalmente lo hace en el momento del arranque (la actualización no es persistente en los reinicios, por lo que se realiza en cada arranque). Si está utilizando una distribución, asegúrese de estar actualizado, ya que las actualizaciones de microcódigo generalmente se envían junto con el kernel de la distribución. La disponibilidad de una actualización de microcódigo para su modelo de CPU depende de su proveedor de CPU. Por lo general, puede averiguar en línea si hay una actualización de microcódigo disponible para su CPU buscando su CPUID (indicado en la sección Verificación de hardware). Un microcódigo de CPU actualizado tendrá las capacidades IBRS/IBPB indicadas en la sección Verificación de hardware anterior. Si está ejecutando bajo un hipervisor (KVM, Xen, VirtualBox, VMware, ...), el hipervisor debe estar actualizado para poder exportar los nuevos indicadores de CPU del host al invitado. Puede ejecutar este script en el host para verificar si la CPU del host es IBRS/IBPB. Si es así y no aparece en el invitado, actualice el hipervisor.> Cómo solucionarlo:su kernel no tiene soporte para IBPB, por lo que necesita actualizar su kernel (si está usando una distribución) o recompilar un kernel más reciente.> Cómo solucionarlo:el microcódigo de su CPU debe actualizarse para poder usar IBRS. Su kernel generalmente lo hace en el momento del arranque (la actualización no es persistente en los reinicios, por lo que se realiza en cada arranque). Si está utilizando una distribución, asegúrese de estar actualizado, ya que las actualizaciones de microcódigo generalmente se envían junto con el kernel de la distribución. La disponibilidad de una actualización de microcódigo para su modelo de CPU depende de su proveedor de CPU. Por lo general, puede averiguar en línea si hay una actualización de microcódigo disponible para su CPU buscando su CPUID (indicado en la sección Verificación de hardware). Un microcódigo de CPU actualizado tendrá las capacidades IBRS/IBPB indicadas en la sección Verificación de hardware anterior. Si está ejecutando bajo un hipervisor (KVM, Xen, VirtualBox, VMware, ...), el hipervisor debe estar actualizado para poder exportar los nuevos indicadores de CPU del host al invitado. Puede ejecutar este script en el host para verificar si la CPU del host es IBRS/IBPB. Si es así, y no aparece en el invitado, actualice el hipervisor. CVE-2017-5754 [carga de caché de datos no autorizada], también conocido como 'Meltdown', también conocido como 'Variante 3'* Mitigado de acuerdo con la interfaz /sys:NO ( Vulnerable)* Kernel admite Aislamiento de tablas de páginas (PTI):SÍ * PTI habilitado y activo:NO * Impacto reducido en el rendimiento de PTI:NO (PCID/INVPCID no compatible, el impacto en el rendimiento de PTI será significativo)* Ejecutándose como Xen PV DomU :NO > ESTADO:VULNERABLE (Se necesita PTI para mitigar la vulnerabilidad)> Cómo solucionarlo:si está utilizando un kernel de distribución, actualice su distribución para obtener el último kernel disponible. De lo contrario, vuelva a compilar el kernel con la opción CONFIG_PAGE_TABLE_ISOLATION (llamada CONFIG_KAISER para algunos kernels) o la opción CONFIG_UNMAP_KERNEL_AT_EL0 (para ARM64). 

Como puede ver en el resultado anterior, los problemas de Spectre y Meltdown aún no están parcheados.

Vulnerabilidades de parches Meltdown y Spectre

Como ya mencioné, se recomienda encarecidamente mantener actualizado el kernel, el sistema y todo el software, ya que también recibe muchas otras correcciones de seguridad.

Para actualizar/mejorar su Arch Linux, ejecute:

$ sudo pacman -Syu

Para actualizar Debian, Ubuntu:

$ sudo apt-get update &&sudo apt-get dist-upgrade

Para actualizar Fedora:

$ sudo actualización dnf

Para actualizar RHEL/CentOS:

Actualización de $ sudo yum

Después de actualizar su sistema Linux, no olvide reiniciarlo.

Nuevamente, recuerde que estos problemas aún no están completamente resueltos. Debe seguir actualizando sus sistemas Linux durante las próximas semanas, hasta que todo se solucione.

Lectura sugerida:

  • Cómo hacer que el sistema Linux se ejecute más rápido en CPU Intel

Linux
  1. Cómo buscar puertos abiertos en Linux con netstat, lsof y nmap

  2. Cómo verificar la versión del sistema operativo y Linux

  3. Pasos posteriores a la instalación para una nueva instancia de Linux y cómo automatizarlos

  4. Cómo verificar el sistema operativo y la versión usando un comando de Linux

  5. ¿Cómo mitigar las vulnerabilidades de Spectre y Meltdown en sistemas Linux?

Diferentes tipos de kernel para Arch Linux y cómo usarlos

Cómo verificar el historial de reinicio del sistema y el tiempo de inicio en Linux

Cómo verificar el tamaño de los archivos y directorios en Linux

Permisos básicos de directorio de Linux y cómo verificarlos

Tipos básicos de usuarios de Linux y cómo comprobarlos

Cómo instalar y configurar el subsistema de Windows para Linux