СТАТЬЯ |
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 доброжелательно и безвозмездно предоставляет всем желающим пробные инсталляционные 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 |
Следующий очевидный шаг – найти целую машину или конкретные директории с командными файлами, содержащими имена пользователей Oracle и их пароли. Командные файлы могут быть любого типа: Bourne, KSH, Perl, SQL или двоичными. Не прогадаете, если поищите строки sqlplus или svrmgrl в каких-либо директориях или файлах.
Резервные копии баз данных и базы данных разработчиков
Самый простой и наиболее успешный способ компрометации баз данных заключается в получении информации о базах данных из тех мест, которые оказались незащищенными. Два примера: резервные копии баз данных, а также базы данных разработчиков и тестовые базы данных. Если можно достать резервную копию базы данных или экспортный файл, то можно повторно создать базу данных на вашей собственной машине.
Здесь важно учитывать то, что данные и базы данных часто не размещаются в одной промышленной машине. Часто используются несколько баз данных для разработчиков, баз данных для компоновочного тестирования, системного тестирования и приемочных испытаний. Существуют также различные типы резервных копий.
Существует три основных вида резервирования Oracle:
SQL> sho user
USER is "DBSNMP"
SQL> select log_mode
2 from v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL>
Для проверки, выполняется ли в базе данных горячие или холодное резервирование, нужно провести небольшое исследование. Можно поискать в машине командные файлы резервирования, содержащие слова 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. Отправить E-Mail http://www.interface.ru |
|
Ваши
замечания и предложения отправляйте
автору По техническим вопросам обращайтесь к вебмастеру Документ опубликован: 01.10.02 |