web-dev-qa-db-fra.com

Pourquoi seuls les mots de passe sont-ils hachés?

Je viens d'apprendre quelques choses sur les algorithmes de hachage - MD5 et SHA-1. Donc, si je ne me trompe pas, les mots de passe sont hachés de sorte que dans une situation rare où votre base de données est compromise, un pirate ne peut pas voir tous les mots de passe de votre base de données car les mots de passe sont hachés. MD5 n'est plus sûr car la plupart des mots de passe courants et leurs valeurs hachées sont disponibles sur Internet. Et donc les gens utilisent maintenant d'autres algorithmes de hachage.

Donc, mes questions sont:

  1. Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve des piratages"?

  2. Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés? Je veux dire qu'il peut changer d'autres colonnes de données. Par exemple, il pourrait rechercher son nom d'utilisateur et augmenter son solde bancaire. Alors, tous les champs ne devraient-ils pas être hachés?

49
Aman Kothari

Certaines choses d'abord:

  • Oubliez immédiatement MD5. C'est vieux et faible.
  • Idéalement, oubliez également SHA1. Il existe SHA2 et SHA3.
  • Ces algorithmes de hachage dans leur forme pure sont utiles pour de nombreuses choses, mais pas pour les mots de passe. Utilisez-les en combinaison avec par exemple. PBKDF2, ou utilisez bcrypt (et n'oubliez pas le salage).

Donc, si je ne me trompe pas, les mots de passe sont hachés de sorte que dans une situation rare où votre base de données est compromise, un pirate ne peut pas voir tous les mots de passe de votre base de données car les mots de passe sont hachés.

Correct. Bien que cela n'aidera pas à rendre votre serveur plus sûr (après tout, il est déjà compromis dans une telle situation), il empêche par exemple. l'attaquant utilisant les mots de passe sur d'autres sites. Malheureusement, la plupart des gens utilisent un seul mot de passe pour plusieurs choses.

Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve des piratages"?

Vous pourriez (et vous devriez). Mais:

  • Même avec tous vos efforts, il y a toujours une chance que l'attaquant puisse y accéder. Bogues dans les logiciels et les appareils que vous ne connaissez pas et/ou que vous ne pouvez pas résoudre, et bien d'autres choses.
  • Souvent, vous ne pouvez pas donner le meilleur de vous-même à cause des gestionnaires qui ne pensent pas que la sécurité est importante, n'ont pas de budget pour cela, etc.

Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés? Je veux dire qu'il peut changer d'autres colonnes de données. Par exemple, il pourrait rechercher son nom d'utilisateur et augmenter son solde bancaire. Alors, tous les champs ne devraient-ils pas être hachés?

Si tous les champs sont hachés, la base de données est également inutile pour vous; donc vous ne pouvez pas faire ça. N'oubliez pas qu'un bon hachage ne peut pas être inversé.

Comme indiqué ci-dessus, dès que votre DB/Server est compromis, les dégâts pour vous sont déjà survenus. Les mots de passe hachés empêchent simplement que l'attaquant ait accès à d'autres comptes de vos utilisateurs (et alors certains utilisateurs vous poursuivraient en justice, donc le hachage vous aide aussi).

60
deviantfan

MD5 et SHA-1 ne sont plus sûrs, car "la plupart des hachages de mot de passe sont désormais sur Internet". En fait, l'utilisation de sels pour rendre les hachages de mot de passe uniques au monde rend cela impossible. Ils sont obsolètes car ils sont trop rapides, et trop de mots de passe candidats peuvent être testés trop rapidement contre un hachage volé pour plus de confort.

L'inconvénient du hachage est qu'il n'est pas réversible. C'est pourquoi il ne peut pas être utilisé pour toutes les données sensibles. Votre solde bancaire, par exemple, n'est pas très bon pour vous ou pour la banque s'il s'agit de hachages, et aucun de vous ne sait de quoi il s'agit.

22
Xander
  1. Bien que ce ne soit probablement pas si facile avec des systèmes bien configurés à l'esprit, plusieurs vulnérabilités au niveau du système d'exploitation ou de l'application (comme l'injection SQL, peut-être même une inclusion de fichier) peuvent conduire à un compromis dans la base de données, comme c'est souvent le cas en réalité. La protection des mots de passe en les hachant est un exemple de défense en profondeur. Même si une ligne de défense échoue, il devrait toujours être relativement difficile d'accéder aux mots de passe réels.

  2. Les mots de passe sont une bonne cible pour plusieurs raisons. D'une part, ils permettent d'usurper l'identité des utilisateurs, plutôt que de lire, modifier ou supprimer des données avec le compte de l'attaquant (éventuellement compromis). Les utilisateurs ont également tendance à réutiliser les mots de passe, donc un mot de passe volé dans une application a de très bonnes chances d'être valide pour les autres comptes du même utilisateur. Quant à savoir pourquoi les autres données ne sont pas hachées - le hachage est un moyen, vous ne pouvez pas récupérer la valeur d'origine d'un hachage (du moins pas trivialement, en réalité et avec de nombreuses fonctions de hachage, vous avez une bonne chance, mais ignorons cela pour un moment). Être à sens unique signifie que les fonctions de hachage sont bonnes pour vérifier si un mot de passe entré est le même que celui stocké, mais il n'est pas bon pour stocker les données dont vous avez réellement besoin sous sa forme non cryptée. Et c'est la solution que vous cherchiez peut-être, le chiffrement, par opposition au hachage. C'est en effet une bonne idée de crypter des données sensibles dans une base de données, mais cela aussi a ses propres problèmes, par exemple la gestion des clés.

8
Gabor Lengyel

Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve des piratages"?

Souvent, une base de données peut être piratée via une application Web à l'aide de l'injection SQL. Nous devons absolument fixer l'injection SQL en priorité. Cependant, dans une grande application, il suffit qu'un développeur fasse une erreur sur une ligne pour introduire une telle vulnérabilité. Donc, pendant que nous essayons de l'arrêter, nous planifions également d'autres défenses en cas de vulnérabilité.

Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés? Je veux dire qu'il peut changer d'autres colonnes de données. Par exemple, il pourrait rechercher son nom d'utilisateur et augmenter son solde bancaire. Alors, tous les champs ne devraient-ils pas être hachés?

Dans de nombreux cas, l'injection SQL permet aux attaquants de lire les données, mais pas de les modifier. Si les mots de passe n'étaient pas hachés, ils pouvaient se connecter en tant qu'autres utilisateurs et apporter des modifications. Le hachage de mot de passe permet d'éviter cela. De plus, les utilisateurs réutilisent souvent les mots de passe sur de nombreux sites Web, même si c'est une mauvaise pratique de le faire.

Pourquoi seuls les mots de passe sont-ils hachés?

Dans une application bien conçue, tous les jetons d'authentification sont hachés. Cela inclut les ID de session et les jetons de réinitialisation des mots de passe, ainsi que les mots de passe. Les autres données (par exemple, votre solde bancaire) ne sont pas hachées, car l'application a besoin des données au format texte pour fonctionner.

8
paj28

tous les champs ne doivent-ils pas être hachés?

C'est une question intéressante, alors considérons les ramifications si (disons) le nom d'utilisateur a également été haché. En ce moment, je suis "Nick Gammon" sur Stack Exchange. Si mon nom d'utilisateur a été haché, au lieu d'un message par Nick Gammon, nous verrions un article de 80a8694f4a2950e075d142e97ddb809b415bf85f084dafd9fb78fed9551905f3 en réponse à une question de 76d6d4c28518362c96d55f52cfdf27908baadf6f37973eb42cfd515b4c96294a1. Vous pouvez voir que ce serait incroyablement fastidieux. (N'oubliez pas, vous ne pouvez pas inverser un hachage pour récupérer l'original).

OK, vous pourriez dire "eh bien, gardez un nom de connexion (que vous hachez) et aussi un nom d'affichage". Mais alors, si vous avez vu que mon nom d'affichage était "Nick Gammon", vous pourriez deviner que c'était aussi mon nom de connexion (ou une variante simple de celui-ci), donc le hachage n'a rien donné.

Ensuite, vous pourriez craindre que si quelqu'un accède à la base de données, il puisse également voir les adresses e-mail, vous devez donc les hacher également. Mais vous ne pouvez pas envoyer un e-mail à une adresse e-mail hachée (par exemple pour vous informer de nouveaux messages ou d'une baisse du solde bancaire) afin que cela ne fonctionne pas. OK, vous conservez donc l'adresse e-mail en texte brut, mais vous pouvez désormais probablement déduire le nom d'utilisateur de l'adresse e-mail.


pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve du piratage"?

Aucune conception ne permettra à un employé de confiance d'être soudoyé pour faire une copie de la base de données. Si les données sont là, alors les personnes disposant d'une autorisation suffisante devront pouvoir y accéder, ou elles pourraient tout aussi bien ne pas exister.

Je pense que certaines des récentes fuites de sécurité sont arrivées à des organisations qui pensaient que leur base de données était si "à l'épreuve du piratage" qu'elles n'avaient pas besoin de se soucier de hacher leurs mots de passe. Oops.


  1. Des notes supplémentaires pour déterminer qui c'est. :)
5
Nick Gammon

Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve des piratages"?

Pourquoi avons-nous besoin d'hôpitaux? Pourquoi ne pouvons-nous pas sécuriser la route au lieu d'avoir des hôpitaux?

Un système totalement "hack-proof" est une illusion. Il existe des millions de façons de pirater un système. Vous devez vous défendre contre chacun d'eux. Un attaquant n'a besoin que d'en trouver un.

Cela vous oblige à connaître toutes les façons. Et que vous n'avez pas fait d'erreur (regardez simplement le paramètre par défaut pour Mongo-DB: accès administrateur non authentifié, puis combinez-le avec de nombreux administrateurs définissant la base de données pour qu'elle soit accessible à partir d'Internet pour des raisons de commodité ou à cause de manuels médiocres) . Et avoir les ressources. Et pour rester à jour lorsque de nouveaux défauts sont découverts. Et la même chose pour tous les fournisseurs de logiciels et services et matériels que vous utilisez. Et qu'aucun d'eux n'avait de mauvaises intentions. Et qu'il existe des mises à jour pour les nouvelles failles découvertes (les smartphones Android sont connus pour ne pas être très bien desservis par des mises à jour de sécurité). Et qu'il n'y a pas de défauts inconnus que l'attaquant connaisse.

Êtes-vous sûr que vous vous êtes défendu contre chacun d'eux? À qui faites-vous confiance? Qu'en est-il de l'administrateur qui a été lâché et qui a toujours accès à une copie de la sauvegarde de la base de données? Avez-vous effacé le stockage correctement avant de le revendre ou de le jeter? Qui a accès aux sauvegardes?

Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés? Je veux dire qu'il peut changer d'autres colonnes de données. Par exemple, il pourrait rechercher son nom d'utilisateur et augmenter son solde bancaire.

  1. Il se peut qu'il n'ait qu'un accès en lecture seule à la base de données. Par exemple, lorsqu'il a obtenu une sauvegarde entre ses mains lorsqu'elle a été stockée sur un serveur Web non sécurisé ou que son vecteur d'attaque ne permet que la lecture.
  2. Il pourrait n'avoir accès qu'à une partie du système où les mots de passe sont stockés mais pas au système où les soldes sont stockés.
  3. De nombreuses bases de données professionnelles ont une piste d'audit. Supposons que vous modifiez votre solde dans la base de données. Cela pourrait déclencher leurs alarmes, car le système ne voit aucune réduction correspondante dans un autre solde et aucune autorisation pour cette transaction, etc. et c'est facile à voir. Si vous vous connectez à la place en tant qu'un autre utilisateur et appuyez sur transférer 1000 $ vers un autre compte, cela semblera plus légitime.
  4. Vous pouvez utiliser les données de connexion pour usurper l'identité d'un autre utilisateur et il sera blâmé (de nombreux fournisseurs plus importants ont déjà des heuristiques pour détecter de telles choses automatiquement ou lorsqu'ils sont revendiqués)
  5. Heure d'attaque (-vecteur) et heure d'accès: vous n'avez besoin d'attaquer qu'une seule fois, mais vous pouvez utiliser les informations d'identification plus tard (de nombreux utilisateurs ne changent pas de mot de passe pendant des années ou jamais)
  6. De nombreux utilisateurs moins techniques réutilisent les mots de passe sur d'autres sites
  7. Vous avez plus de temps jusqu'à ce que l'attaquant puisse se faire passer pour les utilisateurs après avoir attaqué

Ce sont les premières raisons auxquelles j'ai pensé et il y en a bien d'autres.

5
H. Idden

Parce que ce n'est pas seulement un accès distant et non autorisé contre lequel il faut se protéger. Parfois entiercentres de données disparaissent. Une fois que les méchants ont les disques qui contiennent les fichiers de base de données, ils peuvent être lus à loisir. Ensuite toutes les données non cryptées peuvent être prises - numéros de carte de crédit, noms, adresse, e-mail, numéros de téléphone, historique des achats. Tout ce qui facilite le vol d'argent ou le vol d'identité.

La bonne pratique actuelle consiste à chiffrer tout ce qui est personnellement identifiable ou financièrement sensible. Plusieurs SGBD prennent en charge le chiffrement au repos (c'est-à-dire sur le disque) et en vol (tout en étant transférés du serveur DB à l'application).

2
Michael Green

La "défense en profondeur" est le principe selon lequel plusieurs couches de sécurité redondantes sont préférables, et plus précisément qu'aucun composant d'un système sécurisé ne doit faire confiance à un autre composant d'un système sécurisé. Dans ce cas, la couche de hachage ne doit pas supposer que la base de données elle-même est sécurisée.

Vous avez posé d'autres questions techniques sur le hachage qui sont traitées en détail dans les autres réponses, mais le principe plus fondamental de la défense en profondeur - "pourquoi verrouiller votre porte deux fois?" - est quelque chose que vous semblez manquer.

Je suis sûr que vous avez suffisamment entendu parler de cas de violations de sécurité très médiatisés en 2016 pour savoir que, dans l'ensemble, nous faisons beaucoup trop pe, pas trop.

2
djechlin

Ne vous limitez pas en analysant uniquement l'attaque de l'extérieur. Vous devez voir la situation dans son ensemble ... pensez aux mesures de sécurité comme des couches d'oignon. Vous empilez autant que vous le pouvez dans l'espoir de fermer tout angle d'attaque. Les hachages de mot de passe font partie de ces couches.

Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve des piratages"?

Peu importe la difficulté de pirater la base de données. Considérez que le hachage de mot de passe est censé protéger le mot de passe même du système ou de l'administrateur de base de données.

Notez que même si vous essayez de le faire, il n'est pas nécessairement facile de protéger la base de données de mots de passe. Comment le protégeriez-vous? Avec un autre mot de passe? Où stockeriez-vous ce mot de passe principal? Comment protégeriez-vous le mot de passe principal contre une personne capable de tout lire sur le système?

Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés?

Eh bien, pour essayer de les attaquer.

Notez comment les mots de passe sont utilisés: l'utilisateur légitime remet un nom d'utilisateur et un mot de passe en clair à votre écran de connexion, le texte clair est ensuite haché et comparé au hachage du mot de passe.

Chaque attaquant peut faire exactement la même chose, sauf le faire sur l'écran de connexion réel/L'invite est inefficace - cela prend du temps et est facilement détecté; de nombreux systèmes verrouillent un compte après quelques mauvaises tentatives.

Ainsi, lorsque l'attaquant obtient la liste des hachages de mot de passe, il peut faire le même hachage dans son propre programme - à une vitesse aveuglante, et surtout avec des attaques "dicitonary" ou "Rainbow", qui échangent RAM/stockage contre le temps.

Alors, tous les champs ne devraient-ils pas être hachés?

Vous ne pouvez pas hacher tous les champs car votre application doit simplement connaître la valeur des autres champs. Il est difficile de récupérer la valeur d'une version hachée, même pour un utilisateur légitime.

Mais en fait, il y a sont des bases de données qui font quelque chose comme ça - elles chiffrent (pas hachent) les données réelles également. Vous voulez déterminer si cela en vaut la peine du point de vue des performances, et vous devez ensuite vous assurer que le chiffrement offre réellement une réelle sécurité. C'est-à-dire que vous devez vous assurer que votre clé reste protégée pendant que la base de données doit y avoir accès, etc.

Le cryptage n'est pas approprié pour les mots de passe car nous ne voulons en fait pas que les mots de passe puissent être décryptés (mêmes idées qu'au début => à l'intérieur des travaux, et la difficulté de rendre la clé de cryptage plus sécurisée que les mots de passe réels que vous vouliez sécuriser en premier lieu).

2
AnoE

Le piratage d'une base de données est-il aussi simple?

Non, ce n'est pas si simple. Une configuration mal configurée rend les bases de données vulnérables et les expose aux attaquants. Il convient d'appliquer tous les correctifs disponibles pour la version de la base de données utilisée et, si possible, d'exécuter la dernière version.

Je veux dire, au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou plus résistante au piratage?

Les gens continuent d'essayer de trouver de nouveaux algorithmes de hachage car des collisions sont détectées dans l'algorithme de hachage actuel. Ce n'est pas comme si nous ne pouvions pas trouver de moyens de sécuriser les bases de données.

pourquoi Hashing?

  1. Le hachage garantit à l'utilisateur final que ses jetons et mots de passe secrets sont stockés dans un format irréversible.

  2. Le hachage garantit que l'application qui accède à la base de données n'a pas accès aux données secrètes sous forme de texte clair.

  3. Le hachage empêche également les données secrètes d'être exposées même aux administrateurs de base de données et de système.

Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés? Je veux dire qu'il peut changer d'autres colonnes de données. Par exemple, il pourrait rechercher son nom d'utilisateur et augmenter son solde bancaire. Alors, tous les champs ne devraient-ils pas être hachés?

La dégradation de la base de données masquée via les applications qui y ont accès est différente de la pénétration du serveur de bases de données. Si un attaquant fait irruption dans le serveur hébergeant la base de données, il peut bien sûr faire tout ce qui est autorisé pour le niveau de privilège auquel il a accès.

Mais ne pensez-vous pas que l'obtention de mots de passe en texte clair est dangereuse alors sous une forme irréversible, car la seule possibilité qui reste à l'attaquant est de lancer une force brute passive pour trouver les mots de passe, ce qui laisse suffisamment de temps aux victimes pour changer leurs mots de passe compromis.

Vous pouvez très bien voir la différence de force des défis cryptographiques auxquels l'attaquant sera confronté pour atteindre ce hachage.

Pourquoi seuls les mots de passe sont-ils hachés?

L'authentification par mot de passe est utilisée pour prouver l'authenticité d'une entité, donc la possession d'un mot de passe est suffisante pour qu'un attaquant puisse se faire passer pour un autre utilisateur. Il y a donc un risque de sécurité pour le vol d'identité s'il n'est pas haché.

0
8zero2.ops