Petit rappel: nous venons de voir notre système PBX piraté. Le serveur lui-même semble sécurisé (pas d'accès non autorisé à la console - SSH, etc.), mais les pirates ont réussi à injecter un nouvel utilisateur administrateur dans le logiciel PBX (FreePBX, soutenu par MySQL). Les journaux Apache impliquent que les pirates ont réussi à ajouter l'utilisateur sans utiliser l'interface Web (ou aucun exploit dans l'interface Web).
Maintenant, j'ai découvert depuis que MySQL fonctionnait sans mot de passe root (!!) et ouvertement lié à l'adresse IP externe (évidemment, je l'ai verrouillé maintenant). Cependant, le seul utilisateur de niveau racine dans MySQL était 'root'@'localhost'
et 'root'@'127.0.0.1'
, qui n'auraient dû être accessibles que localement.
Voici donc ma question:
Existe-t-il un moyen d'usurper une connexion à MySQL afin qu'il permette la connexion à l'utilisateur 'root' @ 'localhost' à partir d'une adresse IP distante, SANS exécuter aucun autre exploit localement?
Pour référence, la boîte est Centos 5 (Linux 2.6.10) exécutant Mysql 5.0.95.
Réponses:
Non.
MySQL ne vous connectera jamais à un utilisateur avec la spécification d'hôte
localhost
ou127.0.0.1
si vous ne venez pas du système local. Notez que cela couvre également la vulnérabilité de contournement d'authentification, CVE 2012-2122; la comparaison des mots de passe peut être trompée, mais pas la comparaison des hôtes.Vous auriez besoin de quelque chose sur le système pour effectuer un proxy pour "tromper" la vérification de l'hôte source. Quelque chose comme phpmyadmin, ou un équilibreur de charge comme HAProxy fonctionnant devant le port TCP MySQL me vient à l'esprit.
la source
Le nom
root
est créé par défaut et est très bien connu. La racine de valeur littérale n'a aucune signification dans le système de privilèges MySQL. Par conséquent, il n'est pas nécessaire de continuer avec le nom d'utilisateurroot
.Vous devez changer
root
le nom d'utilisateur pour autre chose afin que le monde extérieur ne puisse pas l'identifier (deviner) facilement, cela réduira les tentatives de piratage.Par exemple: si vous avez un utilisateur comme
root
@localhost
qui est bien connu de tout le monde, les pirates essaieront de le connecter, vous devez le changer en quelque chose de spécifique commeadmin_db_name
@localhost
pour une meilleure sécurité.Surveillez une variable d'état appelée
Aborted_connects
périodiquement pour connaître laRefused
connexion à votre serveur MySQL, elle devrait être 0 après laFlush status;
commande et ne devrait pas augmenter davantage.la source
Est-ce que «aucun accès non autorisé enregistré» inclut les tentatives d'échec de connexion? Sinon, ce pourrait être CVE 2012-2122 .
la source