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, acronyme de Security-Enhanced Linux, représente une collection avancée de correctifs de sécurité développés pour le noyau du système d'exploitation Linux. Son objectif principal est de fournir des contrôles d'accès renforcés et spécifiques pour une variété de services et d'applications fonctionnant au sein du système.
La genèse de SELinux réside dans les projets initialement menés par Agence de sécurité nationale des États-Unis. Après sa sortie, SELinux est rapidement devenu un élément essentiel et fiable dans le paysage de la cybersécurité open source. La principale contribution de SELinux à la sécurité d'un système Linux est l'implémentation d'un système de limitation des privilèges. Ce système limite l'impact qu'une application donnée peut avoir sur le fonctionnement global du système, minimisant ainsi les dommages globaux qu'une faille de sécurité potentielle pourrait causer.
Avant de se plonger dans les détails du fonctionnement de SELinux, il est nécessaire de comprendre le concept de "correction" dans le contexte de l'informatique. L'exactitude est un terme qui décrit la précision avec laquelle un programme informatique produit les résultats attendus en fonction des spécifications du système. Pour illustrer ce concept, pensez à une application conçue pour ouvrir des fichiers image : si une telle application peut ouvrir avec succès le fichier image comme prévu, on peut dire qu'elle a un haut degré d'exactitude. Ce concept peut être étendu à tout programme, application ou fonction qui fonctionne au sein d'un système informatique.
Sur un système qui n'implémente pas SELinux, la sécurité globale dépend de l'exactitude du noyau et de celle de toutes les applications privilégiées. Cela signifie que s'il y a des erreurs ou des défaillances dans les applications privilégiées ou leurs configurations, l'ensemble du système pourrait être mis en danger. C'est pourquoi il est déconseillé d'utiliser un noyau Linux dépourvu de modules de sécurité, notamment lorsque l'appareil est connecté à Internet.
Au contraire, Les systèmes implémentant SELinux reposent pour leur sécurité non seulement sur l'exactitude du noyau, mais également sur l'exactitude de la configuration de la politique de sécurité. Cela permet à un système exécutant SELinux de limiter l'effet d'une application compromise, protégeant l'intégrité de l'ensemble du système et permettant aux autres applications de continuer à fonctionner normalement. Essentiellement, SELinux implémente une politique de sécurité compartimentée, qui empêche la propagation d'une application compromise ou d'autres vulnérabilités de sécurité potentielles.
SELinux a été introduit dans la communauté open source en 2000 et a été intégré directement dans le noyau Linux en 2003, soulignant son importance pour assurer la sécurité d'un système Linux.
Comment fonctionne SELinux ?
SELinux, ou Security-Enhanced Linux, est un puissant outil de sécurité qui fonctionne sur le principe de l'attribution d'étiquettes de sécurité, également appelées "contextes", à différents éléments du système d'exploitation. Ces étiquettes sont attribuées aux fonctions, aux processus, aux utilisateurs, aux fichiers, aux ports réseau et même au matériel.
Chaque étiquette attribuée comprend une chaîne de texte représentant un nom d'utilisateur, un rôle et un domaine. Généralement, la partie nom de domaine joue le rôle le plus critique, car elle est utilisée pour déterminer des contrôles d'accès spécifiques. De même, les fichiers, les ports réseau et le matériel ont un contexte attribué dans SELinux, et chacun reçoit un nom, un rôle et un type.
Ce processus d'attribution d'étiquettes de sécurité aux fichiers est appelé « marquage » et est déterminé par le fichier de stratégie utilisé. Le fichier de stratégie se compose de trois fichiers distincts : un fichier de mappage, un fichier de règles et un fichier d'interface. Ces trois fichiers doivent être compilés dans un seul fichier de stratégie à l'aide de l'ensemble d'outils SELinux. Ce fichier de stratégie compilé est ensuite chargé dans le noyau du système, ce qui rend la stratégie active.
La création du fichier de stratégie peut être effectuée manuellement ou à l'aide d'un outil de gestion SELinux. Une fois le fichier de stratégie chargé dans le noyau du système, vous pouvez être sûr que votre système est correctement protégé.
La plupart des systèmes d'exploitation Linux modernes, tels que RHEL, CentOS, AlmaLinux ou Rocky Linux ont SELinux préconfiguré. Cela signifie que, dans la plupart des cas, les utilisateurs ne savent même pas que SELinux travaille silencieusement en arrière-plan pour protéger leur système. En bref, la nature fiable et discrète de SELinux en fait un composant fondamental de tout système Linux moderne.
Le rôle fondamental de SELinux est la définition des contrôles d'accès pour les applications, les processus et les fichiers au sein du système. À cette fin, SELinux utilise des politiques de sécurité, un ensemble de règles qui guident l'accès aux différents éléments du système. Ces politiques indiquent ce que SELinux est autorisé ou refusé.
Lorsqu'une application ou un processus, appelé "sujet", demande l'accès à un "objet" (par exemple, un fichier), SELinux vérifie les autorisations via une structure appelée Access Vector Cache (AVC). ). Ce cache conserve les autorisations pour les sujets et les objets afin d'accélérer les décisions de contrôle d'accès.
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)
Les systèmes Linux et UNIX traditionnels ont fortement exploité le modèle de contrôle d'accès discrétionnaire (DAC). Ce modèle de contrôle d'accès, ancré dans le concept de propriété de fichier, donne à un utilisateur propriétaire d'un fichier ou d'un processus la possibilité de déterminer qui peut accéder à ses données et comment. Dans un système DAC, les utilisateurs peuvent spécifier des règles d'accès à leurs fichiers, avec des règles autorisant l'accès à un autre utilisateur spécifique, à un groupe d'utilisateurs ou à tout autre utilisateur du système.
L'utilisateur root sur un système Linux avec DAC a des pouvoirs illimités, avec un contrôle complet sur tous les fichiers et processus. En tant qu'administrateur système, l'utilisateur root peut accéder, modifier ou supprimer les fichiers de tout autre utilisateur, ce qui lui permet de modifier l'ensemble du système.
SELinux, d'autre part, implémente un modèle de contrôle d'accès obligatoire (MAC). Contrairement au DAC, où les utilisateurs ont le pouvoir de décider des politiques d'accès, dans le MAC, les politiques d'accès sont définies administrativement et ne peuvent pas être modifiées par des utilisateurs non privilégiés. Même si un utilisateur modifie les paramètres DAC sur son répertoire personnel, par exemple, une politique MAC telle que celle appliquée par SELinux peut toujours empêcher l'accès par un autre utilisateur ou processus. De cette manière, SELinux maintient un haut degré de sécurité quelles que soient les actions de l'utilisateur.
SELinux offre une granularité beaucoup plus fine dans le contrôle d'accès que les systèmes DAC traditionnels. Les politiques SELinux peuvent être extrêmement spécifiques, permettant aux administrateurs de restreindre ou d'autoriser l'accès à des fichiers, répertoires, ports réseau spécifiques, etc., pour des utilisateurs ou des processus individuels. Cette capacité à apporter des modifications précises est essentielle pour assurer la sécurité de l'ensemble du système.
Comment gérer les erreurs SELinux
Lorsque vous rencontrez une erreur dans SELinux, cela indique généralement que quelque chose dans votre système ne fonctionne pas comme il se doit et doit être corrigé. Il existe quatre problèmes courants pouvant être à l'origine d'une erreur dans SELinux.
- Les étiquettes sont fausses : SELinux utilise un système de marquage, ou "étiquetage", pour gérer les contrôles d'accès. Si les étiquettes sont incorrectes, des erreurs peuvent se produire. Par exemple, un fichier peut ne pas être accessible par une application en raison d'un étiquetage incorrect. Dans ce cas, vous pouvez utiliser des outils spécifiques à SELinux, tels que "restorecon" ou "chcon", pour corriger les étiquettes.
- Une politique doit être ajustée : Les politiques SELinux sont un ensemble de règles qui déterminent comment les processus peuvent interagir avec différentes parties du système. Si vous avez apporté une modification au système qui n'a pas encore été intégrée aux politiques SELinux, une erreur peut se produire. Dans ce cas, vous pouvez résoudre l'erreur en mettant à jour vos stratégies. Vous pouvez le faire en utilisant les booléens SELinux, qui vous permettent d'activer ou de désactiver certaines fonctionnalités, ou en créant un module de stratégie personnalisé avec l'outil "audit2allow".
- Il y a un bogue dans la politique : Malgré le travail minutieux des équipes de développement, les politiques SELinux peuvent parfois être boguées. Un bogue dans une stratégie peut provoquer un comportement inattendu et générer des erreurs. Dans ce cas, vous devrez peut-être signaler le bogue à la communauté des développeurs SELinux pour obtenir de l'aide pour résoudre le problème.
- Le système a été compromis : Malgré l'efficacité de SELinux dans la protection des systèmes, il y a toujours la possibilité qu'un système soit compromis. Si vous soupçonnez que votre système a été compromis, il est important de prendre des mesures immédiates. La première étape devrait être de déconnecter le système du réseau pour éviter d'autres dommages. Ensuite, vous devez mener une enquête médico-légale pour déterminer comment la violation s'est produite et quelles mesures doivent être prises pour prévenir de futurs incidents. N'oubliez pas que SELinux est un puissant outil de défense, mais la cybersécurité nécessite une approche multicouche.
Que sont les booléens ?
Les booléens sont un composant central de SELinux et sont une fonctionnalité clé qui permet une personnalisation flexible des politiques de sécurité du système. Ce sont essentiellement des commandes marche/arrêt ou « marche/arrêt » qui vous permettent de régler des fonctionnalités spécifiques de SELinux.
Ces booléens permettent aux administrateurs système de modifier le comportement de SELinux sans avoir besoin d'écrire ou de modifier manuellement les politiques de sécurité, ce qui rend l'administration système plus facile et moins sujette aux erreurs. Ceci est particulièrement utile dans les environnements à grande échelle ou complexes, où la gestion détaillée des politiques peut être trop lourde.
Il existe des centaines de booléens disponibles dans SELinux, chacun contrôlant un aspect spécifique des politiques de sécurité. Par exemple, il existe un booléen qui contrôle si les scripts Apache peuvent se connecter au réseau, un autre qui contrôle si les serveurs DHCP peuvent écrire dans les fichiers de configuration, etc. Beaucoup de ces booléens sont prédéfinis pour refléter les meilleures pratiques de sécurité.
Pour afficher les booléens actuellement définis sur votre système, vous pouvez utiliser la commande « getsebool -a ». Cette commande renverra une liste de tous les booléens SELinux et leurs paramètres actuels (activés ou désactivés).
Vous pouvez modifier le paramètre d'un booléen à l'aide de la commande "setsebool", suivie du nom du booléen et de l'état souhaité. Ces modifications peuvent être temporaires (c'est-à-dire valides uniquement jusqu'au prochain redémarrage) ou persistantes. La persistance des modifications peut être particulièrement importante pour les paramètres de sécurité critiques qui doivent rester constants dans le temps.
En bref, les booléens SELinux offrent un moyen puissant et flexible de personnaliser les paramètres de sécurité de votre système Linux, vous permettant d'équilibrer les besoins de sécurité avec les besoins opérationnels de votre environnement.
Désactiver SELinux
SELinux est un outil de sécurité important dans le monde Linux, conçu pour offrir un contrôle précis sur les activités des processus du système. Cependant, il existe des situations où un administrateur peut envisager de le désactiver. Ces situations incluent les cas où SELinux interfère avec des applications spécifiques, complique l'administration du système ou si l'environnement du système est suffisamment isolé et protégé par d'autres mesures de sécurité. N'oubliez pas, cependant, que la désactivation de SELinux peut exposer votre système à des risques de sécurité.
Pour désactiver SELinux sur les systèmes d'exploitation dérivés de Red Hat tels que CentOS, AlmaLinux, RockyLinux et Oracle Linux, vous devez modifier le fichier /etc/selinux/config. Vous trouverez une ligne indiquant "SELINUX=enforcing". Remplacez cette ligne par "SELINUX=disabled". Après avoir enregistré et quitté le fichier, vous devrez redémarrer votre système pour appliquer les modifications.
Pour les systèmes d'exploitation basés sur Debian ou Ubuntu, SELinux n'est généralement pas installé ou activé par défaut, mais s'il a été installé et doit être désactivé, vous pouvez le faire en modifiant le fichier /etc/selinux/config comme décrit ci-dessus, s'il est présent. . Si aucun fichier de ce type n'existe, SELinux a peut-être été activé via le chargeur de démarrage GRUB. Si tel est le cas, vous devrez supprimer "selinux=1" et "security=selinux" du fichier de configuration GRUB.
Pro:
- Une plus grande simplicité : SELinux peut être compliqué à maintenir et à configurer correctement. En le désactivant, vous éliminez ces complexités.
- Compatibilité : certaines applications peuvent ne pas fonctionner correctement avec SELinux, sa désactivation peut donc résoudre ces problèmes.
Contre:
- Sécurité réduite : SELinux offre un très haut niveau de sécurité, donc sa désactivation peut rendre votre système plus vulnérable à diverses formes d'attaques.
- Non-conformité : Si vous travaillez dans un environnement qui nécessite le respect de certaines règles de sécurité, la désactivation de SELinux peut entraîner une non-conformité.
La désactivation de SELinux devrait être un dernier recours après avoir tenté de résoudre les problèmes existants via le réglage des politiques et l'utilisation de booléens. Avant de désactiver SELinux, il est important de comprendre les implications possibles en matière de sécurité pour votre système.
conclusion
SELinux, abréviation de Security-Enhanced Linux, est un puissant mécanisme de sécurité qui a apporté des améliorations significatives à la sécurité du système Linux, ce qui en fait un élément de base dans l'environnement de sécurité informatique open source. Initialement mis en œuvre par la National Security Agency, SELinux applique des contrôles d'accès stricts pour une grande variété de services et d'applications, limitant efficacement les privilèges et atténuant les dommages potentiels au système.
Grâce à l'utilisation de politiques de sécurité, de contextes et de booléens, SELinux fournit un contrôle granulaire sur l'accès aux ressources système. Malgré sa complexité et sa courbe d'apprentissage initiale, l'utilisation de SELinux peut fournir un niveau de sécurité supérieur pour les systèmes Linux. Il est important de noter que même s'il existe des cas où la désactivation de SELinux peut être tentée, cela doit être considéré comme un dernier recours, car cela réduit considérablement la sécurité du système.
En conclusion, SELinux est un outil essentiel pour tout administrateur système soucieux de la sécurité. Malgré sa complexité, avec une compréhension et une administration appropriées, SELinux peut fournir une couche de défense supplémentaire efficace pour les systèmes Linux, augmentant considérablement la robustesse globale de la sécurité du système. À la lumière du paysage actuel des cybermenaces, des outils comme SELinux s'avèrent de plus en plus essentiels pour protéger nos cyberinfrastructures.