web-dev-qa-db-fra.com

Comment un attaquant peut-il accéder à des mots de passe hachés?

La façon dont nous hachons les mots de passe et la force du mot de passe sont importantes car si quelqu'un a accès aux mots de passe hachés, il est possible d'essayer beaucoup de mots de passe en un temps étonnamment court et de casser tout ce qui est faible.

La question que j'ai est de savoir comment se fait-il que l'attaquant ait accès aux mots de passe hachés en premier lieu. S'ils ont accès au fichier/etc/shadow, par exemple, n'est-il pas déjà terminé? S'agit-il simplement de mauvais paramètres d'autorisation? Sauvegardes? D'autres erreurs? Est-ce qu'une fois qu'un système est compromis, le mot de passe de celui-ci est utilisé pour tenter d'accéder à d'autres systèmes?

Je suppose qu'en fin de compte, ma requête se résume à l'implication que j'obtiens en lisant à ce sujet qu'il est inévitable que l'attaquant ait accès aux hachages. Comment cela se produit-il dans la pratique?

51
JimmyJames

Il existe plusieurs façons:

  • Injection SQL
  • Sauvegardes perdues
  • Des employés mécontents les fuient
  • Tout type de violation du serveur qui permet l'exécution de code.

Comme vous pouvez le voir, cela peut se produire de nombreuses façons - comme phihag mention dans les commentaires, plus de la moitié des OWASP top 1 pourrait entraîner des fuites de hachage - de sorte qu'ils ne peut pas être facilement tabulé dans un message.

Cela ne signifie pas qu'il est inévitable que les pirates obtiennent les hachages, mais vous devez toujours utiliser un bon algorithme de hachage pour vous protéger et protéger vos utilisateurs au cas où. Puisqu'une sauvegarde peut être perdue ou votre serveur piraté sans que vous vous en rendiez compte, avoir des mots de passe correctement hachés devrait être la seule chose qui vous permette de dormir la nuit. Cette stratégie est connue sous le nom de "défense en profondeur" , ou tout simplement "plan pour le pire".

56
Anders

Il existe de nombreuses méthodes. En voici quelques-unes auxquelles je peux penser du haut de ma tête. Maintenant, je peux me tromper un peu avec la syntaxe car je n'ai pas pris la peine de la tester pour le moment, mais en général, ce sont des choses que vous feriez pour obtenir ces données.

Notez qu'avec les exploits ci-dessous, je ne fournit pas nécessairement des exemples qui volent des hachages (à l'exception de SQLi), mais des exemples de la façon dont les exploits peuvent travail. L'attaquant utiliserait les exploits ci-dessous pour compromettre davantage un système.

  1. injection SQL

    Exemple:
    a OR 1=1'; exec sp_msforeachtable "SELECT * FROM ?";--

    Vous pouvez également utiliser sp_msforeachdb, ainsi:

    a'; exec sp_msforeachdb 'USE ?;exec sp_msforeachTable "SELECT * FROM !","!"';--

    Le -- est là pour commenter les parties de l'instruction SQL qui peuvent interférer avec votre injection. Ce ne sont que des exemples très basiques. Cela dépend vraiment du format de la requête.

  2. Injection du système d'exploitation. ; cat /etc/passwd; rm -rf /*
  3. Injection LDAP. *, (cn = *)(|(password =*))
  4. Référence d'objet direct non sécurisée entraînant une vulnérabilité d'inclusion de fichiers locale/distante.

    /etc/passwd%00 (note: les mots de passe, bien sûr, ne sont pas stockés ici; trouver des noms d'utilisateur valides lorsque les gens réutilisent des mots de passe est la clé ici, ou utiliser les noms d'utilisateur pour faciliter l'escalade des privilèges)

    %00 est un "terminateur nul" utilisé pour éviter que quoi que ce soit ne vienne après, donc vous n'essayez pas d'inclure quelque chose qui n'existe pas, par exemple: /etc/passwd.txt. Cela pourrait également être \000, \x00, \z, \u0000, \0, ou \00 selon la langue que vous utilisez.

  5. Piratage d'un développeur/utilisateur avec accès aux bases de données.
  6. Exploiter le serveur de base de données ou le serveur Web par d'autres moyens.
29
Mark Buffalo

Un ajout à Mark Buffalo:
7. Attaque de l'homme au milieu. Regarder du trafic non chiffré peut souvent révéler un hachage de mot de passe. Dans un scénario passe-le-hachage, les systèmes feront confiance au hachage et au mot de passe et laisseront un attaquant simplement copier le hachage sans le casser.

9
MikeP

Le seul ordinateur vraiment sécurisé est un ordinateur isolé d'Internet, éteint, débranché, enterré dans un bunker à 100 pieds sous terre, avec des gardes armés à la seule entrée. Même alors, je m'enregistrais de temps en temps.

Le hachage des mots de passe fait partie de ce que l'on appelle la "sécurité en profondeur". Vous avez raison de dire que, dans un monde idéal, vous ne feriez aucune erreur qui donnerait aux attaquants accès à ces données, donc en théorie, cela n'aurait pas d'importance s'il s'agissait de mots de passe en clair ou de hachages. Dans un monde réel, des intrusions se produisent et il est extrêmement difficile de prévoir comment et où elles se produiront. L'idée derrière la sécurité en profondeur est de faire en sorte que, en théorie, même si un attaquant compromet votre système d'une manière ou d'une autre, vous avez fait des efforts pour atténuer les dommages.

Dans le monde réel, il existe un besoin naturel d'accéder régulièrement aux hachages. Chaque fois qu'un utilisateur se connecte, vous devez pouvoir y accéder. Par conséquent, ils sont presque toujours accessibles à n'importe quelle application effectuant l'authentification. Si quelqu'un compromet votre application, il peut lire des données qu'il n'était pas censé lire.

Les façons dont ces attaques se produisent sont infinies. Vous pouvez avoir des attaques par injection SQL si vous n'avez pas nettoyé vos entrées. Vous pourriez avoir un dépassement de tampon, donnant à l'attaquant la possibilité d'exécuter son propre code. Vous pourriez avoir une erreur d'autorisation, rendant accidentellement un fichier lisible par des personnes alors que vous ne devriez pas l'avoir. L'attaquant peut mettre la main sur l'une de vos bandes de sauvegarde en raison d'une mauvaise gestion par votre service de sauvegarde!

Toutes ces attaques permettent à un attaquant de prendre pied sur votre ordinateur, mais elles n'entraînent pas toujours une interruption complète. Vous avez peut-être chrooté votre serveur SQL, de sorte que le processus du serveur SQL ne peut littéralement pas voir le reste de l'ordinateur. Cependant, dans de telles situations, les informations de connexion dont les utilisateurs ont besoin doivent être à la portée du serveur SQL ou sans valeur. Ainsi, les informations de connexion sont généralement compromises avant que d'autres compromis plus néfastes ne se produisent.

En hachant les mots de passe, vous diminuez leur valeur. Un hachage n'est pas utile à des fins de connexion. Ils doivent avoir le mot de passe qui correspond à cette valeur. Ils peuvent ou non être en mesure de payer le coût de la rupture du hachage. Dans le meilleur des mondes, vous n'avez jamais eu à vous soucier de cela en premier lieu, mais si vous souscrivez à l'approche de sécurité approfondie, vous vous assurez que même une intrusion réussie ne compromet pas toutes vos données.

6
Cort Ammon

Certaines installations un * x/linux en réseau à l'ancienne utiliseront toujours le service NIS/YP pour l'authentification gérée de manière centralisée. NIS publie efficacement les mots de passe hachés sur le réseau pour chaque poste de travail pour authentifier les utilisateurs.

2
rackandboneman