MySQL est l'un des systèmes de gestion de bases de données relationnelles les plus populaires qui est un jackpot pour les attaquants qui tentent de se faufiler dans les bases de données. Un serveur de base de données MySQL nouvellement installé peut présenter de nombreuses vulnérabilités et failles. Étant donné que la sécurité des données est d'une grande importance, il est obligatoire de comprendre tous les aspects de la sécurité MySQL.
Cet article se concentre sur l'audit et la sécurité de votre base de données MySQL et fournit neuf conseils pour renforcer sa sécurité.
1. Évitez les octrois de privilèges inutiles
MySQL autorise plusieurs déclarations de privilège qui, lorsqu'elles sont attribuées inutilement à un utilisateur défavorisé, peuvent conduire à la lecture/écriture de fichiers et à la subversion d'autres privilèges d'utilisateur. Certaines des déclarations de privilège les plus potentiellement risquées sont FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN, etc. Vous pouvez en savoir plus à ce sujet dans la documentation officielle de MySQL. Par conséquent, n'attribuez pas de privilèges de superutilisateur tels que FILE, GRANT, SUPER et PROCESS à des comptes non administratifs. Vous pouvez révoquer ces autorisations globales, de base de données et de niveau table inutiles comme suit :
REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Privilèges globaux
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Privilèges de base de données
REVOKE INSERT, UPDATE, DELETE ON nom_base_de_données.nom_table FROM 'nom_utilisateur'@'nom_hôte'; #Privilèges de table
privilèges de vidage ;
2. Restreindre les connexions à distance
L'accès à distance facilite le travail des administrateurs de base de données, mais il expose le serveur à des vulnérabilités et exploits potentiels. Vous pouvez désactiver l'accès à distance pour tous les types de comptes d'utilisateurs MySQl en ajoutant une variable skip-networking au fichier de configuration principal et en redémarrant le service.
[mysqld]
sauter le réseautage
redémarrage du service sudo mysql
De même, vous devez désactiver l'accès au compte root, sinon tous, pour restreindre les connexions à distance du compte root. Cette précaution empêche de forcer brutalement le compte root MySQL.
mysql> supprimer de mysql.user où user='root' et host not in ('localhost', '127.0.0.1', '::1'); mysql> flush privilèges;
3. Désactiver les fonctions (load_file, outfile, dumpfile)
Une autre précaution pour sécuriser MySQL contre l'injection de fichiers locaux consiste à désactiver les fonctions accessibles uniquement via le privilège d'octroi FILE. Le FICHIER est une option qui permet aux utilisateurs à faibles privilèges avec des options de commande globales de lire ou d'écrire des fichiers sur le serveur.
- fichier de chargement
La fonction load_file charge le contenu du fichier depuis le serveur sous forme de chaîne. Par exemple, la commande suivante chargera tout le contenu du /etc/passwd dossier comme suit :
sélectionnez load_file('/etc/passwd')
- fichier de sortie
De même, la fonction outfile écrit du contenu dans les fichiers du serveur local. Les attaquants peuvent utiliser cette fonction pour écrire une charge utile dans le fichier du serveur, comme suit :
sélectionnez 'Local File SQL Injection' dans le fichier de sortie '/tmp/file.txt' ;
chat /tmp/fichier.txt
Sortir:
Injection SQL de fichier local
- fichier de vidage
Cette fonction utilise la cause select pour écrire dans le fichier sans renvoyer la sortie à l'écran.
chat /tmp/fichier.txt
sélectionnez "Bonjour le monde !" dans le fichier de vidage '/tmp/world';
Sortir:
Requête OK, 1 ligne affectée (0,001 s)
Vous pouvez désactiver ces fonctions en révoquant le privilège FILE comme suit :
révoquer FILE sur *.* de 'user_name'@'localhost' ;
En rapport: Guide du débutant sur Metasploit dans Kali Linux (avec exemples pratiques)
4. Désactiver le port par défaut
Nous savons que les services MySQL s'exécutent sur le port 3306 et que les attaquants analysent les ports pour vérifier les services exécutés sur le réseau. Pour ajouter la sécurité par obscurité et modifier le port MySQL par défaut en modifiant la variable système du port dans son fichier de configuration principal, vous devrez saisir ce qui suit :
vim /etc/mysql/mon.cnf
port=XXXX
redémarrage du service sudo mysql
5. Évitez les caractères génériques dans les noms de compte
Les noms de compte dans MySQL se composent de deux parties qui sont un utilisateur et un nom d'hôte "user_name"@"host_name". Il permet à l'administrateur de créer des comptes pour les utilisateurs portant le même nom qui se connectent à partir de différents hôtes. Cependant, la partie hôte d'un nom de compte permet des conventions de caractères génériques qui peuvent être un point d'accès à la base de données depuis n'importe où.
L'utilisation facultative de la valeur du nom d'hôte ou de l'adresse IP équivaut à 'nom_utilisateur'@'%' où le % correspond à l'opération LIKE correspondant au modèle MySQL, et % signifie n'importe quel nom d'hôte. Pendant ce temps, l'accès depuis le '192.168.132.%' signifie toute tentative depuis le réseau de classe C. De plus, n'importe qui peut accéder à la base de données en nommant la partie hôte comme '192.18.132.mysql.com'.
Pour éviter de telles tentatives, MySQL permet de définir un masque de réseau avec la valeur de l'hôte pour identifier les bits réseau d'une adresse IP :
client-ip_add & netmask = host_name
La syntaxe pour créer un nom d'hôte est host_ip/netmask :
CRÉER UN UTILISATEUR 'jhon'@'192.168.132.0/255.255.255.0';
La valeur d'hôte ci-dessus permet à l'utilisateur John pour accéder à la base de données à partir de n'importe quelle adresse IP comprise entre 192.168.132.0 et 192.168.132.255. De même, les valeurs d'hôte de 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 autoriseront les hôtes des réseaux de classe A et B. Alors que 192.168.132.5 n'autorisera l'accès qu'à partir de l'adresse IP spécifique.
6. Désactiver l'accès explicite
Le nom d'utilisateur dans MySQL est soit un nom avec lequel les bases de données acceptent les connexions entrantes, soit un nom d'utilisateur vide "@"host_name" qui crée un utilisateur anonyme. Cependant, la présence d'un utilisateur anonyme peut permettre à des attaquants d'accéder au serveur de base de données. En outre, les versions de MySQL antérieures à MySQL 5.7 créent un ensemble anonyme d'utilisateurs et l'installation après la mise à niveau de la version ajoute toujours ces utilisateurs.
sélectionnez l'utilisateur, l'hôte, le mot de passe de mysql.user où l'utilisateur aime '' ;
Vous pouvez noter que les colonnes utilisateur et mot de passe sont vides et que l'accès est limité à localhost. Cependant, vous ne voulez pas que quiconque accède à la base de données. Utilisez la commande suivante pour supprimer les utilisateurs anonymes :
supprimer l'utilisateur " "@"localhost"
privilèges de vidage ;
7. Définir un compte non root en tant que propriétaire ou groupe
La définition d'un compte utilisateur non root n'est pas liée à l'utilisateur root MySQL. L'installation de MySQL dans les systèmes Linux/Unix à partir des packages tar et tar.gz permet au serveur d'être exécuté par n'importe quel utilisateur défavorisé. Il s'agit d'un problème de sécurité car tout utilisateur disposant de l'option d'autorisation FILE peut modifier ou créer des fichiers sur le serveur. Cependant, il renvoie une erreur lorsqu'un utilisateur essaie d'y accéder sans le -user=racine Erreur.
Vous pouvez éviter cela en appliquant la règle empirique consistant à accéder au serveur de base de données en tant qu'utilisateur Linux distinct. Pour exécuter mysqld en tant qu'utilisateur Linux normal, arrêtez le serveur et modifiez autorisations de lecture/écriture du serveur MySQl vers mysql, comme suit :
chown -R mysql /chemin/vers/mysql/repdonnées
Ouvrez le fichier de configuration principal de MySQL, ajoutez un nouvel utilisateur mysql et redémarrez le service pour éviter un accès au serveur non requis :
vim /etc/mysql/mon.cnf
utilisateur=mysql
redémarrage du service sudo mysql
8. Définir le mot de passe pour le compte racine
L'installation de MySQL via un shell interactif dans les distributions Linux basées sur Debian crée le compte d'utilisateur root et vous demande de définir un mot de passe. Cependant, cela ne se produit pas dans les installations shell non interactives et les distributions basées sur Red-Hat. Comme indiqué ci-dessus, un utilisateur non root d'une machine Linux peut accéder au compte d'utilisateur root mysql en utilisant le -user=racine option. Vous pouvez éviter cela en définissant le mot de passe comme suit :
mot de passe sudo mysqladmin
vim /etc/mysql/mon.cnf
mot de passe=
redémarrage du service sudo mysql
9. Assurez le chiffrement des données en transit et au repos
La communication non cryptée par défaut entre le client et le serveur présente un risque d'interception de données par tout homme du milieu. De même, les données utilisateur non cryptées dans la base de données mettent en danger la confidentialité et l'intégrité de l'utilisateur. MySQL prend en charge le cryptage des données entre le client et le serveur via le protocole TLS/SSL, tandis que la communication non cryptée n'est acceptable que lorsque les deux parties communicantes se trouvent sur le même réseau.
MySQL prend désormais en charge le chiffrement au repos pour protéger les données stockées sur le serveur même en cas de violation du système.
Sécurité avancée MySQL: protégez-vous
Il est essentiel de s'assurer que vous disposez des niveaux de sécurité en ligne les plus élevés, et cet article vous aura donné des indications utiles dans la bonne direction. Les étapes ci-dessus sont utiles pour sécuriser votre serveur de base de données, mais apprendre à attribuer des autorisations minimales aux utilisateurs non administrateurs est également essentiel.
Créez votre propre base de données MySQL avec juste un éditeur de texte et ce schéma de structure de base, ou "schéma".
Lire la suite
- Programmation
- Sécurité
- Programmation
- Conseils de sécurité
- Sécurité
Rumaisa est rédactrice indépendante au MUO. Elle a porté plusieurs casquettes, de mathématicienne à passionnée de sécurité de l'information, et travaille maintenant en tant qu'analyste SOC. Ses intérêts incluent la lecture et l'écriture sur les nouvelles technologies, les distributions Linux et tout ce qui concerne la sécurité de l'information.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !
Cliquez ici pour vous abonner