Desenvolvedores do projeto Grsecurity
Os patches HKSP foram publicados por um funcionário da Huawei, incluem uma menção à Huawei no perfil do GitHub e usam a palavra Huawei no nome do projeto (HKSP - Huawei Kernel Self Protection). Ao mesmo tempo, representantes da Huawei negaram a ligação do projeto HKSP com a empresa e afirmaram que o código foi desenvolvido por iniciativa pessoal do funcionário, não é um projeto oficial da Huawei e não é utilizado nos produtos da empresa. Sobre
HKSP inclui mudanças como randomização de deslocamentos na estrutura cred, proteção contra ataques ao namespace do identificador de usuário (pid namespace), separação da pilha de processos da área mmap, detecção de chamadas duplas para a função kfree, bloqueio de vazamentos através do pseudo -FS /proc (/proc/ {módulos, chaves, usuários-chave}, /proc/sys/kernel/* e /proc/sys/vm/mmap_min_addr, /proc/kallsyms), randomização de endereço de espaço de usuário aprimorada, Ptrace adicional proteção, proteção aprimorada contra smap e smep, capacidade de proibir o envio de dados por meio de soquetes brutos, bloqueando endereços incorretos em soquetes UDP e verificando a integridade dos processos em execução. Também inclui o módulo do kernel Ksguard, que visa detectar tentativas de introdução de rootkits típicos.
Patches
Um estudo do patch realizado pelos desenvolvedores do Grsecurity revelou muitos erros e fraquezas no código, e também mostrou a ausência de um modelo de ameaça que lhes permitisse avaliar adequadamente as capacidades do projeto. Para demonstrar claramente que o código foi escrito sem usar métodos de programação seguros, é dado um exemplo de vulnerabilidade trivial no manipulador.
arquivo /proc/ksguard/state, que é criado com direitos 0777, implicando que todos tenham acesso de gravação. A função ksg_state_write, usada para analisar comandos escritos em /proc/ksguard/state, cria um buffer tmp[32] no qual os dados são gravados com base no tamanho do operando passado, sem levar em conta o tamanho do buffer de destino e sem verificando o parâmetro com o tamanho da string. Aqueles. Para sobrescrever parte da pilha do kernel, um invasor só precisa escrever uma linha especialmente formatada em /proc/ksguard/state.
static ssize_t ksg_state_write(arquivo struct *arquivo, const char __user *buf,
tamanho_t len, loff_t *deslocamento)
{
valor u64;
char tmp [32];
tamanho_t n = 0;
if (copy_from_user(tmp, buf, len))
retornar -1;
valor = simple_strtoul(tmp, '\0', 10);
...
Explorar protótipo:
char buf[4096] = { };
int fd = open(“/proc/ksguard/estado”, O_WRONLY);
se (fd >= 0) {
escreva(fd, buf, sizeof(buf));
fechar(fd);
}
Fonte: opennet.ru