Защита базы данных MySQL - SearchInform

Защита базы данных MySQL

Защита баз данных
с помощью системы

Задача защиты базы данных MySQL является одной из важнейших для ИТ-подразделений компании. С одной стороны, под управлением СУБД находится наиболее ценная информация, с другой – уязвимости программы, распространяемой с открытым кодом, хорошо известны специалистам по взломам чужих информационных сетей. Изучение слабых мест системы они часто начинают именно с MySQL.

Типы угроз

Задачей специалистов по информационной безопасности в отношении баз данных MySQL становится сохранение всех значимых свойств информации:

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

Прежде всего необходимо решить задачу конфиденциальности. Чаще всего для этого используется шифрование. Вопрос доступности решается не только организационными и программными, но и техническими средствами. Нужны определенные параметры сервера, чтобы канал связи с БД нельзя было заблокировать простой DDoS-атакой. 

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

  • SQL-инъекции. Внедрение вредоносного кода, генерирующего произвольные запросы в поля приложений MySQL;
  • программные закладки;
  • избыточный объем привилегий пользователей;
  • взлом СУБД и хищение паролей и конфигураций, необходимых для получения доступа к базе данных MySQL;
  • известные хакерам уязвимости, которые они могут использовать при сохранении настроек «по умолчанию»;
  • вирусы-шпионы, шифровальщики, троянские программы;
  • блокировка доступа к серверу при размещении БД на удаленных машинах;
  • отказ от удаления истории изменений имен учетных записей и паролей.

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

Стандартные средства защиты

Никогда не стоит отказываться от самых простых средств защиты, на практике они могут отразить до 80 % попыток внешних вторжений. 

Среди них:

  • замена всех учетных записей по умолчанию на уникальные;
  • регулярное обновление паролей, при необходимости их шифрование при помощи XOR;
  • своевременное обновление ПО.

Но если существует вероятность, что на базу данных MySQL могут совершаться целевые атаки, подходить к решению задачи нужно с профессиональных позиций. Чаще всего БД пытаются взломать методом брутфорса (с помощью программ для перебора паролей). Это побуждает не только ставить максимально сложные пароли и регулярно их менять, но и применять шифрование. Если речь идет не о защите персональных данных или государственной тайны, то приобретать для этих целей СКЗИ, сертифицированные ФСБ, необязательно.

Очистка истории и скрытие процедур

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

Для снижения уровня этого риска требуется шифровать не только текст, но и сами процедуры и функции. Решить эту задачу поможет программа SQL Shield. Она легко устанавливается, не создает нагрузку на вычислительные мощности ПК. После использования функции требуется проверить ее успешность. В этом поможет утилита SQL Server Syscomments Decryptor, созданная для аудита файлов в базе. Она покажет, в каком виде хранятся зашифрованные команды. 

Файлы истории и журналы учета действий пользователей требуется своевременно очищать. В этом помогут бесплатные программы, например, Glary Tracks Eraser.

Шифрование

Любая база данных, СУБД которой работает по принципам MySQL, имеет встроенные алгоритмы шифрования. 

Среди них:

  • AES_ENCRYPT – шифрование по алгоритму AES;
  • AES_DECRYPT – расшифровка кода AES;
  • COMPRESS – шифрование в бинарном виде;
  • ENCODE – шифрование командной строки поверхностным паролем;
  • DECODE – расшифровка текста, обработанного функцией ENCODE;
  • ENCRYPT – шифрование с помощью системного вызова crypt, работающего в среде Unix.

Для активации функций необходимо модифицировать штатные SQL-запросы. Например, добавить к ним опцию AES_ENCRYPT. Эта опция работает по принципу симметричного шифрования, когда кодирование и декодирование текста производится при помощи одинаковых ключей. Для более надежной защиты лучше применять асимметричное шифрование. В этом случае для шифрования информации применяется доступный многим пользователям открытый ключ, для дешифрования – закрытый, секретный.

Такая модель защиты информации в базе данных реализована, например, в Microsoft SQL Server. Для шифрования применяются функции T-SQL, одно из дополнений языка SQL. Оно поддерживает управляющие операторы, локальные переменные и ряд сервисных функций. Открытым ключом будет сертификат, генерируемый специальной утилитой. Секретный ключ, помимо сертификата, содержит индивидуальный пароль. Его необходимо применять с оговоркой, что пользователи с доступом к истории операций могут его найти и использовать для входа в базу. Асимметричное шифрование всегда дороже симметричного, поэтому его не применяют для баз MySQL большого объема, содержащих информацию невысокой ценности.

Как автоматизировать шифрование

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

Существуют специальные утилиты, которые полностью автоматизируют процесс шифрования, среди них XP_CRYPT. Программа легко устанавливается, ей можно управлять через графический интерфейс. XP_CRYPT справится с задачей постоянного автоматического шифрования данных о клиентах интернет-магазина, их персональных данных и номеров кредитных карточек. 

Однако программа работает только в среде Windows, а многие решения для MySQL актуальны только для Unix. Еще один минус в том, что в бесплатной версии утилиты доступно только 256-битное шифрование. Это ограничивает ее применение. Например, для скрытия сведений о номерах банковских карт клиентов рекомендуется использовать 768-битные ключи. 

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

Особенности настройки

Для баз данных MySQL и MariaDB, работающих в операционных системах Unix или Linux и локализованных на сервере Ubuntu, требуется дополнительная настройка. Она производится еще на этапе установки программы. В ней много опций по умолчанию, о чем хорошо знают хакеры, поэтому эту прореху в безопасности необходимо ликвидировать первым делом.

Рассмотрим настройку на примере MySQL. После загрузки СУБД предложит установить root-пароль. Это можно отложить на потом, но лучше сделать сразу, чтобы полностью обезопасить учетную запись администратора от риска подбора имени. Во время первой загрузки для запуска базы потребуется установить несколько дополнительных скриптов, их можно найти в руководстве пользователя. Оптимизированные версии следует искать на тематических форумах специалистов по MySQL. 

Скрипты нужны для:

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

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

Ограничение доступа

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

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

Следующий шаг – отключение опции, которая дает возможность подключаться к файловой системе через СУБД MySQL. Добавление команды, исключающей такие возможности, снизит риски удаления, переименования или перемещения файлов неуполномоченными пользователями. Произойдет и еще одно изменение обычного режима пользования базой данных MySQL – пользователь без соответствующих прав доступа не сможет загрузить локальный файл в систему.

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


 Для отслеживания пользовательских операций в БД на профессиональном уровне рекомендуем использовать Database Monitor. Узнать больше. 


Дополнительная защита MySQL

Существуют дополнительные меры, применение которых позволит довести степень защиты базы данных MySQL до оптимальной:

  • изменение всех имен учетных записей, заданных по умолчанию. Для реализации попытки взлома злоумышленнику придется подбирать не только пароль, но и имя учетной записи;
  • изменение паролей к учетным записям пользователей не реже, чем раз в месяц;
  • установка защищенной связи пользователей с хостом по локальной сети;
  • своевременное удаление учетных записей. После перевода сотрудника на другую работу или увольнения его учетка в MySQL должна быть удалена или передана другому лицу (унаследована);
  • создание отдельных учетных записей пользователя для самой MySQL и каждого из ее приложений;
  • установка компонентов MySQL и ее приложений на разных серверах;
  • обновление данных о привилегиях после любого их изменения и формирование усложненного порядка увеличения объема привилегий.

Реализация простых рекомендаций увеличит степень защиты баз данных MySQL на порядок. При этом не стоит забывать об обычных методах обеспечения безопасности информационной системы – антивирусах, файрволах, контроле за съемными носителями. Практически все программные решения, используемые для защиты БД, распространяются с открытым кодом, поэтому создать безопасную систему будет несложно.

04.08.2020

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