CornerCircleTop
CornerCircleBottom
VButtonBarBottom
Pàgina Inicial
Una per Dia
Articles
Directori
Biblioteca
Alertes
VButtonBarBottom
SELinux, Security Enhanced Linux

Última Modificació del Document
6 d'abril de 2003

Security Enhanced Linux, SELinux, és una col·lecció de pegats que modifiquen el nucli del sistema operatiu Linux, enfortint els mecanismes de control d'accés i forçant l'execució dels processos dins d'un entorn amb els mínims privilegis necessaris.


Models de control d'accés a Unix

Tradicionalment els sistemes Unix han utilitzat el model de control d'accés discrecional (Discretionary Access Control, DAC) en el qual un usuari té un complet control sobre els objectes que li pertanyen i els programes que executa. Així mateix, el programa executat per un usuari tindrà els mateixos permisos d'aquest usuari que ho està executant.

Això implica que la seguretat del sistema depèn de les aplicacions que s'estan executant i, per tant, quan es produeix una vulnerabilitat de seguretat a una aplicació, aquesta afecta a tots els objectes als quals l'usuari té accés. Així, si l'aplicació és executada per root, l'atacant pot obtenir els màxims privilegis en la màquina, comprometent la seguretat global del sistema.

Un altre model de control d'accés és el anomenat control d'accés obligatori (Mandatory Access Control, MAC), on existeix una política de seguretat definida per l'administrador i que els usuaris no poden modificar. Aquesta política va més enllà d'establir propietaris de fitxers sinó que fixa "contextos", on s'indica quan un objecte pot accedir a altre objecte. Aquest model de control d'accés pot augmentar el nivell de seguretat, especialment quan s'estableix com base de la política definida que no es permet qualsevol operació no expressament autoritzada.

La implementació d'aquest model de seguretat per a tot un sistema Unix pot ser una tasca molt complicada. En teoria cal definir regles per a qualsevol usuari que utilitza qualsevol programa que accedeix a qualsevol objecte del sistema. Per a evitar haver d'arribar a aquest detall de definició, una cosa que fàcilment es convertiria en un monstre intractable, s'utilitza el concepte de control d'accés basat en rols (Role-Based Access Control, RBAC). Sota aquest model, l'administrador defineix una sèrie de rols i assigna als usuaris en els diferents rols que corresponen al seu perfil.

Com exemple, l'usuari d'un programa únicament necessita disposar de permisos per a llegir i escriure els fitxers utilitzats per aquesta aplicació concreta, però res més. Altres usuaris és possible que necessitin permisos per a poder llegir fitxers, però no modificar-los. Cadascun d'aquests usuaris s'assignarà a diferents rols.


SELinux

La primera versió de SELinux es va publicar a finals de l'any 2000 quan la NSA (Agència Nacional de Seguretat dels Estats Units) va publicar la primera versió, amb una llicència GPL. L'objectiu d'aquest projecte és, d'una banda, demostrar la possibilitat d'implementar el model de seguretat de control d'accés obligatori (MDAC) i el control d'accés basat en rols (RBAC) a l'entorn Linux. Com segon objectiu, el plantar cara a l'eventualitat que els sistemes operatius "trusted" comercials deixessin d'estar disponibles.

SELinux pot considerar-se com una implementació pràctica del model de seguretat de control d'accés obligatori basat en el nucli del sistema operatiu Linux. Un administrador d'un sistema SELinux té la possibilitat de configurar una política on es defineix els fitxers que té accés cada programa.

Per a poder realitzar això, SELinux implementa un mecanisme per a establir per cada fitxer i procés el context en el qual està sent utilitzat. Mitjançant la utilització d'un mòdul del sistema operatiu, és possible establir regles per a permetre o denegar l'accés a qualsevol fitxer del sistema (utilitzant el concepte de fitxer d'Unix, el que inclou els dispositius, fitxers...).

El sistema operatiu disposa d'un procés servidor de seguretat, que s'executa com part del nucli, que decideix sobre la base de la política de seguretat definida per l'administrador, si alguna cosa (un procés o un usuari) disposa de permís per a accedir a un objecte (fitxer, dispositiu...). Aquest mecanisme de control s'anomena Type Enforcement (TE).
 
Així, davant una incidència de seguretat com pot ser un desbordament de memòria intermèdia a un procés executat per root, l'atacant només podrà accedir als fitxers per als quals el procés vulnerable estigui autoritzat per la política del sistema. No tindrà cap efecte sobre la resta de fitxers o objectes del sistema.
 
SELinux també permet implementar un model addicional de seguretat (Multi-Level Security, MLS) en el qual a més de l'indicat fins ara és possible, per a cada objecte, una capa de seguretat (com "altament secreta", "secreta", "confidencial" i "sense restricció"). En aquest model, als mecanismes descrits anteriorment s'afegeix la restricció que únicament aquells processos i usuaris situats a la mateixa capa (o a una capa superior) pot accedir als objectes, però mai al revés. Així un usuari o un procés de la capa "confidencial" pot accedir a la informació "confidencial" i "sense restricció", però mai a la informació marcada com "secreta" o "altament secreta".


Instal·lació de SELinux

SELinux fins ara s'ha vingut distribuint com una col·lecció de pegats per al codi font del nucli del sistema operatiu. No obstant, recentment s'ha canviat l'arquitectura, passant a ser un mòdul que utilitza els punts de seguretat facilitats pel Linux Security Module (LSM).

Per tant, com pas previ a la instal·lació de SELinux cal instal·lar el sistema operatiu Linux. Actualment, SELinux dóna suport únicament a Red Hat Linux (versió 7.3), encara que se sap per l'experiència de diversos usuaris que funciona amb altres distribucions (Debian, SuSE, Mandrake...).

Els requeriments per a la instal·lació del sistema operatiu Linux són: utilitzar sistema de fitxers ext2 o ext3, instal·lar les eines necessàries per a compilar el nucli i instal·lar els diversos components que haurà d'executar el servidor (com BIND, Apache, Samba...). Es recomana no instal·lar el suport gràfic.

Quan tinguem operatiu el sistema operatiu pot procedir-se a la instal·lació de SELinux. Actualment existeixen versions per a les versions 2.4 i 2.5 del nucli del sistema operatiu. La distribució actual de SELinux inclou:

  • El codi font del nucli estàndard de Linux, amb els pegats de SELinux ja aplicats.
     
  • El suport per a Linux Security Module (LSM)
     
  • El suport de SELinux per a LSM
     
  • Programes per a l'administració de SELinux i les polítiques de seguretat
     
  • Diversos exemples de polítiques de seguretat
     
  • Diverses utilitats per a substituir algunes de les utilitats estàndard del sistema (cp, find, id, ls, mkdir...) de forma que reconeguin les polítiques

En aquest punt, només resta compilar el nucli modificat de Linux distribuït en el paquet SELinux, utilitzant qualsevol dels mètodes habituals per a recompilar el nucli del sistema operatiu. Caldrà seleccionar les opcions "NSA SELinux Support" i "NSA SELinux Development Support".

 
Utilitzant SELinux

Quan ja tenim SELinux funcionant, la majoria d'eines estàndard del sistema, com ps o ls, disposen d'una nova opció –-context que ens permet determinar el context de seguretat en el qual s'estan executant:

    [root@test /]# ps -e --context
      PID  SID CONTEXT                        COMMAND
       1    7 system_u:system_r:init_t       init
       2    1 system_u:system_r:kernel_t     [keventd]
       3    1 system_u:system_r:kernel_t     [kapmd]
      ...
     2728  323 root:user_r:user_t             -bash
     2920  323 root:user_r:user_t             ps -e --context
    [root@test /]#

Com podem veure hi ha dues columnes addicionals: SID (identificador de seguretat) i el context de seguretat, format per l'usuari associat, el rol i el seu tipus. L'usuari system_o s'assigna automàticament a tots els fitxers existents abans de la instal·lació de SELinux.

Com durant la instal·lació de SELinux hem configurat el nucli amb el SELinux Development Support, el sistema està funcionant en modalitat permissiva. Això significa que en lloc de bloquejar aquelles funcions no permeses per la política de seguretat simplement les registra (per defecte a /var/log/messages).

Utilitzant l'ordre avc_toggle podem canviar la modalitat perquè el sistema bloquegi qualsevol funció no expressament autoritzada:

    [root@test /] # tail /var/log/messages
     … el contingut del registre d'activitat ...

    [root@test /] # avc_toggle
    enforcing
    [root@test /] # tail /var/log/messages
    tail: /var/log/messages: Permission denied
    [root@test /] # avc_toggle
    avc_toggle: Permission denied
    [root@test /] #

És a dir, un cop aplicada la política de seguretat cap usuari no autoritzat la pot modificar, incloent-hi al propi root.

La restauració de la modalitat permissiva només la pot realitzar el rol de sysadm_r:

    [root@test /] # newrole –r sysadm_r
    Authenticating root.
    Password: root@password
    [root@test /] # avc_toggle
    permissive
    [root@test /] # tail /var/log/messages
     … el contingut del registre d'activitat ...

Ara al registre d'activitat del sistema podem veure que han quedat registrats els intents que hem realitzat i han estat denegats per la política.


Definició de la política

Explicar com configurar la política de SELinux és alguna cosa que s'escapa a l'abast d'aquest article, però facilitem algunes dades bàsiques. Els lectors interessats trobaran informació més detallada a la documentació inclosa amb SELinux.

Els fitxers de la política es troben al directori /etc/security/selinux/src. Dins d'aquest directori trobem el fitxer users que conté la relació d'usuaris i les definicions de rols.

Al subdirectori file_contexts es defineixen les plantilles de política pels diversos tipus de fitxers existents al sistema. Per exemple:

/etc/security/selinux/src/file_context/program/ntpd.fc

   /var/lib/ntp(/.*)?                   system_u:object_r:var_lib_ntp_t
   /etc/ntp.conf                        system_u:object_r:etc_ntp_t
   /usr/sbin/ntpd                       system_u:object_r:ntpd_exec_t
   /var/log/ntpstats(/.*)?              system_u:object_r:var_log_ntp_t
   /var/log/ntpd.*                      system_u:object_r:var_log_ntp_t
   /etc/cron.(daily|weekly)/ntp-simple  system_u:object_r:ntpd_exec_t

La primera columna és una expressió regular per als noms de fitxers sobre els quals s'aplica la política i la segona columna és el context sobre el qual s'aplica la política.

Al directori /etc/security/selinux/src/domains s'estableixen les TE (Type Enformcement) per als objectes del sistema. La forma habitual de realitzar aquesta definició és mitjançant el llenguatge de marques m4.


Obtenir SELinux

La versió actual de SELinux dóna suport a les versions 2.4.* i 2.5.* del nucli de Linux i està disponible en forma de mòdul per a LSM (que també està inclòs a la distribució). També inclou versions modificades d'alguns paquets i utilitats estàndards del sistema GNU/Linux. Entre d'altres utilitats trobem fileutils (para poder visualitzar o especificar el context de seguretat), findutils (para poder cercar fitxers sobre la base del seu context de seguretat), logrotate (modificat per a conservar el context de seguretat dels fitxers de registre d'activitat rotats), procps (per a visualització del context de seguretat dels processos), openssh (modificat per a establir el context de seguretat als processos d'usuari), tar (per a emmagatzemar el context de seguretat en als fitxers .tar, etc..


Per a saber més

Security-Enhanced Linux
http://www.nsa.gov/selinux/

Linux Security Module
http://lsm.immunix.org/

SELinux
http://www.samag.com/documents/s=7835/sam0303a/0303a.htm

Una per dia (23-12-02): La NSA publica una actualització de la seva distribució Linux
http://www.quands.cat/unaperdia/arxiu/20021223.html

Una per dia (16-07-02): La NSA publica una actualització de la seva distribució de Linux
http://www.quands.cat/unaperdia/arxiu/20020716.html

Una per dia (23-09-01): La NSA distribueix una nova revisió de la seva distribució "segura" SELinux
http://www.quands.cat/unaperdia/arxiu/20010923.html

Una-al-día (28-12-00): La NSA publica una versión segura de Linux
http://www.hispasec.com/unaaldia/795

Trusted Solaris Operating Environment
http://wwws.sun.com/software/solaris/trustedsolaris/


Xavier Caballé
xcaballe@quands.com

 

 Contacte: info@quands.com