СТАТЬЯ
10.10.02

Предыдущая часть

Эксплуатация и защита баз данных Oracle. Часть I

© Пит Финнеган (Pete Finnigan)
Статья была опубликована в журнале Oracle Magazine RE

Часть 1. Оглавление

Базы данных разработчиков и тестовые базы данных

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

Во многих случаях базы данных разработчиков и тестовые базы данных имеют копии всех промышленных данных, поскольку они требуются для системного тестирования и настройки производительности. Так что, если вам требуются эти данные, очень часто достаточно одного дня для их извлечения из этих баз данных. Как найти базу данных разработчиков или тестовую базу данных? Их не загружают в ту же машину, в которой работает промышленная база данных. Выясните в файлах tnsnames.ora и listener.ora SID базы данных, который похож на SID промышленной базы данных. Посмотрите в директории admin инсталляции Oracle файлы init.ora. Они имеют имена init[ORACLE_SID].ora.

Иногда остаются другие дырки – разработчики часто имеют гораздо больше прав доступа, чем это нужно. Когда тестовая среда переносится в промышленную базу данных, часто копируются также пользователи, и права доступа разработчиков также оказываются в промышленной базе данных. Ели вы заполучили имя пользователя (разработчика), который имеет хорошие привилегии, испытайте его и в промышленной базе данных.

Базы данных для работы в непредвиденных обстоятельствах

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

Конфигурационные файлы SQL*NET и NET 8

Конфигурационные файлы SQL*NET и NET 8 существуют как на сервере, так и на клиенте. Listener, работающий на сервере, ждет запросов для доступа к СУРБД. Эти конфигурационные файлы говорят листнеру, какая база данных и какой процесс Oracle будет принимать запрос.

В конфигурационных файлах SQL*NET и NET 8 будет также искаться информация. Они имеются как на сервере, так и на каждом клиенте, который получает доступ к базам данных Oracle. Конфигурационные файлы tnsnames.ora, listener.ora и sqlnet.ora обычно размещаются в ORACLE_HOME/network/admin в системах Unix и в %%ORA_HOME%%/network/admin в системах Windows.

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

Пример входа в файле tnsnames.ora:

PENT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PENT)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =

(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

Здесь можно увидеть, что данный файл поддерживает процедуру EXTPROC и только одну базу данных Oracle. Протокол – TCP, а хост – EUROPA, но может быть и IP-адрес и различные протоколы. Стандартный порт прослушивания для листнера Oracle TNS – 1521, но можно использовать и 1526, если 1521 уже используется на этой машине другими инсталляциями Oracle. SERVICE_NAME – SID базы данных. Это имя совместно с именем пользователя и паролем требуется для установления соединения с конкретной базой данных.

Процесс EXTPROC принимает запросы процедур PL/SQL для вызова внешних 'C'-функций, написанных и инсталлированных разработчиками. Хорошее руководство по разработке таких функций и процессов можно найти в “PL/SQL Oracle PL/SQL programming. 2nd Edition” написанного Steve Feuerstein и изданного www.oreilly.com. СУРБД Oracle вызывает эти 'C'-функции через протокол TNS, и не использует прямые методы, применяемые самой Oracle во встроенных пакетах. Oracle вызывает 'C'-функции, которые делают большинство встроенного в пакеты с помощью ключевого слова PL/SQL pragma interface. Можно создавать пользовательские пакеты, использующие такой же синтаксис, и вызывать 'C'-функции Oracle и успешно компилировать их. Если это будет сделано, то при попытке выполнения функции или процедуры в пакете произойдет сбой с ошибкой “ORA-6509 ICD vector missing error”. Это похоже на то, что Oracle имеет “зашитую” таблицу указателей функций. Это можно посмотреть в X$-таблицах. X$-таблицы не могут модифицироваться, поскольку они фактически являются окном в списки 'C'-структур (structs) в SGA. Если данная таблица находится в числе X$-таблиц, то к ней можно добавить новые входы с помощью отладочной (poke) команды oradebug, следите за пространством!

Файл tnsnames.ora – необходимый файл сервера базы данных. Он же может потребоваться на клиенте, в зависимости от того, используется ли сервер имен.

Ниже следует пример файла listener.ora:

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 1521))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =

Этот файл управляет TNS-листнером на сервере. Он также содержит информацию об IP-адресах, имени хоста, протоколе и порте, который прослушивает листнер. Второй раздел детализирует имена баз данных и ORACLE_HOME этих баз данных. Файл listener.ora имеет важное значение для сервера баз данных. Если в одном узле используется несколько баз данных, все они могут разделять один файл listener.ora.

(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 2481))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\Oracle\Ora81)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = PENT)
(ORACLE_HOME = C:\Oracle\Ora81)
(SID_NAME = PENT)
)
)

Вторжение из других баз данных

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

Если доступ к целевой базе данных существенно ограничен, можно обращаться к требуемой базе данных с меньшим уровнем защищенности. Доступ к другой базе данных можно получить, используя тех же пользователей и приемы. Можно посмотреть, есть ли какие-либо связи данной базы данных с промышленной базой данных, доступ к которой нам нужен:

SQL> select db_link,username,host
2 from all_db_links;

DB_LINK USERNAME HOST
------------- -------- ---------
VOSTOK VXD vostok@europa.world

1 rows selected.

SQL>

Для доступа к другим базам данных связям базы данных требуется использовать TNS, поэтому в файле tnsnames.ora должен быть соответствующий вход. В примере, приведенном выше, VOSTOK – это другая база данных в хосте europa. Очень часто связи баз данных создаются тогда, когда пользователи, создаваемые в базе данных, выполняют запросы от имени исходной базы данных как dba. Очень важно проверить такой путь доступа, чтобы увидеть, что высшие привилегии могут быть получены в промышленной базе данных.

Подтверждение версии Oracle

В самом начале очень полезно определить версию базы данных сервера Oracle, к которой вы хотите получить доступ. Это можно сделать очень легко без соединения с базой данных, а только запуском утилиты Oracle svrmgrl. Она расположена в директории ORACLE_HOME/bin инсталляции Oracle. Запуск выглядит следующим образом:

sputnik:pxf> svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation. All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.0 - Production
With Partitioning and Java Options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR>

Совершенно ясно, что у нас работает версия 8.1.5 СУРБД.

Так же возможен удаленный и локальный запуск листнера, которые дадут аналогичную информацию. Формат команды: lsnrctl status.

Продолжение статьи

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Oracle
Отправить ссылку на страницу по e-mai


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 10.10.02