Esconder endereços do kernel
Programas sem direitos especiais deixam de ler onde as coisas ficam na memória do kernel. Atacantes usam esses endereços para mirar explorações.
Por que importa
Muitas explorações do kernel precisam saber exatamente onde um código ou dado fica na memória. Endereços do kernel podem vazar por várias interfaces, e um atacante que já roda um programa no seu computador pode coletá-los e mirar a exploração com precisão. Escondê-los não corrige nenhum erro, mas tira do atacante um mapa que ele usaria.
Como funciona
Define o parâmetro do kernel kernel.kptr_restrict como 2. Ponteiros do kernel impressos com o formato %pK passam a aparecer como zeros para todo usuário, inclusive o root. O valor 1 os esconde apenas de usuários sem a capacidade CAP_SYSLOG.
Quem deve usar
Serve para quase todo desktop e servidor. Deixe em 0 ou 1 se você depura o próprio kernel ou roda ferramentas de profiling em uma máquina de desenvolvimento que precisam de endereços reais do kernel.
O que você pode notar
Normalmente nada. Ferramentas como o perf podem avisar que os mapas de endereços do kernel estão restritos, e /proc/kallsyms mostra zeros até para o root.
Verifique no seu computador
Leia o valor atual:
sysctl kernel.kptr_restrict Aplique à mão
Defina agora (até a próxima reinicialização):
sudo sysctl -w kernel.kptr_restrict=2 Mantenha após reinicializações, em um arquivo seu:
sudo tee /etc/sysctl.d/90-kernel-kptr-restrict.conf <<'EOF'
kernel.kptr_restrict = 2
EOF
sudo sysctl --system Desfaça
Remova o arquivo e reinicie, ou volte ao valor antigo com sysctl -w.
Configurações relacionadas
Fontes
- Linux Hardening Guide (madaidans)
- 2.2.1
- Linux kernel documentation
- kernel.kptr_restrict