Выполнение произвольного кода
Выполнение произвольного кода
Для плохо защищенных систем все текущие версии Firebird предоставляют возможность выполнения произвольного кода с помощью внешних функций, фильтров BLOB и реализаций пользовательских наборов символов. Такие внешние модули выполняются в том же адресном пространстве, что и серверный процесс, и с теми же привилегиями.
Соответственно, важно защитить сервер от возможности доступа внешних файлов и модулей, написанных неавторизованными пользователями.
Firebird 1.0.x
В Firebird 1.0.x вы можете сконфигурировать указанные каталоги для хранения внешних модулей и внешне отображаемых файлов данных и применить ограничения на уровне операционной системы для предотвращения неавторизованного доступа. Настоятельно рекомендуется использовать такую возможность в файловых системах, которые способны это поддерживать с полномочиями доступа файловой системы.
При этом сервер Firebird 1.0.x имеет доступ к внешнему коду и данным в любом месте файловой системы, находящейся под управлением хоста.
Firebird 1.5
В версии 1.5 и выше размещение внешних выполняемых модулей и других внешних объектов может быть жестко сконфигурировано для гарантии того, что сервер вызовет исключение, если получит запрос на доступ к внешним объектам, расположенным не в нужном месте. Подробности такого конфигурирования см. в замечаниях относительно внешних объектов в конце главы 36.
Особые риски, связанные с сервисами Windows
Сервисы, выполняемые под профилем localsystem, рассматриваются как часть надежного базового кода (Trusted Code Base, TCB) - предполагается, что они имеют такой же уровень надежности, что и сама Windows. Выполнение сервиса Firebird в Windows 2000 и выше несет в себе явный риск в отношении выполнения произвольного кода, созданного со злым умыслом. Важность обеспечения программной целостности внешних выполняемых модулей Firebird, даже при очень высоких условиях безопасности, является критичной.
Короче говоря, программное обеспечение операционной системы Windows не дает надежных гарантий безопасности серверов базы данных в локальной сети или за ее пределами. Потенциально возможные внешние модули должны быть отключены четко сконфигурированным контролем доступа пользователей с помощью LAN и надежными продуктами сетевой защиты сторонних разработчиков для определения и блокирования атак.
Встроенный сервер под Windows
Библиотека встроенного сервера под Windows, естественно, разработана для работы на машинах, которые не используются как полноценный сервер. Если у вас есть копия библиотеки fbembed.dll, расположенная где-нибудь на полностью серверной машине, безопасность сервера подвергается большому риску. И вот почему.
Встроенный сервер не использует идентификацию сервера для проверки, имеет ли на это права пользователь, подключающийся к базе данных. Большинство интерфейсов приложений требуют имени и пароля пользователя. Подойдет любое имя пользователя и любой пароль - ничего проверяться не будет. Внутренняя безопасность базы данных, разработанная для использования во встроенном сервере, может быть обеспечена разрешениями SQL (см. главу 35), которые ограничивают доступ, разрешая его конкретному пользователю. Это само по себе является дырой в безопасности на отдельно взятой машине, которая физически доступна для любого "прохожего".
При этом на машине, где выполняется сервер Firebird 1.5 и установлено программное обеспечение встроенного сервера, хакерская программа может быть запущена под встроенным сервером, когда базы данных закрыты, может соединиться с файлом security.fdb как пользователь SYSDBA, украсть или разрушить пользовательские записи, прочесть зашифрованный пароль и обратиться к другим базам данных, как SYSDBA. Когда приложение соединяется с базами через fbembed.dll, оно блокирует каждую базу данных. Хакерское приложение может сохранять соединения с базами данных - включая security.fdb - бесконечно долго.
Приложения встроенного сервера и клиенты выполняются в адресном пространстве операционной системы пользователя. Для исключения риска попадания в систему злонамеренных программ встроенного сервера ограничьте доступ пользователя и группы в файловой системе пространством, где располагаются базы данных и системные файлы Firebird.