selinux - supélec · 14/02/07 qu'est-ce que selinux? un système mac pour linux ♦domain and...
TRANSCRIPT
14/02/07
Plan
Brève introduction Concepts Considérations pratiques Conclusion
14/02/07
Plan
Brève introduction Concepts Considérations pratiques Conclusion
14/02/07
Qu'est-ce que SELinux?
Un système MAC pour Linux♦ Domain and Type Enforcement (DTE)♦ Role-Based Access Control (RBAC)♦ Multi-Catégorie (MCS) et Multi-Niveaux (MLS), à la Bell-
Lapadula Développé par la NSA
♦ Inclut dans la distribution standard du noyau linux Promu par RedHat
♦ SELinux installé et activé par défaut sur Fedora et RHE
14/02/07
Pourquoi SELinux?
Caractéristiques du DAC classique♦ Le contrôle d'accès est laissé à la discrétion des utilisateurs♦ Les processus d'un utilisateur ont tous les mêmes droits
... en particulier, root a les pleins pouvoirs Implications : nécessité d'une confiance absolue
♦ ... dans les utilisateurs, ce qui inclut les malveillances (pas simple) les maladresses (très dur)
♦ ... dans les outils des utilisateurs (pire encore) Chevaux de Troie, virus, etc.
14/02/07
Exemples de scénarios
“~/.rhosts doit être modifiable seulement par sonpropriétaire”♦ $ chmod -R a+w ./ au mauvais endroit...
“~/.ssh/id_dsa doit être lisible seulement par sonpropriétaire”♦ Le virus “trucchouchette.w32” exécuté par le mailer du
propriétaire a donc bien le droit d'y accéder♦ ... tout comme le script ActiveX exécuté par son navigateur♦ ... tout comme les “utilitaires” téléchargés sur eMule♦ ... idem pour n'importe quel fichier de l'utilisateur...
14/02/07
On supprime DAC, alors?
Non, SELinux et DAC coexistent dans le système Seules les actions autorisées par DAC sont vérifiées
par SELinux
14/02/07
Objectifs de SELinux
Application des principes de privilèges minimaux etde séparation des pouvoirs
Confinement de processus♦ Isolation de code non fiable♦ Protection contre l’injection de code
Protection des flux d’information♦ Politiques multi-catégories et multi-niveaux
Intégrité des applications et du système♦ Fichiers de configuration, des exécutables et du noyau♦ Communication entre processus
14/02/07
Plan
Brève introduction Concepts Considérations pratiques Conclusion
14/02/07
Sujets, objets et opérations
Sujets♦ Entités actives du système (~ processus)
Objets♦ Entités passives du système (~ processus et le reste)
Opérations♦ Actions que les sujets entreprennent sur les objets♦ Associées à différentes classes d'objets
Classe d'objet Opération
Processus execute, transition, entrypoint, signaux, fork, ...
Fichiers read, write, append, execute, rmdir, ...
Systèmes de fichiers mount, remount, unmount, ...
Descripteurs de fichiers create, inherit, receive
Sockets (TCP, UDP, raw) bind, connect, listen, accept, ...
14/02/07
Contextes de sécurité
Concept central de SELinux♦ Toutes les décisions d'accès se basent sur les contextes de
sécurité (a.k.a label) Un contexte est un triplet (i,r,t)
♦ i est une identité SELinux♦ r est un rôle♦ t est un type ou un domaine
Un contexte est associé♦ à chaque sujet♦ à chaque objet
14/02/07
Contexte de sécurité
Exemple de label
user_u:system_r:system_t[:s0:c0.c16]
Identité Rôle Type oudomaine
(DTE)
Niveau declassification
oud’habilitation
(MLS)
Catégorie declassification
oud’habilitation
(MCS)
14/02/07
Domaines et types (1/2)
Un type est un identifiant♦ Déclaré et défini par l’auteur d’une politique♦ Pas de signification intrinsèque : un type n’a de sens que
par l’utilisation qui en est faite dans la politique♦ Regroupe des sujets et objets ayant les mêmes
autorisations On parle de...
♦ type pour un objet♦ domaine pour un sujet♦ ... mais recouvrent les mêmes notions
Exemple : system_t
14/02/07
Domaines et types (2/2)
Domaines et types utilisés pour les décisions du typeenforcement
Utilisation prépondérante de SELinux Un sujet d'un domaine d peut effectuer une opération
o sur un objet de type t seulement si la politique DTEl'autorise
14/02/07
Transition de type
Opération d’affectation d’un type♦ par défaut à la création
d’un sujet (transition de domaine), via execve() d’un objet (création d’un fichier, ouverture de socket, etc.)
♦ spécifique, à la demande d’un processus « SELinux-aware », pour l’exécution d’une opération privilégiée
Dans les deux cas, la politique doit autoriser latransition explicitement♦ La spécification d’un type par défaut n’est pas une
autorisation♦ La politique doit en plus autoriser la transition de type
14/02/07
Politique de sécurité
Eléments constitutifs♦ Déclarations et définition des types, rôles, identités♦ Définition des règles de transitions de types♦ Définition des autorisations d’accès nécessaires et
suffisantes Expression de la politique dans un langage dédié
♦ Sémantique bien définie♦ Vérification automatique possible
14/02/07
Politique de sécurité
Une autorisation implique quatre entités♦ Des types de sujets (i.e. des domaines)♦ Des types d’objets♦ Des opérations♦ Des classes d’objets
allow passwd_t shadow_t:
file { create ioctl read getattr
lock write setattr append
link unlink rename};
Les processus possédant le typepasswd_t sont autorisés à {lire,écrire, ajouter, …} desdonnées dans les fichiers possédantle type shadow_t
14/02/07
Politique de sécurité
Transitions de types par défaut
type_transition user_t passwd_exec_t:
process passwd_t;
Un processus du domaineuser_t devrait devenirpasswd_t lors de l’exécutiond’un programme de typepasswd_exec_t (c-à-d passwd)
type_transition passwd_t tmp_t:
file {lnk_file sock_file}
passwd_tmp_t;
Les fichiers créés par unprocessus dont le type estpasswd_t dans le répertoire/tmp doivent avoir le typepasswd_tmp_t
Transition de type
Transition de domaine
14/02/07
Illustration (DTE)
uid : joeeuid : joeuser_t
login
bash
$ passwd joe
uid : joeeuid : joeuser_t
Légende
Processus
DAC
SELinux
r-s--x--x root rootpasswd_exec_tFichier
14/02/07
Illustration (DTE)
uid : joeeuid : joeuser_t
login
uid : joeeuid : joeuser_t
fork()bash
bash
r-s--x--x root rootpasswd_exec_t
/bin/passwd
execve()
allow user_t passwd_exec_t: file { getattr execute};
$ passwd joe
14/02/07
Illustration (DTE)
r-s--x--x root rootpasswd_exec_t
uid : joeeuid : joeuser_t
login
uid : joeeuid : rootpasswd_t
fork()
/bin/passwd
execve()
passwd
bash
allow passwd_t passwd_exec_t:file entrypoint;
allow user_t passwd_t:process transition;
type_transition user_t passwd_exec_t:process passwd_t;
$ passwd joe
14/02/07
Illustration (DTE)
uid : joeeuid : joeuser_t
login
uid : joeeuid : rootpasswd_t
fork()
r--------root rootshadow_t
/etc/shadow
bash
write, create(modification mdp)
allow passwd_t shadow_t:
file {read write append};
passwd
$ passwd joe
14/02/07
Illustration (DTE)
uid : joeeuid : joeuser_t
login
uid : joeeuid : rootuser_t
fork()
r--------root rootshadow_t
/etc/shadow
bash
write, create(modification passwd)
whatever
14/02/07
Identités
Indépendantes des identités système (UID)♦ Les deux subsistent sur le système
Persistence des identités SELinux♦ Un sujet conserve son identité tout au long de sa session
(même après un su)♦ Exceptions à la règle
Processus d'authentification (login, gdm, ssh, etc.)− Pour l'affectation de l'identité initiale d'un utilisateur
cron− Pour l'exécution automatique de processus sous une identité donnée
♦ Permet l'imputabilité des actions sur le système
14/02/07
Rôles
Les rôles relient les utilisateurs aux domaines Application de contraintes supplémentaires
♦ L’affectation d’un type à un processus est permise seulementsi une définition de rôle l’autorise dans la politique
♦ Même si permis par DTE Interviennent dans les transitions de domaines Un utilisateur peut changer de rôle au cours d’une
session La notion de rôle ne s’applique qu’aux sujets
14/02/07
Rôles
user root roles {user_r sysadm_r}; L’utilisateur root a le droit d’assumerles rôles user_r et sysadm_r.
role user_r types passwd_t; Le rôle user_r est autorisé à obtenirle type passwd_t.
14/02/07
Rôles
Comparaison RBAC / SELinux♦ RBAC
Affectation d’autorisations à des rôles Autorisation des utilisateur à assumer un ou plusieurs rôles
♦ SELinux Affectation d’autorisations entre des domaines et des types Affectation de domaines à des rôles Autorisation des utilisateurs à assumer un ou plusieurs rôles
14/02/07
Synthèse des concepts SELinux
Utilisateur Rôle
Type
Domaine
peut assumer
peut accéderpeut transiter
peut exécuter
operation
Sujet
Objet
Contexte
Domaine/type
Role
Identitépossède
specs.politique
14/02/07
Contraintes
Expressions booléennes exprimées dans la politique Doivent être vérifiées lors d’un accès
♦ Opérateurs logiques =, !=, and, or♦ Contraintes basées sur les identités, rôles et types
constrain process transition ((u1 == u2 or t1 == privuser) and (r1 == r2 or t1 == privrole) );
constrain class_set perm_set expression ;
u1,t1,r1 désignent les éléments du domaine sourceu2,t2,r2 désignent les éléments du type cible
Vérifie que l’identité et le rôle d’un sujet ne change pas lors d’une transitionde domaine, sauf si l’utilisateur est un utilisateur privilégié
14/02/07
SELinux et MLS
Implémentation de Bell-La Padula Ajout d’un niveau et d’une catégorie dans les
contextes des sujets et objets♦ user_u:system_r:system_t[:s0:c0.c16]♦ s0 <=> « Confidential » ; c1 <=> « Crypto »
Vérifications basées sur le mécanismes de contraintesde la politique♦ Ajout des opérateurs booléens <,>,<=,>=♦ Prise en compte des niveaux et catégories MLS et MCS
dans les contraintes Illustration de la souplesse de SELinux dans la mise
en œuvre de politiques MAC
14/02/07
Plan
Brève introduction Concepts Considérations pratiques Conclusion
14/02/07
Architecture de SELinux
Instance de FLASK♦ Framework pour l'implémentation de systèmes MAC♦ Trois composants principaux
Référentiel de sécurité (Security Server - SS)− Décisions d'accès ~ pouvoir législatif
Gestionnaire d'objets (Object Manager - OM)− Application des décisions d'accès ~ Pouvoir exécutif
Cache d'accès (Access Vector Cache – AVC)− Accélère les décisions du SS
Implémentation sous la forme d’un module LSM♦ Linux Security Module♦ Framework du noyau pour l'implémentation de systèmes de
contrôle d'accès dans Linux♦ Hooks insérés dans le code du noyau
14/02/07
LSM & SELinux
14/02/07
FLASK & SELinux
LSM
FLASK
Object Manager(exécutif)
AccessVectorCache
Security Server(législatif)
PolitiqueSujet
ObjetLog
14/02/07
SID (Security IDentifiers)
Les décisions d’accès se font à partir de couples deSID
SID = identifiant unique de contexte de sécurité♦ Attribution des SID aux objets assurée par le gestionnaire
d'objets♦ Association entre SID/label maintenue par le référentiel de
sécurité Deux types de SID
♦ Volatiles (par ex. processus)♦ Persistants (par ex. fichiers)
Stockés sous forme d'attribut étendus du système de fichiers Affectation initiale nécessaire (relabeling du système de fichiers)
14/02/07
Politiques SELinux
Modulaires♦ Une politique est une collection de modules♦ Chaque module spécifie la politique propre à une application
spécifique apache, mozilla, pam, etc.
♦ Une modification de la politique ne nécessite plus larecompilation de l’ensemble de la politique
Dynamiques♦ Insertion et retrait de modules “à chaud”♦ Une modification de la politique ne nécessite plus le
redémarrage de la machine
14/02/07
Politiques SELinux
14/02/07
Politiques SELinux
Quelques chiffres…♦ ~ 50000 règles de type enforcement
En partie générées automatiquement, à partir des macrosdisponibles dans les sources des politiques
♦ 41 classes d’objets dans le noyau♦ ~7% d’overhead sur le système
14/02/07
Types existants de politiques
targeted♦ Protection des services (apache, ssh, etc.)♦ Le reste du système est “unconfined”♦ Suffisant contre les attaque « frontales »♦ Par défaut sur les systèmes RedHat
strict♦ Protection de l'ensemble du système♦ Services et applications du système♦ Beaucoup plus contraignante
mls♦ Politique multiniveaux
14/02/07
Modes SELinux
Permissive♦ Décisions du SS seulement loggées par le AVC♦ Déboguage de politiques♦ Fonctionnement en mode IDS
Enforced♦ Décisions du SS appliquées sur le système♦ Peut engendrer des disfonctionnements applicatifs si
La politique est mal conçue (comportement légitime de l’application) L’application est mal conçue (comportement litigieux v-à-v du
système, privilèges excessifs)
14/02/07
Outils SELinux
Manipulation des entités du système♦ Outils classiques modifiés (par ex. ls, ps, etc.)♦ Nouveaux outils pour manipuler les contextes des entités
Conception de politique♦ polgen (Mitre) : induction de politiques à partir de traces d’exécution d’un
programme♦ sediff : différences sémantiques entre politiques♦ sechecker : recherche d’erreurs dans une politique
Analyse de trace (aide au diagnostic)♦ seaudit : audit2why (motif des refus d’accès), audit2allow (aide à la
résolution de problèmes)
14/02/07
Développements de SELinux
Coeur de SELinux (noyau)♦ Stable
Outils périphériques♦ Manipulation de la politique, aide au diagnostic, analyse de
logs, etc.♦ Plus ou moins stables
Politiques de sécurité des services♦ Dans l'idéal, une politique par application♦ En développement permanent♦ Le plus gros du travail...
14/02/07
Related Work
DTE♦ A l’origine de SELinux♦ Peu (pas?) utilisé
AppArmor♦ Développé par Suse♦ Assimilable à un DTE pour des services♦ Plus simple, mais fonctions plus limitées
/usr/bin/foo {/bin/mount ux,/dev/{,u}random r,/etc/ld.so.cache r,/etc/foo.conf r,/etc/foo/* r,/lib/ld-*.so* mr,/lib/lib*.so* mr,/proc/[0-9]** r,/usr/lib/** mr,/tmp/foo.pid wr,/tmp/foo.* lrw,/@{HOME}/.foo_file rw}
14/02/07
Plan
Brève introduction Concepts Considérations pratiques Conclusion
14/02/07
Conclusions et perspectives
SELinux : un système MAC puissant…♦ Flexible (permet d’implémenter des politiques variées)♦ Dynamique (chargement de modules de politiques)♦ Granularité très fine dans le contrôle d’accès
… mais complexe♦ En partie du fait de la complexité du noyau Linux♦ Complexité de l’élaboration des politiques
Un travail de longue haleine♦ Nombre d’applications disponibles♦ Facilité par le caractère open-source de Linux
14/02/07
Conclusions et perspectives
Contributions multiples sur ce sujet♦ Politiques MAC particulières♦ Intégration dans le système♦ Développement des politiques d'applications♦ Aide au diagnostic
Projet abouti♦ Intégration par défaut dans la distribution Linux de référence♦ Même si des problèmes demeurent et si des ajouts sont
nécessaires
14/02/07
Bookmarks
http://www.nsa.gov/selinux/ http://fedora.redhat.com/projects/selinux/ http://selinux-symposium.org/ http://www.tresys.com/