Recherche de site Web

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


Comme nous le savons tous, l'utilisateur root est roi et dispose de 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 des utilisateurs réguliers ont un accès incontrôlé aux ressources ou sont transmis involontairement à la racine. Il s’agit d’un risque de sécurité sérieux qui pourrait entraîner des violations, des modifications indésirables et, dans le pire des cas, un crash 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 dotés d'autorisations d'écriture pour les utilisateurs globaux pourraient facilement être modifiés ou corrompus, entraînant un dysfonctionnement du système.

Bien que nous puissions mettre en œuvre une sécurité physique, 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 provenant 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 matière de sécurité du système, nous nous concentrerons sur les points clés suivants :

  • Droits d'accès – Autorisations des utilisateurs et des groupes.
  • Appliquez des 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 sous Linux, tout 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 dispose également d'autorisations de fichier 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 section Bases de Linux, vous pouvez afficher les autorisations de fichiers en utilisant le format long de 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 utilisateurs autres ou 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étés des fichiers/répertoires

Les autorisations des utilisateurs sur les fichiers et les répertoires peuvent être modifiées à volonté. La règle générale consiste à utiliser le principe de sécurité du moindre privilège. En termes simples, assurez-vous que les utilisateurs disposent des droits d'accès ou des autorisations minimum requis pour effectuer le travail.

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

Par conséquent, si un utilisateur a uniquement besoin d'afficher le contenu d'un fichier ou d'un répertoire, il ne doit pas disposer d'autorisations d'exécution ou d'écriture. Au niveau très basique, accordez uniquement le minimum d'autorisations et de propriétés requises par l'utilisateur pour accomplir les tâches. Nous avons expliqué comment 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 Commandes Linux de base.

Mode d'autorisation des bits collants

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 pouvant être appliquées pour restreindre la suppression et la modification d'un fichier ou d'un répertoire est le bit collant.

Morceau collant

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 contenus dans le répertoire. Ceci n'est pas souhaité si vous souhaitez conserver l'intégrité du contenu du répertoire. Et c’est là qu’intervient le côté collant.

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 d'apporter des modifications au 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 bit collant au répertoire appelé test. Dans le cas d'un répertoire, tout le contenu héritera des autorisations sticky bit. Vous pouvez vérifier les autorisations des bits collants à 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 Autorisation refusée.

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

Surveillance des autorisations SUID et SGID

Le SUID (Définir l'ID utilisateur) est une autre autorisation de fichier spéciale qui permet à un autre utilisateur standard 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 4 000.

Le SGID (Définir l'ID de groupe) permet à un utilisateur standard 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 2 000.

Aussi pratiques qu'elles s'avèrent être, 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, il peut utiliser cette faille et exploiter le système.

Pour rechercher 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écutés :

find / -perm -4000 type -d

Pour trouver tous les fichiers avec le bit SGID défini, exécutez :

find / -perm -2000 type -f

Pour les répertoires, exécutez :

find / -perm -2000 type -d

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

chmod u-s /path/to/file

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

chmod g-s filename /path/to/file

Appliquer les politiques de mot de passe avec le module PAM

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, simples et faciles à deviner pour éviter de les oublier lors de la connexion. Bien que pratiques, les mots de passe faibles peuvent facilement être violé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 les 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 les systèmes Debian – /etc/pam.d/common-password
  • Sur les systèmes RedHat – /etc/pam.d/system-auth

Configuration de la politique de mot de passe

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

Détails sur le vieillissement du mot de passe

Ceux-ci se trouvent dans le fichier /etc/login.defs.

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

  • PASS_MAX_DAYS : nombre maximum de jours pendant lesquels un mot de passe peut être utilisé.
  • PASS_MIN_DAYS : nombre minimum. nombre de jours autorisés entre les changements de mot de passe.
  • PASS_WARN_AGE : nombre de jours d'avertissement donné 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 termes de sécurité, car l’utilisateur peut continuer à utiliser son mot de passe toute sa vie.

Vous pouvez définir cette valeur sur une valeur significative, par exemple 30 jours, comme indiqué.

PASS_MAX_DAYS  30

Après 30 jours, l'utilisateur sera obligé de changer son mot de passe pour un autre.

L'attribut PASS_MIN_DAYS indique la durée minimale pendant laquelle les utilisateurs peuvent utiliser leur mot de passe avant de le modifier. Qu'est-ce que cela signifie? Si, par exemple, cette valeur est fixée à 15 jours, l’utilisateur ne pourra plus modifier son mot de passe avant 15 jours.

PASS_MAX_DAYS  15

L'attribut PASS_WARN_AGE spécifie le nombre de jours pendant lesquels l'utilisateur recevra un avertissement concernant l'expiration imminente de son mot de passe avant son expiration. Par exemple, vous pouvez définir cette durée 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. Ils ne s'appliquent qu'aux nouveaux comptes créés après définition des règles.

Définition de la complexité du mot de passe avec le module PAM

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

Ensuite, ouvrez le fichier.

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

Localisez la ligne indiquée ci-dessous.

password        requisite          pam_pwquality.so retry=3

L'option réessayer définit le nombre maximum de fois où vous devez saisir le bon mot de passe avant d'obtenir une erreur. Par défaut, cette valeur est définie sur 3. Ce n'est qu'une option et nous allons inclure plusieurs options.

Ajoutez les attributs suivants à la ligne :

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

Développons ces attributs.

  • minlen=10 : définit la taille minimale acceptable pour le mot de passe. Dans ce cas, 10 caractères.
  • difok=3 : Il s'agit du nombre maximum de caractères présents dans le mot de passe précédent.
  • lcredit=-1 : il s'agit du nombre minimum de caractères minuscules qui doivent être présents dans le mot de passe.
  • ucredit=-1 : Il s'agit du nombre maximum de caractères minuscules qui doivent être présents dans le mot de passe.
  • dcredit=-1 : nombre minimum de caractères numériques à définir dans le mot de passe.
  • ocredit=-1 : le nombre minimum de caractères spéciaux, par exemple @, # et &, 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 rencontrerez les erreurs indiquées.

Résumé

Ceci conclut le sujet sur la sécurité du système et les principes 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 des utilisateurs malveillants tels que des pirates informatiques ou des employés mécontents.