Ограничение соединений MySQL с локального хоста для повышения безопасности - программирование

Ограничение соединений MySQL с локального хоста для повышения безопасности

Я слышал, что любой, кто знает мое имя пользователя и пароль MySQL, может получить к нему доступ, даже если он прослушивает только локальный хост.

Предположим, что моя информация следующая:

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

Как возможно, что кто-нибудь там (локальный) может получить к нему доступ?

4b9b3361

Ответ 1

Если вы ограничиваете доступ с удаленных хостов к вашим именам пользователей и паролям, то кто-то не сможет получить доступ к базе данных извне.

Вы также можете настроить брандмауэр, чтобы разрешить трафик до 3306 (порт по умолчанию MySQL) с машины localhost.

Обновление

Чтобы настроить пользователя, чтобы он мог пользоваться только через 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';

Кроме того, привяжите ваш сервер MySQL к локальному адресу. Вы можете сделать это, отредактировав раздел [mysqld] my.cnf:

[mysqld]
bind-address = 127.0.0.1

Ответ 2

вы можете заблокировать прямой доступ к MySQL на брандмауэре или в самой MySQL, но наиболее вероятный способ взлома - это небезопасное веб-приложение - в этой ситуации злоумышленник, скорее всего, сможет прочитать ваш логин в базе данных и подключиться к серверу.

Так что держите свои приложения в безопасности - обновляйте все, не разрешайте загрузку файлов, используйте suPHP, если у вас несколько учетных записей и т.д.

Если вы ограничиваете свое приложение mysql, выполните следующие действия:

1.Вы можете просто заблокировать порт 3306. Если сайт находится на том же сервере, он все равно сможет получить доступ к базе данных, используя localhost в качестве имени хоста.

2. Просто добавьте "bind-address = 127.0.0.1" в раздел "[mysqld]" своего файла my.cnf, чтобы ограничить доступ только к локальному хосту.

Большинство людей используют этот тип ограничений.

Ответ 3

Это старый вопрос, на который я наткнулся, но если у Darkeden был phpMyAdmin или аналогичный запуск, любой может войти в него, используя действительные учетные данные MySQL.

Если он был скомпрометирован, то, помимо ограничения соединений, измените все пароли.

Ответ 4

Я не видел ответа, который отвечал на его (скорректированный) вопрос - он заблокировал его на локальном хосте, и злоумышленник все еще попадает.

Если вы действительно ограничили его локальным хостом (проверьте с помощью netstat -an | egrep 3306, чтобы проверить, что он прослушивает 127.0.0.1, а не 0.0.0.0) , а затем единственный способ доступа к нему - это создать соединение с этим локальным хостом.

Начальные шаги:

  • возможно, перестроить систему замещения с нуля и упростить ее, прежде чем сделать ее общедоступной (с повторяющимся рецептом, например, с помощью ansible, поможет, поскольку вам, возможно, придется пройти через несколько итераций, чтобы узнать, как он попадает) Проверьте с надежными сканерами безопасности, какие у вас очевидные отверстия,
  • Получить помощь от профессионала безопасности (зависит, хотите ли вы потратить $или время и разочарование, чтобы исправить).
  • Применить исправления безопасности,
  • Удалить службы, которые вам не нужны,
  • ограничивать доступ к базе данных только тем программам, которые в ней нуждаются,
  • повторите все ваши пароли,
  • проверить установленные корневые наборы и другие вирусы,
  • защитите свой сервер, если он находится в вашем офисе и обучает персонал в области социальной инженерии,
  • используйте службу, которая будет отслеживать и фильтровать поступающие запросы и запрещать прямой доступ (например, использовать cloudflare в качестве начальной точки).
  • проверять регистраторы клавиатуры (физические и программные и другие вирусы) на всех компьютерах, используемых для доступа к серверу),
  • проверяйте физические способы регистрации ваших нажатий клавиш при доступе к вашему серверу (например, стиль веб-камеры, используемый в atm), тем более экзотический включает звук (https://en.wikipedia.org/wiki/Acoustic_cryptanalysis), набрав с помощью точки доступа Wi-Fi (например, https://www.schneier.com/blog/archives/2016/08/keystroke_recog.html)
  • Добавьте контрольный журнал и отслеживайте активность базы данных, чтобы понять, как он проходит, но по крайней мере вам нужно сделать все очевидное обеспечение, потому что в противном случае он просто прыгнет из одного отверстия безопасности в другое.

Он также может пройти через:

  • доступ через какую-либо программу, которую вы запускаете (например, веб-сервер), доступный извне, и имеет отверстие безопасности, которое позволяет ему выполнять произвольные команды sql через существующее соединение с базой данных - см. https://www.w3schools.com/sql/sql_injection.asp

  • обход какой-либо программы, к которой у него есть доступ извне, к прокси-серверу для подключения к локальному хосту: 3306 (например, через встроенный брандмауэр с ошибкой на компьютере)

  • обход некоторой программы для запуска локальной программы (bash. mysql и т.д.), и оттуда доступ к базе данных - переполнение буфера и другие специально созданные данные - общая проблема для запуска произвольного кода

  • человек в средней атаке на соединение, имеющее законный доступ

  • ошибки в программе, которая автоматически или вручную обрабатывает данные извне, например, электронную почту, обработку postscript/pdf/любого документа с обработкой скриптов - даже просмотр текстового файла может быть опасным - см. https://www.proteansec.com/linux/blast-past-executing-code-terminal-emulators-via-escape-sequences/

  • социальная инженерия способ заставить людей дать вам доступ

  • управлять аппаратным устройством, подключенным к компьютеру, имеющему доступ (сколько людей возьмет "карту памяти", лежащую на рабочей парковке, и проверит ее вместо нее "программируемую клавиатуру" и ВСЕ компьютеры доверяют клавиатурам!)

  • а затем еще много других методов, которые я не знаю, но те, которые задействованы совместно...

Просто помните, что вам нужна практическая безопасность, я думаю, xkcd говорит, что это правильно: https://xkcd.com/538/