Académique Documents
Professionnel Documents
Culture Documents
Security-Enhanced Linux
J. Briffaut
INSA CVL
STI
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 2/72
Introduction
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 3/72
Introduction Contrôle d’Accès
SELinux ?
Security-Enhanced Linux :
Prototype de recherche développé par la NSA ...
... Mais intégré dans de nombreuses distributions
Partie Noyau + utilitaires
Contrôle d’Accès Mandataire (MAC)
RBAC : Role-based Access Control
TE : Type Enforcement
MLS/MCS : Sécurité multi-niveau/catégorie
Pas de concept de super-utilisateur (root)
Principe de SELinux
”The best practices for computer security includes the idea of least
privilege, meaning the absolute minimum amount of access is given
each user, process, or program to perform their required tasks.”
–Rick Larabee A Comparison of SELinux and LIDS
Exemple
Un développeur Web doit pouvoir lire/écrire/modifier les fichiers
du type PHP
Un Administrateur Web doit pouvoir redémarrer le services
apache et lire les logs d’apache (uniquement !!!)
Un utilisateur quelconque doit pouvoir accéder aux pages PHP
J. Briffaut Sécurité Système 7/72
Introduction Généralité
Type-Enforcement
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 9/72
SELinux SELinux ?
SELinux?
Elements de base
Interaction :
Une opération entre deux contextes de sécurité
i ::= scs1 →classe:permission sc2
Identity
Identity Role
httpd_exec_t
httpd_t
httpd_php_t
httpd_php_exec_t
httpd_exec_t
httpd_t
httpd_php_t
Subjects httpd_php_exec_t
httpd_exec_t
httpd_t
httpd_php_t
Subjects httpd_php_exec_t
Objects
Opération
Opération = droit d’un Contexte sujet sur un autre contexte
Un droit est une permission autorisée sur une classe d’objet
Droit ::= classe : permission
Classe
Les objets du système sont diviser en classe :
file, dir, socket, process, ...
self : classe spécifique identifiant le processus lui-même
Permission
Chaque classe propose un ensemble de permissions :
appels système :read, write, execute, link, open, ...
transition : permission spécifique permettant de changer de contexte
(identité, role, ou domaine)
SELinux comprends >50 classes, >200 permissions
Politique SELinux
Éléments constitutifs
Déclarations et définition des Identités, Roles, Types
Définition des règles d’autorisation d’accès
Définition des règles de transitions de types
Définition des règles d’audit (accounting)
Permissive
Décisions seulement loggées par le noyau (denied/granted)
Déboguage de politiques
Fonctionnement en mode IDS
Enforced
Décisions appliquées sur le système
Peut engendrer des dis-fonctionnements applicatifs si
La politique est mal conçue (comportement légitime de l’application)
L’application est mal conçue (comportement litigieux privilèges
excessifs)
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 27/72
Politique SELinux
Identités
Fichiers de configuration
Fichiers de configuration
Créer une identité SELinux pour un utilisateur spécifique
config/local.users
##################################
#
# User configuration.
#
# This file defines additional users recognized by the system security policy .
# Only the user identities defined in this file and the system.users file
# may be used as the user attribute in a security context.
#
# Each user has a set of roles that may be entered by processes
# with the users identity . The syntax of a user declaration is :
#
# user username roles role set [ level default level range allowed range ];
Rôles
Configuration
Déclaration des rôles (policy/users)
# Declarations
role sysadm r;
role staff r ;
role user r ;
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
Règles d’autorisation
class file
inherits file
{
execute no trans
entrypoint
[...]
J. Briffaut Sécurité Système 36/72
Politique SELinux Règles de contrôle d’accès
# sujet
type init t ;
type sshd t;
#objet
type init conf t ;
type sshd exec t;
type admin passwd exec t;
Règle d’autorisation :
allow typesource typecible :class { permissions} ;
# le sujet avec le type sysadm t peut exécuter (...) les fichiers avec le type
ssh exec t
allow sysadm t ssh exec t: file { getattr read execute };
# le sujet avec le type sysadm t peut exécuter (...) les fichiers avec le type ayant
comme attribut application exec type
allow sysadm t application exec type: file { getattr read execute ioctl lock
execute no trans };
Transition de type I
Transition de type II
Exemple
Lorsque init (system u:system r:init t) lance le service ssh, le
processus ssh transite automatiquement vers system u:system r:sshd t
#label le service
/usr/sbin/sshd −− system u:object r:sshd exec t
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 48/72
Exemple de module SELinux Ecriture d’une politique SELinux
# transition automatique pour les fichiers cr éés tmp t vers myapp tmp t
files tmp filetrans (myapp t,myapp tmp t,file)
Fichier example.fc
Association des objets système aux contextes
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)
Exemple de audit2allow
Trace d’exécution illégale
type=PATH msg=audit(1176369121.794:1514): item=0 na
type=CWD msg=audit(1176369121.794:1514): cwd="/" t
13 a0=bfe58b40 a1=80c2 a2=18 a3=180 items=1 ppid=14
type=AVC msg=audit(1176369121.794:1514): avc: deni
Déduction des règles
[style=selinux,keywords={machine1},ndkeywords={audi
# audit2allow -i /var/log/audit/audit.log
allow prelink_t usr_t:dir add_name;
# audit2allow -R -i /var/log/audit/audit.log
require {
type prelink_t;
}
files_rw_usr_dirs(prelink_t)
Exemple de audit2allow
# ls myprelink*
myprelink.fc myprelink.if myprelink.pp myprelink
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 59/72
Administration Installation d’une politique
Installation de SELinux
Autre distribution :
Activer SELinux dans le noyau (Security->SELinux
Installation des outils “userland”
checkpolicy, policycoreutils, libselinux
Installation d’une politique
Source de la politique : selinux-base-policy
Choix de la politique dans /etc/selinux/config
Configuration du noyau
Option du noyau
Under ”Security options”
[*] Enable different security models
[*] Socket and Networking Security Hooks
<*> Default Linux Capabilities
[*] NSA SELinux Support
[ ] NSA SELinux boot parameter
[ ] NSA SELinux runtime disable
[*] NSA SELinux Development Support
[ ] NSA SELinux AVC Statistics
(1) NSA SELinux checkreqprot default value
[ ] NSA SELinux enable new secmark network controls by default
[ ] NSA SELinux maximum supported policy format version
Choix de la politique
/etc/selinux/config contents
# This file controls the state of SELinux on the system on boot.
* app-admin/logrotate
* sys-apps/fcron
* sys-apps/vixie-cron
* sys-fs/device-mapper
* sys-fs/udev
* sys-libs/pwdb
Contextes sujets
#ps ax −Z
PID CONTEXT COMMAND
1 system u:system r: init t [ init ]
2 system u:system r:kernel t [keventd]
3 system u:system r:kernel t [ksoftirqd CPU0]
4 system u:system r:kernel t [kswapd]
6 system u:system r:kernel t [kupdated]
706 system u:system r:syslogd t [syslog−ng]
712 system u:system r:httpd t [apache]
Commande basique
Chargé la politique dans le noyau
# semodule −B
Changer de rôle
# newrole −r sysadm r
Relabeller le système
# rlpkg −a
Relabeller un packet
# rlpkg ssh
Commande basique
Commande basique
Management de la politique
machine1 ˜ # semanage
semanage {login|user|port|interface|fcontext| translation } −l [−n]
semanage login −{a|d|m} [−sr] login name
semanage user −{a|d|m} [−LrRP] selinux name
semanage port −{a|d|m} [−tr] [ −p protocol ] port | port range
semanage interface −{a|d|m} [−tr] interface spec
semanage fcontext −{a|d|m} [−frst] file spec
semanage translation −{a|d|m} [−T] level
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 68/72
Intégration de SELinux Modification système
NAME
accept, accept secure accept a connection on a socket
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int * addrlen);
int accept secure(int s, struct sockaddr *addr, int * addrlen, security id t
* sid) ;
Sommaire
1 Introduction
2 SELinux
3 Politique SELinux
5 Administration
6 Intégration de SELinux
7 Bibliographie
J. Briffaut Sécurité Système 71/72
Bibliographie
Liens utiles
http://www.nsa.gov/selinux/
http://fedora.redhat.com/projects/selinux/
http://selinux-symposium.org/
http://www.tresys.com/