SELinux

SELinux
Información sobre la plantilla
SELinux admin.jpg
Arquitectura de seguridad
CreadorAgencia de Seguridad Nacional (NSA) de los Estados Unidos y de la comunidad SELinux

SELinux (del inglés Security-Enhanced Linux, Seguridad Mejorada de Linux). Es una característica de seguridad de Linux que provee una variedad de políticas de seguridad, incluyendo el estilo de acceso a los controles del Departamento de Defensa de Estados Unidos, a través del uso de módulos de Seguridad en el núcleo Linux. No es una distribución de Linux, sino un set de modificaciones pueden ser aplicado a un sistema Tipo-Unix como Linux y BSD.

SELinux

SELinux proporciona un sistema flexible de control de acceso obligatorio (mandatory access control, MAC) incorporado en el Kernel. Bajo el Linux estándar se utiliza el control de acceso a discreción (discretionary access control, DAC), en el que un proceso o aplicación ejectutándose como un Usuario (UID o SUID) tiene los permisos y de ese usuario en los objetos, archivos, zócalos y otros procesos. Al ejecutar un kernel SELinux MAC se protege al sistema de aplicaciones maliciosas o dañadas que pueden perjudicar o destruir el sistema. SELinux define el acceso y los derechos de transición de cada usuario, aplicación, proceso y archivo en el sistema. SELinux gobierna la interacción de estos sujetos y objectos usando una política de seguridad que especifica cuán estricta o indulgente una instalación de Red Hat Enterprise Linux dada debería de ser.

En su mayor parte, SELinux es casi invisible para la mayoría de los usuarios. Solamente los administradores de sistemas se deben de preocupar sobre lo estricto que debe ser una política a implementar en sus entorno de servidores. La política puede ser tan estricta o tan indulgente como se requiera, y es bastante detallada. Este detalle le dá al kernel SELinux un control total y granular sobre el sistema completo.

Cuando un sujeto, tal como una aplicación, intenta acceder a un objeto tal como a un archivo, el servidor de aplicación de políticas verifica un caché de vector de acceso (AVC), donde se registran los permisos de objeto y del sujeto. Si no se puede tomar una decisión basado en los datos en el AVAC, la petición continua al servidor de seguridad, el cual busca el contexto de securidad de la aplicación y del archivo en una matriz. Los permisos son entonces otorgados o negados, con un mensaje de avc: denied detallado en /var/log/messages. Los sujetos y objetos reciben su contexto de seguridad a partir de la política instalada, que también proporciona información para llenar la matriz de seguridad del servidor.

Además de ejecutarse en un modo impositivo, SELinux puede ejecutarse en un modo permisivo, donde el AVC esverificado y se registran los rechazos, pero SELinux no hace cumplir esta política.

Historia y objetivo

SELinux aparece a finales del año 2000 lanzado y distribuido por la Agencia Nacional de Seguridad de los Estados Unidos (NSA). El objetivo del mismo es, por un lado, demostrar la posibilidad de implementar el Modelo de Seguridad de Control de Acceso Obligatorio (MDAC) y el Control de Acceso Basado en Roles (RBAC) en entorno Linux.

Un segundo objetivo, hacer frente a la eventualidad de que los sistemas operativos "trusted" comerciales dejarán de estar disponibles. SELinux puede considerarse como una implementación práctica del modelo de seguridad de control de acceso obligatorio basado en el núcleo del sistema operativo Linux. Un administrador de un sistema SELinux tiene la posibilidad de configurar una política donde se define los archivos a que tiene acceso cada programa.

Mecanismos

Asignación de un grupo a los usuarios para mayor seguridad del sistema

Para poder realizar esto, SELinux implementa un mecanismo para establecer en cada archivo y proceso el contexto en el que está siendo utilizado.

Mediante la utilización de un módulo del sistema operativo, es posible establecer reglas para permitir o denegar el acceso a cualquier archivo del sistema. El sistema operativo dispone de un proceso servidor de seguridad, que se ejecuta como parte del núcleo, que decide en base a la política de seguridad definida por el administrador, si algo (un proceso o un usuario) dispone de permiso para acceder a un objeto sea este un archivo o dispositivo, mecanismo de control denominado Type Enforcement (TE). Así, ante una incidencia de seguridad como puede ser un desbordamiento de búfer en un proceso ejecutado por root, el atacante sólo podrá acceder a los archivos para los cuales el proceso vulnerable esté autorizado por la política del sistema sin tener ningún efecto sobre el resto de archivos u objetos del sistema. SELinux también permite implementar un modelo adicional de seguridad (Multi-Level Security, MLS) en el que además de lo indicado hasta ahora es posible, para cada objeto, una capa de seguridad conocida como "altamente secreta", "secreta", "confidencial" y "sin restricción".

En este modelo, a los mecanismos descritos anteriormente se añade la restricción de que únicamente aquellos procesos y usuarios situados en la misma capa o una capa superior pueden acceder a los objetos, pero nunca en sentido contrario.

Características

  • La noción de un sistema seguro incluye muchos atributos (seguridad física, seguridad lógica, la seguridad del personal, etc.). SELinux se dirige sólo a un juego muy estrecho de estos atributos (mandos de acceso obligatorios en el sistema operativo).
  • SELinux significa la caja fuerte para proteger la información del mundo real de algún adversario del mundo real que el dueño de información no permita el acceso al usuario.
  • SELinux proporciona compatibilidad binaria con las aplicaciones existentes de Linux y con los kernel de Linux, algunos kernel pueden requerir modificaciones para actuar con SELinux.
  • Los nuevos rasgos del SELinux se diseñan para dar fuerza a la separación de información basada en la confidencialidad y requisitos de integridad. Ellos se diseñan para impedir a los procesos pocos fiables leer datos y programas, desviando los mecanismos de seguridad de la aplicación, interfiriendo estos procesos en la violación de la política de seguridad de sistema. Ellos también ayudan a confinar el daño potencial que puede causar a los datos o programas. Ellos también deben ser útiles para permitir usar un solo sistema por los usuarios diferenciando las autorizaciones de seguridad para acceder a tipos múltiples de información mediante requisitos de seguridad.
  • El Sistema operativo dispone de un proceso servidor de seguridad, que se ejecuta como parte del núcleo, que decide en base a la política de seguridad definida por el administrador, si algo (un proceso o un usuario) dispone de permiso para acceder a un objeto (archivo, dispositivo...), este mecanismo de control se denomina Type Enforcement (TE).
  • SELinux también permite implementar un modelo adicional de seguridad (Multi-Level Security, MLS) en el que además de lo indicado hasta ahora es posible, para cada objeto, una capa de seguridad (como "altamente secreta", "secreta", "confidencial" y "sin restricción").

Ventajas y desventajas

  • El mecanismo de control Type Enforcement (TE), ante una incidencia de seguridad como puede ser un desbordamiento de Búfer en un proceso ejecutado por Root, el atacante sólo podrá acceder a los archivos para los cuales el proceso vulnerable esté autorizado por la política del sistema. No tendrá ningún efecto sobre el resto de archivos u objetos del sistema.
  • Los mecanismos del SELinux añade restricciones de que únicamente aquellos procesos y usuarios situados en la misma capa (o una capa superior) puede acceder a los objetos, pero nunca al revés. Así un usuario o un proceso de la capa "confidencial" puede acceder a la información "confidencial" y "sin restricción", pero nunca a la información marcada como "secreta" o "altamente secreta".

Instalación

SELinux viene distribuyéndose como una colección de parches para el código fuente del núcleo del sistema operativo, actualmente se ha cambiado la arquitectura constituyéndose en un módulo que utiliza los enganches de seguridad facilitados por el Linux Security Module (LSM), por lo que como paso previo a la instalación de SELinux debe instalarse el sistema operativo Linux.

Los requerimientos para la instalación del sistema operativo Linux son: Utilizar sistema de archivos ext2 o ext3, instalar las herramientas necesarias para compilar el núcleo e instalar los diversos componentes que deberá ejecutar el servidor (como BIND, Apache, Samba).

La distribución actual de SELinux incluye:

  • El código fuente del núcleo estándar de Linux, con los parches de SELinux ya aplicados.
  • El soporte para Linux Security Modules (LSM).
  • El soporte de SELinux para LSM.
  • Programas para la administración de SELinux y las políticas de seguridad.
  • Diversos ejemplos de políticas de seguridad.
  • Diversas utilidades para sustituir algunas de las utilidades estándar del sistema (cp, find, id, ls).

Fuentes