Como se parchea la vulnerabilidad Spectre y Meltdown en Linux CVE-2017-5753 / CVE-2017-5715 / CVE-2017–5754

j0sm3ll
Guayoyo
Published in
7 min readJan 5, 2018

El 3 de enero del 2018 fue descubierto un problema de seguridad muy serio en los microprocesadores Intel / AMD / ARM. Los sistemas con microprocesadores Intel, AMD y ARM pueden permitir la divulgación no autorizada de información a un atacante con acceso de usuario local. Esto puede ser posible a través de un análisis de canal lateral y de la cache de datos del procesador.

A estas vulnerabilidades se le han asignado los códigos de identificación CVE-2017–5753 / CVE-2017–5715 / CVE-2017–5754

¿Cuál es el error de seguridad en Intel / AMD / ARM ?

Hasta ahora, hay tres variantes conocidas del problema:

Variante 1: bounds check bypass (CVE-2017–5753)
Variante 2: branch target injection (CVE-2017–5715)
Variante 3: rogue data cache load ( CVE-2017–5754 )

Las dos primeras variantes abusan de la ejecución especulativa para realizar limit-check bypass (CVE-2017–5753), o mediante la utilización de la inyección de destino de bifurcación (CVE-2017–5715), para provocar que el código del kernel en una dirección bajo control del atacante se ejecute especulativamente.

En conjunto, estos se conocen como “Spectre”. Ambas variantes dependen de la presencia de una secuencia de instrucción definida con precisión en el código privilegiado, así como del hecho de que los accesos a memoria pueden causar la asignación en el caché de datos de nivel 1 del microprocesador incluso para instrucciones ejecutadas especulativamente que nunca se comprometen (retiran).

Como resultado, un atacante sin privilegios podría usar estos dos defectos para leer la memoria privilegiada mediante la realización de ataques de caché de canal lateral. Estas variantes podrían usarse no solo para cruzar el límite del syscall (variante 1 y variante 2) sino también el límite huésped / anfitrión (variante 2).

La variante CVE-2017–5754 se basa en el hecho de que rompe el aislamiento más fundamental entre las aplicaciones de usuario y el sistema operativo. Este ataque permite que un programa acceda a la memoria y, por lo tanto, también a los registros secretos de otros programas y del sistema operativo.

Nota: CVE-2017–5754 afecta a los microprocesadores Intel x86–64. Los microprocesadores AMD x86–64 no se ven afectados por este problema.

Para ver la explotación de esta vulnerabilidad de forma mas sencilla podemos observar el siguiente vídeo:

Una lista de la distribución de Linux afectada por la Vulnerabilidad Spectre

  1. Red Hat Enterprise Linux 5 (incluidos clones como CentOS / Oracle / Scientific Linux 5)
  2. Red Hat Enterprise Linux 6 (incluidos clones como CentOS / Oracle / Scientific Linux 6)
  3. Red Hat Enterprise Linux 7 (incluidos clones como CentOS / Oracle / Scientific Linux 7)
  4. RHEV-M 4.0
  5. RHEV-M para servidores
  6. Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) para RHEL 7
  7. Red Hat Enterprise Linux OpenStack Platform 6.0 (Juno) para RHEL 7
  8. Red Hat Enterprise MRG 2
  9. Red Hat OpenStack Platform v 8/9/10/11/12
  10. Debian Linux wheezy
  11. Debian Linux jessie
  12. Estiramiento Debian Linux
  13. Deiban Linux Buster, Sid
  14. SUSE Linux Enterprise Server para Raspberry Pi 12 SP2
  15. SUSE OpenStack Cloud 6
  16. Openstack Cloud Magnum Orchestration 7
  17. SUSE Container como plataforma de servicio ALL
  18. SUSE Linux Enterprise High Availability 12 SP2 / SP3
  19. SUSE Linux Enterprise Live Patching 12
  20. Módulo SUSE Linux Enterprise para la nube pública 12
  21. SUSE Linux Enterprise Server 11 SP3-LTSS
  22. SUSE Linux Enterprise Server 11 SP4
  23. Kit de desarrollo de software SUSE Linux Enterprise 11/12 SP3 / SP4
  24. SUSE Linux Enterprise para SAP 12 SP1
  25. SUSE Linux Enterprise 11
  26. SUSE Linux Enterprise 12
  27. OpenSuse Linux basado en SUSE 12/11
  28. Fedora Linux 26
  29. Fedora Linux 27
  30. Amazon Linux AMI (ID del boletín: ALAS-2018–939)

Es importante tener en cuenta que este evento de seguridad afecta a muchos diseños modernos de microprocesadores y la información puede cambiar rápidamente a medida que avanza el evento.

Si bien las actualizaciones AWS / Google y otras aplicaciones en la nube protegen la infraestructura subyacente, para estar completamente protegido contra estos problemas, también debe aplicar parches a los sistemas operativos de su instancia, incluidas las distribuciones de Linux, MS-Windows y el sistema operativo de escritorio, como macOS, Windows y más .

Antes de actualizar el sistema …

Primero, siempre mantenga copias de seguridad. En segundo lugar, anote la versión del kernel de Linux que ejecuta el siguiente comando:

$ uname -r

Parcheando en un CentOS / RHEL / Fedora / Oracle / Scientific Linux

Escriba el siguiente comando yum : Salidas de muestra (desde el SO RHEL 7.x):

$ uname -r
3.10.0-693.11.1.el7.x86_64
$ sudo yum update

Resolviendo dependencias
-> Ejecutando cheque de transacción
---> Se instalará el paquete kernel.x86_64 0 : 3.10.0-693.11.6.el7
---> Paquete kernel-tools.x86_64 0 : 3.10.0-693.11.1.el7 se actualizará
---> Paquete kernel-tools.x86_64 0 : 3.10.0-693.11.6.el7 será una actualización
---> Paquete kernel-tools-libs.x86_64 0 : 3.10.0-693.11.1.el7 se actualizará
---> Paquete kernel-tools-libs.x86_64 0 : 3.10.0-693.11.6.el7 será una actualización
-> Resolución de Dependencia Terminada

Dependencias resueltas

= ==============================================
Tamaño del repositorio de la versión del archivo del paquete
= ==============================================
Instalación:
kernel x86_64 3.10.0-693.11.6.el7 rhui-rhel- 7 -server-rhui-rpms 43 M
Actualización:
kernel-tools x86_64 3.10.0-693.11.6.el7 rhui-rhel- 7 -server-rhui-rpms 5.1 M
kernel-tools-libs x86_64 3.10.0-693.11.6.el7 rhui-rhel- 7 -server-rhui-rpms 5.1 M

Resumen de Transacciones
= ==============================================
Instala 1 paquete
Actualizar 2 paquetes

Tamaño total de la descarga: 53 M
Está bien [ y / d / N ] : y
Paquetes de descarga:
Delta RPMs deshabilitados porque / usr / bin / applydeltarpm no está instalado.
( 1 / 3 ) : kernel-herramientas-3.10.0-693.11.6.el7.x86_64.rpm | 5.1 MB 00:00:00
( 2 / 3 ) : kernel-tools-libs-3.10.0-693.11.6.el7.x86_64.rpm | 5.1 MB 00:00:00
( 3 / 3 ) : kernel-3.10.0-693.11.6.el7.x86_64.rpm | 43 MB 00:00:00
-------------------------------------------------- ---------------------------------------
Total 65 MB / s | 53 MB 00:00
Ejecutando cheque de transacción
Ejecutando prueba de transacción
Prueba de transacción exitosa
Ejecutando transacción
Actualización: kernel-tools-libs-3.10.0-693.11.6.el7.x86_64 1 / 5
Actualización: kernel-tools-3.10.0-693.11.6.el7.x86_64 2 / 5
Instalación: kernel-3.10.0- 693.11.6.el7.x86_64 3 / 5
Cleanup: kernel-tools-3.10.0-693.11.1.el7.x86_64 4 / 5
limpieza: kernel-tools-libs-3.10.0-693.11.1.el7.x86_64 5 / 5
Verificación: kernel-tools-libs-3.10.0-693.11.6.el7.x86_64 1 / 5
Verificación: kernel-tools-3.10.0-693.11.6.el7.x86_64 2 / 5
Verificación: kernel-3.10.0-693.11.6.el7.x86_64 3 / 5
Verificación: kernel-tools-3.10.0-693.11. 1.el7.x86_64 4 / 5
Verificación: kernel-tools-libs-3.10.0-693.11.1.el7.x86_64 5 / 5

Instalado:
kernel.x86_64 0 : 3.10.0-693.11.6.el7

Actualizado:
kernel-tools.x86_64 0 : 3.10.0-693.11.6.el7
kernel-tools-libs.x86_64 0 : 3.10.0-693.11.6.el7

¡Completar!

Debe reiniciar su servidor Linux utilizando el comando shutdown / reboot: Verifique los 3 CVE (debe ver el resultado: Salidas de muestra:

$ sudo reboot
$ uname -r
3.10.0-693.11.6.el7.x86_64

$ rpm -q --changelog kernel | egrep 'CVE-2017-5715|CVE-2017-5753|CVE-2017-5754'

- [ x86 ] spec_ctrl: Eliminar los mensajes redundantes FEATURE Not Present ( Andrea Arcangeli )  [ 1519795 1519798 ]  { CVE- 2017 - 5715 } 
- [ x86 ] mm / kaiser: init_tss se supone que debe ir en la sección PAGE_ALIGNED por CPU ( Andrea Arcangeli ) [ 1519795 1519798 ] { CVE- 2017 - 5715 }
....
...
- [ x86 ] entrada: Fix paranoid_exit ( ) trampoline clobber ( Josh Poimboeuf ) [ 1519795 1519798 ] { CVE- 2017 - 5715 CVE- 2017 - 5754 }
- [ x86 ] entrada: Simplificar el código de restauración de la pila trampolín ( Josh Poimboeuf ) [ 1519795 1519798 ] { CVE- 2017 - 5715 CVE- 2017 - 5754 }
....
..
- [ x86 ] cpu / AMD: eliminar ahora la definición no utilizada de la función MFENCE_RDTSC ( Josh Poimboeuf ) [ 1519788 1519786 ] { CVE- 2017 - 5753 }
- [ x86 ] cpu / AMD: Hacer la instrucción LFENCE serializada ( Josh Poimboeuf ) [ 1519788 1519786 ] { CVE- 2017 - 5753 }

Ejecute el siguiente comando dnf si está utilizando un Fedora Linux:
$ sudo dnf --refresh update kernel
O
sudo dnf update
$ sudo reboot

Parcheando en un Debian / Ubuntu Linux

Use el siguiente comando apt-get comando / apt :

Use the following apt-get /apt:
$ uname -r
4.9.0-4-amd64
$ sudo apt-get update
## better run the following instead of 'sudo apt-get upgrade'
$ sudo apt-get dist-upgrade

Sample outputs:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
linux-image-4.9.0-5-amd64
The following packages will be upgraded:
linux-image-amd64
1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/38.8 MB of archives.
After this operation, 190 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Reading changelogs... Done
Selecting previously unselected package linux-image-4.9.0-5-amd64.
(Reading database ... 28066 files and directories currently installed.)
Preparing to unpack .../linux-image-4.9.0-5-amd64_4.9.65-3+deb9u2_amd64.deb ...
Unpacking linux-image-4.9.0-5-amd64 (4.9.65-3+deb9u2) ...
Preparing to unpack .../linux-image-amd64_4.9+80+deb9u3_amd64.deb ...
Unpacking linux-image-amd64 (4.9+80+deb9u3) over (4.9+80+deb9u2) ...
Setting up linux-image-4.9.0-5-amd64 (4.9.65-3+deb9u2) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.9.0-4-amd64
I: /initrd.img.old is now a symlink to boot/initrd.img-4.9.0-4-amd64
I: /vmlinuz is now a symlink to boot/vmlinuz-4.9.0-5-amd64
I: /initrd.img is now a symlink to boot/initrd.img-4.9.0-5-amd64
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.9.0-5-amd64
/etc/kernel/postinst.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.9.0-5-amd64
Found initrd image: /boot/initrd.img-4.9.0-5-amd64
Found linux image: /boot/vmlinuz-4.9.0-4-amd64
Found initrd image: /boot/initrd.img-4.9.0-4-amd64
Found linux image: /boot/vmlinuz-4.9.0-3-amd64
Found initrd image: /boot/initrd.img-4.9.0-3-amd64
done
Setting up linux-image-amd64 (4.9+80+deb9u3) ...

Reboot :
$ sudo shutdown -r 0
$ uname -r
4.9.0-5-amd64

Parcheando en un Amazon Linux que se ejecuta en AWS

Simplemente ejecute el comando yum :
# yum update kernel
# reboot

Parcheando en un arch Linux

Simplemente ejecuta el comando pacman:
# pacman -Syu
# reboot

Puedes verificar las diferentes referencias y enlaces que contienen información de estas vulnerabilidad en https://app.howlermonkey.io

Fuente: nixCraft

--

--

j0sm3ll
Guayoyo
Writer for

Cybersecurity Professional | InfoSec | “Lee y conducirás, no leas y serás conducido”.