DataSunrise Obtient le Statut Compétence DevOps AWS dans AWS DevSecOps et Surveillance, Journalisation, Performance

Débloquer la sécurité des bases de données MySQL

Débloquer la sécurité des bases de données MySQL

MySQL est l’une des bases de données open-source les plus populaires qui fonctionne sur une variété de plateformes. Elle est relativement facile à configurer, dispose d’un simple pare-feu et affiche de bonnes performances même sous une charge importante, mais elle présente néanmoins une grande variété de problèmes de configuration ayant une incidence sur la sécurité.

Meilleures pratiques pour la sécurité des bases de données MySQL

La meilleure pratique en matière de gestion de la sécurité est d’être paranoïaque et d’anticiper une attaque à tout instant venant de toutes les directions, mais si vous adoptez quelques mesures de précaution, le travail ne sera pas si difficile. Les directives suivantes vous aideront à réduire considérablement la surface des menaces potentielles.

Tout d’abord, lisez le guide de sécurité MySQL 5.7 et vérifiez régulièrement les mises à jour. Plusieurs vulnérabilités graves ont été découvertes récemment pour le SGBDR MySQL, et des exploits sont disponibles gratuitement. Profitez des mises à jour qui ajoutent de nouvelles fonctionnalités et, surtout, corrigent les failles de sécurité.

Surveillez régulièrement les bases de données de vulnérabilités. Soyez toujours conscient des nouvelles menaces découvertes pour votre système.

Système d’exploitation

  1. Désactivez les démons et services inutiles. Moins il y a de composants accessibles aux attaquants, moins ils ont de chances de trouver une faille pouvant être exploitée pour accéder au système. En gardant la configuration de l’hôte simple, vous réduisez l’effort nécessaire pour gérer le système et atténuez le risque d’omissions en matière de sécurité.
  2. Assurez-vous que les utilisateurs MySQL ne puissent pas accéder à des fichiers hors d’un ensemble limité de répertoires. Les fichiers de données MySQL ne doivent être lus que par les comptes root ou administrateur.
  3. Désactivez ou restreignez l’accès à distance. Dans le cas où vous auriez besoin que votre MySQL soit accessible à distance, configurez l’instruction GRANT, utilisée pour créer l’utilisateur, afin d’exiger SSL.
  4. Assurez-vous qu’aucun utilisateur autre que l’utilisateur MySQL ne puisse lire les fichiers de configuration et les fichiers journaux de MySQL. Les fichiers my.cnf, my.ini et master.info contiennent généralement des noms d’utilisateur et des mots de passe non chiffrés. S’il existe un fichier journal des requêtes, il est probable qu’il contienne également des mots de passe. Certains fichiers de configuration de MySQL peuvent aussi contenir des noms d’utilisateur et des mots de passe en clair. Assurez-vous que ces fichiers soient protégés contre les utilisateurs non autorisés.
  5. Lancez MySQL avec l’option –chroot. Cela constitue une excellente mesure d’atténuation face aux privilèges sur les fichiers. Chroot est utilisé pour restreindre l’accès aux fichiers par un processus à un répertoire donné. Même avec l’option chroot, un attaquant obtenant les privilèges sur les fichiers pourra lire l’ensemble des données de MySQL et sera probablement encore capable d’exécuter des UDF.
  6. Nettoyez régulièrement votre fichier .mysql_history ou liez-le de façon permanente à /dev/null. Par défaut sur les systèmes Unix, vous trouverez un fichier .mysql_history dans votre répertoire personnel. Il contient un journal de toutes les requêtes tapées dans le client en ligne de commande de MySQL. Exécutez la commande suivante pour effacer l’historique :
cat /dev/null > ~/.mysql_history

Utilisateurs

Après avoir configuré le système d’exploitation, vous devez établir un modèle de privilèges et attribuer des comptes aux utilisateurs.

  1. Lors de la phase d’installation initiale, supprimez tous les utilisateurs MySQL autres que root, afin de savoir exactement qui a accès à la base de données. La meilleure méthode est de repartir de zéro et de créer des utilisateurs selon vos besoins.
  2. Renommez le nom d’utilisateur root et changez son mot de passe en utilisant des chiffres et des caractères différents. Vous pouvez changer le nom d’utilisateur de l’administrateur avec la commande suivante dans la console MySQL : mysql> RENAME USER root TO new_name;
  3. Ne donnez pas aux comptes des privilèges dont ils n’ont pas réellement besoin, notamment File_priv, Grant_priv et Super_priv. Envisagez de créer un compte MySQL séparé que votre application pourra utiliser pour interagir avec le système de fichiers de MySQL. Gardez à l’esprit que cet utilisateur aura accès à toutes les données de MySQL, y compris les hachages de mots de passe.
  4. Si possible, créez un utilisateur MySQL pour chaque application web ou pour chaque rôle au sein de chaque application web. Dans le cadre de cette application, attribuez aux utilisateurs uniquement les privilèges nécessaires aux commandes requises. Cela peut sembler fastidieux, mais cela a du sens lorsqu’il s’agit d’établir un système de sécurité complet.
  5. En cas d’activation des connexions à distance, spécifiez REQUIRE SSL dans l’instruction GRANT utilisée pour créer l’utilisateur. Certains scripts d’exploitation ne fonctionneront pas car ils ne prennent pas en charge SSL. De plus, le protocole SSL garantit la confidentialité d’une séquence de réponse d’authentification. Vous pouvez également imposer des restrictions basées sur un certificat côté client utilisé pour s’authentifier avec SSL. Une autre mesure de sécurité utile : la connaissance d’un mot de passe ne suffit pas, un certificat spécifié sera également requis.
  6. Ne donnez à personne l’accès à la table mysql.user (sauf aux utilisateurs disposant des privilèges root).

Configuration de MySQL

  1. Désactivez la commande LOAD DATA LOCAL INFILE. Il s’agit d’une construction qui permet d’importer des fichiers locaux dans une table, et qui, dans certaines circonstances, peut conduire à la récupération du contenu du fichier /etc/passwd. Un exploit pour cela est disponible gratuitement depuis 2013. Ajoutez set-variable=local-infile=0 dans le fichier my.cnf.
  2. Supprimez toute UDF inutilisée. Les UDF présentent également des risques pour la sécurité de la base de données. Si vous repérez des UDF inutilisées dans la table mysql.func, supprimez-les.
  3. Si vous n’utilisez que des connexions locales et qu’il n’est pas nécessaire que des hôtes distants se connectent à MySQL, désactivez les connexions TCP/IP via l’option –skip-networking.
  4. Supprimez la base de données de test. Une base de données de test est présente par défaut et peut être accessible par n’importe qui. Supprimez-la ou restreignez ses privilèges.
  5. Supprimez les comptes anonymes. Ne laissez aucun utilisateur avec des mots de passe vides.

    Vous pouvez trouver les utilisateurs anonymes avec cette commande :

    select * from mysql.user where user=””;
  6. Assurez-vous que le trafic MySQL soit chiffré.
  7. Activez la journalisation via l’option –log. Selon la documentation MySQL, le “journal des requêtes générales” est une fonctionnalité de débogage, mais vous pouvez aussi l’utiliser comme mesure de sécurité. Il enregistre les connexions réussies et les requêtes exécutées. Par défaut, le journal des requêtes est désactivé. Vous pouvez l’activer en utilisant l’option –log.

N’oubliez pas que les journaux de requêtes et les journaux d’erreurs constituent également une source d’information pour un attaquant. Veillez à ce que le fichier journal soit accessible uniquement à l’administrateur ou au compte root du système. De plus, il n’enregistre pas les résultats des requêtes ni les données récupérées, mais il existe des solutions spécifiques de surveillance de l’activité de la base de données à cet effet.

Surveillez régulièrement les journaux de requêtes et recherchez les attaques par injection SQL ainsi que l’utilisation des syntaxes du système de fichiers load_file, infile et outfile.

Installez un logiciel antivirus et antispam. Déployez un pare-feu pour contrôler le trafic réseau entrant et sortant et vous protéger contre les attaques.

Un système complet de sécurité des bases de données MySQL se construit en combinant une multitude de modifications de configuration discrètes. Chaque détail compte. Il n’existe aucun moyen de garantir une sécurité à 100 %, mais la recherche d’une protection maximale est indispensable à l’ère de la cybercriminalité.

Suivant

Interface en Ligne de Commande Facile

Interface en Ligne de Commande Facile

En savoir plus

Besoin de l'aide de notre équipe de support ?

Nos experts seront ravis de répondre à vos questions.

Informations générales :
[email protected]
Service clientèle et support technique :
support.datasunrise.com
Demandes de partenariat et d'alliance :
[email protected]