16/05/2024

Base de données

Désactiver l’historique MySQL

I. Présentation

MySQL dispose d'un historique de commande par client. Cela permet, comme sous le bash Linux, de retrouver les commandes passées aux précédentes connexions et ainsi de les rejouer facilement. Cela peut donc être pratique mais aussi présenter un problème de sécurité majeur si l'accès au compte d'un client n'est pas sur. Dans ce tutoriel, nous allons donc voir les danger de l'historique MySQL et également voir une solution de protection contre ce problème. Pour information, le tutoriel est illustré avec une machine Debian 7 sous VirtualBox et avec un serveur MySQL 5.5 installé depuis les dépôts.

II. Problématique de l'historique MySQL

Nous allons ici supposer qu'un attaquant a réussi à obtenir l'accès SSH d'un utilisateur se connectant régulièrement au serveur MySQL. L'attaquant ayant les droits sur le répertoire "/home/user" de l'utilisateur, il pourra très facilement lire le fichier ".mysql_history" qui contient comme dit précédemment les commandes passées par l'utilisateur sur ses sessions MySQL.

cat   ~/.mysql_history

 Note : Sous Linux, les fichiers dont le nom commence par un "." sont des fichiers cachés, il faut donc l'option "-a" de la commande "ls" pour les voir.

Il verra donc quelque chose ressemblant à cela :

MySQLHistory01
Aperçu d'un fichier .mysql_history.

On voit donc bien les commandes passées par l'utilisateur lors de ses précédentes connexions. On ne voit ici que des commandes basiques (ce qui peut déjà représenter beaucoup car nous pouvons voir des noms de base de données, table, attribut, etc.). Si l'utilisateur a créé un utilisateur récemment, nous le verrons aussi :

MySQLHistory02

Nous voyons donc le nom de l'utilisateur et, pire encore, son mot de passe. Nous  voyons donc bien ici que cela constitue un problème de sécurité.

III. Vider le fichier mysql_history

Face à cela, la solution la plus simple est donc d'effacer les commandes MySQL sauvegardées. On peut le faire facilement après la connexion au serveur MySQL avec la commande suivant :

echo "" > ~/.mysql.history

Le fichier sera donc vidé et aucune commande ne sera lisible. Cela nécessite néanmoins d'y penser à chaque fois que l'on se connecte au serveur MySQL. Ce qui n'est pas optimal.

IV. Ne pas sauvegarder les commandes MySQL

Pour ne plus du tout sauvegarder les commandes MySQL de façon automatique, on peut faire pointer leur écriture vers un fichier "corbeille" a travers un lien symbolique

ln -s /dev/null ~/.mysql_history

On encore utiliser la variable d'envirronnement MYSQL_HISTFILE

export MYSQL_HISTFILE /dev/null

On peut donc mettre l'une de ces deux commandes dans le fichier "~/.bashrc" de chaque utilisateur on mieux, le mettre dans le fichier communs à tous les utilisateurs et modifiable uniquement par "root" : "/etc/bash.bashrc".

Note : Le fichier "~/.bashrc" de chaque utilisateur est un fichier contenant des commandes qui sont exécutées à chaque démarrage d'une session shell pour l'utilisateur en question. Le fichier "/etc/bash.bashrc" par du même principe mais il concerne tous les utilisateur ce qui permet de centraliser l'exécution d'une commande comme voulu dans notre cas.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.