Académique Documents
Professionnel Documents
Culture Documents
TEK-UP
October 6, 2022
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 1 / 35
Sommaire
1 Introduction
3 Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 2 / 35
Introduction
Introduction
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 3 / 35
Introduction
Introduction
SELinux (pour Security-Enhanced Linux) est un modèle de sécurité que l’on peut
ajouter au système standard de Linux afin d’augmenter la sécurité face aux
diverses attaques que subit le système.
Avec SELinux, on peut configurer les accès de chaque processus pour les
restreindre à un strict minimum.
Cela permet de rendre inexploitable certaines failles, et en cas de piratage, de
limiter l’étendue des dégâts.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 4 / 35
Introduction
Imaginons que :
quelqu’un vient de pirater apache, et qu’il peux lancer des commandes
arbitraires via ce processus.
le processus piraté de apache fonctionne en root.
En tant que root, le pirate peut modifier le fichier /etc/shadow pour s’ajouter un
compte sur le serveur.
Les droits du fichier permettent de le faire (après tout, notre pirate à l’accès root):
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 5 / 35
Introduction
Le fichier shadow, possède lui aussi un contexte de sécurité, et son type est
shadow_t:
Avec SELinux, pour que apache puisse lire ou écrire le fichier shadow, il faut une
règle explicite qui permet aux processus de type httpd_t de lire ou écrire dans un
fichier de type shadow_t.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 6 / 35
Introduction
Il faudrait donc une règle comme celle-ci dans les politiques de sécurité de
SELinux:
allow httpd_t shadow_t : file { read write }
Cette règle dit qu’un processus avec le label httpd_t est autorisé (allow) à lire et
écrire ( read write ) dans un fichier (file) possédant le type/label shadow_t.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 7 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 8 / 35
SELinux, c’est quoi ?
la politique de contrôle d’accès repose sur les concepts de sujet (s), action
(a) et objet (o)
le sujet s a la permission d’effectuer l’action a sur l’objet o
Lorsque qu’un processus veut réaliser une action sur un fichier, le noyau
vérifie que le processus possède les droits nécessaires.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 9 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 10 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 11 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 12 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 13 / 35
SELinux, c’est quoi ?
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 14 / 35
Comprendre SELinux
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 15 / 35
Comprendre SELinux
Le contexte de SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 16 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 17 / 35
Comprendre SELinux
Ils sont accessibles via l’option -Z que l’on peut ajouter à de nombreuses
commande.
$ ps -Z
system_u:system_r:postgresql_t:s0 1531 ? S 0:05 /usr/lib/postgresql/8.1/bin/postmaster
system_u:system_r:postgresql_t:s0 1533 ? S 0:01 postgres: writer process
$ ls -Z
drwx------ postgres postgres user_u:object_r:postgresql_db_t:s0 base
-rw------- postgres postgres user_u:object_r:postgresql_db_t:s0 pg_hba.conf
-rw------- postgres postgres user_u:object_r:postgresql_db_t:s0 pg_ident.conf
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 18 / 35
Comprendre SELinux
Par défaut, SELinux n’autorise aucune action, il faut ajouter des règles pour
autoriser les actions. Ces règles sont de type:
autorisation type_du_sujet type_de_lobjet : type_des_objects opérations_autorisées
Par exemple, la règle qui permet au processus PostgreSQL (de type postgresql_t)
de lire les fichiers de la base de données (de type postgresql_db_t) est:
allow postgresql_t postgresql_db_t:file create_file_perms;
Où create_file_perms équivaut à
{ create ioctl read getattr lock write setattr append link unlink rename }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 19 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 20 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 21 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 22 / 35
Comprendre SELinux
Si on install SELinux sur un système qui ne l’utilisait pas avant, le contexte n’est
pas indiqué par défaut. Pour remédier à ça on utilise la commande fixfiles:
fixfiles relabel
Pour restaurer les labels d’un fichier ou d’une partie du système de fichier, la
commande restorecon est la plus pratique:
restorecon -R /etc/ssh
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 23 / 35
Comprendre SELinux
Les identités et rôles ne sont pas encore largement utilisés dans les politiques
fournies dans les distributions Linux.
Ces informations sont là pour rester cohérentes avec le reste du système de
sécurité, mais elles ne servent à rien pour les politiques de sécurités.
Chaque utilisateur ayant sa propre identité dans SELinux. Dans la plupart des
cas cela n’est pas nécessaire et les utilisateurs ont simplement tous l’identité
user_u.
Chaque utilisateur peut avoir plusieurs rôles, et les différents rôles possibles
sont configurés dans les politiques de sécurité.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 24 / 35
Comprendre SELinux
Le rôle est beaucoup plus important que l’identité, car il lui correspond une
liste de type possible.
Aux utilisateurs correspondent des identités, aux identités correspondent des
rôles possibles, et aux rôles correspondent des type acceptables.
Pour résumer:
Aux utilisateurs correspondent des identités, aux identités correspondent des rôles
possibles, et aux rôles correspondent des type acceptables.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 25 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 26 / 35
Comprendre SELinux
Exemple PostgreSQL:
Le package est configuré pour se lancer automatiquement au démarrage du
système. Donc le processus qui lance PostgreSQL au démarrage possède le
type initrc_t
Au niveau des politiques de sécurité, il existe une autorisation pour une
transitions depuis le type initrc_t(utilisé au démarrage) vers postgresql_t à
travers le type intermédiaire postgresql_exec_t
Un processus ne peut avoir le type postgresql_t que s’il est exécuté par un
processus ayant le type postgresql_exec_t
Le processus exécutable ayant le type p ostgresql_exec_t sert comme un
point d’entrée pour le type postgresql_t
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 27 / 35
Comprendre SELinux
Si un processus n’a pas le bon type, la première chose à vérifier est que le
fichier exécutable possède le bon type (pour qu’il puisse servir de point
d’entrée).
Si le type du fichier est correct, il faut vérifier que le processus a été lancé par
un processus du bon type pour avoir le bon ordre des transitions.
Pour résumer:
Quand un processus marqué initrc_t lance un fichier postgresql_exec_t, le
processus créé à finalement le type postgresql_t.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 28 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 29 / 35
Comprendre SELinux
Exemples:
Si votre site web utilise la fonction PHP mail(), par défut, SELinux bloque
stématiquement l’envoi de mails par apache
Pour ce cas, il suffit d’activer le booléen en question :
setsebool -P httpd_can_sendmail on
Cette activation n’est pas permanente. Elle ne persiste pas après un reboot
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 30 / 35
Comprendre SELinux
La commande semanage
La commande semanage:
Permet des changements sur la façon dont les règles sont utilisées sans
aucune modification ou bien recompilation des règles depuis la source
Permet des modifications sur les informations utilisées par SELinux (le
contexte de sécurité).
Deux cas d’utilisations:
Labeling propre
Le changement d’un contexte via la commande chcon est provisoire (Ne
persiste pas si on restore les contextes par défaut via les commandes fixfiles ou
restorecon)
La commande semanage permet de changer le contexte par défaut en l’insérant
directement à la politique noyau courante
Une telle modification sera toujours effective après un relabel effectué par
fixfiles ou restorecon. Cette méthode est donc à préférer à chcon pour tout les
changements non triviaux effectué sur les labels.
Ports par défaut
Pour faire fonctionner certains services sur des ports non standard
il suffit d’ajouter le bon label aux ports nécessaires à l’aide de semanage
semanage port -a -t httpd_t -p tcp 81
semanage port -a -t openvpn_t -p udp 6865
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 31 / 35
Comprendre SELinux
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 32 / 35
Comprendre SELinux
Attention !
Lorsque SELinux est exécuté en mode permissif ou s’il est désactivé, les nouveaux
fichiers crées ne porteront aucune étiquette. Lorsque SELinux sera réactivé, cela
pourra poser des problèmes, et il vous faudra donc re-étiqueter l’intégralité de
votre système. Pour ce faire, entrez la commande suivante :
# touch /.autorelabel
# fixfiles -F onboot
# reboot
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 34 / 35
Comprendre SELinux
Thank you!
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Rihem Ben Romdhane TEK-UP October 6, 2022 35 / 35