Andrey Konovalov, compartió un método de desactivación de lockdown
Andrey Konovalov ingeniero de software de Google, dio a conocer un método para deshabilitar de forma remota la protección de lockdown ofrecida en el kernel de Linux suministrado en Ubuntu. Con lo cual demuestra que los métodos de protección son ineficaces, ademas de que también menciona que los métodos que dio a conocer teóricamente deberían funcionar también con el kernel de Fedora y otras distribuciones, (pero no han sido probados).
Para quienes desconocen de Lockdown, deben saber que es un componente del Kernel de Linux que tiene como principal función limitar el acceso del usuario root en el núcleo del sistema y esta funcionalidad se ha movido al módulo LSM cargado opcionalmente (Linux Security Module), que establece una barrera entre el UID 0 y el núcleo, limitando ciertas funciones de bajo nivel.
Esto permite que la función de bloqueo esté basada en políticas en lugar de codificar una política implícita dentro del mecanismo, con lo que el bloqueo incluido en Linux Security Module proporciona una implementación con una simple política destinada a uso general. Esta política proporciona un nivel de granularidad controlable a través de la línea de comandos del núcleo.
Sobre lockdown
El bloqueo restringe el acceso de root al núcleo y bloquea las rutas de derivación de arranque seguro UEFI.
Por ejemplo, en modo de bloqueo, el acceso a /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, el modo de depuración kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS, entre otras, algunas interfaces son limitadas asi como los registros ACPI y MSR de la CPU.
Mientras que las llamadas kexec_file y kexec_load están bloqueadas el modo de suspensión está prohibido, el uso de DMA para dispositivos PCI es limitado, la importación de código ACPI desde variables EFI está prohibida y tampoco se permiten manipulaciones con puertos de entrada/salida, incluido el cambio del número de interrupción y un puerto de I/O para el puerto serie.
Como sabrán algunos, el mecanismo de lockdown se añadió en el Kernel de Linux 5.4, pero todavía se implementa en forma de parches o se complementa con parches en los núcleos suministrados con las distribuciones.
Aqui, una de las diferencias entre los complementos proporcionados en las distribuciones y la implementación del núcleo incorporado es la capacidad de deshabilitar el bloqueo proporcionado cuando hay acceso físico al sistema.
Ubuntu y Fedora usan la combinación de teclas Alt + SysRq + X para deshabilitar el bloqueo. Se entiende que la combinación Alt + SysRq + X solo se puede usar con acceso físico al dispositivo y en caso de un ataque remoto y acceso a root, el atacante no podrá desactivar el bloqueo.
Lockdown puede ser deshabilitado de forma remota
Andrei Konovalov demostró que los métodos relacionados con el teclado para confirmar la presencia física de un usuario son ineficaces.
Él dio a conocer que la forma más fácil de deshabilitar el bloqueo sería simular presionar Alt + SysRq + X a través de /dev/uinput, pero esta opción está inicialmente bloqueada.
Pero, se han revelado al menos dos formas más de sustituir Alt + SysRq + X.
- El primer método implica usar la interfaz sysrq-trigger: para simular, solo habilite esta interfaz escribiendo “1” en /proc/sys/kernel/sysrq y luego escribiendo “x” en /proc/sysrq-trigger.
Este vacío se corrigió en la actualización de diciembre del kernel de Ubuntu y en Fedora 31. Es de destacar que los desarrolladores, como en el caso de /dev/uinput, inicialmente intentaron bloquear este método, pero el bloqueo no funcionó debido a un error en el código. - El segundo método consiste en emular el teclado a través de USB/IP y luego enviar la secuencia Alt + SysRq + X desde el teclado virtual.
En el kernel, USB/IP suministrado por Ubuntu, está activado de forma predeterminada y los módulos usbip_core y vhci_hcd necesarios se proporcionan con la firma digital necesaria.
Un atacante puede crear un dispositivo USB virtual ejecutando un controlador de red en la interfaz de bucle invertido y conectándolo como un dispositivo USB remoto mediante USB/IP.
El método especificado se ha informado a los desarrolladores de Ubuntu, pero aún no se ha publicado una solución.
Fuente: https://github.com