Table des matières de l'article :
Panoramica
Security-Enhanced Linux (SELinux) est une architecture de sécurité pour les systèmes Linux® qui permet aux administrateurs de mieux contrôler qui peut accéder au système. Il a été initialement développé par la National Security Agency (NSA) des États-Unis en tant que série de correctifs pour le noyau Linux utilisant des modules de sécurité Linux (LSM).
SELinux, abréviation de Sécurité renforcée Linux , consiste en une série de correctifs de sécurité pour le noyau Linux qui appliquent des contrôles d'accès pour divers services et applications. Basé sur des projets initialement développés par la National Security Agency, SELinux est rapidement devenu un incontournable dans le domaine de la cybersécurité open source. SELinux améliore la sécurité du système Linux en limitant les privilèges et en réduisant les dommages globaux qu'une application donnée peut causer à l'ensemble du système. Avant de discuter du fonctionnement de SELinux, il est important d'explorer le concept d'équité.
Justice est un terme utilisé en informatique pour décrire comment un programme donné se comporte fidèlement par rapport aux résultats attendus en fonction des spécifications du système. Par exemple, on peut dire qu'une application conçue pour ouvrir un fichier image a un haut niveau d'équité s'il ouvre le fichier image correctement comme prévu. Ce concept peut être largement appliqué à tout programme, application ou fonction utilisé dans un système informatique.
Dans un système sans SELinux, la sécurité du système dépend de l'exactitude du noyau ainsi que de l'exactitude de toutes les applications privilégiées et de leurs configurations respectives. S'il y a des défauts dans ces zones, l'ensemble du système peut être compromis. Pour cette raison, il n'est pas recommandé d'avoir un noyau Linux sans aucun type de module de sécurité, en particulier pour les appareils connectés à Internet.
En comparaison, les systèmes SELinux dépendent à la fois de l'exactitude du noyau et de l'exactitude de la configuration de la politique de sécurité. Cela garantit que même si des erreurs d'exactitude ou de configuration peuvent entraîner une application compromise, l'ensemble du système ne sera pas affecté et les autres applications pourront continuer à fonctionner normalement. Essentiellement, SELinux fournit une politique de sécurité compartimentée qui empêche la propagation d'applications compromises et d'autres vulnérabilités de sécurité.
SELinux a été distribué à la communauté open source en 2000 et a été intégré au noyau Linux en amont en 2003.
Comment fonctionne SELinux ?
Pour que SELinux fonctionne, le système doit d'abord attribuer des étiquettes, également appelées contexte à diverses fonctions. Les utilisateurs et les processus reçoivent une chaîne de texte composée d'un nom d'utilisateur, d'un rôle et d'un domaine. Généralement, le nom de domaine est la seule partie utilisée pour déterminer les contrôles d'accès. Les fichiers, les ports réseau et le matériel ont également un contexte dans SELinux et se voient attribuer un nom, un rôle et un type.
Le processus de mappage des fichiers dans un contexte de sécurité est appelé balisage et est défini par le fichier de stratégie utilisé. Un fichier de stratégie se compose de trois fichiers : un fichier de mappage, un fichier de règles et un fichier d'interface. Ces trois fichiers doivent être compilés en un seul fichier de stratégie avec l'ensemble d'outils SELinux, puis chargés dans le noyau du système pour en faire une stratégie active. La création des fichiers de stratégie peut être effectuée manuellement ou avec l'outil de gestion SELinux. Une fois le fichier de stratégie chargé dans le noyau du système, vous pouvez être assuré que votre système a été protégé.
Par défaut, SELinux est préconfiguré sur la plupart des systèmes d'exploitation Linux modernes tels que Ubuntu, Debian ou CentOS. Cela signifie que la plupart du temps, les utilisateurs ne savent même pas que SELinux travaille en coulisses pour protéger leur système. En résumé, la nature fiable et discrète de SELinux en fait un élément essentiel de tout système Linux moderne.
SELinux définit les contrôles d'accès pour les applications, les processus et les fichiers sur un système. Il utilise des politiques de sécurité, qui sont un ensemble de règles qui indiquent à SELinux ce à quoi il peut et ne peut pas accéder, pour appliquer l'accès autorisé par une politique.
Lorsqu'une application ou un processus, appelé sujet, fait une demande d'accès à un objet, tel qu'un fichier, SELinux vérifie avec un cache vectoriel d'accès (AVC), où les autorisations sont mises en cache pour les sujets et les objets.
Si SELinux n'est pas en mesure de prendre une décision d'accès basée sur les autorisations mises en cache, il envoie la demande au serveur de sécurité. Le serveur de sécurité vérifie le contexte de sécurité de l'application ou du processus et du fichier. Le contexte de sécurité est appliqué par la base de données de politiques SELinux. L'autorisation est alors accordée ou refusée.
Si l'autorisation est refusée, un message « avc : nié » sera disponible dans /var/log.messages.
Comment configurer SELinux
Il existe plusieurs façons de configurer SELinux pour protéger votre système. Les plus courantes sont les politiques ciblées ou la sécurité à plusieurs niveaux (MLS).
La politique ciblée est l'option par défaut et couvre une gamme de processus, d'activités et de services. Le MLS peut être très compliqué et n'est généralement utilisé que par des organisations gouvernementales.
Vous pouvez savoir à quoi votre système doit fonctionner en consultant le fichier /etc/sysconfig/selinux. Le fichier aura une section indiquant si SELinux est en mode permissif, en mode forcé ou désactivé et quelle stratégie doit être chargée.
Étiquetage et application de type SELinux
L'application des types et l'étiquetage sont les concepts les plus importants pour SELinux.
SELinux fonctionne comme un système d'étiquetage, ce qui signifie que tous les fichiers, processus et ports d'un système sont associés à une étiquette SELinux. Les étiquettes sont une façon logique de regrouper les choses. Le noyau gère les étiquettes lors du démarrage.
Les libellés sont au format utilisateur : rôle : type : niveau (le niveau est facultatif). L'utilisateur, le rôle et le niveau sont utilisés dans les implémentations SELinux plus avancées, comme avec MLS. Le type d'étiquette est le plus important pour la politique ciblée.
SELinux utilise l'application de type pour appliquer une politique définie sur le système. L'application de type est la partie d'une politique SELinux qui définit si un processus exécuté avec un certain type peut accéder à un fichier étiqueté avec un certain type.
Activer SELinux
Si SELinux a été désactivé dans votre environnement, vous pouvez activer SElinux en éditant /etc/selinux/config et en définissant SELINUX = permissive. Étant donné que SELinux n'était pas actuellement activé, vous ne souhaitez pas le définir immédiatement sur l'application car il est probable que votre système ait des éléments mal étiquetés qui peuvent empêcher votre système de démarrer.
Vous pouvez forcer le système à réétiqueter automatiquement le système de fichiers en créant un fichier vide nommé .autorelabel dans le répertoire racine, puis en redémarrant. Si le système présente trop d'erreurs, un redémarrage en mode permissif est nécessaire pour que le démarrage réussisse. Une fois que tout a été réétiqueté, définissez SELinux sur l'application avec /etc/selinux/config et redémarrez, ou exécutez setenforce 1.
Si un administrateur système est moins familiarisé avec la ligne de commande, il existe des outils graphiques disponibles qui peuvent être utilisés pour gérer SELinux.
SELinux fournit une couche de sécurité supplémentaire pour votre système intégré dans les distributions Linux. Il doit rester allumé afin que vous puissiez protéger votre système en cas de compromission.
Contrôle d'accès discrétionnaire (DAC) et contrôle d'accès obligatoire (MAC)
Traditionnellement, les systèmes Linux et UNIX utilisaient des DAC. SELinux est un exemple de système MAC pour Linux.
Avec DAC, les fichiers et les processus ont des propriétaires. Vous pouvez faire en sorte que l'utilisateur possède un fichier, qu'un groupe possède un fichier, ou quoi que ce soit, qui peut être n'importe qui d'autre. Les utilisateurs ont la possibilité de modifier les autorisations sur leurs fichiers.
L'utilisateur root dispose d'un contrôle d'accès total avec un système DAC. Si vous avez un accès root, vous pouvez accéder aux fichiers de n'importe quel autre utilisateur ou faire ce que vous voulez sur le système.
Mais sur les systèmes MAC comme SELinux, il existe une politique d'accès établie administrativement. Même si les paramètres DAC de votre répertoire personnel sont modifiés, une politique SELinux en place pour empêcher un autre utilisateur ou processus d'accéder au répertoire assurera la sécurité du système.
Les politiques SELinux vous permettent d'être précis et de couvrir un grand nombre de processus. Des modifications peuvent être apportées avec SELinux pour restreindre l'accès entre les utilisateurs, les fichiers, les répertoires, etc.
Comment gérer les erreurs SELinux
Lorsque vous obtenez une erreur dans SELinux, il y a quelque chose qui doit être corrigé. Les chances sont 1 de ces 4 problèmes courants:
- Les étiquettes sont fausses. Si l'étiquetage est incorrect, vous pouvez utiliser les outils pour corriger les étiquettes.
- Une politique doit être établie. Cela peut signifier que vous devez informer SELinux d'une modification que vous avez apportée ou que vous devez modifier une politique. Vous pouvez le résoudre en utilisant des booléens ou des modules de critères.
- Il y a un bug en politique. Il peut y avoir un bogue dans la politique qui doit être corrigé.
- Le système a été piraté. Bien que SELinux puisse protéger vos systèmes dans de nombreux scénarios, il est toujours possible qu'un système soit compromis. Si vous pensez que c'est le cas, agissez immédiatement.
Que sont les booléens ?
Les booléens sont des paramètres d'activation/désactivation des fonctions dans SELinux. Il existe des centaines de paramètres qui peuvent activer ou désactiver les fonctionnalités de SELinux, et beaucoup sont déjà prédéfinis. Vous pouvez savoir quels booléens ont déjà été définis sur votre système en exécutant getsebool -a.