2. Pourquoi utiliser les mots de passe Shadow~?

Contenu de cette section

La plupart des distributions Linux actuelles ne contiennent pas le support des mots de passe shadow (La Slackware 2.3, Slackware 3.0 et d'autres distributions assez populaires...)

Si la distribution que vous avez utilisée pour installer linux se trouve sur CD-ROM, il est fort probable que vous puissiez y trouver également les fichiers nécessaires au kit Shadow et d'autant plus si celui-ci contient un miroir de Sunsite.

Les fichiers nécessaires peuvent être également obtenus via FTP anonyme ou par le World Wide Web.

Sur un système linux sans l'ensemble Shadow installé, les informations sur l'utilisateur, et en particulier le mot de passe sont stockés dans le fichier /etc/passwd. Le mot de passe est enregistré dans un format encrypté. Si vous demandez à un expert en cryptographie, il (ou elle) vous répondra que le mot de passe n'est pas encrypté mais encodé. En fait, lors de l'utilisation de crypt(3), le mot de passe est considéré comme la clé pour encoder un texte de valeur nulle. C'est la raison pour laquelle à partir de maintenant, j'utiliserai le terme encodé.

L'algorithme utilisé pour encoder le mot de passe fonctionne à sens unique, c'est à dire qu'il est très difficile à partir du mot de passe encodé de retrouver l'original. Vous trouverez plus d'information à propos de l'algorithme utilisé dans les pages de manuel de crypt(3).

Lorsqu'un utilisateur défini un mot de passe, il est encodé avec une valeur aléatoire appelée sel salt en Anglais . C'est à dire qu'un même mot de passe pourrait être enregistré de 4096 façons différentes. La valeur sel est alors enregistrée avec le mot de passe désormais encodé.

Lorsqu'un utilisateur se connecte et saisit son mot de passe, le sel est tout d'abord retrouvé à partir du mot de passe encodé. Alors, le mot de passe entré est encodé avec le sel précédemment retrouvé.

Il est, avec des moyens informatiques, difficile (mais pas impossible) de prendre un mot de passe encodé aléatoirement et de retrouver le mot de passe original. Quoi qu'il en soit, sur un système ayant de nombreux utilisateurs, il est probable que certains mots de passes soient évidents: un simple mot, un nom, ou une combinaison de mots simples.

Mais le pirate de système sait tout cela, et va simplement crypter un dictionnaire de mots de passe usuels en utilisant les 4096 possibilités de sel. Il va alors comparer les mots de passe encodés dans le fichier /etc/passwd par sa propre base de donnée. Quand il aura trouvé une équivalence, il aura le mot de passe d'un compte. Ca s'appelle une attaque au dictionnaire, et c'est une des méthodes les plus courantes pour accéder à un système non autorisé.

En y réfléchissant, à un seul mot de passe de 8 caractères correspond 4096 mots de passes encodés de 13 caractères (c'est à dire 4096x13 octets). Donc un dictionnaire de 400 000 mots simples, noms, mots de passes, ou simple variations, tiendrait facilement sur un disque dur de 4Go. Le pirate a juste besoin de les trier et de les comparer.

Même sans avoir beaucoup d'espace disque, des utilitaires comme crack(1) peuvent en général casser pas mal de mots de passe sur un système contenant suffisamment d'utilisateurs. (Assumant que les utilisateurs du système sont autorisés à lire leur propre mot de passe).

Le fichier /etc/password contient aussi des informations comme le user ID et le group ID qui sont utilisés par de nombreux programmes. C'est pour cela que le fichier passwd doit être lisible par tout le monde. Si vous changiez les permissions de /etc/passwd de telle sorte que plus personne ne puisse le lire, la première chose que vous pourriez constater, c'est que la commande ls -l affiche désormais le user ID au lieu du nom~!

Le kit Shadow résout ce problème en déplaçant les mots de passe encodés vers un autre fichier (en général /etc/shadow). Il n'y a que le root qui a les permissions de lecture et d'écriture sur le fichier shadow. Quelques programmes (comme xlock) nécessitent que le groupe shadow puisse lire et écrire dans le fichier /etc/shadow. Il est préférable que les programmes qui ont juste besoin de lire et vérifier le mot de passe soient lancés SGID shadow plutôt que SGID root.

En déplaçant les mots de passe vers le fichier /etc/shadow, nous écartons effectivement le pirate d'avoir accès aux mots de passe encodés avec lesquels ils auraient pu faire une attaque au dictionnaire.

De plus, le kit shadow propose de nouvelles possibilités intéressantes:

Installer l'ensemble shadow, c'est contribuer à la sécurité de votre système, mais il y a bien d'autre choses à faire pour sécuriser votre système. Il y aura probablement une série de HOWTO discutant de la sécurité et des méthodes de sécurisation.

Pour le moment, pour avoir des informations sur la sécurité et linux, incluant les vulnérabilités connues du système, allez voir la: Linux Security home page.

2.1 Format du fichier /etc/passwd

Sur un système non shadow, voici le format du fichier /etc/passwd

username:passwd:UID:GID:full_name:directory:shell
En détail:
username

Le nom de l'utilisateur (login)

passwd

Le mot de passe encodé

UID

Valeure numérique: user ID

GID

Valeure numérique: groupe ID

full_name

Le nom complet de l'utilisateur (Prenom Nom) - Ce champ est appelé le champ GECOS (General Electric Comprehensive Operating System) et peut éventuellement contenir d'autres informations

directory

Répertoire personnel de l'utilisateur

shell

Shell par défaut de l'utilisateur

Par exemple:
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
Np est le sel et ge08pfz4wuk est le mot de passe encodé. Pour le même mot de passe, son équivalent encodé aurait tout aussi bien pu être kbeMVnZM0oL7I. Il y à 4096 possibilités d'encodage pour le même mot de passe. (Le mot de passe de cet exemple est 'password', un très mauvais mot de passe.

Une fois l'ensemble shadow installé, voilà à quoi ressemblera votre fichier /etc/passwd:

username:x:503:100:Full Name:/home/username:/bin/sh
Un x est venu remplacer le mot de passe encodé. Mis à part ça, le format du fichier /etc/passwd reste en fait inchangé. Ceci permet à tous les programmes qui lisent le fichier /etc/passwd sans avoir besoin d'accéder aux mots de passe de fonctionner correctement.

Les mots de passes encodés sont désormais dans le fichier /etc/shadow.

2.2 Format du fichier shadow

Le fichier /etc/shadow contient les informations suivantes:

username:passwd:last:may:must:warn:expire:disable:reserved
En détail:
username

Le Nom de l'Utilisateur

passwd

Le mot de passe encodé

last

Date de la dernière modification (en nombre de jours depuis le 1er janvier 1970).

may

Nombre de jours avant que le mot de passe puisse être modifié

must

Nombre de jours avant que le mot de passe doive être modifié

warn

Nombre de jours durant lesquels l'utilisateur est prévenu de l'expiration de son mot de passe.

expire

Nombre de jours entre l'expiration du mot de passe et la fermeture du compte.

disable

Date de la fermeture du compte (en nombre de jours depuis le 1er janvier 1970).

reserved

Champ réservé

Donc, l'exemple précedent devrait être:
username:Npge08pfz4wuk:9479:0:10000::::

2.3 Apercu de crypt(3)

extrait de la page de manuel de crypt(3)

"crypt est la fonction de cryptage du mot de passe. Elle est basée sur l'algorithme du DES (Data Encryption Standard) avec quelques modifications pour éviter les recherches matérielles de la clé.

La clé est le mot de passe de l'utilisateur

Le sel est composé de deux caractères choisis dans l'ensemble a-zA-Z0-9./. cette chaine de caractère est utilisée pour perturber l'algorithme de 4096 différentes façons.

En prenant les 7 derniers bits de chaque caractère du mot de passe, on obtient une clé de 56 bits. Cette clé est utilisée pour crypter une chaîne de caractère constante (généralement constituée de zéro). La valeur retournée pointe sur le mot de passe crypté: une série de 13 caractères ASCII imprimables (les deux premiers caractères correspondent au sel). La valeur retournée pointe sur une donnée statique dont le contenu est modifié à chaque appel.

Attention: Une clé de 56 bits correspond à: 2**56 donc 7.3e16 valeurs possibles. Les recherches exhaustives sont possibles en utilisant des ordinateurs à architecture massivement parallèle. Des logiciels comme crack(1) travaillent avec des clés qui sont généralement utilisées par les humains. C'est à dire que la sélection de mots de passe testés sont des mots simples, mots de passe fréquemment utilisés et des noms. L'utilisation d'un programme passwd(1) qui recherche des mots de passes trop simple est recommandé.

L'algorithme DES lui-même est très limité, ce qui fait qu'envisager l'utilisation de crypt(3) pour autre chose que de l'autentification de mots de passe n'est pas une bonne idée. Si vous envisagez d'utiliser crypt(3) pour un projet de cryptographie, ne le faites pas, procurez-vous plutôt un bon livre sur le cryptage de données et une des nombreuses bibliothèques DES."

Si vous recherchez un bon livre sur le cryptage de données, je vous recommande:

        "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
        par Bruce Schneier <schneir@chinet.com>
        ISBN: 0-471-59756-2"


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre