Страница 8 из 11 Атаки баз данных Если нарушитель может соединяться с целевой базой данных как высоко привилегированный пользователь, то появляется возможность злоупотребления очень мощными привилегиями и ролями базы данных для атак на операционную систему сервера и другие базы данных. До Oracle9i имелось очень большое количество иногда очень мощных учетных записей пользователей, создаваемых по умолчанию во время инсталляции. Для защиты таких систем требовалось обдуманное конфигурирование пользователей, однако практика показала, что это выполнялось не всегда. Начиная с Oracle9i, подавляющее большинство учетных записей, создаваемых по умолчанию, блокируется во время инсталляции, запрещая доступ нарушителям и позволяя DBA разблокировать только требуемые для его системы учетные записи. Кроме того, все пароли учетных записей, создаваемых по умолчанию, в Oracle9i устанавливаются с истекшим сроком их действия, поэтому первый пользователь для соединения с разблокированной учетной записью должен задать новый пароль. Эти два простых, но важных, усовершенствования стандартной инсталляции Oracle9i закрывают один из основных путей доступа к базам данных, который использовался хакерами. Несколько более интересных привилегий и атак описано в табл. 2. Привилегия/роль | Атака | CREATE LIBRARY CREATE ANY LIBRARY JAVASYSPRIV | Выполняются произвольные команды операционной системы в контексте владельца программного обеспечения Oracle (UNIX) или пользователя SYSTEM (NT). Отметим, что в зависимости от версии базы данных или версии NT (рабочая станция или сервер) пользователь SYSTEM может не иметь возможности непосредственного взаимодействия с экраном или выполнения любых команд, которые требуют экранного доступа, так как SYSTEM не имеет доступа к рабочему столу пользователя. Самый простой способ использования этих привилегий – указать библиотеку в системном” служебном вызове, который имеет очень простой синтаксис и, по большому счету, не зависит от платформ, например: Create library libsys as '/usr/lib/libsys.so'; -- Solaris Create library libsys as '/usr/lib/libc.so.6'; -- SUSE Linux Create library libsys as '/usr/lib/libc.sl'; -- HPUX Create library libsys as 'c:\winnt\system32\msvcrt.dll'; -- NT В приложении А содержится полностью законченный пакет hack”. CREATE ANY DIRECTORY | Чтение произвольных файлов с помощью вызовов больших объектов. Любой текстовый файл может отображаться как внешний большой объект и читаться с использованием привилегий процесса, принадлежащего Oracle. Это может также использоваться для проверки существования файлов. Так, нарушитель может выполнять в сервере произвольные команды, направлять их вывод в файл и читать этот файл. Примеры приведены в пакете hack” приложения А. | CREATE DATABASE LINK | Просмотр других баз данных. Можно встраивать данные соединения в команды создания связей баз данных, избавляясь от необходимости наличия соответствующей записи в файле tnsnames.ora. Например: Create database link test Connect to mdsys identified by mdsys Using '(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=victim.us.oracle,com) (PORT=1521))(CONNECT_DATA=(SID=orcl)))'; может использоваться для попытки доступа к базе данных на машине victim.us.oracle.com как пользователь MDSYS, используя SID по умолчанию orcl. Эту привилегию иногда можно использовать для исследования баз данных, непосредсвенно не доступных нарушителю. Например, незащищенная тестовая система может быть использована для просмотра баз данных в корпоративной сети интранет. Также отметим, что пароли связей хранятся в открытом виде в таблице link$. | Табл. 2. Привилегии баз данных и возможные атаки. Таким образом, используя пакет HACK”, представленный в приложении А, можно преодолеть защиту листенера. Например, используя в SQL Plus процедуру javaexecute: SQL> execute hack.javaexecute(‘c:\winnt\system32\cmd /c echo admin_restrictions = off >>c:\oracle\network\admin\listener.ora”’); Она вставляет в файл listener.ora строку admin_restrictions = off. После этого выполнение в контролере листенера команды RELOAD приведет к выключению опции ADMIN_RESTRICTIONS. Используя в пакете HACK” процедуру просмотра (browse), нарушитель может читать файл listener.ora, например: SQL> execute hack.browse(‘listener.ora’,’c:\oracle\network\admin\’); Это позволяет обнаружить текущие установки защиты листенера, включая его пароль (хешированный в UNIX, открытый текст в NT). |