Allez le vendredi c’est permis ! un peu de lecture avant ce week-end pour se détendre…
un TP rapide sur comment qu’on gère les mots de passes quand on est un g33k un vrai (avec des poils et tout)
C’est quoi un bon mot de passe ?
Tout d’abord quelques rappels théoriques sur comment on gère des mots de passes :
Un bon mot de passe, entre autre :
- doit respecter des règles de complexité (genre pas : 1234, azerty ou motdepassse)
- doit être renouvelé régulièrement (genre : date pas de 1999)
- doit être différent selon ce qu’il protège (banque != torrents)
- doit pas être stocké en clair ou accessible à tiers (pas sous le clavier ou sur la porte du réfrigérateur donc)
Toutes ces bonnes pratiques sont listés dans le doc de l’ANSSI sur ce sujet, disponible ici :
Comment ça fonctionne dans la vraie vie ?
En aucun cas un site internet ne stocke (ou « ne devrait stocker » en tous cas) votre mot de passe en clair. Un bon site (non, n’est pas un site mort…) stocke un « hash, empreinte ou encore condensat de votre mot de passe (Exemple d’algorithme de hash : MD5, SHA-1, SHA-2), jamais le mot de passe en clair ! En crypto, un hash à la particularité d’être simple à calculer dans un sens mais pas dans l’autre (fonction dit « à sens unique »)
Exemple :
Hash($Mdp) = M est rapide et simple à calculer
alors que :
Hash-1(M) = $Mdp est très complexe et long à calculer.
Ce hash a quelques propriétés notables :
- Obtenir une empreinte ou condensat « unique » d’une donnée,
Ex : ne fonctionne de hachage qui retourne un résultat sur 65 535 valeurs possibles a un ensemble résultat trop petit (pas comme le token du chef donc) - Que l’empreinte soit de taille fixe
Ex : 256 ou 512 bit - Que l’empreinte ne dévoile pas d’informations sur la donnée d’origine
Ex : Toto ne peut pas avoir otot comme hash - Qu’on ne puisse pas simplement trouver une collision
une fonction de hachage qui donne f(a)=c et f(b)=c aussi, n’est pas une bonne fonction de hashage
Un exemple de calcul du hash SHA1 en PowerShell :
PS H:\> $MdP = "AZERTY" PS H:\> $hasher = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider PS H:\> $digest = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes("$MdP")) PS H:\> [System.Convert]::ToBase64String($digest) UgNuWpa0AUGeO4cLs4WYKLERr9I= (ici c’est bien $digest le hash que je vous affiche en base64) (voir aussi Get-FileHash depuis PowerShell v4)
Donc quand un site web vous renvoie votre mot de passe en clair par mail quand vous l’avez oublié, vous devriez quitter ce site, car ce dernier stocke en clair votre mot de passe sinon il ne pourrait pas vous le renvoyer. C’est mal car si le site se fait trouer (entre autre), un attaquant pourrait récupérer et réutiliser ce mot de passe pour usurper votre identité (en particulier sur d’autre site si vous utilisez le même ou un dérivé du même partout)
Comment on attaque une protection par mot de passe
Pour votre culture, quelques méthodes d’attaques connues sur la protection par mot de passe :
- Brute force : on essaie toutes les combinaisons possibles c’est-à-dire a, b, c, […], puis aa, ab, […] puis aab, aac, etc.
C’est facile à implémenter, c’est long pour trouver mais si vous avez le temps, ça donne un taux de réussite de 100% puisque vous testez tous les mots de passes possibles - Dictionnaires : on essaye tous les mots présents dans une liste (genre le 1000 des mots de passe sur internet, oui ça existe)
C’est facile à implémenter, assez rapide à trouver pour les mots de passe « bateau », mais ça ne fonctionne pas si votre mot de passe est « 123rqegzefio hzeez$^$ù » - Table de hash (rainbow table) : vous avez récupéré le hash de votre mot de passe et vous essayer de trouver un hash qui correspond
(soit le bon mot de passe, soit une collision donc)
Implique d’avoir le hash à trouver, mais très efficace (quelques dizaine de secondes, selon les algos de hash utilisé). - Autres attaques indirectes : Keylogueur, pishing,
Complètement décoléré de la complexité de votre mot passe, puis qu’ici c’est l’utilisateur ou le poste qui est attaqué. - Pétage de genou en règle, expliqué dans le comic ci-dessous dans ce sublime XKCD :
Alors comment on gère ça intelligemment ça
- Hors ligne
Dans un classeur au coffre, c’est simple efficace, mais c’est relou à maintenir à jour et à accéder quand on en a besoin. - Fichier chiffré
Genre un zed! avec un Excel dedans, car seul les détenteurs des accès crypto peuvent l’ouvrir.
Par contre, le zed n’est pas prévu pour le stockage donc quand je l’ouvre je crée en fait une copie temporaire en clair sur mon poste, dans %temp% :"oh bah zut alors…"
Et c’est relativement facile à accéder pour un attaquant un peu motivé finalement, et en termes de trace sur le disque ça devient très moyen même.
- Zone chiffrée (Zone Central) :
Là on fait disparaître le problème du fichier temporaire chiffré.
Et on garantit la protection via de la crypto bien faite.
Je vous laisse voir avec PrimX pourquoi. - Et du coup on arrive au but de mon TP en fait un doc de l’ANSSI j’ai lu :
« Pour éviter leur stockage en clair dans un fichier texte ou un tableur, l’utilisation d’un coffre-fort de mots de passe est fortement recommandé. La liste des produits labellisés assurant cette fonction (par exemple, Keepass2) est disponible sur le site de l’ANSSI. »
La V2 est une version pro payante donc je vous invite à tester avec la V1 que vous devriez/pourriez utiliser chez vous.
<IdéeSlogan> Keepass : Le logiciel qui passe bien ! </IdéeSlogan>
OK je sors…
Et pour les particuliers :
Pour finir j’ouvre sur un soft concurrent de Keepass sur internet : LastPass qui fonctionne comme extension/module complémentaire du navigateur et qui fournis à peu près les même fonctionnalités sauf que votre base de mot de passe est stockée en ligne au lieu d’être placé en local dans un fichier. Il est un peu plus convivial et fournis des fonctions sympa (genre l’intégration avec le smartphone dans la version payante) ou gestion automatisée du mot de passe lors des inscriptions sur les sites.
Quelques pistes, donc :
- LASTPASS
- KEYPASS
- dashlane
- Un cerveau et beaucoup de mémoire (mais pour le coup je pense que des trucs comme keypass sont même mieux en termes de sécurité si bien utilisée)
Voilà, blindez bien vos clés donc…