Exec Shield - Kernel. Securizando Linux
Kernel (Exec Shield)
Exec Shield añade una opción a la zona de memoria de datos como no ejecutable y a la zona de memoria del programa como no escribible.
Esto elimina muchos de los exploits potenciales, así como el desbordamiento de búfer y otras técnicas eficaces en la sobrescritura de datos y la inserción de código en dichas estructuras.
Exec Shield también proporciona aleatorización del espacio de direcciones para mmap() y la base del heap.
Además, incrementa la dificultad de insertar y ejecutar shellcodes, haciendo que la mayoría de exploits no sean efectivos.
No se necesitar recompilar ninguna aplicación para poder usar completamente Exec Shield.
Otras características son el parche de aleatorización del espacio de direcciones para los núcleos Linux, un amplio conjunto de comprobaciones internas de seguridad para glibc, que hacen que los exploits de formato de cadenas sean casi imposibles.
Cómo saber si nuestro equipo podría ser afectado
Los Kernels modernos, ya incluyen por defecto la protección para Exec Shield y operaciones NX, ya sea en el proceso de compilación del Kernel de la distribución o mediante la adición de un parche.
Sin embargo, si compilamos por nuestra cuenta un Kernel o tenemos que mantener un equipo antiguo en el que es imposible parchear o subir el kernel, podemos averiguar si estamos afectados por ello de una forma muy sencilla.
Comprobación del flag NX
Deberemos comprobar si el procesador dispone de la opción NX (No eXecute bit), mediante el comando:
grep nx /proc/cpuinfo|head -1
flags : fpu vme de pse ... pbe syscall nx rdtscp lm c... ida arat pln pts md_clear flush_l1d
Si aparece el flag 'nx' podemos estar en peligro y se podrían manipular datos en la memoria con intenciones maliciosas.
Cómo activar esta característica
Es relativamente sencillo, tan solo tienes que crear como root el fichero:
/etc/sysctl.d/50-execshield-hardening.conf
Ahora edita este fichero e incluye en él la siguiente configuración:
#####################################
# INICIO: Kernel Security Hardening #
#####################################
# Habilitar exec shield
kernel.exec-shield = 1
# ---------------------
# Desactivar kexec
kernel.kexec_load_disabled = 1
# ----------------------------
# Permitimos mas PIDs para evitar problemas de 'rollover'
kernel.pid_max = 65536
# -------------------------------------------------------
# Ocultar 'kernel symbol addresses' en /proc/kallsyms a usuarios sin CAP_SYSLOG.
# Dificultamos la explotacion del kernel para resolver addresses/symbols dinamicamente
kernel.kptr_restrict = 1
##################################
# FIN: Kernel Security Hardening #
##################################
Los permisos de ese fichero deben de ser:
Acceso: (0644/-rw-r--r--)
Uid: ( 0/ root)
Gid: ( 0/ root)
Tan solo tienes que reiniciar tu equipo para que quede correctamente aplicado.
Puedes comprobar si tienes tu equipo protegido comprobandolo mediante el comando 'dmesg', deberá indicarte que la protección está activa.
sudo dmesg | grep -Fw NX
[ 0.000000] NX (Execute Disable) protection: active