Bonne question, et je suis content que vous l'ayez posée. Je veux que les gens trouvent ce fil de discussion lorsqu'ils le recherchent sur Google afin qu'ils ne fassent pas, espérons-le, les mêmes erreurs que de nombreuses autres entreprises.
Vous ne devriez pas simplement hash
mots de passe, vous devez les saler
et vous assurer que votre algorithme de hachage utilise une forme de SlowEquals
. Vous ne devriez pas vous arrêter là: vous devriez utiliser un algorithme de hachage sécurisé qui résiste énormément aux collisions
, comme bcrypt ou scrypt.
Pourquoi sel? Que sont les collisions?
Je vais utiliser md5 comme exemple car il est très connu. Ne l'utilisez pas, car il est vulnérable aux collisions et est très rapide , ce qui signifie qu'il est beaucoup plus facile à casser. Imaginons que vous hachiez simplement vos mots de passe sans sel. Vous finiriez par produire une sortie statique à peu près à chaque fois.
Par exemple, " myDarnPassword
" finirait par être converti en " aca6716b8b6e7f0afa47e283053e08d9
" lorsqu'il était haché en md5. À ce stade, vous pouvez créer une attaque par dictionnaire et utiliser des tables arc-en-ciel. Vous pouvez même générer une base de données qui convertit autant de caractères aléatoires en une base de données facilement consultable qui ne nécessitera pas de longues recherches dans les tables arc-en-ciel. Vous pouvez créer cela lentement au fil du temps et rechercher des hachages plus tard.
Vous créeriez une table ressemblant à ceci:
+ --------- ---------- + ---------------------------------- + | PASSWORD | UNSALTED_HASH | + ------------------- + --------------------------- ------- + | myDarnPassword | aca6716b8b6e7f0afa47e283053e08d9 | + ------------------- + --------------------------- ------- + | pleaseDontSueMe11 | 0dd395d0ec612905bed27020fb29f8d3 | + ------------------- + --------------------------- ------- +
Ensuite, vous choisiriez dans la base de données un peu comme ceci:
SELECT [mot de passe] FROM [table] WHERE [ unsalted_hash] = 'aca6716b8b6e7f0afa47e283053e08d9'
Et il renverrait myDarnPassword
, plus toutes les collisions survenues.
Avec suffisamment de puissance de traitement et de temps, vous pouvez créer des milliards de combinaisons et casser assez facilement un grand nombre de mots de passe en très peu de temps (je pourrais recommander de diviser les bases de données en longueurs de mot de passe en raison du nombre ). Cependant, vous auriez besoin d'une quantité colossale d'espace disque dur pour cela.
À ce stade, tout ce que vous avez vraiment à faire est de le rechercher sans perdre de puissance de traitement à tout forcer à chaque fois. Et si vous avez déjà volé les mots de passe d'autres personnes dans une base de données, vous pouvez les ajouter et les convertir en hachages. De nombreux sites Web l'ont déjà fait.
Lorsqu'un site Web valide votre mot de passe, il compare le mot de passe au hachage stocké, et s'il correspond au hachage de la base de données, il est considéré comme un mot de passe valide. Vous pouvez alors autoriser l'utilisateur à se connecter.
Saler le hachage peut aider à vaincre cette attaque, mais cela ne vous sauvera pas des collisions. Vous pouvez comparer les hachages piratés à votre liste de hachage qui a généré des collisions, puis saisir ce mot de passe sur un site Web, même si vous avez le mauvais mot de passe: tant que le hachage est validé, vous êtes pwned .
Qui se soucie si quelqu'un déchiffre mes mots de passe? Je m'en fiche!
Voici juste une petite collection d'exemples de ce que les hameçonneurs et autres individus malveillants pourraient avec vos mots de passe en texte brut non hachés et non salés. Il peut ne pas être nécessairement utilisé pour vous cibler directement, mais disons que Hacker
veut cibler Personne A
. Déduisons comment vous pouvez cibler Personne A
.
- Vous êtes
Hacker
. Votre travail consiste à pirater des sites Web et à développer une base de données pour agréger ces informations. -
Personne A
est une personne d'intérêt. Personne A
apparaît dans l'une de vos bases de données de sites piratés. Vous connaissez maintenant leur adresse e-mail et le mot de passe
qu'ils utilisent pour ce site Web.
- Vous pouvez maintenant essayer de vous connecter à leur
adresse e-mail
avec le mot de passe
que vous avez volé sur ce site Web. Doux, ça marche! - Maintenant que vous avez accès à leur messagerie, vous téléchargez tous leurs e-mails via
IMAP
, ou via leur messagerie Web. À ce stade, vous trouvez beaucoup de choses intéressantes. Ils communiquent avec Personne B
. - Vous pouvez en fait google les noms d'utilisateur et les adresses e-mail de certaines personnes, et cela pourrait afficher les sites Web sur lesquels ils publient. Cela fera apparaître d'autres sites Web que l'utilisateur utilise. Peut-être que vous pouvez essayer de pirater ces sites Web, ou peut-être que vous pouvez simplement en déduire ce qu'ils recherchent. Vous pouvez désormais
faire semblant d’être comme eux
ou trouver des informations supplémentaires. Les informations / activités peuvent inclure: - Noms d'utilisateur .
La personne A
publie en ligne sous le nom de Mark Buffalo
. C'est un nom relativement unique. Vous pouvez ensuite rechercher sur Google Mark Buffalo et rechercher les sites Web sur lesquels il publie. Peut-être révèle-t-il davantage sa personnalité sur d'autres sites? - Mots de passe . Peut-être que
Mark Buffalo
a le même mot de passe sur ce site Web. Peut-être pouvez-vous vous connecter à ce site Web et consulter ses communications privées avec d'autres personnes?
- Informations personnelles . Puisque vous connaissez l'identité de
Mark Buffalo
, que se passe-t-il s'il partage des informations personnelles
sur certains sites Web? Et s'il publie sur Craigslist à la recherche d'escortes masculines ou féminines et qu'il y laisse son numéro de téléphone? Vous avez déjà trouvé ses informations de téléphone, vous pouvez donc trouver un moyen de le configurer et de le faire chanter pour de l'argent / des informations / du pouvoir. Cela n'a pas grand-chose à voir avec le salage des mots de passe à moins que vous n'incluiez le numéro de téléphone, mais ils trouvent leur numéro de téléphone sur un autre site Web grâce à votre fuite. C'est l'un des nombreux moyens très puissants dont les informations peuvent être collectées et utilisées contre vous. Il s'agit, après tout, d'un forum Sécurité de l'information
, je souhaite donc utiliser cet exemple. - Informations familiales . Maintenant, ça devient effrayant. Nous avons les informations personnelles de Mark Buffalo. Regardons ses réseaux sociaux. Oh, il a un compte
Facebook
(je n'en ai pas). Pouvons-nous y accéder avec le même mot de passe? Si Buffalo utilise la même combinaison mot de passe / e-mail, alors probablement. Et vous pouvez probablement le déduire de son email auquel vous avez accédé plus tôt, où vous avez trouvé beaucoup de choses intéressantes. Nous pouvons maintenant nous connecter et lire ses messages Facebook. Maintenant, nous savons qui sont les membres de sa famille. Nous pouvons alors coordonner plus facilement l'attaque de chantage. - Autres informations de connexion . Depuis que nous avons eu accès à son email plus tôt, nous voyons qu'il a également un compte Skype. L'un d'eux est secret. Nous nous connectons et voyons qu'il flirte avec des gens sur Skype. Nous avons maintenant plus de matériel de chantage.
- Usurpation d'identité . Vous pouvez maintenant vous connecter et vous faire passer pour Buffalo sur une variété de sites Web. Peut-être qu'il est en fait un simple tireur et qu'il n'a jamais recherché une escorte, ou quoi que ce soit du genre? Eh bien, vous pouvez maintenant le transformer en un réprouvé à la recherche d'une escorte, du moins en apparence, en utilisant ses informations d'identification pour se faire passer pour lui en ligne. Imaginez les dommages que pourrait causer un politicien qui a été accusé à tort et contraint de démissionner.
- Ce qui facilite le piratage d’autres personnes . Vous pouvez ensuite envoyer des e-mails à la
Personne B
avec des pièces jointes infectées et faire semblant de le connaître. Vous avez lu suffisamment de courriels, vous êtes donc capable d'imiter Mark Buffalo
au point où vous lui ressemblez. Vous rédigez l'e-mail d'une manière qui laisse la Personne B
sans méfiance de ce qui se passe réellement, et maintenant vous pouvez faire la même chose à Personne B
, ou pire.
Et ce n'est qu'une petite collection d'idées. Il existe de nombreuses utilisations différentes des informations d'identification de quelqu'un d'autre. Saler et hacher vos mots de passe, utiliser des algorithmes de hachage résistants aux collisions tels que bcrypt et scrypt, et prévenir les attaques par injection SQL. S'il vous plaît, ne me transformez pas en un réprouvé à la recherche d'escorte! Sauvez Mark Buffalo!
(Je sais que certains sites Web peuvent bloquer votre tentative d'accéder à leurs services lorsque vous utilisez une adresse IP différente, mais il existe de nombreuses façons de contourner ce problème, et tous les sites Web ne le font pas) .
Au fait, félicitations pour votre éventuel recours collectif si vous êtes piraté.