LFCA : Comment améliorer la sécurité du système Linux – Partie 20


Comme nous le savons tous, l'utilisateur root est roi et exerce des privilèges illimités sur le système Linux. Cependant, les utilisateurs non root sont limités aux tâches de base. De plus, les utilisateurs sudo ne bénéficient que d'un certain degré de privilèges root jugés appropriés par l'utilisateur root pour effectuer des tâches élevées spécifiques.

Des problèmes surviennent lorsque les utilisateurs réguliers ont un accès incontrôlé aux ressources ou sont remontés involontairement vers root. Il s'agit d'un risque de sécurité sérieux qui pourrait entraîner des failles, des modifications indésirables et, dans le pire des cas, un plantage du système. Un autre risque potentiel est lorsque les fichiers ont des autorisations de fichiers moins sécurisées. Par exemple, les fichiers de démarrage avec des autorisations d'écriture pour les utilisateurs globaux pourraient facilement être modifiés ou corrompus, ce qui entraînerait une panne du système.

[ Vous pourriez également aimer : Conseils utiles pour la sécurisation des données et Linux ]

Bien que nous puissions mettre en œuvre la sécurité physique, du réseau et des données, un utilisateur malveillant peut contourner les mesures de sécurité et profiter de ces failles de sécurité. C'est pour cette raison que la sécurité du système de fichiers doit être prise au sérieux. Il fournit une couche de défense supplémentaire face aux attaques ou aux menaces internes d'employés malveillants qui n'ont pas à faire le gros du travail pour contourner les mesures de sécurité pour accéder aux fichiers.

En sécurité système, nous nous concentrerons sur les points clés suivants :

  • Droits d'accès : autorisations d'utilisateur et de groupe.
  • Appliquez les politiques de mot de passe avec le module PAM.

Droits d'accès – Séparation des utilisateurs et des groupes

Vous devez probablement avoir entendu dire que tout sous Linux est considéré comme un fichier. Et si ce n'est pas le cas, c'est un processus. Chaque fichier sur un système Linux appartient à un utilisateur et à un groupe d'utilisateurs. Il porte également des autorisations de fichiers pour 3 catégories d'utilisateurs : Utilisateur (u), Groupe (g) et Autres (o). Les autorisations sont représentées en lecture, écriture et exécution ( rwx ) pour chaque catégorie d'utilisateur.

rwx        rwx	     rwx
User       Group     Others

Comme vu précédemment, dans la commande ls comme indiqué.

$ ls -l

Pour récapituler, les autorisations sont généralement représentées par neuf caractères. Les trois premiers caractères représentent les droits d'accès de l'utilisateur réel propriétaire du fichier. Le deuxième jeu de caractères représente les autorisations du groupe propriétaire du fichier. Enfin, le dernier ensemble pour les autres utilisateurs ou les utilisateurs globaux. Ces caractères sont perpétuellement dans l'ordre lecture, écriture, exécution (rwx).

Après les autorisations, nous avons les propriétés des utilisateurs et des groupes, suivies de la taille du fichier ou du répertoire, de la date de modification et enfin du nom du fichier.

Modification des autorisations et des propriétaires des fichiers/répertoires

Les autorisations des utilisateurs des fichiers et des répertoires peuvent être modifiées comme bon leur semble. La règle d'or consiste à utiliser le principe de sécurité du moindre privilège. En termes simples, assurez-vous que les utilisateurs obtiennent les droits d'accès ou les autorisations minimaux requis pour effectuer le travail.

Le principe des moindres privilèges limite les utilisateurs à certains rôles uniquement et, ce faisant, minimise le risque que des attaquants accèdent à des données critiques et les modifient en tirant parti d'un compte d'utilisateur à faible niveau de levier. Il réduit également la surface d'attaque et limite la propagation des logiciels malveillants au cas où l'attaquant prendrait le contrôle de votre système.

Par conséquent, si un utilisateur n'a besoin que d'afficher le contenu d'un fichier ou d'un répertoire, il ne doit pas se voir accorder d'autorisations d'exécution ou d'écriture. Au niveau le plus élémentaire, n'accordez que le moins d'autorisations et de propriétés requises par l'utilisateur pour accomplir des tâches. Nous avons abordé la manière de modifier les autorisations et les propriétés des utilisateurs sur les fichiers/répertoires à l'aide des commandes chmod et chown dans la rubrique des commandes Linux de base.

Pour que l'administrateur système puisse gérer plus facilement les autorisations, des autorisations spéciales ou des droits d'accès peuvent être accordés à des répertoires entiers. L'une des autorisations spéciales qui peuvent être appliquées pour restreindre la suppression et la modification d'un fichier ou d'un répertoire est le sticky bit.

Dans un scénario où un répertoire partagé est accessible à tous les utilisateurs du système ou du réseau, il existe un risque potentiel que certains utilisateurs puissent supprimer ou modifier les fichiers à l'intérieur du répertoire. Ceci n'est pas souhaitable si vous souhaitez conserver l'intégrité du contenu du répertoire. Et c'est là que le morceau collant entre en jeu.

Un sticky bit est une autorisation de fichier spéciale définie sur un fichier ou un répertoire entier. Il accorde uniquement au propriétaire de ce fichier/répertoire l'autorisation de supprimer ou de modifier le contenu du fichier ou du répertoire. Aucun autre utilisateur ne peut supprimer ou modifier le fichier/répertoire. Il a la valeur symbolique de t et une valeur numérique de 1000.

Pour activer un sticky bit sur un répertoire, utilisez la commande chmod comme suit :

$ chmod +t directory_name

Dans l'exemple ci-dessous, nous avons appliqué un sticky bit au répertoire appelé test. Dans le cas d'un répertoire, tout le contenu héritera des permissions sticky bit. Vous pouvez vérifier les autorisations sticky bit à l'aide de la commande ls -ld. Assurez-vous de remarquer le symbole t à la fin des autorisations de fichier.

$ ls -ld test

Si un autre utilisateur tente de supprimer le répertoire ou de modifier le fichier à l'intérieur du répertoire, il est accueilli par une erreur d'autorisation refusée.

Et c'est l'essentiel de l'autorisation de fichier stick bit.

Le SUID (Set User ID) est une autre autorisation de fichier spéciale qui permet à un autre utilisateur régulier d'exécuter un fichier avec les autorisations de fichier du propriétaire du fichier. Il est généralement indiqué par une valeur symbolique s dans la partie utilisateur des autorisations de fichier au lieu d'un x qui représente les autorisations d'exécution. Le SUID a une valeur numérique de 4000.

Le SGID, (Set Group ID) permet à un utilisateur régulier d'hériter des autorisations de groupe du propriétaire du groupe de fichiers. Plutôt que le x pour les autorisations d'exécution, vous verrez un s dans la partie groupe des autorisations de fichier. Le SGID a une valeur numérique de 2000.

Aussi pratiques soient-elles, les autorisations SUID et SGID sont associées à des risques de sécurité et doivent être évitées à tout prix. En effet, ils accordent des privilèges spéciaux aux utilisateurs réguliers. Si un intrus se faisant passer pour un utilisateur normal tombe sur un fichier exécutable appartenant à l'utilisateur root avec un bit SUID défini dessus, il peut utiliser cette faille et exploiter le système.

Pour trouver tous les fichiers avec le bit SUID défini sous Linux, exécutez la commande find en tant qu'utilisateur root.

$ find / -perm -4000 type -f

Pour les répertoires, exécutez :

$ find / -perm -4000 type -d

Pour trouver tous les fichiers avec le jeu de bits SGID, exécutez :

$ find / -perm -2000 type -f

Pour les répertoires, exécutez :

$ find / -perm -2000 type -d

Pour supprimer le bit SUID sur un fichier, exécutez la commande chmod comme indiqué :

$ chmod u-s /path/to/file

Pour supprimer le bit SGID d'un fichier, exécutez la commande :

$ chmod g-s filename /path/to/file

Il n'est pas rare que les utilisateurs définissent des mots de passe faibles. Un bon nombre définit des mots de passe courts, clairs et faciles à deviner pour éviter de les oublier lors de la connexion. Bien que pratiques, les mots de passe faibles peuvent facilement être piratés à l'aide de scripts d'attaque par force brute.

Le module PAM ( Pluggable Authentication Module ) est un module qui permet aux administrateurs système d'appliquer des politiques de mot de passe sur les systèmes Linux. Pour ce faire, vous avez besoin du module pam_pwquality fourni par la bibliothèque libpam_pwquality. Le module pam_pwquality vérifie la force d'un mot de passe par rapport à un ensemble de règles et à un dictionnaire système et identifie les choix de mots de passe faibles.

Pour installer le module pam_pwquality sur Ubuntu 18.04 et versions ultérieures, exécutez :

$ sudo apt install libpam_pwquality

Pour RHEL/CentOS 8, exécutez la commande :

$ sudo dnf install libpwquality

Le fichier de configuration se trouve à l'emplacement suivant :

  • Sur Debian-Systems – /etc/pam.d/common-password
  • Sur les systèmes RedHat : /etc/pam.d/system-auth

Avant de commencer à modifier le fichier de configuration PAM, envisageons d'abord de recueillir des informations sur les contrôles de vieillissement des mots de passe.

Ceux-ci peuvent être trouvés dans le fichier /etc/login.defs.

Le fichier contient les contrôles de mot de passe clés suivants :

  • PASS_MAX_DAYS : nombre maximal de jours pendant lesquels un mot de passe peut être utilisé.
  • PASS_MIN_DAYS : nombre minimal. de jours autorisés entre les changements de mot de passe.
  • PASS_WARN_AGE : nombre de jours d'avertissement avant l'expiration d'un mot de passe.

Les valeurs par défaut sont indiquées ci-dessous.

L'attribut PASS_MAX_DAYS limite le nombre de jours pendant lesquels un utilisateur peut utiliser son mot de passe. Lorsque cette valeur est atteinte ou que le mot de passe expire, l'utilisateur est obligé de changer son mot de passe pour se connecter au système. Par défaut, cette valeur est définie sur 99999, ce qui correspond à 273 ans. Cela n'a pas beaucoup de sens en ce qui concerne la sécurité, car l'utilisateur peut continuer à utiliser son mot de passe toute sa vie.

Vous pouvez le définir sur une valeur significative, disons 30 jours, comme indiqué.

PASS_MAX_DAYS  30

Au bout de 30 jours, l'utilisateur sera obligé de changer son mot de passe pour un autre.

L'attribut PASS_MIN_DAYS précise la durée minimale pendant laquelle les utilisateurs peuvent utiliser leur mot de passe avant de le modifier. Qu'est-ce que ça veut dire? Si, par exemple, cette valeur est définie sur 15 jours, l'utilisateur ne pourra plus modifier son mot de passe avant que 15 jours ne se soient écoulés.

PASS_MAX_DAYS  15

L'attribut PASS_WARN_AGE spécifie le nombre de jours pendant lesquels un utilisateur recevra un avertissement concernant l'expiration imminente de son mot de passe avant qu'il n'expire. Par exemple, vous pouvez le définir sur 7 jours, comme indiqué.

PASS_MAX_DAYS  7

REMARQUE : Ces contrôles de mot de passe ne fonctionnent pas avec les comptes préexistants. Elles ne s'appliquent qu'aux nouveaux comptes créés après la définition des règles.

Avant de modifier le fichier /etc/pam.d/common-password, créez une copie de sauvegarde. Dans cet exemple, nous avons créé le fichier de copie de sauvegarde common-password.bak.

$ sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

Ouvrez ensuite le fichier.

$ sudo vim /etc/pam.d/common-password 

Localisez la ligne ci-dessous.

password        requisite          pam_pwquality.so retry=3

L'option de nouvelle tentative définit le nombre maximum de fois où vous devez saisir le bon mot de passe avant d'obtenir une erreur. Par défaut, il est défini sur 3. Il ne s'agit que d'une option et nous allons en inclure plusieurs.

Ajoutez les attributs suivants à la ligne :

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

Détaillons ces attributs.

  • minlenu003d10 : Définit la taille minimale acceptable pour le mot de passe. Dans ce cas, 10 caractères.
  • difoku003d3 : Il s'agit du nombre maximum de caractères présents dans le mot de passe précédent.
  • lcreditu003d-1 : il s'agit du nombre minimum de caractères minuscules qui doivent être présents dans le mot de passe.
  • ucreditu003d-1 : est le nombre maximum de caractères minuscules qui doivent être présents dans le mot de passe.
  • dcreditu003d-1 : Le nombre minimum de caractères numériques qui doivent être définis dans le mot de passe.
  • ocreditu003d-1 : le nombre minimum de caractères spéciaux, par exemple @, #, & qui doivent être définis dans le mot de passe.
  • reject_username : cette option déclenche le rejet du mot de passe si le mot de passe est le nom d'utilisateur au format simple ou inversé.

Si vous essayez de créer un nouvel utilisateur qui ne respecte pas les politiques de mot de passe, vous allez rencontrer des erreurs comme indiqué.

Ceci conclut le sujet sur la sécurité du système et les fondamentaux de la sécurité en général. Dans tout le chapitre, nous avons mis en lumière les mesures de sécurité de base que vous pouvez mettre en œuvre pour protéger votre système Linux contre les utilisateurs malveillants tels que les pirates ou les employés mécontents.