Les testeurs d'intrusion débutants, en particulier, accordent moins d'importance à la sécurité des bases de données en général. Une application sans configuration de base de données et sans tests de sécurité ne peut pas être sécurisée. Vous utilisez peut-être déjà le logiciel MySQL, un système de gestion de base de données, alors comment pouvez-vous le rendre plus sécurisé? Voici sept étapes que vous devez suivre.
1. Utiliser le tunneling SSH au lieu de la connexion à distance
Le service MySQL s'exécute sur le port 3306 par défaut. Lorsque vous installez MySQL, vous verrez que le port 3306 est en mode écoute pour toutes les connexions. Dans l'état actuel des choses, le port MySQL est ouvert au monde extérieur. C'est pourquoi vous devez configurer le service MySQL pour qu'il n'écoute que l'adresse locale.
Les serveurs étant généralement exécutés sur une distribution Linux, les exemples ci-dessous sont basés sur une distribution Debian. Le fichier que vous devez utiliser pour le tunneling SSH au lieu de la connexion à distance et pour fermer le port par défaut vers le monde extérieur est
/etc/mysql/my.cnf. Dans ce fichier, vous devez ouvrir un champ appelé [mysqld] et écrivez la commande suivante :[mysqld]
lier-adresse=127.0.0.1
Après ce processus, n'oubliez pas de sauvegarder ce fichier et de redémarrer le service avec la commande suivante :
sudo systemctl redémarre mysqld
# ou
sudosystemctlredémarragemariadb.service
Avec cela, le service MySQL n'écoutera que l'adresse locale.
Si vous utilisez MariaDB, vous pouvez également examiner /etc/mysql/mariadb.conf.d/50-server.cnf et vérifiez s'il existe une définition pour adresse de liaison.
Maintenant que l'adresse de liaison est définie sur 127.0.0.1, qui est localhost, vous pouvez exécuter une analyse Nmap et vérifier le résultat :
Vous pouvez voir le port MySQL car 127.0.0.1 représente l'hôte local que vous voyez. Vous pouvez essayer de modifier à nouveau l'adresse de liaison pour vous assurer que cela fonctionne :
[mysqld]
lier-adresse=127.5.5.1
Enregistrez ensuite le /etc/mysql/my.cnf fichier et redémarrez le service MySQL. Si vous effectuez un scan Nmap encore une fois à ce stade, vous ne devriez pas voir cette adresse de liaison sur localhost.
Une fois que vous savez que cela fonctionne, revenez aux paramètres de la première étape et redéfinissez l'adresse de liaison sur 127.0.0.1 et enregistrez à nouveau.
2. Configurer une barrière d'accès aux fichiers locaux
MySQL peut communiquer avec le système de fichiers local. Avec les requêtes, vous pouvez voir le contenu d'un texte dans le système de fichiers local ou graver le résultat de la requête sur un disque. Pour empêcher les attaquants malveillants d'utiliser cette fonctionnalité, vous devez empêcher MySQL de communiquer avec le système de fichiers local.
Vous pouvez utiliser une fonction appelée local-infile pour prendre des précautions. Par exemple, imaginez que vous avez un fichier nommé "/etc/secretfile.txt" et que vous avez un mot de passe dans ce fichier. Si la valeur de la fonction local-infile dans votre fichier /etc/mysql/my.cnf est 1, alors l'accès est ouvert. Vous pouvez donc accéder au fichier secretfile.txt.
La valeur de la fonction local-infile est 1. Redémarrez la base de données MySQL pour que les modifications prennent effet. Maintenant, connectez-vous à MySQL avec la commande suivante et vérifiez si vous pouvez voir le fichier secretfile.txt :
SÉLECTIONNERFICHIER DE CHARGEMENT("/etc/fichiersecret.txt");
Il n'est pas difficile de capturer les informations dans n'importe quel fichier sur votre ordinateur.
Pour résoudre ce problème, modifiez la valeur local-infile dans votre fichier /etc/mysql/my.cnf comme suit :
[mysqld]
local-infile=0
Redémarrez le service MySQL. Reconnectez-vous à MySQL et répétez l'étape précédente; vous ne devriez plus être en mesure de voir le contenu du fichier.
Si les utilisateurs ne disposent pas déjà des autorisations de lecture et d'écriture sur les fichiers locaux, ils ne pourront pas voir ce fichier. Cependant, c'est toujours quelque chose que vous devriez vérifier dans les tests de pénétration et la sécurité de la base de données.
3. Définir les utilisateurs et les mots de passe de l'application
L'utilisateur de gestion de la base de données et l'utilisateur MySQL accédant à la base de données doivent être différents l'un de l'autre. En d'autres termes, connecter des applications à MySQL avec des utilisateurs root est extrêmement dangereux. Si possible, définissez les utilisateurs des applications qui n'exécutent pas Opérations UPDATE ou INSERT séparément.
Une autre chose à considérer à ce stade est les mots de passe des utilisateurs. Comme dans presque tous les domaines, les mots de passe des utilisateurs de MySQL doivent être complexes et imprévisibles. Si vous avez besoin d'aide, il existe d'excellents systèmes de génération de mots de passe que vous pouvez utiliser.
4. Supprimer les utilisateurs anonymes
Lorsque vous installez MySQL par défaut, certains utilisateurs anonymes apparaissent. Vous devez les supprimer et bloquer leur accès. Pour un serveur MySQL sécurisé, vous ne devriez pas obtenir de réponse à la suite de la requête suivante :
SÉLECTIONNER * DEPUIS mysql.user OÙUTILISATEUR="";
# Exemple de sortie
Vide ensemble (0,001 s)
S'il y a des résultats, vous devez supprimer ces utilisateurs anonymes. Par exemple, s'il y avait un compte anonyme nommé "anonuser" dans un environnement nommé "localhost", vous devriez utiliser une commande comme celle-ci pour supprimer ce compte :
ABANDONNER L'UTILISATEUR 'anonyme'@'hôte local';
5. Vérifier les autorisations des fichiers locaux MySQL
Imaginez que vous êtes un administrateur de base de données et que vous souhaitez revenir aux données d'il y a une semaine. Dans ce cas, vous devrez peut-être vous connecter au serveur de base de données via SSH et modifier les fichiers MySQL souhaités. En faisant cela, vous avez peut-être utilisé les privilèges d'utilisateur root de Linux; c'est-à-dire que la propriété et les autorisations des fichiers de données peuvent changer. Vous ne voulez pas ça.
Regardez le répertoire /var/lib/mysql pour vérifier les permissions accordées. Ce que vous devez vérifier ici, c'est si le propriétaire de tous les fichiers est l'utilisateur MySQL. La commande suivante fera l'affaire :
sudo ls-al /var/lib/mysql
Les autorisations de lecture et d'écriture des fichiers ne doivent être réservées qu'à l'utilisateur MySQL. Aucun autre utilisateur ne doit avoir d'autorisations.
6. Utiliser MySQL SSL
Penser à un exemple concret est le meilleur moyen de comprendre l'utilisation de MySQL et SSL. Imaginez que l'un des serveurs de la région ABC, où il existe de nombreux serveurs différents, soit pris en charge par des pirates malveillants. Les pirates effectueront une analyse interne dans la région ABC. De cette façon, ils collectent des informations sur les serveurs.
S'ils détectent un serveur MySQL au cours de ce processus, ils peuvent effectuer une Attaque de type Man-in-the-Middle (MitM) sur le serveur cible, ce qui signifie qu'ils peuvent voler les informations de session des applications et des utilisateurs se connectant à ce serveur. L'un des meilleurs moyens d'éviter cela est de activer SSL sur le serveur MySQL.
7. Fichiers journaux et historiques
Vous utilisez les journaux MySQL pour analyser et trouver les erreurs. Vous pouvez modifier l'emplacement de stockage de ces journaux en saisissant my.cnf comme suit :
# /etc/mysql/mon.cnf
[mysqld]
enregistrer =/var/enregistrer/mylogfiles
Vous pouvez modifier le nom ou l'emplacement de mylogfiles comme vous le souhaitez. Il y a un autre fichier que vous devez vérifier. Lorsque vous vous connectez au serveur MySQL dans un terminal Linux et tapez diverses commandes, ces requêtes sont enregistrées dans le fichier mysql_history. Si vous exécutez la commande suivante, vous pouvez voir les requêtes que vous utilisez dans le terminal MySQL :
chat ~/.mysql_history
Vous devez supprimer le contenu de ce fichier si vous ne souhaitez pas donner d'informations sur le type de requêtes que vous effectuez sur le serveur. Utilisez la commande suivante pour supprimer le contenu du fichier :
écho sudo "nettoyé"> ~/.mysql_history
Vous pouvez ensuite vérifier à nouveau le contenu du fichier.
Celui qui possède la base de données possède le système
Quel que soit le secteur dans lequel vous travaillez, votre base de données contient toujours des informations importantes. Il peut s'agir de vos clients, comptes bancaires et mots de passe. Les attaquants malveillants connaissent l'importance et la valeur de ceux-ci. Les développeurs et les administrateurs de bases de données doivent au moins connaître les bases qu'ils rencontreront lors des tests d'intrusion afin de battre les pirates.