web-dev-qa-db-fra.com

Restreindre les connexions MySQL depuis localhost pour améliorer la sécurité

J'ai entendu dire que toute personne connaissant mon nom d'utilisateur et mon mot de passe MySQL peut y accéder, même si elle écoute uniquement localhost.

Supposons que mes informations soient les suivantes:

USER: root
PASS: 123456
Host: LOCALHOST (only)

Comment est-il possible que quiconque (local) puisse y accéder?

24
Darkeden

Si vous limitez l'accès des hôtes distants à vos noms d'utilisateur et mots de passe, quelqu'un ne pourra pas accéder à la base de données en externe.

Vous pouvez également configurer votre pare-feu pour autoriser uniquement le trafic vers 3306 (port par défaut MySQL) à partir de la machine hôte locale.

Mise à jour

Pour configurer votre utilisateur afin qu'il puisse uniquement accéder via l'utilisation de LOCALHOST:

GRANT ALL PRIVILEGES ON *.* TO db_user @'localhost' IDENTIFIED BY 'db_passwd';
GRANT ALL PRIVILEGES ON *.* TO db_user @'127.0.0.1' IDENTIFIED BY 'db_passwd';

Liez également votre serveur MySQL à l'adresse locale. Vous pouvez le faire en modifiant le [mysqld] section de my.cnf:

[mysqld]
bind-address = 127.0.0.1
45
ajtrichards

C'est une question plus ancienne que j'ai rencontrée, mais si Darkeden avait phpMyAdmin ou un fonctionnement similaire, n'importe qui peut se connecter à cela en utilisant des informations d'identification MySQL valides.

S'il a été compromis, en plus de restreindre les connexions, changez tous les mots de passe.

5
Steve

vous pouvez bloquer l'accès direct à MySQL sur le pare-feu ou dans MySQL lui-même, mais la façon la plus probable de vous faire pirater est via une application Web non sécurisée - dans cette situation, l'attaquant pourrait très probablement lire la connexion à votre base de données et se connecter à partir de le serveur.

Gardez donc vos applications sécurisées - gardez tout à jour, n'autorisez pas les téléchargements de fichiers, utilisez suPHP si vous avez plusieurs comptes, etc.

Si vous limitez votre application mysql, procédez comme suit:

1. Vous pouvez simplement bloquer le port 3306. Si le site est sur le même serveur, il pourra toujours accéder à la base de données en utilisant localhost comme nom d'hôte.

2.Ajoutez simplement "bind-address = 127.0.0.1" à la section "[mysqld]" de leur fichier my.cnf pour restreindre l'accès à localhost uniquement.

La plupart des gens utilisent ce type de restriction.

4
Ami

Je n'ai pas vu de réponse qui répondait à sa question (ajustée) - il l'a verrouillée sur localhost et l'attaquant est toujours en train d'entrer.

Si vous l'avez vraiment restreint à l'hôte local (vérifiez en utilisant netstat -an | egrep 3306 pour vérifier qu'il écoute 127.0.0.1 et non 0.0.0.0) , puis le seul moyen d'y accéder est d'établir une connexion à partir de cet hôte local.

Premières étapes à suivre:

  1. reconstruisez probablement un système de remplacement à partir de zéro et durcissez-le avant de le rendre accessible au public (avoir une recette reproductible, par exemple en utilisant ansible vous aidera car vous devrez peut-être passer par quelques itérations pour apprendre comment il entre) Vérifiez auprès de scanners de sécurité réputés ce que vous les trous évidents sont,
  2. Obtenez de l'aide d'un professionnel de la sécurité (cela dépend si vous voulez dépenser de l'argent ou du temps et de la frustration à réparer)
  3. Appliquer des correctifs de sécurité,
  4. Supprimez les services dont vous n'avez pas besoin,
  5. restreindre l'accès à la base de données aux seuls programmes qui en ont besoin,
  6. refaire tous vos mots de passe,
  7. rechercher les kits racine installés et autres virus,
  8. sécurisez votre serveur dans votre propre bureau et formez le personnel à la gestion de l'ingénierie sociale,
  9. utiliser un service qui surveillera et filtrera les demandes reçues et refusera l'accès direct (par exemple, utilisez cloudflare comme point de départ)
  10. vérifier les enregistreurs de clavier (physiques et logiciels et autres virus) sur toutes les machines utilisées pour accéder au serveur),
  11. vérifier les moyens physiques de journaliser vos frappes pour accéder à votre serveur (par exemple, le style de webcam utilisé dans atm), le son le plus exotique ( https://en.wikipedia.org/wiki/Acoustic_cryptanalysis ), taper avec un point d'accès wifi à proximité (par exemple https://www.schneier.com/blog/archives/2016/08/keystroke_recog.html )
  12. Ajoutez une piste d'audit et surveillez l'activité de la base de données pour savoir comment il s'en sort, mais au moins vous devez d'abord faire toutes les sécurisations évidentes, sinon il sautera d'un trou de sécurité à un autre

Il pourrait également réussir à utiliser:

  1. accéder via un programme que vous exécutez (par exemple un serveur Web) qui est accessible de l'extérieur et qui a un trou de sécurité qui lui permet d'exécuter des commandes sql arbitraires via sa connexion à la base de données existante - voir https://www.w3schools.com /sql/sql_injection.asp

  2. tromper un programme auquel il a accès de l'extérieur pour proxy une connexion pour lui à localhost: 3306 (par exemple via un pare-feu réseau mal configuré sur la machine)

  3. tromper un programme pour exécuter un programme local (bash. mysql etc.), et à partir de là accéder à la base de données - les dépassements de tampon et autres données spécialement conçues sont un problème courant pour exécuter du code arbitraire

  4. l'homme au milieu attaque sur une connexion qui a un accès légitime

  5. bogues dans un programme qui traite automatiquement ou manuellement des données de l'extérieur, par exemple, courrier électronique, traitement de postscript/pdf/tout document avec traitement de script - même l'affichage d'un fichier texte peut être dangereux - voir https: //www.proteansec .com/linux/blast-past-executing-code-terminal-emulators-via-escape-sequence /

  6. l'ingénierie sociale un moyen d'amener les gens à vous donner accès

  7. réussir à connecter un périphérique matériel à un ordinateur qui y a accès (combien de personnes ramasseront une "clé USB" gisant dans le parking et la vérifieront à la place, c'est un "clavier programmable", et TOUS les ordinateurs font confiance aux claviers!)

  8. et bien d'autres encore toutes les autres méthodes que je ne connais pas, mais celles qui sont impliquées partagent ...

N'oubliez pas que vous devez avoir une sécurité pratique, je pense que xkcd le dit juste: https://xkcd.com/538/

2
iheggie