El núcleo del sistema operativo Linux es el kernel. Maneja la interacción primaria entre el hardware y el software. También realiza tareas como gestión de memoria, gestión de procesos, seguridad del sistema e interacciones de hardware, por nombrar algunas. Una pieza tan esencial del sistema operativo inevitablemente tiene fallas o vulnerabilidades que deben repararse y mantenerse.
Como componente clave del sistema operativo, la actualización del kernel tradicionalmente requería reiniciar el sistema. Eso cambió con el lanzamiento de la versión 5.10 del kernel de Linux en diciembre de 2020. (Algunas distribuciones de Linux admitían parches en vivo antes de la versión 5.10).
Si está ejecutando una versión del kernel que lo admite, puede (y debe) aprovechar los parches del kernel en vivo. Este método de ejecución de código funciona junto con las sondas del kernel y el seguimiento de funciones. En lugar de depender de la redirección mediante un punto de interrupción para las sondas del kernel o una ubicación predefinida (en el caso del seguimiento de funciones), la aplicación de parches en vivo generalmente se realiza redirigiendo el código lo más cerca posible de la entrada de la función.
Este nuevo método permite que una función sea redirigida inmediatamente a través de un ftrace
controlador, por lo que en lugar de llamar a una función más antigua y vulnerable, se redirige a una versión parcheada de la función.
Su cadencia de aplicación de parches podría implicar ejecutar algo como un libro de jugadas de Ansible o aplicar parches manualmente a los servidores con comandos de paquetes como dnf
o apt
. No importa la circunstancia, probablemente apreciará la aplicación de parches en vivo al kernel.
Tabla de Contenidos
Cómo habilitar parches de kernel en vivo
Habilitar la aplicación de parches en vivo al kernel varía según su distribución de Linux, pero generalmente es sencillo.
Primero, verifique la versión de su kernel. Puedes hacer esto con tu administrador de paquetes:
$ sudo dnf list kernel
Installed Packages
kernel.x86_64 3.10.0-1062.1.2.el7 @anaconda/7.7
Alternativamente, use el uname
dominio:
$ uname -r
3.10.0-1062.1.2.el7.x86_64
Si tiene una versión de Linux que admite parches de kernel en vivo, puede continuar habilitando parches de kernel en vivo.
[ Ready to move up? Download RHEL 9 for free through the Red Hat Developer program. ]
Si no tiene una versión de kernel compatible, debe actualizar el kernel y reiniciar el servidor:
$ sudo dnf install -y kernel
...
$ sudo reboot
Aplicación de parches en vivo en RHEL 8.1+
La aplicación de parches de kernel en vivo ya está habilitada en las versiones de Red Hat Enterprise Linux (RHEL) a partir de la versión 8.1. Puede verificar asegurándose de que kpatch
esta instalado:
$ sudo dnf install kpatch
...
Package kpatch-0.9.2-5.el8.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
A continuación, instale kpatch-dnf
que permite la instalación automatizada de kpatch
parches:
$ sudo dnf install kpatch-dnf
Installed:
kpatch-dnf-0.2-5.el8.noarch
[ Download the Linux commands cheat sheet. ]
Con el complemento instalado, habilite la suscripción a los parches en vivo del kernel:
$ sudo dnf kpatch auto
Aplicación de parches en vivo en RHEL 7.7+
La aplicación de parches de kernel en vivo también está lista para RHEL 7.7 y superior, aunque kpatch-dnf
no está disponible. Después de instalar kpatch
, debe instalar manualmente los parches del kernel. Aquí hay un método rápido para instalar todos los parches de kernel en vivo para el kernel actual:
$ sudo dnf install -y "kpatch-patch = $(uname -r)"
...
Installed:
kpatch-patch-3_10_0-1062_1_2.x86_64 0:1-9.el7
Complete!
Utilidades de parcheo de kernel en vivo
Entre los dnf
y kpatch
comandos, tiene muy buenas utilidades para recopilar información sobre qué parches están instalados y qué CVE tienen parches disponibles.
los kpatch list
El comando muestra parches de kernel en vivo cargados e instalados. Esto es extremadamente valioso para la auditoría y el seguimiento:
$ kpatch list
Loaded patch modules:
kpatch_3_10_0_1062_1_2_1_9 [enabled]
Installed patch modules:
kpatch_3_10_0_1062_1_2_1_9 (3.10.0-1062.1.2.el7.x86_64)
Si bien este próximo comando no está relacionado únicamente con la aplicación de parches al kernel, es útil saberlo. Este comando muestra una lista de CVE, la gravedad de cada uno y el paquete afectado (incluido el kernel):
$ dnf updateinfo list cves
Con un poco de filtrado, puede mostrar solo lo que le interesa:
$ sudo yum updateinfo list cves | grep -i kernel | grep CVE
CVE-2021-32399 Important/Sec. kernel-4.18.0-305.10.2.el8_4.x86_64
CVE-2021-33909 Important/Sec. kernel-4.18.0-305.10.2.el8_4.x86_64
CVE-2021-3609 Important/Sec. kernel-4.18.0-305.12.1.el8_4.x86_64
...
los dnf update --security
comando hace un dnf update
pero solo ejecuta actualizaciones vinculadas a los parches de seguridad, incluidos los parches del kernel.
los kpatch info
comando junto con un kpatch
El nombre del módulo como argumento muestra detalles como la ruta completa del parche, su licencia, si es un parche activo y más. Este es otro comando útil al profundizar en los detalles de parches específicos aplicados a un sistema o para el seguimiento de auditoría.
Envolver
Al igual que con cualquier solución de vulnerabilidad, debe realizar las actualizaciones, programar un cronjob o usar algún otro mecanismo (como los temporizadores systemd) para que se ejecuten las actualizaciones. La aplicación de parches en vivo del kernel solo evita la necesidad de reiniciar. Un trabajo cron efectivo puede ser un simple script de una línea con el comando de actualización requerido, pero depende de usted programarlo. Recomiendo hacerlo semanalmente al menos, aunque diario es aún mejor. Puede encontrar un código de ejemplo para actualizar regularmente el kernel en mi repositorio de GitHub.
Aprovechar los parches en vivo del kernel es una excelente manera de mantener su infraestructura actualizada y minimizar la cantidad de trabajo manual requerido. Puede obtener más información en la documentación de Linux Kernel’s Livepatch y en RHEL’s Applying patches with kernel live patching documentation.