Exec Shield es un proyecto iniciado en Red Hat , Inc a finales de 2002 con el objetivo de reducir el riesgo de gusanos u otros ataques remotos automatizados en sistemas Linux. El primer resultado del proyecto fue un parche de seguridad para el kernel de Linux que emula un bit NX en CPU x86 que carecen de una implementación nativa de NX en hardware. Si bien el proyecto Exec Shield ha tenido muchos otros componentes, algunas personas se refieren a este primer parche como Exec Shield.
El primer parche de Exec Shield intenta marcar la memoria de datos como no ejecutable y la memoria de programa como no escribible. Esto suprime muchas vulnerabilidades de seguridad , como las derivadas de desbordamientos de búfer y otras técnicas que se basan en sobrescribir datos e insertar código en esas estructuras. Exec Shield también proporciona una distribución aleatoria del diseño del espacio de direcciones para mmap () y la base del montón.
El parche también aumenta la dificultad de insertar y ejecutar shellcode , lo que hace que la mayoría de los exploits sean ineficaces. No es necesario volver a compilar la aplicación para utilizar completamente exec-shield, aunque algunas aplicaciones ( Mono , Wine , XEmacs , Mplayer ) no son totalmente compatibles.
Otras características que surgieron del proyecto Exec Shield fueron los Ejecutables Independientes de Posición (PIE), el parche de aleatorización del espacio de direcciones para los kernels de Linux, un amplio conjunto de comprobaciones de seguridad internas de glibc que hacen que los exploits de cadenas de formato y montón sean casi imposibles, GCC Fortify Source característica, y el puerto y combinación de la característica de protector de pila GCC .
Implementación
Exec Shield funciona en todas las CPU x86 que utilizan el límite de segmento de código. Debido a la forma en que funciona Exec Shield, es muy ligero; sin embargo, no protegerá completamente los diseños de memoria virtual arbitrarios . Si se eleva el límite de CS, por ejemplo, al llamar a mprotect () para hacer que la memoria sea más ejecutable, las protecciones se pierden por debajo de ese límite. Ingo Molnar señala esto en una conversación por correo electrónico. La mayoría de las aplicaciones son bastante cuerdas en esto; la pila (la parte importante) al menos termina por encima de las bibliotecas mapeadas, por lo que no se vuelve ejecutable excepto mediante llamadas explícitas de la aplicación.
En agosto de 2004, nada de los proyectos Exec Shield intenta hacer cumplir las protecciones de memoria restringiendo mprotect () en cualquier arquitectura; aunque la memoria puede no ser ejecutable inicialmente, puede volverse ejecutable más tarde, por lo que el kernel permitirá que una aplicación marque las páginas de la memoria como grabables y ejecutables al mismo tiempo. Sin embargo, en cooperación con el proyecto de Linux con seguridad mejorada (SELinux), la política estándar para la distribución de Fedora Core prohíbe este comportamiento para la mayoría de los ejecutables, con solo unas pocas excepciones por razones de compatibilidad.
Historia
Exec Shield fue desarrollado por varias personas en Red Hat; el primer parche fue lanzado por Ingo Molnar de Red Hat y lanzado por primera vez en mayo de 2003. Es parte de Fedora Core 1 a 6 y Red Hat Enterprise Linux desde la versión 3. [1] [2] Otras personas involucradas incluyen a Jakub Jelínek, Ulrich Drepper , Richard Henderson y Arjan van de Ven.
Ver también
Referencias
- ^ "Notas de la versión de Fedora Core 1" . Red Hat, Inc . Noviembre de 2003. Archivado desde el original el 2 de diciembre de 2003 . Consultado el 18 de octubre de 2007 .
- ^ van de Ven, Arjan (agosto de 2004). "Nuevas mejoras de seguridad en Red Hat Enterprise Linux v.3, actualización 3" (PDF) . Red Hat, Inc . Archivado desde el original (PDF) el 12 de mayo de 2005 . Consultado el 18 de octubre de 2007 .