Sauvegarder vos mots-de-passe dans vim

Il est fortement recommandé de ne jamais réutiliser le même mot de passe sur deux sites différents. Suite au vol d’un fichier contenants 160 millions de mots de passe du site LinkedIn en 2012, plusieurs personnes ont connu des problèmes liés à de la fraude ou de l’usurpation d’identité. En effet, si le mot de passe utilisé sur LinkedIn était aussi utilisé sur Paypal, eBay ou une banque alors le fraudeur pouvait facilement puiser dans votre compte. Mais si on utilise un mot de passe différent pour chaque site, notre liste deviendra longue très rapidement.

Une longue liste de mots de passe crée des problèmes:

  • on n’arrive pas à tous les mémoriser
  • il n’y a pas assez de place sur l’écran pour y coller tous les post-it  🙂

D’où l’apparition de logiciels de stockage de mots de passe. Ils sont bien commodes mais ils ne sont pas parfaits. Leur principal défaut est qu’ils sont graphiques et, par conséquent, ils sont plus lourds que nécessaire. En effet, la couleur, les icônes et la décoration n ont aucune utilité pour gérer une liste de mots de passe.

Alors pourquoi ne pas utiliser un éditeur de texte?

J’utilise vim pour stocker mes mots de passe. Il est facile à utiliser,  rapide au démarrage et il permet le chiffrage de son contenu. En plus, il est installé par défaut, peu importe votre distribution. Voyons comment l’utiliser:

Étape 1: création du fichier:

vi -x nom_du_fichier

Un mot de passe vous sera demandé. À vous d’en choisir un qui n’est pas trop facile mais que pourrez mémoriser toute votre vie.

Étape 2: renforcer l’algorithme de chiffrage

Par défaut, l’algorithme de chiffrage est zip et ce chiffrage peut être craqué. Il est très simple de choisir une meilleure méthode de chiffrage:

:set cryptmethod=blowfish2

Vous pouvez alors entrer vos sites et leur mots de passe.

Étape3: sauvegarder

:wq

Par la suite, on accède au fichier avec:

vi nom_du_fichier      # notez que le -x n'est pas requis

et si vous êtes amateur de performance, pourquoi ne pas créer un alias

alias mdp='vi ~/chemin/nom_du_fichier'

que vous déposerez dans le fichier .bash_profile de votre répertoire.

Si vous êtes du genre parano, 2 options supplémentaires peuvent être ajoutées à l’étape2:

:set nobackup
:set nowritebackup

Ces commandes indiquent à vim de ne pas créer des copies de sauvegarde ou temporaire.

Essayez, vous verrez que c’est simple et efficace. Et nul besoin  d’apprendre les commandes de vim.

Note1: les mots de passe LinkedIn ne sont pas les seuls à avoir été divulgués. En 2009, il y a eu intrusion dans le site RockYou.com. Un fichier contenant 32 millions de mots de passe a été dérobé et il est assez facile de consulter ce fichier sur Internet. Vous pouvez même trouver des études sur le contenu de ce fichier; on peut y voir que certains mots de passes sont beaucoup plus populaires que d’autres.

Note2: le chiffrage est une option dans vim. L’option est incluse avec toutes les distributions récentes. Pour s’en assurer, il suffit de faire:

vim  --version | grep cryptv

Si le mot cryptv est précédé d’un +, alors l’option est incluse. Sinon, vous ne l’avez pas.

Note3: si vous aviez un compte LinkedIn en 2012, vous pouvez vérifier si votre mot-de-passe a été volé en consultant le site https://haveibeenpwned.com/

 

Déchiffrage d’une communication SSL/TLS

L’approche classique pour déchiffrer des paquets SSL est d’utiliser un proxy ou un logiciel MITM.
Depuis quelques temps, WireShark déchiffre les paquets SSL si on lui fournit les clés du chiffrage. Il y a 2 façons d’obtenir ces clés:

PrivateKey

C’est la clé privée utilisée par le serveur. La seule façon de l’obtenir est d’avoir accès aux fichiers du serveur et de la copier vers votre machine WireShark. Attention à bien la protéger; cette clé ne doit pas être connue du public.
La position du fichier de clé varie d’un serveur à l’autre; vous avez donc intérêt à bien connaître votre serveur ou d’en avoir la documentation technique.
Lorsque la clé est copiée sur votre machine, il suffit d’en informer WireShark:

Éditer /Préférences/Protocols/SSL/Edit(RSA key list)/

On peut y spécifier:

– adresse IP du serveur SSL qu’on veut décoder (0 pour toutes)
– port des messages à décoder (généralement 443, 0 pour tous)
– protocole (smtp, http, etc): vide indique tous les protocoles
– key file: le nom du fichier qui contient la clé importée
– password: mot de passe du fichier (si besoin est)

Il peut y avoir plusieurs de ces fichiers. Wireshark choisit le fichier approprié en fonction des adresseIP/port/protocole que vous avez spécifié plus haut.
Note: la méthode PrivateKey ne fonctionne qu’avec un chiffrage de type RSA. Les chiffrages DH (Diffie-Hellman) sont plus complexes et ne peuvent être décodés avec la méthode PrivateKey. Utilisez plutôt la seconde méthode (preMaster Secret).

preMaster Secret

Il ne s’agit pas vraiment d’une clé mais plutôt d’un résultat intermédiaire enregistré lors de la négociation SSL initiale entre le client et le serveur. Firefox et Chrome permettent d’enregistrer facilement ces résultats intermédiaires. Cette option porte le nom de SSLKEYLOGFILE.

Pour activer l’option SSLKEYLOGFILE

Il faut spécifier où seront déposés les secrets.
Dans une fenêtre bash:

export SSLKEYLOGFILE=/chemin/fichier; firefox (ou chrome)

Une autre façon est de l’activer de façon permanente. Ajoutez à la fin de votre fichier .bashrc:

export SSLKEYLOGFILE=/chemin/fichier

Redémarrez l’usager pour que cette commande prenne effet puis démarrez Firefox (ou Chrome)
Indiquer à Wireshark où est ce fichier:
Éditer/Préférences/Protocols/SSL
Entrez le chemin/fichier dans le champ (pre)Master-Secret log filename
Si les 2 étapes précédentes ont bien fonctionné, vous verrez dans Wireshark, pour chacun des paquets SSL, un nouvel onglet Decrypted SSL data au bas de la fenêtre de données.

Versions:

Méthode Outil Version Note
PrivateKey Wireshark >=1.6
PreMasterSecret
(SSLKEYLOGFILE)
Firefox <=48
Firefox > 48 Seulement dans la version pour développeurs
Chrome < 59
Chrome   59 Seule la version 59 a été testée
Chrome > 59
Wireshark >=1.8 PrivateKey et preMaster

Conclusion

Le déchiffrage des paquets SSL peut s’avérer très utile lorsque vous avez à régler un problème subtil avec un nouveau serveur (ou un objet Internet). Vous avez surement compris que la 2ième méthode (SSLKEYLOGFILE) est la plus facile.

Références:

fr.wikipedia.org/wiki/Transport_Layer_Security
fr.wikipedia.org/wiki/Échange_de_clés_Diffie-Hellman
jimshaver.net/2015/02/11/decrypting-tls-…
www.root9.net/2012/11/ssl-decryption-with-wireshark-private.html
www.m00nie.com/2015/05/decrypt-https-ssltls-with-wireshark/
certsimple.com/blog/ssl-wireshark-mac-osx
developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format

Quelques astuces Bash

Même si vous êtes habile pour pianoter sur un clavier, il est possible d’augmenter votre performance en utilisant quelques astuces de bash.

L’auto-complément est évidemment une technique très efficace mais il y a aussi plusieurs astuces d’édition qu’il y a avantage à connaître.

Auto-complément

La touche Tab permet de compléter le mot courant. C’est utile pour les mots longs ou si vous ne vous souvenez pas de l’orthographe exact.

Si le Tab est donné durant le 1er mot, l’expansion du Tab proposera toutes les commandes disponibles qui débutent avec les caractères entrés. S’il n’y en a qu’une, elle s’inscrira dans votre ligne de commande, sinon vous devrez entrer des caractères supplémentaire pour raffiner la sélection.

Si la touche Tab n’est pas dans le 1er mot, alors bash proposera une liste des fichiers du répertoire courant.

L’auto-complément est tellement utile que son concept a été étendu pour le rendre plus intelligent. Mais cette fonctionnalité n’est possible que pour certaines commandes. Pour ces commandes, si le Tab est utilisé ailleurs que dans le 1er mot, alors la recherche sera optimisée en fonction du 1er mot. Par exemple, si vous entrez Tab après man conf, alors bash vous proposera une liste de toutes les pages de manuel des commandes qui débutent par conf.

Nous verrons, dans un autre article, comment on peut ajouter nous-même la fonctionnalité d’auto-complément à une commande quelconque.

Accès à l’historique

Toutes vos lignes de commandes sont mémorisées dans un fichier d’historique. Les touches de flèches verticales vous permettent de vous promener dans l’historique et de récupérer une de ces vieilles commandes. De plus, la combinaison ctrl-r permet de rechercher dans le fichiers d’historique en fonction des caractères que vous entrez.  Un ctrl-r supplémentaire permet d’aller plus loin dans le fichier. Utilisez une touche de flèche horizontale lorsque vous avez la commande désirée ou que vous voulez terminer la recherche. Pour plus de détails.

Mise en commentaire Alt-#

Vous est-il déjà arrivé, en cours d’édition d’une commande, de constater que vous avez un blanc de mémoire? Vous allez alors dans une autre fenêtre (ou un autre onglet) et vous interrogez man. Mais si vous n’avez pas cette autre fenêtre, vous pouvez utiliser l’astuce suivante. Si vous utilisez Alt-# dans votre commande courante, un # sera introduit en début de commande (pour en faire un commentaire) et la commande se terminera sans effet. Après avoir consulté man, la flèche ascendante vous ramène votre commande et il n’y a plus qu’à la compléter et enlever le #.

Rappel du premier mot de la commande précédente

La combinaison Alt-. vous ramène le premier mot de la commande précédente.

Dernier argument !$

Très utile lorsque vous avez à entrer 2 commandes qui se terminent par le même argument. Exemple:

nano chemin/fichier
lp !$

nano est un éditeur de texte et lp est une commande d’impression. L’expansion du !$ récupère le dernier argument de la commande précédente. Vous pouvez obtenir le même résultat en utilisant Esc et . (touche Esc suivie de la touche . )  ou Esc_. Vous pouvez utiliser cette séquence plusieurs fois pour avoir accès au dernier paramètre d’une plus vieille commande.

nième argument

De la même façon qu’avec !$, vous pouvez utiliser !:n pour obtenir le nième argument

Commandes d’édition de la ligne en cours

  • ctrl-a déplace le curseur vers le début de la ligne
  • ctrl-e déplace le curseur vers la fin de la ligne
  • ctrl-t permute le caractère courant avec le précédent (ou les 2 derniers si le curseur est en fin de ligne). C’est très utile.
  • alt-t intervertit 2 mots. Semblable à ctrl-t
  • alt-d supprime le mot (ou portion de mot) après le curseur
  • ctrl-w efface le mot à la gauche du curseur
  • ctrl-u coupe tous les caractères à la gauche du curseur
  • ctrl-k coupe tous les caractères à la droite du curseur
  • ctrl-y ramène les caractères du presse-papier (coupés par ctrl-u ou ctrl-k, etc)
  • ctrl-l efface le contenu de la fenêtre en conservant la ligne courante
  • alt-u met en majuscules le mot (ou portion de mot) qui suit le curseur
  • alt-l met en minuscules le mot (ou portion de mot) qui suit le curseur
  • alt-c met en majuscule la lettre sous le curseur

Autres combinaisons utiles

  • ctrl-c termine le programme en cours
  • ctrl-z met en pause le programme en cours
  • ctrl-l nettoie la fenètre
  • ctrl-s bloque le défilement de texte
  • ctrl-q débloque le défilement de texte
  • ctrl-d signale une fin de fichier. En ligne de commande, il ferme la fenètre

Le presse-papiers du bureau (ne pas confondre avec celui de bash)

  • ctrl-C copier vers le presse-papiers (notez la majuscule qui nécessite Shft)
  • ctrl-V ramener le presse-papiers (notez la majuscule qui nécessite Shft)