Выбрать главу

Код Firebird 1.0.x содержит большое количество команд копирования строк, которые не проверяют длину копируемых данных. Некоторые из этих переполнений могут быть доступны для внешнего манипулирования путем передачи больших строк двоичных данных в операторах SQL или "проталкивания" произвольного мусора в порт сервера (в настоящий момент 3050). Использование таких функций является общей техникой для попыток переполнения буфера с целью взлома серверов.

Такая уязвимость проще реализуется, если серверный и клиентский процессы выполняются не в надежной сети и/или без использования адекватной межсетевой защиты.

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

Пора дальше

В следующей главе обсуждается защита, предоставляемая (или не предоставляемая) средствами сервера Firebird безопасности баз данных, вместе с использованием инструмента gsec для управления списком доступа пользователей на сервере. Глава заканчивается специальной темой настроек безопасности баз данных для улучшения некоторых аспектов такой встроенной защиты.

ГЛАВА 34. Защита сервера.

Инсталляция сервера включает базу данных идентификации пользователя для хранения описания всех пользователей, которые имеют доступ к серверу Firebird. Чувствительный к регистру пароль должен быть определен для каждого пользователя и должен быть использован для доступа к серверу. Инструментом командной строки для поддержки пользователей баз данных является gsec.

Именем базы данных безопасности для Firebird 1.5 и выше является security.fdb. В версии l.O.x это файл isc4.gdb. Он должен размещаться в корневом каталоге Firebird для всех инсталляций сервера за исключением встроенного сервера для Windows[134].

Идентификация пользователя требуется, когда удаленный или локальный клиент соединяется с базой данных Firebird. Единственным исключением является случай, когда клиент соединяется через приложение встроенного сервера в Windows. В этой ситуации база данных потребует имя пользователя, соответствующее разрешениям SQL, определенным для ее объектов. Не будет выполняться никакой идентификации имени/пароля пользователя при соединении встроенного процесса клиент-сервер.

Ввод учетных данных пользователя

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

! ! !

СОВЕТ. В Firebird существуют сервисы API, которые связываются в gsec вместе с другими инструментами командной строки. Некоторые инструменты администратора сторонних разработчиков предоставляют доступ к gsec для поддержания учетных данных пользователей через сервисы API в более дружественном интерфейсе, чем утилиты командной строки.

. ! .

Требуемыми данными являются имя пользователя и пароль. Для имен пользователей и паролей в настоящий момент не поддерживаются международные наборы символов.

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

Имя пользователя чувствительно к регистру и должно быть уникальным. В настоящий момент оно может содержать только символы, допустимые для идентификаторов объектов: А-2 (или а-z), цифры и символы !, #, $, &, @. Теоретически имя пользователя может содержать до 128 символов, но вы должны рассматривать его ограниченным 31 символом, потому что более длинное имя не будет верным при использовании разрешений SQL.

! ! !

ВНИМАНИЕ! gsec позволит вам определять глупые имена пользователей, такие как строки звездочек или "смайлики" вроде :), однако не прельщайтесь этим! Подобные строки неприемлемы на месте, где используются имена пользователей - в параметрах соединения или операторах разрешения.

. ! .

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

! ! !

ПРИМЕЧАНИЕ. Некоторые интерфейсы администратора накладывают ограничение в восемь символов и не допускают имена пользователей и пароли, которые начинаются с цифры. Хотя это и не является ограничением системы безопасности баз данных, имеет смысл следовать такой практике.

. ! .

Шифрование пароля

Интерфейс gsec шифрует пароли, используя скромный метод, основанный на алгоритме хэширования DES (Data Encryption Standard, стандарт шифрования данных). По причине восьмисимвольного ограничения идентификация пользователя в Firebird на сегодняшний день не может рассматриваться как "центурион у ворот в современную эпоху"[135].

Все-таки исключите такие очевидные пароли, как password и sesame. Смешивайте регистр, включите цифры и обеспечьте регулярное изменение паролей.

! ! !

СОВЕТ. Поскольку невозможно отыскать потерянные пароли с помощью запросов к системе, вам нужна непробиваемая система фиксации паролей пользователей при их изменении. Глупая болтовня про отслеживание пользователей не может быть той системой, которую осознанно выбирает организация для средств безопасности! Потеря паролей может быть восстановлена пользователем SYSDBA. Если же будет потерян пароль у SYSDBA, то вся база данных безопасности должна быть заменена путем восстановления файла security.fdb, который вы найдете в корневом каталоге Firebird (для Firebird 1.0.x это файл isc4.gdb). Начните работу с паролем masterkey.

. ! .

Учет пользователей в SQL

Поскольку пользователи Firebird поддерживаются на уровне сервера, не существует никакого специального SQL-оператора для этого. Причем имена пользователей используются в SQL в качестве аргументов операторов GRANT ... ТО и REVOKE ... FROM. Подробности см. в главе 35.

Имя пользователя также доступно во множестве выражений SQL через контекстную переменную CURRENT_USER и серверный литерал USER.

Пользователь SYSDBA

Новые инсталляции Firebird для Windows устанавливают в базу данных безопасности пользователя SYSDBA с паролем masterkey. Очевидно, что это известно всем, и не может использоваться для безопасности. Пароль должен быть изменен в первую очередь.

Под Linux некоторые инсталляторы способны генерировать произвольный пароль для SYSDBA. Вы можете увидеть его в текстовом файле SYSDBA.password, размещенном в каталоге Firebird /bin.

Пользователь SYSDBA является владельцем базы данных безопасности. Помните, что базы данных Firebird имеют "одного пользователя SYSDBA для управления всеми". Пользователь SYSDBA имеет все деструктивные права ко всем базам данных на сервере. Пароль у SYSDBA не должен распространяться на обычных пользователей.

Слабое место POSIX

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

вернуться

134

По соображениям безопасности системы не должны поставляться вместе с библиотекой встроенного сервера, доступной для активного сервера Firebird, если только корневой каталог Firebird не защищен жестко от неавторизованных посетителей. Подробности см. ранее в главе

вернуться

135

Несмотря на это в Firebird используется шифрование с потерей данных, которое не позволяет восстановить исходный пароль путем дешифрования. В Firebird 2.0 вместо DES используется MD5. - Прим. науч. ред.