Protección y verificación de la integridad de archivos en Oracle® Solaris 11.2

Salir de la Vista de impresión

Actualización: Julio de 2014
 
 

Cómo evitar que los archivos ejecutables pongan en riesgo la seguridad

Los programas leen y escriben datos en la pila. Normalmente, se ejecutan de partes de memoria de sólo lectura que se designan específicamente por código. Algunos ataques que provocan que memorias intermedias de la pila se desborden intentan insertar nuevo código en la pila y provocar que el programa lo ejecute. Al eliminar el permiso de ejecución de la memoria de la pila se impide que estos ataques tengan éxito. Es decir, la mayoría de los programas pueden funcionar correctamente sin utilizar pilas ejecutables.

Los procesos de 64 bits siempre tienen pilas no ejecutables. De manera predeterminada, los procesos de SPARC de 32 bits tienen pilas ejecutables. La variable noexec_user_stack permite especificar si las pilas de los procesos de 32 bits son ejecutables.

Una vez que esta variable se define, se envía una señal SIGSEGV a los programas que intentan ejecutar el código en sus pilas. Esta señal, normalmente, tiene como resultado la terminación del programa con un volcado del núcleo central. Esos programas también generan un mensaje de advertencia que incluye el nombre del programa ofensivo, el ID de proceso y el UID real del usuario que ejecutó el programa. Por ejemplo:

a.out[347] attempt to execute code on stack by uid 555

El mensaje es registrado por el daemon syslog cuando la utilidad syslog kern está establecida en el nivel notice. Este registro está establecido de manera predeterminada en el archivo syslog.conf, lo que significa que el mensaje se envía a la consola y al archivo /var/adm/messages. Para obtener más información, consulte las páginas del comando man syslogd(1M) y syslog.conf(4).

El mensaje syslog es útil para observar posibles problemas de seguridad. El mensaje también identifica programas válidos que dependen de pilas ejecutables cuyo funcionamiento correcto ha sido impedido al establecer la variable noexec_user_stack. Si no desea que se registre ningún mensaje, establezca la variable de registro noexec_user_stack_log en cero, en el archivo /etc/system. Aunque los mensajes no se registran, la señal SIGSEGV puede continuar para hacer que el programa en ejecución finalice con un volcado del núcleo central.

Los programas pueden marcar o evitar de forma explícita la ejecución de las pilas. La función mprotect() en los programas marca explícitamente la pila como ejecutable. Para obtener más información, consulte la página del comando man mprotect(2). Un programa compilado con -M /usr/lib/ld/map.noexstk hace que la pila no sea ejecutable independientemente de la configuración del sistema.