37. Les enjeux de la sécurité

37.1. Les mots de passe

Un bon mot de passe est un mot de passe qui ne peut pas être trouvé à l'aide d'un dictionnaire.

37.1.1. Choisir son mot de passe

Exercice : Entraînez-vous à trouver une dizaine de mots de passe complexes :

  1. 1m,1^^at1C$! (un matin, un lapin a tué un chasseur !)

  2. L_@pt_V_an_MenGen (L'appétit vient en mangeant.)

  3. VnÉ/p@100/cI (Venez souper à sans-souci.)

  4. PdM_n@ArT!lP (Pluie du matin n'arrête pas pèlerin.)

  5. Aprè5l4plu13l3b34u73mp5 (Après la pluie le beau temps.)

  6. If@lMpB1JgL@V (Il faut attendre la mort pour bien juger la vie.)

37.1.2. Périodicité

Un bon mot de passe se doit d'être changé souvent (même si cela peut paraître gênant).

37.1.3. Tester son mot de passe

Un mot de passe est loin d'être infaillible. Pour vérifier cela, on peut utiliser le logiciel John the Ripper.

Exercice : Installez john the ripper. Entrez un utilisateur toto avec le mot de passe toto. Entrez un utilisateur normal avec le mot de passe fruit. Pour votre compte, utilisez un mot de passe complexe comme vous l’avez appris dans ce chapitre. Montrer le résultat après avoir exécuté john the ripper pendant dix minutes :

Récupération de la dernière version du programme et installation :


vanvincq@Debian-Laptop:~$ wget http://www.openwall.com/john/g/john-1.7.9.tar.gz
vanvincq@Debian-Laptop:~$ tar xfz john-1.7.9.tar.gz; cd john-1.7.9/src
vanvincq@Debian-Laptop:~/john-1.7.9/src$ make linux-x86-64
ln -sf x86-64.h arch.h
make ../run/john ../run/unshadow ../run/unafs ../run/unique \
		JOHN_OBJS="DES_fmt.o DES_std.o DES_bs.o DES_bs_b.o BSDI_fmt.o MD5_fmt.o MD5_std.o BF_fmt.o BF_std.o AFS_fmt.o LM_fmt.o trip_fmt.o dummy.o batch.o bench.o charset.o common.o compiler.o config.o cracker.o crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o loader.o logger.o math.o memory.o misc.o options.o params.o path.o recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o unshadow.o unafs.o unique.o c3_fmt.o x86-64.o" \
		CFLAGS="-c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT" \
		LDFLAGS="-s  -lcrypt"
make[1]: entrant dans le répertoire « /home/vanvincq/john-1.7.9/src »
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_fmt.c
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_std.c
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops DES_bs.c
[...]
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unshadow.c
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unafs.c
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops unique.c
gcc -c -Wall -O2 -fomit-frame-pointer  -DHAVE_CRYPT -funroll-loops c3_fmt.c
gcc -c  x86-64.S
gcc DES_fmt.o DES_std.o DES_bs.o DES_bs_b.o BSDI_fmt.o MD5_fmt.o MD5_std.o BF_fmt.o BF_std.o AFS_fmt.o LM_fmt.o trip_fmt.o dummy.o batch.o bench.o charset.o common.o compiler.o config.o cracker.o crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o loader.o logger.o math.o memory.o misc.o options.o params.o path.o recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o unshadow.o unafs.o unique.o c3_fmt.o x86-64.o -s  -lcrypt -o ../run/john
rm -f ../run/unshadow
ln -s john ../run/unshadow
rm -f ../run/unafs
ln -s john ../run/unafs
rm -f ../run/unique
ln -s john ../run/unique
make[1]: quittant le répertoire « /home/vanvincq/john-1.7.9/src »
vanvincq@Debian-Laptop:~/john-1.7.9/src$ cd ../run

vanvincq@Debian-Laptop:~$ sudo adduser toto
Ajout de l'utilisateur « toto » ...
Ajout du nouveau groupe « toto » (1001) ...
Ajout du nouvel utilisateur « toto » (1001) avec le groupe « toto » ...
Création du répertoire personnel « /home/toto »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur toto
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
	Nom complet []: toto
	N° de bureau []: 
	Téléphone professionnel []: 
	Téléphone personnel []: 
	Autre []: 
Cette information est-elle correcte ? [O/n]O
vanvincq@Debian-Laptop:~$ sudo adduser normal
Ajout de l'utilisateur « normal » ...
Ajout du nouveau groupe « normal » (1002) ...
Ajout du nouvel utilisateur « normal » (1002) avec le groupe « normal » ...
Création du répertoire personnel « /home/normal »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX : 
Retapez le nouveau mot de passe UNIX : 
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur normal
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
	Nom complet []: fruit
	N° de bureau []: 
	Téléphone professionnel []: 
	Téléphone personnel []: 
	Autre []: 
Cette information est-elle correcte ? [O/n]O

Récupération des mots de passe cryptés et lancement de utilisation de John :


vanvincq@Debian-Laptop:~$ sudo unshadow /etc/passwd /etc/shadow > mypasswd
vanvincq@Debian-Laptop:~/john-1.7.9/run$ ./john ~/mypasswd
Loaded 3 password hashes with 3 different salts (generic crypt(3) [?/64])
fruit            (normal)
toto             (toto)
guesses: 2  time: 0:00:09:17 58% (2)  c/s: 177  trying: Rancid! - Angelo!
Use the "--show" option to display all of the cracked passwords reliably
Session aborted

vanvincq@Debian-Laptop:~/john-1.7.9/run$ ./john --show ~/mypasswd
toto:toto:1001:1001:toto,,,:/home/toto:/bin/bash
normal:fruit:1002:1002:fruit,,,:/home/normal:/bin/bash

2 password hashes cracked, 1 left

Après un bon 10min d'exécution (9min 17s exactement), rien n'a été trouvé pour mon propre mot de passe.

37.2. Les sauvegardes

Pour éviter de perdre toutes ses données, il existe plusieurs systèmes de sauvegardes.

37.2.1. Le système RAID

Le RAID (Redundant Array of Independent Disks) désigne les techniques permettant de répartir des données sur plusieurs disques durs afin d'améliorer soit la tolérance aux pannes, soit la sécurité, soit les performances de l'ensemble, ou une répartition de tout cela. Ce système est en général disponible sur les serveurs et gage de la continuité de service ainsi que de la disposition égale des données en cas de défaillance matérielle.

37.2.2. La synchronisation

La synchronisation locale ou distante vous assure l’intégrité de vos données et la réplication de celles-ci. Sous les systèmes GNU/Linux, la commande rsync peut parfaitement satisfaire la synchronisation en l'automatisant à l'aide d'une crontab par exemple.

Exercice : installez rsync et essayez de sauvegarder un répertoire de test de votre ordinateur vers le serveur. Créez ensuite une tâche dans la crontab qui exécute la sauvegarde toutes les dix minutes :


vanvincq@Debian-Laptop:~/Bureau/CP2L/JournalDeBord$ crontab -e
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
 */10 * * * * rsync -avz --delete -e "ssh -p 5108" ~/dossier cva@86.64.63.108:/home/auditeur/cva/public_html/dossier

37.2.3. Le robot de sauvegarde

AMANDA (Advanced Maryland Automatic Network Disk Archiver) est un logiciel libre de sauvegardes informatiques. Il est utilisé pour sauvegarder via le réseau un ensemble de postes clients et de serveurs (Unix, Linux, et Windows via Samba ou Cygwin). Il a été initialement développé à l'université américaine du Maryland, sous licence BSD. (Wikipédia).

37.3. Le chiffrement

"Cryptographie" n.f. Procédé (signes conventionnels, modification de l’ordre, de la disposition des signes, remplacement des signes...) permettant de rendre un message inintelligible, de protéger des données.

En terme de chiffrement, il existe deux grandes familles qui se divisent entre le symétrique et l’asymétrique. Toujours est-il que l’une et l’autre sont complémentaires.

Exemple de chiffrement par rotation des lettres :


vanvincq@Debian-Laptop:~/Bureau/CP2L/JournalDeBord$ echo "je vais bien maman" | tr a-z n-za-m
wr invf ovra znzna
vanvincq@Debian-Laptop:~/Bureau/CP2L/JournalDeBord$ echo "wr invf ovra znzna" | tr n-za-m a-z
je vais bien maman

Pour aller plus loin :

37.3.1. Le chiffrement symétrique

Il réside dans une clef unique connue de tous les participants. Si l’un d’eux laisse échapper la clef de chiffrement, la confidentialité devient nulle.

37.3.2. Le chiffrement asymétrique

Pour ce qui est du chiffrement asymétrique, la chose est un peu plus complexe. Chaque personne doit posséder une clef publique et une clef secrète. La première est prévue pour être dévoilée à tout un chacun, quant à la deuxième, elle doit être jalousement conservée dans un endroit sûr.

La première, publique, servira à chiffrer ou à vérifier une signature, la seconde, privée, servira à déchiffrer et à signer des données.

Exercice : installez gnupg et accessoirement kgpg. Récupérez la clef publique 0xFFAD5F7A puis envoyez un message signé et un message chiffré.

Pour l'exercice, j'ai utilisé seahorse pour générer ma clef et l'add-on enigmail pour signer et chiffrer mes courriels. Plus de détail concernant la génération de clefs sont disponible ici.

37.4. Un espace hermétique

Pour bénéficier de la signature et le chiffrement des courriels, il faut disposer de l'outil gnupg. Il permet de créer une paire de clef (publique et privée). La clef publique se doit d’être partagée avec vos interlocuteurs alors que la clef privée se doit d'être secrétement gardée. C’est elle qui vous permettra d’affirmer avec force que vous êtes bien qui vous prétendez être.

Exercice : dressez la liste des protocoles que vous pensez suffisants en décrivant le contexte de votre réseau :