LKRG 0.9.4 llega con soporte para OpenRC, Linux 5.15.40+ y mas
El proyecto Openwall dio a conocer hace poco el lanzamiento del módulo del kernel LKRG 0.9.4 (Linux Kernel Runtime Guard), diseñado para detectar y bloquear ataques y violaciones de la integridad de las estructuras del kernel.
El LKRG está empaquetado como un módulo de kernel cargable que intenta detectar cambios no autorizados en un kernel en ejecución (verificación de integridad) o cambios en los permisos de los procesos de usuario (detección de vulnerabilidades).
La verificación de integridad se realiza con base en una comparación de hashes calculados para las áreas de memoria más importantes y las estructuras de datos del kernel (IDT (Tabla de descripción de interrupciones), MSR, tablas de llamadas del sistema, todos los procedimientos y funciones, controladores de interrupciones, listas de módulos cargados, contenido de la sección .text de módulos, atributos de proceso, etc.).
El procedimiento de verificación se activa periódicamente mediante un temporizador y cuando se producen varios eventos en el kernel (por ejemplo, cuando se ejecutan llamadas al sistema setuid, setreuid, fork, exit, execve, do_init_module, etc.).
Sobre Linux Kernel Runtime Guard
La detección del posible uso de exploits y el bloqueo de ataques se realizan en la etapa anterior a que el kernel proporcione acceso a los recursos (por ejemplo, antes de abrir un archivo), pero después de que el proceso haya recibido permisos no autorizados (por ejemplo, cambiando el UID ).
Cuando se detecta un comportamiento no autorizado de los procesos, se terminan por la fuerza, lo que es suficiente para bloquear muchos exploits. Dado que el proyecto se encuentra en etapa de desarrollo y aún no se han realizado optimizaciones, los costos generales de operación del módulo son de aproximadamente 6.5%, pero en el futuro se planea reducir significativamente esta cifra.
El módulo es adecuado tanto para organizar la protección contra exploits ya conocidos para el kernel de Linux como para contrarrestar los exploits de vulnerabilidades aún desconocidas, si no utilizan medidas especiales para eludir LKRG.
Los autores no excluyen la presencia de errores en el código LKRG y posibles falsos positivos, por lo que se invita a los usuarios a comparar los riesgos de posibles errores en LKRG con los beneficios del método de protección propuesto.
De las propiedades positivas de LKRG, se observa que el mecanismo de protección se realiza en forma de un módulo cargable, y no de un parche para el kernel, lo que permite su uso con kernels de distribución regulares.
Principales novedades de LKRG 0.9.4
En esta nueva versión que se presenta del módulo se destaca que se agregó soporte para el sistema de inicio OpenRC, asi como tambien que se agregaron instrucciones de instalación usando DKMS.
Otro de los cambios que se destaca de esta nueva versión es que se proporciona compatibilidad con LTS-kernels de Linux 5.15.40+.
Ademas de ello tambien se destaca que el diseño de la salida de mensajes al registro se ha rediseñado para simplificar el análisis automatizado y facilitar la percepción durante el análisis manual y que los mensajes LKRG tienen sus propias categorías de registro, lo que facilita separarlos del resto de los mensajes del núcleo.
Por otra parte, tambien se menciona que se cambió el nombre del módulo del kernel de p_lkrg a lkrg y que la versión anterior de LKRG 0.9.3 es aún funcional en las versiones más nuevas del kernel (5.19-rc* hasta ahora). Sin embargo, por compatibilidad con Kernels 5.15.40+ a largo plazo, no lo es por lo que se deben aplicar algunos cambios realizados en la versión 0.9.4.
Tambien se menciona que se están considerando algunos cambios relacionados (pero probablemente diferentes) para su inclusión en LKRG de autodefensa, por ejemplo, su configuración de tiempo de ejecución está en una página de memoria que se mantiene solo lectura la mayor parte del tiempo, entre otras mejoras.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
En particular, el módulo ha sido probado con el kernel RHEL, OpenVZ/Virtuozzo y Ubuntu. En el futuro será posible organizar el proceso de generación de compilaciones con compatibilidad a nivel binaria para diferentes distribuciones populares.