AppArmor
Mise à jour :
La sécurité est un enjeu majeur pour tout système Linux, qu’il s’agisse d’un serveur exposé sur Internet ou d’une machine de développement. Or, renforcer la sécurité ne devrait pas rimer avec complexité excessive. C’est précisément là qu’intervient AppArmor, une solution de contrôle d’accès qui permet de confiner vos applications dans des profils de permissions clairement définis.
Contrairement à d’autres systèmes plus stricts et parfois difficiles à maîtriser, Apparmor mise sur la simplicité. Grâce à ses profils personnalisables, vous pouvez aisément restreindre les ressources accessibles à chaque logiciel, qu’il s’agisse de fichiers, de répertoires, de sockets réseau ou de bibliothèques système. Le résultat ? Une couche de protection supplémentaire, sans devoir passer des heures à peaufiner des politiques de sécurité incompréhensibles.
Bref rappel historique
AppArmor est né au début des années 2000 au sein de l’entreprise Immunix, avec l’idée de créer une alternative plus simple que SELinux, trop complexe pour de nombreux utilisateurs. Racheté en 2005 par Novell, il a été intégré à SUSE Linux Enterprise avant de rejoindre d’autres distributions comme Ubuntu et Debian.
Pourquoi utiliser AppArmor ?
AppArmor est bien plus qu’un simple outil de configuration. Il joue un rôle essentiel dans la protection de vos systèmes Linux en mettant en place un contrôle d’accès obligatoire (MAC) qui limite les actions des applications, même si elles sont compromises. Voici pourquoi AppArmor est indispensable pour renforcer la sécurité de vos serveurs et applications :
AppArmor agit comme une couche de défense supplémentaire en limitant les permissions des applications aux seules ressources nécessaires. En cas de faille de sécurité ou d’exploit dans une application (comme un serveur web), AppArmor empêche l’attaquant d’accéder à des fichiers critiques, d’exécuter des commandes ou de compromettre l’ensemble du système. Par exemple :
- Si une vulnérabilité est exploitée dans Nginx, AppArmor peut empêcher l’accès
aux répertoires sensibles comme
/etc/passwd
ou/root/
.
Chaque application est confinée dans un profil de permissions strict qui détermine exactement ce qu’elle peut faire :
- Lecture ou écriture dans des fichiers spécifiques.
- Accès réseau ou exécution de commandes.
En minimisant les permissions, AppArmor limite les dégâts potentiels d’une attaque, même si une application est compromise.
Contrairement aux outils de sécurité réactifs comme les antivirus ou les pare-feu, AppArmor agit en amont. Il prévient les actions non autorisées avant qu’elles ne se produisent, en appliquant des politiques de sécurité préventives.
AppArmor permet une isolation complète des applications, empêchant leurs interactions non souhaitées avec le reste du système ou avec d’autres applications.
AppArmor offre aussi une traçabilité complète des accès système grâce à ses journaux détaillés :
- Mode enforce : Les actions non autorisées sont bloquées et consignées.
- Mode complain : Les violations sont enregistrées pour ajuster les profils sans perturber l’application.
Ces journaux permettent d’auditer les comportements des applications et d’identifier rapidement les problèmes ou tentatives d’accès suspectes.
AppArmor est donc un outil incontournable pour toute infrastructure Linux soucieuse de maintenir un haut niveau de sécurité. En limitant les permissions des applications et en renforçant leur confinement, il protège vos systèmes contre une large gamme de menaces, rendant vos serveurs plus robustes et résilients face aux attaques.
Est-compliqué à mettre en oeuvre ?
Contrairement à SELinux, qui s’appuie sur une politique de sécurité globale et souvent ardue à configurer, AppArmor mise sur la simplicité et la modularité. Plutôt que d’examiner le système dans son ensemble, il concentre sa protection sur chaque application grâce à des profils individuels, décrivant précisément les ressources auxquelles celle-ci a droit. Cette approche granulaire, plus intuitive, a séduit un large public, du débutant à l’administrateur confirmé, permettant de renforcer rapidement la sécurité sans se noyer dans des règles complexes.
Fonctionnalités et concepts
Avant de mettre AppArmor en pratique, il est essentiel de comprendre ses mécanismes. Grâce à une approche basée sur des profils individuels et une grande granularité dans la définition des permissions, AppArmor offre une solution de sécurité à la fois simple et efficace. Voici les principaux concepts à retenir :
- Modes de fonctionnement :
- Enforce : Toutes les actions non autorisées par le profil sont bloquées.
- Complain : Les actions non autorisées ne sont pas bloquées, mais enregistrées, ce qui permet de comprendre et d’ajuster progressivement le profil sans interrompre le fonctionnement de l’application.
- Profils AppArmor : Chaque application est régie par un profil spécifiant les fichiers, répertoires, bibliothèques et ressources réseau auxquels elle peut accéder. Cela permet d’isoler chaque programme dans son propre périmètre de sécurité.
- Granularité des permissions : Les règles sont définies jusqu’au niveau du chemin des fichiers, permettant un contrôle très fin sur ce que l’application est autorisée à lire, écrire ou exécuter.
- Audit et reporting : Lorsqu’une application tente d’accéder à une ressource non prévue, AppArmor génère des journaux détaillés. Ceux-ci aident à comprendre les besoins réels de l’application, à peaufiner les profils, et à suivre l’évolution de la politique de sécurité au fil du temps.
- Simplicité et flexibilité : Les outils en ligne de commande tels que aa-genprof, aa-complain, aa-enforce, ou apparmor_parser facilitent la création, la modification et le déploiement des profils, sans exiger une expertise profonde en sécurité. Cette flexibilité permet d’adapter facilement Apparmor aux évolutions du système et aux nouveaux services déployés.
Installation et configuration
Avant de commencer à créer ou à modifier des profils, il est important de s’assurer qu’Apparmor est correctement installé et opérationnel sur votre système. Sur la plupart des distributions Linux populaires, comme Ubuntu ou Debian, Apparmor est souvent déjà présent et activé par défaut. Toutefois, si ce n’est pas le cas, l’installation reste simple et rapide.
Pour vérifier l’état actuel d’Apparmor, vous pouvez utiliser la commande suivante :
Ce rapport vous indiquera si le démon Apparmor est actif, dans quel mode fonctionnent vos profils actuels, et s’il existe des profils chargés sur votre système.
Si vous constatez qu’Apparmor n’est pas installé, vous pouvez le faire via votre gestionnaire de paquets. Par exemple, sur Ubuntu ou Debian, entrez :
Ces outils, incluant apparmor-utils
, vous apporteront les fonctionnalités
nécessaires pour gérer vos profils, les passer en mode complain ou enforce, et
en créer de nouveaux.
Une fois l’installation terminée, assurez-vous qu’Apparmor est activé au démarrage. Sur les distributions modernes, utilisant systemd, vous pouvez vérifier le service avec :
Si le service n’est pas activé, vous pouvez le démarrer et l’activer pour les prochains redémarrages :
Sur certaines distributions ou configurations spécifiques, il peut être
nécessaire de s’assurer que le noyau est lancé avec l’option
security=apparmor
. Pour cela, éditez la configuration de votre chargeur
d’amorçage (par exemple, GRUB) et ajoutez cette option à la ligne de commande du
noyau, puis régénérez la configuration de GRUB et redémarrez. Une fois le
système relancé, AppArmor devrait être opérationnel.
Création et gestion de profils
L’une des principales forces d’AppArmor réside dans sa gestion par profils individuels. Chaque profil définit précisément les ressources auxquelles une application donnée est autorisée à accéder, ce qui permet de l’isoler et de limiter l’impact en cas de faille de sécurité.
Les profils AppArmor sont généralement stockés dans le répertoire
/etc/apparmor.d/
, avec un fichier par application. Par exemple, un service
comme ping aura un profil nommé bin.ping
. Il s’agit de fichiers texte simples,
modifiables avec votre éditeur préféré, ce qui facilite leur adaptation à vos
besoins.
Générer un profil initial
Pour créer un profil de base, utilisez l’outil aa-genprof
:
Par exemple en cherchant à démarrer le service Nginx :
Dans la fenetre de terminal, ou vous avez lancé aa-genprof
, vous verrez
apparaître les tentatives d’accès bloquées par AppArmor. Vous pouvez les
autoriser ou les refuser, en fonction des besoins de votre application.
Cet outil vous guidera en observant le comportement de l’application. En mode “complain”, AppArmor n’empêche pas les accès, mais les journalise. En testant Nginx, par exemple en redémarrant le service, vous verrez apparaître toutes les tentatives d’accès, qu’il suffit ensuite d’autoriser ou de refuser.
Le fichier constitué par aa-genprof
est un bon point de départ, mais il peut
nécessiter des ajustements pour correspondre exactement à vos besoins.
Ce fichier contient les règles de base pour Nginx, autorisant l’accès en lecture et écriture à certains fichiers de configuration et de logs. Vous pouvez l’affiner en ajoutant ou en retirant des règles, en fonction des besoins de votre application.
Ajuster et personnaliser les profils
Si on teste la consultation de la page d’accueil de Nginx, on obtient :
On peut voir dans les logs que l’accès a été bloqué :
Une fois le profil initial créé, vous pouvez l’affiner en éditant directement le
fichier dans /etc/apparmor.d/
. Les règles précisent les actions autorisées
(lecture, écriture, exécution) pour chaque fichier ou répertoire. Par exemple,
on pourrait ajouter les droits de lecture du répertoire /var/www/html/
:
Mais nous allons voir qu’il existe une méthode plus simple pour ajouter des règles à un profil existant, en utilisant les include.
Inclure des profils existants
Pour éviter de répéter des règles communes à plusieurs profils, AppArmor propose
la directive include
. Celle-ci permet d’ajouter des règles d’un profil à un
autre, simplifiant la gestion des permissions partagées.
Dans notre exemple, Nginx partage des règles communes avec d’autres services, comme lighttpd ou Apache. Pour éviter de les répéter, nous pouvons les inclure directement dans le profil Nginx :
Ces directives incluent les règles communes à tous les profils, simplifiant la gestion des permissions partagées. Vous pouvez également créer vos propres fichiers d’inclusion, pour regrouper des règles spécifiques à votre environnement.
Les fichiers d’inclusion sont stockés dans le répertoire
/etc/apparmor.d/abstractions/
.
Dans les derniers fichiers de configuration, on peut voir que les règles
web-data
existent. Vérifions ce qu’elles contiennent :
On peut donc les inclure dans notre profil Nginx :
Après chaque modification, rechargez le profil :
Et refaîtes vos tests. Ca fonctionne. Nous avons créé notre profil Nginx, en quelques minutes.
Changer le mode d’un profil
Après avoir ajusté notre profil, nous pouvons le passer en mode “enforce” pour bloquer réellement les accès non autorisés :
Un nouveau test. Tout fonctionne !
À l’inverse, si vous souhaitez repasser un profil en mode “complain” pour observer de nouvelles actions, utilisez :
Maintenir les profils sur le long terme
Les applications évoluent. De nouvelles fonctionnalités, mises à jour ou modules peuvent nécessiter des ajustements de profil. Remettez temporairement le profil en mode “complain” pour observer les nouveaux besoins, puis modifiez et appliquez à nouveau le mode “enforce”.
Cette approche itérative vous permet de conserver des profils précis et adaptés, renforçant la sécurité de vos services sans en perturber le fonctionnement.
Conclusion
AppArmor est un outil puissant et flexible pour renforcer la sécurité de vos
systèmes Linux, tout en restant simple à configurer grâce à son approche basée
sur des profils. À travers ce guide, nous avons exploré ses fonctionnalités
clés, de l’installation à la création et la gestion de profils, ainsi que des
cas pratiques concrets. Grâce à des abstractions comme web-data
, AppArmor
permet de centraliser les permissions et de simplifier la configuration des
applications courantes.
Que vous soyez administrateur système ou utilisateur avancé, AppArmor vous
offre un moyen efficace de limiter les accès des applications aux seules
ressources nécessaires, réduisant ainsi la surface d’attaque de votre système.
Avec des outils interactifs comme aa-genprof
et aa-logprof
, il devient
facile d’adapter vos profils aux besoins spécifiques de vos applications tout en
maintenant un haut niveau de sécurité.
Pour aller plus loin, n’hésitez pas à :
- Tester AppArmor sur d’autres services et applications de votre infrastructure.
- Exploiter les abstractions existantes pour simplifier vos profils.
- Créer des règles personnalisées adaptées à vos environnements spécifiques.
En intégrant AppArmor dans votre stratégie de sécurité, vous faites un pas de plus vers un système Linux robuste, protégé et mieux maîtrisé. Sécurisez vos applications dès maintenant et prenez le contrôle de vos ressources système grâce à AppArmor.