Сделайте ваш сервер MySQL более безопасным с помощью этих 7 шагов
Безопасность

Сделайте ваш сервер MySQL более безопасным с помощью этих 7 шагов

Как вы можете убедиться, что ваша база данных MSQL надежно защищена от хакеров? Примените подход ‘пояс и браслеты’ с помощью этого удобного контрольного списка

Начинающие тестеры на проникновение, в частности, уделяют меньше внимания безопасности баз данных в целом. Приложение без конфигурации базы данных и тестов безопасности не может быть безопасным. Возможно, вы уже используете программное обеспечение MySQL, систему управления базами данных, так как же сделать его более безопасным? Вот семь шагов, которые вам необходимо выполнить

1. Используйте туннелирование SSH вместо удаленного подключения

Служба MySQL по умолчанию работает на порту 3306. Когда вы установите MySQL, вы увидите, что порт 3306 находится в режиме прослушивания для всех соединений. В таком виде порт MySQL открыт для внешнего мира. Поэтому вы должны настроить службу MySQL на прослушивание только локального адреса

Поскольку серверы обычно работают на дистрибутиве Linux, приведенные ниже примеры основаны на дистрибутиве Debian. Файл, который необходимо использовать для туннелирования SSH вместо удаленного подключения и для закрытия порта по умолчанию для внешнего мира, – это /etc/mysql/my.cnf. В этом файле нужно открыть поле под названием [mysqld] и написать следующую команду:

[mysqld]
bind-address=127. 0. 0. 1

После этого не забудьте сохранить этот файл и перезапустить службу с помощью следующей команды:

sudo systemctl restart mysqld
# or
sudo systemctl restart mariadb.service

В этом случае служба MySQL будет прослушивать только локальный адрес

Если вы используете MariaDB, вы также можете изучить /etc/mysql/mariadb.conf.d/50-server.cnf и проверить, есть ли там определение для bind-адреса

Теперь, когда bind-адрес установлен на 127. 0. 0. 1, что является localhost, вы можете запустить сканирование Nmap и проверить результат:

Вы можете увидеть, что порт MySQL 127. 0. 0. 1 представляет собой localhost, который вы видите. Вы можете попробовать изменить адрес привязки еще раз, чтобы убедиться, что это работает:

[mysqld]
bind-address=127. 5. 5. 1

Затем сохраните файл /etc/mysql/my.cnf и перезапустите службу MySQL. Если вы снова проведете сканирование Nmap на этом этапе, вы не должны увидеть этот адрес привязки на localhost

Как только вы убедитесь, что это работает, вернитесь к настройкам из первого шага и установите адрес привязки обратно на 127. 0. 0. 1 и снова сохраните

2. Установите локальный барьер доступа к файлам

MySQL может взаимодействовать с локальной файловой системой. С помощью запросов можно просмотреть содержимое текста в локальной файловой системе или записать результат запроса на диск. Чтобы предотвратить использование этой возможности злоумышленниками, вы должны запретить MySQL взаимодействовать с локальной файловой системой

Для принятия мер предосторожности вы можете использовать функцию под названием local-infile. Например, представьте, что у вас есть файл с именем ‘/etc/secretfile.txt’, и в этом файле хранится пароль. Если значение функции local-infile в вашем файле /etc/mysql/my.cnf равно 1, то доступ открыт. Таким образом, вы можете получить доступ к файлу secretfile.txt

Значение функции local-infile равно 1. Перезапустите базу данных MySQL, чтобы изменения вступили в силу. Теперь подключитесь к MySQL с помощью следующей команды и проверьте, виден ли файл secretfile.txt:

SELECT LOAD_FILE('/etc/secretfile.txt');

Нетрудно зафиксировать информацию в любом файле на вашем компьютере

Чтобы решить эту проблему, измените значение local-infile в файле /etc/mysql/my.cnf следующим образом:

[mysqld]
local-infile=0

Перезапустите службу MySQL. Переподключитесь к MySQL и повторите предыдущий шаг; вы больше не должны видеть содержимое файла

Если пользователи еще не имеют прав на чтение и запись в локальные файлы, они не смогут увидеть этот файл. Тем не менее, это все еще то, что вы должны проверить в тестах на проникновение и безопасность баз данных

3. Установите пользователей и пароли приложений

Пользователь управления базой данных и пользователь MySQL, обращающийся к базе данных, должны отличаться друг от друга. Другими словами, подключение приложений к MySQL с пользователями root крайне опасно. Если возможно, определите пользователей приложений, которые не выполняют операции UPDATE или INSERT, отдельно

Еще одна вещь, которую следует рассмотреть на данном этапе, – это пароли пользователей. Как и почти в каждой области, пароли для пользователей MySQL должны быть сложными и непредсказуемыми. Если вам нужна помощь в этом, есть отличные системы генераторов паролей, которые вы можете использовать

4. Удалите анонимных пользователей

При установке MySQL по умолчанию возникают некоторые анонимные пользователи. Вам необходимо удалить их и заблокировать их доступ. Для безопасного сервера MySQL вы не должны получить никакого ответа в результате следующего запроса:

SELECT * FROM mysql.user WHERE USER='';
# Example Output
Empty set (0. 001 sec)

Если есть результаты, необходимо удалить этих анонимных пользователей. Например, если бы в среде с именем ‘localhost’ существовала анонимная учетная запись ‘anonuser’, то для удаления этой учетной записи вам пришлось бы использовать команду, подобную следующей:

DROP USER 'anonuser'@'localhost';

5. Проверьте права доступа к локальным файлам MySQL

Представьте, что вы администратор базы данных и хотите вернуться к данным недельной давности. В этом случае вам, возможно, придется подключиться к серверу базы данных через SSH и изменить нужные вам файлы MySQL. При этом вы могли использовать привилегии пользователя root в Linux; то есть права собственности и разрешения на файлы данных могут измениться. Вы не хотите этого

Просмотрите каталог /var/lib/mysql, чтобы проверить предоставленные разрешения. Здесь нужно проверить, является ли владельцем всех файлов пользователь MySQL. Для этого выполните следующую команду:

sudo ls -al /var/lib/mysql

Права на чтение и запись файлов должны быть только у пользователя MySQL. Никакие другие пользователи не должны иметь никаких прав

6. Используйте MySQL SSL

Размышление над конкретным примером – лучший способ понять использование MySQL и SSL. Представьте, что один из серверов в регионе ABC, где есть много различных серверов, захвачен злонамеренными хакерами. Хакеры проведут внутреннее сканирование в регионе ABC. Таким образом, они собирают информацию о серверах

Если они обнаружат сервер MySQL во время этого процесса, они могут осуществить атаку Man-in-the-Middle (MitM) на целевой сервер, то есть они могут украсть информацию о сеансе работы приложений и пользователей, подключающихся к этому серверу. Один из лучших способов избежать этого – включить SSL на сервере MySQL

7. Файлы журналов и истории

Вы используете журналы MySQL для анализа и поиска ошибок. Вы можете изменить, где хранятся эти журналы, введя my.cnf следующим образом:

# /etc/mysql/my.cnf
[mysqld]
log =/var/log/mylogfiles

Вы можете изменить имя или расположение mylogfiles по своему усмотрению. Есть еще один файл, который необходимо проверить. Когда вы подключаетесь к серверу MySQL в терминале Linux и вводите различные команды, эти запросы сохраняются в файле mysql_history. Если вы выполните следующую команду, вы сможете увидеть запросы, которые вы используете в терминале MySQL:

cat ~/.mysql_history

Вам необходимо удалить содержимое этого файла, если вы не хотите предоставлять информацию о том, какие запросы вы делаете внутри сервера. Используйте следующую команду для удаления содержимого файла:

sudo echo 'cleaned' > ~/.mysql_history

Затем вы можете снова проверить содержимое файла

Кто владеет базой данных, тот владеет системой

Независимо от того, в какой отрасли вы работаете, ваша база данных всегда содержит важную информацию. Это могут быть ваши клиенты, банковские счета и пароли. Злоумышленники знают их важность и ценность. Разработчики и администраторы баз данных должны знать хотя бы основы, с которыми они столкнутся в тестах на проникновение, чтобы победить хакеров

Об авторе

Алексей Белоусов

Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

Комментировать

Оставить комментарий