СТАТЬЯ
01.10.02

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

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

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

Способы доступа

Существуют различные способы доступа к базам данных Oracle. Приведем некоторые из них:

· инструментальные средства сервера Oracle, такие, как sqlplus и svrmgrl;
· Oracle Enterprise Manager;
· написанные пользователями программы на языках, поддерживаемых Oracle, включая:
                          · OCI;
                          · ODBC;
· JDBC;
· SQL*Net или NET 8.

В данном документе основной акцент делается на инсталляции Oracle под управлением ОС Unix, однако все рассматриваемые технические приемы и решения легко применимы и в других операционных системах.

Исследование Oracle

Oracle доброжелательно и безвозмездно предоставляет всем желающим пробные инсталляционные CD-диски с программным обеспечением СУРБД и новейшими инструментальными средствами разработки и приложениями. Доступны версии от Oracle 7.1 до Oracle 8i и 9i. В последнее время Oracle предлагает полные комплекты CD-дисков для всех операционных систем по очень низкой цене. Операционная система Solaris для Sparc и Intel поставляется с инсталлированным программным обеспечением Oracle. Издательство www.osborne.com совместно с книгой “Oracle8i for Linux Starter Kit” поставляет официальную версию Oracle 8i для Linux или Windows NT (в анонсе издательства о версии для Windows ничего не говорится, но это не существенно. – Прим. пер.).

Инсталляция Oracle под Linux или Windows очень полезна для получения представления о программном обеспечении и его использовании. Oracle регулярно изменяет функциональные характеристики программного обеспечения на нижних уровнях. Посмотрите на изменение от версии к версии структуры, объемов и количества X$-таблиц, в которых хранится вся служебная информация.

(Прим. пер.:)

Версия Oracle Количество X$-таблиц
6 ? (35)
7 126
8 200
8i 271
9i 352

СУРБД Oracle – солидный пласт программного обеспечения, чтобы взломать его или защитить нужно знать его очень хорошо.

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

Выяснение, какие базы данных инсталлированы и функционируют

Вы имеете доступ к Unix и намерены взломать базу данных Oracle. Как узнать, где инсталлировано программное обеспечение базы данных и как к нему обращаться? Базы данных Oracle могут быть распределенными, параллельными со многими экземплярами или автономными.

Во время инсталляции Oracle создается файл oratab, который содержит подробные данные о базах данных, инсталлированных на машине. Он может использоваться для запуска и остановки баз данных во время перезагрузки, а также для управления резервным копированием. Место нахождения этого файла не фиксировано, он может находиться в /etc или в /var/opt/oracle. Проще всего его можно найти следующей командой:

sputnik:pxf> find / -name oratab -print 2>/dev/null | more

/etc/oratab

Однако использование команды find не есть очень хорошая идея, если вы пытаетесь избежать обнаружения. Хорошо начать с просмотра /etc, /var/opt и /opt, а также их поддиректорий.

Файл oratab должен быть доступен для чтения, если только dba или администратор Unix не изменил права доступа к нему:

sputnik:pxf> ls -al oratab
-rw-rw-r-- 1 oracle root 676 Jul 16 14:47 oratab

Этот файл позволяет узнать список всех ORACLE_SID и ORACLE_HOME. Если используется соглашение об именовании OFA, то версия Oracle может быть “раскручена” по путям доступа к директориям. Важная часть здесь – ORACLE_SID, поскольку он может использоваться для определения, работает ли база данных.

Файлы конфигурирования SQL* NET и NET 8, как на сервере, так и на клиенте, могут использоваться для определения информации о базах данных, работающих как на сервере, так и во всей организации. Файлы конфигурирования SQL* NET и NET 8 будут рассмотрены ниже в разделе “Конфигурационные файлы SQL*NET и NET 8”.

Проверка переменных окружения пользователя базы данных может также дать некоторую информацию. В системах Unix / Linux должен быть, по крайней мере, следующий набор переменных окружения:

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

Пример определения, какие экземпляры базы данных работают:

sputnik:pxf> ps -ef | grep lgwr | grep -v grep | more
sputnik:pxf> oracle 654 1 0 10:37 ? 00:00:00 ora_lgwr_PENT

Здесь показано, что работает один экземпляр Oracle и SID базы данных – PENT. Поиск "lgwr" означает поиск идентификатора, используемого для обозначения фонового процесса Log Writer (процесс записи журнальных файлов). В СУРБД Oracle имеется несколько фоновых процессов, постоянной работающих и управляющих базой данных. Этот процесс один из них. Могут также работать и несколько дополнительных процессов. Все эти процессы используют для взаимодействия область разделяемой памяти, называемую SGA (Shared Global Area – разделяемая глобальная область).

Поиск информации в пользовательском окружении

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

Другая полезная проверка – запускает ли кто-нибудь какие-либо командные файлы, в которых командная строка соединения с базой данных содержит имена пользователей и пароли. Это можно увидеть с помощью следующей команды ps:

sputnik:pxf> ps -ef | grep ora

root

617

1

-

39

10:37

tty1

00:00:00

login -- oracle

root

618

1

-

39

10:37

tty2

00:00:00

login -- oracle

oracle

625

617

-

39

10:37

tty1

00:00:00

-bash

oracle

650

1

-

39

10:37

?

00:00:00

ora_pmon_PENT

oracle

652

1

-

39

10:37

?

00:00:00

ora_dbw0_PENT

oracle

654

1

-

39

10:37

?

00:00:00

ora_lgwr_PENT

oracle

656

1

-

39

10:37

?

00:00:00

ora_ckpt_PENT

oracle

658

1

-

39

10:37

?

00:00:00

ora_smon_PENT

oracle

660

1

-

39

10:37

?

00:00:00

ora_reco_PENT

oracle

662

1

-

39

10:37

?

00:00:00

ora_s000_PENT

oracle

664

1

-

39

10:37

?

00:00:00

ora_d000_PENT

oracle

690

625

-

39

10:41

tty1

00:00:00

sqlplus system/manager @doit.sql

oracle

691

690

-

39

10:41

?

00:00:00

oraclePENT (DESCRIPTION=(

oracle

692

618

-

29

10:41

tty2

00:00:00

-bash

oracle

740

692

-

29

10:45

tty2

00:00:00

ps -ef

oracle

741

692

-

29

10:45

tty2

00:00:00

grep ora


Можно увидеть, что кто-то запускает командные файлы SQL как пользователь SYSTEM, который по-прежнему имеет установленный по умолчанию пароль. Но этот пример слишком глупый, чаще можно увидеть выполнение командных файлов SQL с “зашитыми” в них именами пользователей и паролями. Обычно требуется написать командный файл shell или задание cron, которые проверяли бы каждую минуту список процессов, чтобы обнаружить запущенный командный файл SQL, или же сделать домашнюю работу и определить, когда должны запускаться пакетные задания.

Следующий очевидный шаг – найти целую машину или конкретные директории с командными файлами, содержащими имена пользователей Oracle и их пароли. Командные файлы могут быть любого типа: Bourne, KSH, Perl, SQL или двоичными. Не прогадаете, если поищите строки sqlplus или svrmgrl в каких-либо директориях или файлах.

Резервные копии баз данных и базы данных разработчиков

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

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

Типы резервных копий Oracle

Существует три основных вида резервирования Oracle:

Для проверки, выполняется ли в базе данных горячие или холодное резервирование, нужно провести небольшое исследование. Можно поискать в машине командные файлы резервирования, содержащие слова ALTER TABLESPACE [TABLESPACE NAME] BEGIN BACKUP. Проверьте задания cron, проверьте дневные листинги процессов: не запускалось ли программное обеспечение, которое могло выполнять резервирование. Проверьте протокольные файлы. Выясните, программное обеспечение для резервирования установлено на машине, используя для этого pkginfo -l. Можно проверить статус табличных пространств, не переключались ли они в режим “OFFLINE”, что может быть хорошим признаком выполнения в данное время горячего резервирования.

SQL> select tablespace_name,status
2 from dba_tablespaces;

TABLESPACE_NAME
STATUS
SYSTEM
ONLINE
USERS
ONLINE
RBS
ONLINE
TEMP
ONLINE
OEM_REPOSITORY
ONLINE
INDX
ONLINE
APP_IND_1
ONLINE
APP_DATA_1
ONLINE

6 rows selected.

SQL>

Проверка холодного резервирования проще, так как вы можете снова проверить задания cron, листинги процессов и посмотреть, есть ли регулярные остановки, а затем поискать какое-нибудь работающее программное обеспечение резервирования. Если доступен сигнальный файл Oracle (alert log), то в нем просто найти все остановки и запуски базы данных. Попробуйте определить, где и когда записываются файлы и, что более важно, попытайтесь узнать, можно ли эти фалы взять и прочитать.

Резервные копии на ленте

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

[Прим. пер.: "социальная инженерия" - тактика злонамеренного проникновения, при которой взломщик путем "уговоров" обманывает пользователей или администратора (например, представляясь новым сотрудником) и добивается значимой информации о компании и/или её компьютерных системах, чтобы получить несанкционированный доступ к сети.
http://www.kolbi.ru/cgi/dict/show-dict.pl?
_query=social+engineering&_submit=Search]

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

Резервные копии на диске

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

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

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

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


 

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