В частности, начинающие пентестеры уделяют меньше внимания безопасности баз данных в целом. Приложение без конфигурации базы данных и тестов безопасности не может быть безопасным. Возможно, вы уже используете программное обеспечение MySQL, систему управления базами данных, так как же сделать ее более безопасной? Вот семь шагов, которые вам нужно выполнить.
1. Используйте туннелирование SSH вместо удаленного подключения
Служба MySQL работает на порту 3306 по умолчанию. Когда вы установите MySQL, вы увидите, что порт 3306 находится в режиме прослушивания для всех подключений. В настоящее время порт MySQL открыт для внешнего мира. Вот почему вы должны настроить службу MySQL на прослушивание только локального адреса.
Поскольку серверы обычно работают на дистрибутиве Linux, приведенные ниже примеры основаны на дистрибутиве Debian. Файл, который вам нужно использовать для туннелирования SSH вместо удаленного подключения и для закрытия порта по умолчанию для внешнего мира:
/etc/mysql/my.cnf. В этом файле нужно открыть поле под названием [mysqld] и напишите следующую команду:[mysqld]
связывать-адрес=127.0.0.1
После этого процесса не забудьте сохранить этот файл и перезапустить службу с помощью следующей команды:
sudo systemctl перезапустить mysqld
# или
судоsystemctlперезапускмариадб.услуга
При этом служба MySQL будет прослушивать только локальный адрес.
Если вы используете MariaDB, вы также можете изучить /etc/mysql/mariadb.conf.d/50-server.cnf и проверьте, есть ли определение для адрес привязки.
Теперь, когда у вас есть адрес привязки, установленный на 127.0.0.1, это локальный хост, вы можете запустить сканирование Nmap и проверить вывод:
Вы можете увидеть порт MySQL, поскольку 127.0.0.1 представляет собой локальный хост, который вы видите. Вы можете попробовать изменить адрес привязки еще раз, чтобы убедиться, что это работает:
[mysqld]
связывать-адрес=127.5.5.1
Затем сохраните /etc/mysql/my.cnf файл и перезапустите службу MySQL. Если вы выполняете сканирование Nmap опять же, на этом этапе вы не должны видеть этот адрес привязки на локальном хосте.
Как только вы убедитесь, что это работает, вернитесь к настройкам с первого шага и установите адрес привязки обратно на 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:
ВЫБИРАТЬLOAD_FILE("/etc/secretfile.txt");
Нетрудно зафиксировать информацию в любом файле на вашем компьютере.
Чтобы решить эту проблему, измените значение local-infile в вашем файле /etc/mysql/my.cnf следующим образом:
[mysqld]
местный-файл = 0
Перезапустите службу MySQL. Переподключитесь к MySQL и повторите предыдущий шаг; вы больше не сможете видеть содержимое файла.
Если у пользователей еще нет разрешений на чтение и запись в локальные файлы, они не смогут увидеть этот файл. Тем не менее, это все же то, что вы должны проверить в тестах на проникновение и безопасности базы данных.
3. Установка пользователей и паролей приложений
Пользователь управления базой данных и пользователь MySQL, обращающийся к базе данных, должны отличаться друг от друга. Другими словами, подключение приложений к MySQL с помощью root-пользователей крайне опасно. Если возможно, определите пользователей приложений, которые не выполняют Операции UPDATE или INSERT в отдельности.
Еще одна вещь, которую следует учитывать на этом этапе, — это пароли пользователей. Как и почти в любой области, пароли для пользователей MySQL должны быть сложными и непредсказуемыми. Если вам нужна помощь в этом, есть отличные системы генераторов паролей, которые вы можете использовать.
4. Удалить анонимных пользователей
Когда вы устанавливаете MySQL по умолчанию, некоторые анонимные пользователи появляются. Вам нужно удалить их и заблокировать их доступ. Для защищенного сервера MySQL вы не должны получать никакого ответа в результате следующего запроса:
ВЫБИРАТЬ * ОТ mysql.user ГДЕПОЛЬЗОВАТЕЛЬ="";
# Пример вывода
Пустой набор (0,001 сек)
Если есть какие-либо результаты, вы должны удалить этих анонимных пользователей. Например, если бы существовала анонимная учетная запись с именем «anonuser» в среде с именем «localhost», вам пришлось бы использовать следующую команду, чтобы удалить эту учетную запись:
УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ 'аноним'@'локальный хост';
5. Проверьте права доступа к локальным файлам MySQL
Представьте, что вы администратор базы данных и хотите вернуться к данным недельной давности. В этом случае вам, возможно, придется подключиться к серверу базы данных через SSH и изменить нужные файлы MySQL. При этом вы могли использовать привилегии пользователя root в Linux; то есть право собственности и права доступа к файлам данных могут измениться. Вы не хотите этого.
Посмотрите каталог /var/lib/mysql, чтобы проверить предоставленные разрешения. Здесь вам нужно проверить, является ли владельцем всех файлов пользователь MySQL. Следующая команда сделает свое дело:
судо лс -аль /вар/lib/mysql
Разрешения на чтение и запись файлов должны быть только для пользователя MySQL. Никакие другие пользователи не должны иметь никаких разрешений.
6. Использовать MySQL SSL
Размышление о конкретном примере — лучший способ понять использование MySQL и SSL. Представьте, что один из серверов в регионе ABC, где много разных серверов, захвачен злоумышленниками. Хакеры проведут внутреннее сканирование в регионе ABC. Таким образом они собирают информацию о серверах.
Если они обнаружат сервер MySQL во время этого процесса, они могут выполнить Атака «человек посередине» (MitM) на целевой сервер, что означает, что они могут украсть информацию о сеансах приложений и пользователей, подключающихся к этому серверу. Один из лучших способов избежать этого — включить SSL на сервере MySQL.
7. Файлы журнала и истории
Вы используете журналы MySQL для анализа и поиска ошибок. Вы можете отредактировать, где хранятся эти журналы, введя my.cnf следующим образом:
# /etc/mysql/my.cnf
[mysqld]
бревно =/вар/бревно/mylogfiles
Вы можете изменить имя или местоположение mylogfiles по своему усмотрению. Есть еще один файл, который вам нужно проверить. Когда вы подключаетесь к серверу MySQL в терминале Linux и вводите различные команды, эти запросы сохраняются в файле mysql_history. Если вы выполните следующую команду, вы увидите запросы, которые вы используете в терминале MySQL:
кошка ~/.mysql_history
Вам необходимо удалить содержимое этого файла, если вы не хотите предоставлять информацию о том, какие запросы вы делаете внутри сервера. Используйте следующую команду, чтобы удалить содержимое файла:
судо-эхо "очищенный"> ~/.mysql_история
Затем вы можете снова проверить содержимое файла.
Кто владеет базой данных, тот владеет системой
В какой бы отрасли вы ни работали, ваша база данных всегда содержит важную информацию. Это могут быть ваши клиенты, банковские счета и пароли. Злоумышленники знают их важность и ценность. Разработчики баз данных и администраторы должны знать хотя бы основы, с которыми они столкнутся в тестах на проникновение, чтобы победить хакеров.