web-dev-qa-db-fra.com

Les fichiers de base de données de MySQL sont-ils cryptés?

J'essaie de stocker en toute sécurité les informations d'identification de l'utilisateur dans une base de données MySQL qui est hébergée sur un serveur différent de l'application (la communication entre les deux est sécurisée).

J'ai d'abord supposé que sans connaissance du nom d'utilisateur/mot de passe pour MySQL, personne ne peut accéder et lire les données. Cependant, je me suis rendu compte qu'il pourrait y avoir un scénario où un attaquant pourrait accéder à ce serveur SQL et simplement faire une copie des fichiers de base de données qui se trouvent sur le disque.

Les fichiers de base de données MySQL qui sont stockés sur le disque sont-ils cryptés?

Puis-je lire directement les données de ces fichiers sans connaître mon nom d'utilisateur/mot de passe MySQL? J'envisage de chiffrer et de déchiffrer les informations d'identification dans l'application et de stocker uniquement la version chiffrée dans la base de données, mais est-ce nécessaire?

11
leopik

Les fichiers de base de données MySQL stockés sur disque sont-ils cryptés?

Non ils ne sont pas.

Vous pouvez (relativement) facilement tester cela en déplaçant les fichiers . Ibd ou . Myd vers un système différent, où vous pouvez toujours les lire. Ou vous pouvez simplement les ouvrir et vous verrez probablement au moins une partie du contenu des tableaux en texte brut.

Certains moteurs MySQL fournissent un chiffrement facultatif, tel que innodb . MySQL Enterprise Edition fournit également un cryptage optionnel.

14
tim

Puis-je lire directement les données de ces fichiers sans connaître mon nom d'utilisateur/mot de passe MySQL?

Tu paries.

J'envisage de chiffrer et de déchiffrer les informations d'identification dans l'application et de stocker uniquement la version chiffrée dans la base de données, mais est-ce nécessaire?

Ne stockez pas de mots de passe en texte brut dans votre base de données et n'utilisez pas non plus de cryptage symétrique (si vous le faites, alors lorsque votre clé est volée avec les mots de passe cryptés, vous avez perdu).

La façon de stocker les mots de passe (n'importe où - peu importe que vous les stockiez dans des fichiers plats, des bases de données ou ailleurs ...) est de les saler et de les hacher en utilisant une fonction de hachage sécurisée. Une fonction de hachage prend une chaîne d'entrée et renvoie une chaîne d'aspect aléatoire de longueur fixe en sortie. Vous stockez cette chaîne d'apparence aléatoire dans votre base de données.

Lorsque vous souhaitez vérifier si quelqu'un a entré le bon mot de passe, vous exécutez le mot de passe via la fonction de hachage et vérifiez la chaîne résultante par rapport à la chaîne de votre base de données.

De cette façon, les mots de passe ne sont pas exposés (les fonctions de hachage sont des fonctions à sens unique, ce qui signifie que vous ne pouvez pas inverser la fonction de hachage sans effort énorme).

Notez que le simple hachage du mot de passe ne suffit pas. Vous devez concaténer une valeur de sel aléatoire au mot de passe avant de le hacher, puis stocker à la fois la sortie de la fonction de hachage ET la valeur de sel dans votre base de données. Vous devez le faire pour plusieurs raisons: 1. Si vous ne le faites pas, des mots de passe identiques produiront une valeur de hachage identique. L'utilisation d'une valeur de sel rend cette opération beaucoup plus coûteuse.

Il existe des fonctions de hachage disponibles pour hacher les mots de passe, bcrypt par exemple. Utilisez l'un d'eux au lieu de lancer le vôtre. N'UTILISEZ PAS une fonction de hachage standard telle que md5 ou sha1. Ils sont tous conçus pour être rapides, ce qui est l'opposé de ce que vous voulez dans une fonction de hachage de mot de passe (pour rendre les attaques par force brute sur votre fichier de mot de passe plus difficile lorsqu'il est volé).

6
Out of Band

où un attaquant pourrait accéder à ce SQL

À ce stade, ils ont déjà contourné la plupart de vos contrôles de sécurité et ont accès aux données, ce qui est généralement l'objectif de l'attaque (le vol d'informations d'identification est généralement effectué dans le but d'obtenir l'accès aux données). Les mots de passe des utilisateurs doivent être hachés en toute sécurité (les mots de passe mysql natifs sont conservés ainsi dans la base de données mais seront probablement non chiffrés dans l'application).

Tout type de cryptage transparent, tel que LUKS ou Fuse, sera également transparent pour un attaquant ayant accès au serveur en cours d'exécution.

Il peut y avoir des choses que vous pourriez envisager, comme le hachage des noms d'utilisateur pour les rendre plus anonymes (pensez à l'attaque d'Ashley Maddison) mais sans comprendre ce que vous essayez toujours de protéger à ce stade du jeu, il est difficile de conseiller. Je pense que vous obtiendrez plus d'avantages en concentrant votre attention sur la prévention de l'attaque d'un attaquant/la détection d'un compromis potentiel du serveur.

1
symcbean
Are MySQL database files that are stored on disk encrypted?

Non. MySQL ne crypte pas par défaut ses fichiers. Vous ne savez pas quel type de données vous chiffrez, mais il semble que la meilleure solution dans votre cas serait une solution de chiffrement basée sur des colonnes. Cela vous permettra de crypter les colonnes sélectionnées contenant des informations sensibles et de définir des politiques/clés de cryptage pour chaque colonne.

Une bonne solution devrait également vous permettre de contrôler le cycle de vie des clés enc/dec.

Tout cela peut être très utile, notamment pour la conformité à toute réglementation sérieuse en matière de protection des données privées.

Cette solution "MyDiamo" est une option viable pour le chiffrement basé sur des colonnes et le prix est assez raisonnable.

Si vous souhaitez un cryptage au niveau des fichiers, je vous recommande d'utiliser le cryptage MySQL Enterprise comme suggéré ci-dessus.

1
NA AE