Restringir eBPF a los administradores
eBPF permite que los programas ejecuten código dentro del kernel y ha sido una fuente constante de fallos. Esto lo limita a los programas con privilegios y refuerza su compilador.
Por qué importa
eBPF permite a los programas cargar fragmentos de código que el kernel ejecuta por ellos. El kernel revisa ese código con un verificador, y fallos en ese verificador han permitido varias veces que usuarios normales tomen el control total de la máquina. Si solo los programas privilegiados pueden cargar eBPF, esos fallos quedan fuera del alcance de los demás.
Cómo funciona
Fija kernel.unprivileged_bpf_disabled en 1. Las llamadas a bpf() sin CAP_BPF o CAP_SYS_ADMIN pasan a fallar con error de permisos. La documentación del kernel dice que, una vez en 1, no vuelve a 0 hasta reiniciar; el valor 2 lo desactiva pero deja que un administrador lo cambie después.
Quién debería usarlo
Correcto para la mayoría de escritorios y servidores. Déjalo apagado si ejecutas herramientas eBPF como usuario normal, como algunos experimentos de rastreo o red.
Qué puedes notar
Los programas que cargan eBPF sin privilegios fallan con Operation not permitted. Ejecútalos como root o con la capacidad adecuada. El software de escritorio habitual casi nunca lo necesita.
Compruébalo en tu equipo
Lee el valor actual:
sysctl kernel.unprivileged_bpf_disabled Un valor más estricto que este también sirve.
Aplícalo a mano
Establécelo ahora (hasta el próximo reinicio):
sudo sysctl -w kernel.unprivileged_bpf_disabled=1 Consérvalo tras los reinicios, en un archivo tuyo:
sudo tee /etc/sysctl.d/90-kernel-unprivileged-bpf.conf <<'EOF'
kernel.unprivileged_bpf_disabled = 1
EOF
sudo sysctl --system Deshazlo
Elimina el archivo y reinicia, o vuelve a poner el valor anterior con sysctl -w.
Ajustes relacionados
Fuentes
- Linux Hardening Guide (madaidans)
- 2.2.1
- Linux kernel documentation
- kernel.unprivileged_bpf_disabled