Шрифт:
Интервал:
Закладка:
Встроенный сервер под Windows
Библиотека встроенного сервера под Windows, естественно, разработана для работы на машинах, которые не используются как полноценный сервер. Если у вас есть копия библиотеки fbembed.dll, расположенная где-нибудь на полностью серверной машине, безопасность сервера подвергается большому риску. И вот почему.
Встроенный сервер не использует идентификацию сервера для проверки, имеет ли на это права пользователь, подключающийся к базе данных. Большинство интерфейсов приложений требуют имени и пароля пользователя. Подойдет любое имя пользователя и любой пароль - ничего проверяться не будет. Внутренняя безопасность базы данных, разработанная для использования во встроенном сервере, может быть обеспечена разрешениями SQL (см. главу 35), которые ограничивают доступ, разрешая его конкретному пользователю. Это само по себе является дырой в безопасности на отдельно взятой машине, которая физически доступна для любого "прохожего".
При этом на машине, где выполняется сервер Firebird 1.5 и установлено программное обеспечение встроенного сервера, хакерская программа может быть запущена под встроенным сервером, когда базы данных закрыты, может соединиться с файлом security.fdb как пользователь SYSDBA, украсть или разрушить пользовательские записи, прочесть зашифрованный пароль и обратиться к другим базам данных, как SYSDBA. Когда приложение соединяется с базами через fbembed.dll, оно блокирует каждую базу данных. Хакерское приложение может сохранять соединения с базами данных - включая security.fdb - бесконечно долго.
Приложения встроенного сервера и клиенты выполняются в адресном пространстве операционной системы пользователя. Для исключения риска попадания в систему злонамеренных программ встроенного сервера ограничьте доступ пользователя и группы в файловой системе пространством, где располагаются базы данных и системные файлы Firebird.
Безопасность сетевого соединения
Множество сообщений между клиентом и сервером несет информацию, которая может быть довольно легко получена кем-то, подслушивающим сетевые сообщения. Например, зашифрованный пароль может быть получен и использован для неавторизованного доступа к серверу.
Поэтому необходимо, чтобы все части сетевого пути между клиентом и сервером были под контролем.
Можно приобрести дополнительные продукты для зашифрованной передачи данных по сети, чтобы блокировать незащищенные цепи[133].
Web и другие многозвенные серверные приложения
Попытка полагаться на имена пользователей по умолчанию может привести к непредвиденным результатам, таким как неожиданная передача привилегий владельца базы данных или даже владельца серверного процесса обычным пользователям. Строго рекомендуется, чтобы ваше серверное приложение требовало ввода имени пользователя и пароля до каких-либо обращений к серверному процессу Firebird.
Использование выделенных серверов
Исключите использование на хост-машине других сервисов, особенно таких уязвимых, как серверы Web и FTP, которые потенциально принимают безымянные подключения. Отключение других сервисов не требуется для запуска Firebird. В Windows ограничьте сетевой доступ к реестру на серверах баз данных.
Использование средств межсетевой защиты
По очевидным причинам рекомендуется размещение ваших серверных машин под управлением средств межсетевой защиты (firewall). Может быть менее очевидным то, что использование средств межсетевой защиты клиентских процессов также является хорошей идеей. Неконтролируемый пользователь может запустить процесс на надежной клиентской машине для передачи некорректной информации серверу и получить привилегированный доступ к его базам данных. Известно, что клиенты Windows ненадежны.
Отражение атак
Код 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 для сервера выглядят идентичными. Пароли чувствительны к регистру. Допустимые символы такие же, как и для имени пользователя, но прописные буквы отличаются от строчных. Пароли не обязаны быть уникальными, хотя это и желательно для целей повышения безопасности.
! ! !
ПРИМЕЧАНИЕ. Некоторые интерфейсы администратора накладывают ограничение в восемь символов и не допускают имена пользователей и пароли, которые начинаются с цифры. Хотя это и не является ограничением системы безопасности баз данных, имеет смысл следовать такой практике.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование