Contribuez à SecuObs en envoyant des bitcoins ou des dogecoins.
Nouveaux articles (fr): 1pwnthhW21zdnQ5WucjmnF3pk9puT5fDF
Amélioration du site: 1hckU85orcGCm8A9hk67391LCy4ECGJca

Contribute to SecuObs by sending bitcoins or dogecoins.



[Renforcement des fonctions de sécurité du noyau Linux – Partie 5] SELinux (2)

Par Rédaction, secuobs.com
Le 14/11/2007


Résumé : Retrouvez, dans cette seconde partie consacrée à SELinux, les détails relatifs à la configuration des rêgles de sécurité SELinux ainsi que la présentation de différents outils et rêgles pré-établies dans le but de faciliter la sécurisation d'un système de manière maximale.



Comme tous les systèmes basés sur les ACL (Access Control List), la configuration des règles est sans aucun doute la phase la plus délicate car l'oubli d'une seule règle est bien souvent synonyme de dysfonctionnement ou tout simplement de crash (accès impossible à un fichier, flux réseau filtré, etc.).

Nous ne détaillerons pas « point par point » la configuration des règles SELinux, étant donnée la multitude d'usages différents que peut avoir un serveur. En revanche, nous allons présenter la méthode permettant de définir, puis d'affiner les règles afin d'obtenir un système le plus restrictif possible (ce qui est l'objet de cette protection, rappelons-le), mais fonctionnel tout de même...

Il est assez peu envisageable (ou alors avec un budget en conséquence !) de redéfinir les règles pour chaque processus du système. Plusieurs approches sont alors possibles : utiliser des outils permettant « d'apprendre » le comportement du système (fichiers et ressources accédés, etc.) et d'en tirer une première configuration basique. La deuxième approche, plus fine, est d'utiliser les règles proposées par la distribution. La majeure partie des distributions propose ce type de règles.

Attardons-nous désormais sur l'approche de la distribution Debian, avec son package selinux-policy-default. Lors de l'installation, apt-get pose de très nombreuses questions sur l'usage du serveur qui en sera fait. Les usages les plus courants (serveur graphique, serveur de mail, serveur apache, etc.) sont alors proposés, et il suffit simplement de répondre aux questions posées afin de générer les règles appropriées :

(...)
Do you want domains/program/ircd.te:Ircd - IRC server
Yes/No/Display [Y/n/d]?
Do you want domains/program/distcc.te:distcc - Distributed compiler daemon
Yes/No/Display [Y/n/d]?
Do you want domains/program/gnome-pty-helper.te:Gnome Terminal - Helper program for GNOME x-terms
Yes/No/Display [Y/n/d]?
Do you want domains/program/uwimapd.te:uw-imapd-ssl server
Yes/No/Display [Y/n/d]?
Do you want domains/program/apache.te:Apache - Web server
Yes/No/Display [Y/n/d]?
Do you want domains/program/klogd.te:Klogd - Kernel log daemon
Yes/No/Display [Y/n/d]?
(...)



Une fois toutes ces règles par défauts définies, il convient d'affiner la protection en les re vérifiant et en les adaptant à l'usage exact qui va en être fait. Elles sont contenues dans /etc/selinux puis transférées dans leurs versions binaires dans le répertoire /selinux.

cd /etc/selinux/(strict|targeted)/src/policy

make relabel


De nombreuses ressources sur la configuration d'outils, de serveurs sont disponibles ( lien ). D'autres policies sont également disponibles ailleurs ( lien ).

Les patches les plus critiques quant à la sécurité du système sont ceux de init (sysvinit-selinux.patch sous Debian), pam (pam-selinux.patch sous Debian), sshd (openssh-selinux.patch sous Debian) et crond (vixie-cron-selinux.patch sous Debian).

Ces patches chargent la policy et initialisent les contextes de sécurité de l'utilisateur. Il faut également modifier la configuration de pam pour login (fichier /etc/pam.d/login) :

session required pam_selinux.so multiple


L'outil checkpolicy permet de compiler les sources des policies afin de les traduire en « binaires » reconnus par SELinux. Il est donc nécessaire de lancer cet outil sur les policies créées avant de les importer.

L'outil refpolicy permet, quant à lui, de créer des policies SELinux complètes comme alternatives aux policies strictes disponibles sur les distributions classiques. Il s'agit d'un outil encore en phase de développement, soutenu par l'équipe de « Tresys Technology ». De nombreux contributeurs publient les policies qu'ils ont créées, mettant ainsi à disposition du public un large choix de fichiers. Le page « getting started » du site suivant ( lien ) permet également de se familiariser avec l'écriture de ces fichiers.

A retenir qu'au niveau des policies, les « rôles » suivants sont destinés à des utilisateurs ayant un besoin de capabilities supplémentaires sur le système :

- staff_r
- sysadm_r
- system_r


Tandis que le rôle user_r est destiné aux utilisateurs normaux, ne requérant aucun privilège particulier.

Il est recommandé, en fonction de la distribution Linux retenue, d'installer les packages relatifs à SELinux. Si vous utilisez la distribution Debian par exemple, les paquets suivants sont plus que conseillés pour un fonctionnement optimal :

checkpolicy - SELinux policy compiler
libselinux1 - SELinux shared libraries
libselinux1-dev - SELinux development headers
libsemanage1 - shared libraries used by SELinux policy manipulation tools
libsemanage1-dev - Header files and libraries for SELinux policy manipulation tools
libsepol1 - Security Enhanced Linux policy library for changing policy binaries
polgen - SELinux policy generation scripts
policycoreutils - SELinux core policy utilities
python2.4-selinux - Python2.4 bindings to SELinux shared libraries
python2.4-semanage - Python2.4 bindings for SELinux policy manipulation tools
selinux-basics - SELinux basic support
selinux-doc - documentation for Security-Enhanced Linux
selinux-policy-default - Policy config files and management for NSA Security Enhanced Linux
selinux-utils - SELinux utility programs
slat - Tools for information flow analysis of SELinux policies
polgen-doc - Documentation for SELinux policy generation scripts



Ces paquets vont s'occuper de la partie userland de SELinux, à savoir l'installation de certains patches (notamment sur la libc pour rendre supportable certains hooks propres à SELinux), l'adaptation des fichiers sensibles du système (/etc/passwd, /etc/shadow), afin d'empêcher le super-utilisateur root de les modifier.

Les binaires id et ls (ps -eZ) permettent alors d'afficher les contextes de sécurité et les attributs étendus sur le système de fichiers

En toute fin de configuration, après de multiples tests, l'option enforcing=1 doit être ajoutée dans les options de boot du chargeur au démarrage (lilo ou grub) pour rendre SELinux effectif dès le chargement.


Autres ressources dans ce dossier :

[Renforcement des fonctions de sécurité du noyau Linux – Partie 1] Présentation – lien

[Renforcement des fonctions de sécurité du noyau Linux – Partie 2] Address Space Layout Randomization – lien

[Renforcement des fonctions de sécurité du noyau Linux – Partie 3] GrSecurity et PaX – lien

[Renforcement des fonctions de sécurité du noyau Linux – Partie 4] SELinux (1) – lien

[Renforcement des fonctions de sécurité du noyau Linux – Partie 6] Netfilter, conclusions & webographie – lien