15/11/2024

Commandes et Système

Comment créer une archive 7-Zip chiffrée en ligne de commande sous Linux ?

I. Présentation

Dans cet article, nous allons voir comment créer une archive ZIP chiffrée avec un mot de passe en utilisant la commande "7z" sous Linux. Cette méthode permet de protéger vos fichiers sensibles en ligne de commande de manière efficace et sécurisée.

La commande "7z" utilise par défaut l’algorithme de chiffrement symétrique AES-256, connu pour sa robustesse face aux puissances de calcul actuelles. Nous privilégions l'utilisation de 7z plutôt que la commande zip, souvent native, car cette dernière utilise un mécanisme de chiffrement considéré comme moins sécurisé.

Il est important de noter que les archives au format 7z (7-zip) ne pourront pas être ouvertes par l'outil natif de Windows, à moins d'utiliser Windows 11 et d'avoir installé la mise à jour de juillet 2024, car elle apporte cette nouveauté. Sinon, il sera nécessaire d'utiliser l'utilitaire "7-Zip" sous Windows également. Pour ce faire, il suffit de double-cliquer sur l'archive et de saisir le mot de passe lorsque cela est demandé.

Version originale de l'article : 5 décembre 2017.

II. Installation de 7-Zip sous Linux

Sur un système Linux classique, il y a des chances que 7z soit déjà présent sur votre système, vous pourrez le vérifier en utilisant la commande "which", suivie du nom de la commande à rechercher :

# Recherche de la commande 7z et résultat (aucun) si elle n'est pas installée
$ which 7z

# Recherche de la commande 7z et résultat si elle est installée
$ which 7z

/usr/bin/7z

Si ce n'est pas le cas, vous pourrez l'installer avec les commandes suivantes :

# Installation de 7zip sous Debian et dérivés
apt-get install 7zip

# Installation de 7zip sous RedHat et dérivés
sudo yum install p7zip

# ou pour les systèmes utilisant dnf (comme Fedora)
sudo dnf install p7zip

III. Utilisation de 7z pour protéger une archive 7-Zip

Pour l'exemple, je dispose d'un répertoire "projet" contenant plusieurs dossiers et fichiers. À savoir que la procédure de chiffrement/déchiffrement est la même si l'on travaille sur un dossier avec une grande arborescence ou un unique fichier.

$ tree projet

projet
├── css
├── data.json
├── index.html
├── js
    │   └── main.js
└── projet.csv

Pour compresser ce répertoire et son contenu dans une archive nommée "secure.7z," nous utiliserons la commande suivante :

# Compresser un fichier/répertoire dans une archive 7z chiffrée
$ 7z a /tmp/secure.7z /tmp/projet/ -p

7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
64-bit locale=C.UTF-8 Threads:10 OPEN_MAX:1024

Scanning the drive:
3 folders, 4 files, 0 bytes

Creating archive: /tmp/secure.7z

Add new data to archive: 3 folders, 4 files, 0 bytes

Enter password (will not be echoed):

Files read from disk: 0
Archive size: 207 bytes (1 KiB)
Everything is Ok

Ici, l'option "-a" permet de spécifier que nous souhaitons créer une archive, on précise ensuite le nom de l'archive à créer, le nom du ou des fichiers à compresser. L'option "-p" permet d'indiquer que nous désirons chiffrer l'archive à l'aide d'un secret. Celui-ci nous sera demandé juste après l'exécution de la commande.

Il n'est, en effet, pas conseillé d'utiliser l'option "-p" en spécifiant le mot de passe directement dans la ligne de commande (bien que ce soit possible) :

# Création d'une archive 7z chiffrée en spécifiant le secret dans la ligne de commande
# NON RECOMMANDE
7z a /tmp/secure.7z /tmp/test.txt -pMonp@ssw0rd
# NON RECOMMANDE

De cette façon, le mot de passe saisi apparaît en clair dans le terminal et peut atterrir, entre autres, dans votre historique de commande. Il pourra alors être lu potentiellement par un autre utilisateur du système (collègue, attaquant, etc) :

# Visualisation de l'historique de commande pour retrouver un mot de passe
$ history
[...]
322 7z a /tmp/secure2.7z /tmp/projet/ -pMonp@ssw0rd
323 history

À présent, le contenu de l'archive est chiffré, il est à noter que le nom des fichiers seront toujours lisibles en clair. La lecture de leur contenu sera cependant impossible sans saisie du mot de passe permettant de déchiffrer ces archives. Nous pouvons lister le contenu d'une archive (même chiffrée) avec l'option "l" de 7z :

# Lister le contenu d'une archive 7z 
$ 7z l secure.7z 

[...]
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-04 16:40:35 D....            0            0  projet
2024-06-04 16:40:35 D....            0            0  projet/css
2024-06-04 16:40:39 D....            0            0  projet/js
2024-06-04 16:40:30 ....A            0            0  projet/data.json
2024-06-04 16:40:30 ....A            0            0  projet/index.html
2024-06-04 16:40:39 ....A            0            0  projet/js/main.js
2024-06-04 16:40:30 ....A            0            0  projet/projet.csv
------------------- ----- ------------ ------------  ------------------------
2024-06-04 16:40:39                  0            0  4 files, 3 folders

Pour rappel : l'utilisation d'un mot de passe fort est fortement recommandé.

IV. Déchiffrer une archive chiffrée avec 7z

Nous allons à présent voir comment déchiffrer une archive 7z chiffrée (si nous connaissons le mot de passe associé bien sûr). Il faut pour cela utiliser l'option "x" (le "x" de extract). Il s'agit de la commande standard de décompression, 7z reconnaitra automatiquement qu'il s'agit d'une archive chiffrée et vous demandera le secret associé :

# Décompression et déchiffrer une archive 7z
7z x /tmp/securez.7z

7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
64-bit locale=C.UTF-8 Threads:10 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 282 bytes (1 KiB)

Extracting archive: secure.7z
--
Path = secure.7z
Type = 7z
Physical Size = 282
Headers Size = 266
Method = LZMA2:12 7zAES
Solid = -
Blocks = 1

Enter password (will not be echoed):
Everything is Ok

Folders: 3
Files: 4
Size: 2
Compressed: 282

On notera au passage la détection de l'algorithme de chiffrement utilisé (7z AES).

V. Conclusion

La protection d'une archive ZIP par mot de passe est simple et très utile, notamment lorsque l'on souhaite faire transiter l'archive par des réseaux qui ne sont pas de confiance ou sur une clé USB pouvant être perdue, volée, etc. Le stockage des sauvegardes peut également faire l'objet d'une protection pour se protéger d'un vol ou d'une modification.

Il ne faut cependant ne pas oublier qu'un attaquant ayant volé une archive ZIP chiffrée disposera de tout le temps nécessaire pour effectuer une attaque de type brute force par dictionnaire dessus. Il finira nécessairement par trouver la bonne combinaison. Il est donc nécessaire et recommandé d'utiliser un mot de passe très robuste afin que l'attaquant finisse par abandonner par manque de temps ou de puissance de calcul.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Comment créer une archive 7-Zip chiffrée en ligne de commande sous Linux ?

  • Merci pour cet article super pratique !

    Je conseille cependant aux lecteurs d’utiliser gpg pour chiffrer une archive que 7zip. Tout simplement car la qualité de l’algorithme de chiffrement implémenté dans gpg est réputé plus sûr (car plus testé) que celui de 7zip.

    La commande est la suivante : gpg –cipher-algo AES256 –passphrase file

    Bonne journée 🙂

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.