Protecciones del Kernel de Linux contra alteraciones de memoria

ASLR (Address Space Layout Randomization)

La función de aleatoriedad en la disposición del espacio de direcciones es una técnica de seguridad informática y fue introducida en el Kernel de Linux en 2005.

ASLR es una de las protecciones con las que cuenta Linux para evitar la explotación de vulnerabilidades basadas en la corrupción de memoria.

Básicamente su funcionamiento consiste en asignar de forma aleatoria las posiciones del espacio de direcciones para un proceso, haciendo más difícil para un atacante predecir las direcciones destino.

Por defecto en Linux esta funcionalidad esta activada, podemos modificar su valor directamente con el comando sysctl o si queremos que sea permanente modificar el fichero /etc/sysctl.conf.

 A través del siguiente comando podemos ver el estado de esta funcionalidad:

# sysctl –a –pattern ‘randomize’

 Los valorsactivado

  • 1 Aleatoriedad moderada
  • 2 Aleatoriedad completa

En el siguiente ejemplo se muestra la aleatoriedad de direcciones en la ejecución del comando ldd:

Hay que tener en cuenta que para que un programa utilice esta función debe estar compilado con soporte para ASLR o en el compilador llamar a PIE (Position Independent Executables)

Exec Shield

Es una protección contra el desbordamiento del búfer de memoria que creo RedHat , en su primera versión era un parche para emular el bit NX (No eXecute) de las máquinas que no tenían esta opción implementada por hardware.

En principio se implementó como función en el Kernel bajo el parámetro “kernel.exec-shield”, aunque en la actualidad suele ser un parámetro de la BIOS que podemos activar o desactivar.

Podemos ver si nuestro equipo tiene Exec Shield activado de dos formas, comprobado la información del kernel con el comando dmesg:

# dmesg | grep –Fw NX

Y buscando en el fichero /proc/cpuinfo las características de la CPU

# grep -Fw nx /proc/cpuinfo

Si la BIOS los soporta por defecto estará activado (1) en caso de querer desactivarlo (0) deberemos buscar el parámetro en el BIOS o ver si existe el parámetro kernel.exec-shield en nuestro Kernel y modificarlo con sysctl