À mesure que les cybermenaces deviennent de plus en plus sophistiquées, assurer la sécurité de votre système Linux est crucial. Parmi l’arsenal d’outils disponibles pour renforcer la sécurité de Linux, AppArmor et SELinux sont deux des plus puissants. Ces systèmes de contrôle d’accès obligatoire (MAC) fournissent une couche de protection supplémentaire en restreignant la manière dont les applications peuvent interagir avec le système. Dans ce guide, nous explorerons AppArmor et SELinux, comprendrons leurs différences, et fournirons un tutoriel technique complet sur la façon de les implémenter et de les gérer sur vos systèmes Linux.
Comprendre AppArmor
AppArmor (Application Armor) est un module de sécurité pour le noyau Linux qui permet à l’administrateur système de restreindre les capacités des programmes individuels. AppArmor utilise des profils de sécurité pour déterminer quelles ressources les applications peuvent accéder, limitant ainsi les dommages potentiels causés par du code malveillant.
Comment fonctionne AppArmor
AppArmor fonctionne en associant chaque programme à un profil de sécurité qui spécifie ses permissions. Ces profils peuvent définir quels fichiers une application peut lire, écrire ou exécuter. AppArmor fonctionne en deux modes :
- Mode enforcement : Dans ce mode, AppArmor applique les politiques définies dans les profils et bloque tout accès non autorisé.
- Mode complain : Dans ce mode, AppArmor enregistre les violations de politiques mais ne les applique pas, permettant aux administrateurs de tester les profils avant de les mettre en œuvre pleinement.
Profils AppArmor
Les profils AppArmor sont des fichiers texte simples qui définissent les droits d’accès des applications. Ces profils peuvent être configurés pour autoriser ou refuser des actions spécifiques sur des fichiers, des répertoires ou même des ressources système comme l’accès au réseau.
Exemple de profil AppArmor
#include <tunables/global>
/usr/sbin/apache2 {
#include <abstractions/base>
/var/www/html/** r,
/etc/apache2/** r,
/usr/sbin/apache2 mr,
capability net_bind_service,
network inet tcp,
}
Dans le profil ci-dessus, Apache se voit accorder un accès en lecture à /var/www/html/
, /etc/apache2/
, et un accès en lecture de mémoire (mr
) à son binaire. De plus, il est autorisé à se lier à un service réseau via la capability net_bind_service
et à interagir avec la pile réseau TCP.
Premiers pas avec AppArmor sur Linux
Installer AppArmor
AppArmor est disponible sur la plupart des distributions Linux, mais il peut être nécessaire de l’installer et de l’activer. Sur Ubuntu, par exemple, il est généralement installé par défaut. Cependant, si vous devez l’installer, vous pouvez le faire avec les commandes suivantes :
$ sudo apt-get update
$ sudo apt-get install apparmor apparmor-utils
Activer et désactiver AppArmor
Pour vérifier si AppArmor est activé, utilisez :
$ sudo aa-status
Pour activer AppArmor, vous pouvez modifier la configuration de GRUB. Modifiez /etc/default/grub
et ajoutez apparmor=1 security=apparmor
à la ligne GRUB_CMDLINE_LINUX_DEFAULT
:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=1 security=apparmor"
Ensuite, mettez à jour GRUB :
$ sudo update-grub
$ sudo reboot
Pour désactiver AppArmor, il suffit de supprimer ou de commenter la ligne apparmor=1 security=apparmor
dans la configuration de GRUB et de redémarrer.
Gérer les profils AppArmor
Les profils AppArmor sont stockés dans /etc/apparmor.d/
. Vous pouvez créer, modifier ou supprimer des profils en fonction de vos besoins.
Créer un nouveau profil AppArmor
Pour créer un nouveau profil, vous pouvez utiliser l’outil aa-genprof
. Par exemple, pour créer un profil pour l’application /usr/bin/evince
:
$ sudo aa-genprof /usr/bin/evince
Suivez les instructions à l’écran pour spécifier les permissions pendant que l’application s’exécute.
Définir un profil en mode enforcement
Une fois un profil créé, vous pouvez le définir en mode enforcement :
$ sudo aa-enforce /etc/apparmor.d/usr.bin.evince
Cette commande garantit que le profil applique activement ses règles.
Définir un profil en mode complain
Si vous préférez tester un profil avant de l’appliquer :
$ sudo aa-complain /etc/apparmor.d/usr.bin.evince
Dans ce mode, AppArmor enregistre toute violation sans appliquer les restrictions.
Comprendre SELinux
Security-Enhanced Linux (SELinux) est un autre cadre MAC qui contrôle l’accès aux fichiers, processus et ressources réseau en fonction de politiques de sécurité. Initialement développé par la NSA, SELinux est connu pour son contrôle de sécurité granulaire, ce qui le rend adapté aux environnements hautement sensibles.
Comment fonctionne SELinux
SELinux fonctionne en attribuant des contextes de sécurité à des fichiers, processus et autres ressources système. Les politiques définissent ensuite quelles actions sont autorisées en fonction de ces contextes. SELinux peut fonctionner en trois modes différents :
- Mode enforcing : SELinux applique ses politiques de sécurité, refusant l’accès là où les politiques ne l’autorisent pas explicitement.
- Mode permissive : SELinux enregistre les violations de politiques sans les appliquer, ce qui est utile pour le dépannage.
- Mode disabled : SELinux est entièrement désactivé.
Politiques SELinux
Les politiques SELinux sont des ensembles de règles complètes qui définissent les permissions d’accès pour tous les sujets et objets du système. Les politiques sont généralement divisées en deux catégories :
- Politiques ciblées : Elles s’appliquent à des processus spécifiques, tandis que le reste du système fonctionne avec un contrôle d’accès discrétionnaire (DAC).
- Politiques MLS (Multi-Level Security) : Elles assurent une application stricte de la sécurité pour tous les processus et sont utilisées dans les environnements nécessitant une sécurité élevée, comme les systèmes gouvernementaux.
Exemple de politique SELinux
allow httpd_t httpd_sys_content_t:file { read open getattr };
Dans cet extrait de politique, le domaine httpd_t
(généralement associé au serveur Apache) est autorisé à lire, ouvrir et obtenir des attributs des fichiers étiquetés avec le type httpd_sys_content_t
.
Premiers pas avec SELinux sur Linux
Installer SELinux
Sur la plupart des distributions comme CentOS, RHEL et Fedora, SELinux est installé et activé par défaut. Pour les systèmes basés sur Debian comme Ubuntu, il peut être installé comme suit :
$ sudo apt-get install selinux-basics selinux-policy-default auditd
$ sudo selinux-activate
$ sudo reboot
Configurer les modes SELinux
Vous pouvez vérifier le mode actuel de SELinux en utilisant la commande sestatus
:
$ sestatus
Pour changer le mode de SELinux, modifiez le fichier /etc/selinux/config
:
SELINUX=enforcing
Les options disponibles sont :
enforcing
: Applique la politique SELinux.permissive
: SELinux enregistre les actions mais n’applique pas la politique.disabled
: SELinux est désactivé.
Après avoir apporté des modifications, redémarrez le système pour qu’elles prennent effet.
$ sudo reboot
Gérer les politiques SELinux
Les politiques SELinux sont stockées dans /etc/selinux/
et peuvent être gérées à l’aide de divers outils comme semanage
, setsebool
et audit2allow
.
Créer un nouveau module de politique SELinux
Pour créer un module de politique personnalisé, suivez ces étapes :
- Rédigez un fichier de Type Enforcement (TE) :
module mymodule 1.0;
require {
type httpd_t;
type myapp_exec_t;
}
allow httpd_t myapp_exec_t:file execute;
- Compilez le fichier TE :
$ checkmodule -M -m -o mymodule.mod mymodule.te
$ semodule_package -o mymodule.pp -m mymodule.mod
- Installez le module de politique :
$ sudo semodule -i mymodule.pp
Cela chargera la politique personnalisée dans la politique SELinux active.
Gérer les Booleans SELinux
Les Booleans SELinux vous permettent d’activer ou de désactiver des politiques spécifiques. Vous pouvez lister tous les Booleans disponibles avec :
$ sudo getsebool -a
Pour changer la valeur d’un Boolean, utilisez la commande setsebool
:
$ sudo setsebool httpd_can_network_connect on
Pour rendre ce changement permanent, ajoutez l’option -P
:
$ sudo setsebool -P httpd_can_network_connect on
AppArmor vs. SELinux : Principales Différences
Bien que AppArmor et SELinux offrent tous deux une sécurité MAC, ils présentent des différences significatives qui affectent leurs cas d’utilisation et leur gestion.
Basé sur des profils vs. Basé sur des étiquettes
AppArmor utilise des contrôles basés sur des profils, où des profils individuels sont créés pour chaque application. Ces profils définissent quelles ressources l’application peut accéder. SELinux, en revanche, est basé sur des étiquettes, où chaque fichier, processus et ressource est étiqueté avec un contexte de sécurité. Les politiques sont ensuite appliquées en fonction de ces étiquettes.
Facilité d’utilisation
AppArmor est souvent considéré comme plus facile à utiliser en raison de son système de profils simple, qui nécessite moins de connaissances approfondies pour créer et gérer. SELinux, bien que plus puissant, a une courbe d’apprentissage plus raide en raison de son système de politiques et d’étiquetage complexe.
Disponibilité par défaut
AppArmor est le système MAC par défaut sur Ubuntu et certaines autres distributions basées sur Debian. SELinux est le système par défaut sur les distributions basées sur Red Hat comme CentOS, Fedora et RHEL.
Granularité du contrôle
SELinux offre un contrôle plus granulaire par rapport à AppArmor. Cela le rend adapté aux environnements où la sécurité est primordiale, tels que les systèmes gouvernementaux ou d’entreprise. AppArmor, bien qu’efficace, n’offre pas le même niveau de contrôle détaillé.
Cas d’utilisation pour AppArmor et SELinux
Le choix entre AppArmor et SELinux dépend souvent des exigences spécifiques de votre environnement.
Quand utiliser AppArmor
- Sécurité légère : Si vous avez besoin d’un outil de sécurité simple et facile à gérer, AppArmor est un bon choix. Il offre un contrôle efficace avec une configuration minimale.
- Environnements Ubuntu ou Debian : Étant donné qu’AppArmor est le système par défaut sur ces systèmes, il est plus facile à implémenter et à gérer.
Quand utiliser SELinux
- Environnements de haute sécurité : Pour les environnements nécessitant des contrôles de sécurité stricts, SELinux est idéal en raison de sa gestion détaillée des politiques.
- Systèmes basés sur Red Hat : SELinux est profondément intégré à ces systèmes, ce qui en fait le choix naturel.
Configuration avancée et optimisation
AppArmor et SELinux peuvent tous deux être optimisés pour répondre à des exigences de sécurité spécifiques. Cette section couvrira des techniques de configuration avancée pour les deux outils.
Configuration avancée d’AppArmor
Utiliser AppArmor avec des conteneurs
AppArmor peut être particulièrement utile pour sécuriser les environnements conteneurisés. Par exemple, vous pouvez attribuer des profils spécifiques aux conteneurs Docker pour restreindre leurs capacités.
$ docker run --rm -it --security-opt apparmor=docker-default ubuntu
Cette commande exécute un conteneur Docker avec le profil AppArmor docker-default
, restreignant l’accès du conteneur au système hôte.
Débogage d’AppArmor
Pour déboguer les profils AppArmor, vous pouvez utiliser l’outil aa-logprof
, qui aide à analyser les journaux et à mettre à jour les profils :
$ sudo aa-logprof
Cet outil analysera les journaux et suggérera des mises à jour des profils existants en fonction des événements enregistrés.
Configuration avancée de SELinux
Personnaliser les étiquettes SELinux
Des étiquettes personnalisées peuvent être créées et appliquées à des fichiers ou processus pour faire respecter des politiques spécifiques. Par exemple, pour créer une étiquette personnalisée :
$ sudo semanage fcontext -a -t my_custom_t "/custom/path(/.*)?"
$ sudo restorecon -Rv /custom/path
Ici, la commande semanage
définit un contexte de fichier personnalisé pour le chemin spécifié, et restorecon
applique la nouvelle étiquette.
SELinux dans les environnements virtualisés
SELinux peut être particulièrement bénéfique dans les environnements virtualisés où l’isolation de la sécurité est essentielle. Par exemple, vous pouvez appliquer des politiques SELinux spécifiques aux machines virtuelles pour contrôler leur accès aux ressources de l’hôte.
$ sudo virsh setsebool virt_use_execmem on
Cette commande active le Boolean virt_use_execmem
, permettant aux machines virtuelles d’exécuter du code en mémoire, ce qui est essentiel pour certaines charges de travail.
Dépannage et problèmes courants
AppArmor et SELinux présentent chacun leurs propres défis. Cette section abordera les problèmes courants et comment les résoudre.
Problèmes courants avec AppArmor
- Conflits de profils : Si une application ne fonctionne pas comme prévu, cela peut être dû à des profils AppArmor restrictifs. Passer le profil en mode complain peut aider à identifier le problème.
$ sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld
- Analyse des journaux : L’analyse de
/var/log/syslog
pour les messages AppArmor peut fournir des informations sur ce qui est bloqué.
Problèmes courants avec SELinux
- Violations de politique : SELinux enregistre les violations de politique dans
/var/log/audit/audit.log
. Vous pouvez utiliseraudit2why
pour comprendre la raison du refus :
$ sudo cat /var/log/audit/audit.log | audit2why
- Mode permissif : Si vous rencontrez des refus fréquents, passer SELinux en mode permissif peut aider à diagnostiquer les problèmes sans bloquer les opérations.
$ sudo setenforce 0
FAQs
Quelle est la différence entre AppArmor et SELinux ?
AppArmor utilise une approche basée sur des profils pour définir les politiques de sécurité des applications, tandis que SELinux utilise un système basé sur des étiquettes pour appliquer des politiques à l’ensemble du système.
AppArmor est-il plus facile à utiliser que SELinux ?
Oui, AppArmor est généralement considéré comme plus facile à utiliser car il nécessite moins de connaissances approfondies pour créer et gérer des profils par rapport au système de politiques plus complexe de SELinux.
Puis-je exécuter AppArmor et SELinux sur le même système ?
Bien qu’il soit techniquement possible d’avoir les deux installés, il n’est pas recommandé de les exécuter simultanément car ils peuvent entrer en conflit. La plupart des systèmes utilisent l’un ou l’autre.
Comment passer entre les modes enforcing et permissive dans SELinux ?
Vous pouvez changer de mode en utilisant la commande setenforce
. Utilisez setenforce 1
pour le mode enforcing et setenforce 0
pour le mode permissive.
Est-il nécessaire de redémarrer le système après avoir installé SELinux ?
Oui, après avoir installé et activé SELinux, un redémarrage est nécessaire pour appliquer les contextes de sécurité aux fichiers système.
AppArmor peut-il être utilisé pour sécuriser des conteneurs Docker ?
Oui, AppArmor peut sécuriser des conteneurs Docker en appliquant des profils spécifiques qui restreignent les capacités du conteneur.
Conclusion
AppArmor et SELinux sont des outils puissants dans l’arsenal de sécurité Linux, chacun offrant des avantages uniques. AppArmor fournit une approche plus conviviale avec son système de profils, ce qui le rend idéal pour les environnements moins complexes. SELinux, avec son contrôle granulaire et son application complète des politiques, est adapté aux environnements de haute sécurité où des contrôles d’accès stricts sont nécessaires. En comprenant et en configurant correctement ces outils, vous pouvez considérablement améliorer la sécurité de vos systèmes Linux.