ВЕРСИЯ:
2.4.1 от 12.02.2005
НАЗНАЧЕНИЕ:
подбор пароля для пользователя СУБД
Oracle на основании известного значения хэш-функции и имени
пользователя
СПОСОБЫ ПОДБОРА ПАРОЛЯ:
- поиск в архиве хешированных значений паролей;
- генерация хешированных значений по словарям паролей;
- генерация хешированных значений по случайным паролям фиксированной длины.
ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ:
- ведение архива хешированных значений паролей;
- анализ словарей на предмет корректности значений паролей;
- ведение статистики по проводимым операциям;
- отправка почтового уведомления с результатами анализа.
- формирование отчета с результатами анализа с записью на диск.
СОСТАВ таблиц:
create table ARCHIV
-- архив хэшированных значений паролей - текущие значения
(NAME
VARCHAR2(30),
PASS
VARCHAR2(30),
HASH
VARCHAR2(16) not null);
create table ARCHIV_ALL
-- архив хэшированных значений паролей - общий архив
(NAME
VARCHAR2(30),
PASS
VARCHAR2(30),
HASH
VARCHAR2(16) not null);
create table ARCHIV_SYS
-- архив хэшированных значений паролей for SYS
(NAME
VARCHAR2(3),
PASS
VARCHAR2(30),
HASH
VARCHAR2(16) not null);
create table ARCHIV_SYSTEM
-- архив хэшированных значений паролей for SYSTEM
(NAME
VARCHAR2(6),
PASS
VARCHAR2(30),
HASH
VARCHAR2(16) not null);
create table HOLD
-- промежуточная таблица
(NAME
VARCHAR2(30),
PASS
VARCHAR2(30),
HASH
VARCHAR2(16) not null);
create table BRUTUS
-- словарь предпочтительных слов для паролей
(PASS
VARCHAR2(30));
create table NAMES
-- словарь произвольных значений паролей
(PASS
VARCHAR2(30));
create table DICT
-- словарь иностранных слов для паролей
(PASS
VARCHAR2(30));
create table ERROR
-- некоррекные значения паролей
(T_NAME
VARCHAR2(30),
PASS
VARCHAR2(30))
create table HPASS
-- результаты анализа
(NAME
VARCHAR2(30),
PASS
VARCHAR2(255),
HASH
VARCHAR2(255),
TOTAL_ATTEMPTS VARCHAR2(255),
TIME DATE
default sysdate);
Необходимые ПРИВИЛЕГИИ:
create user PASS identified by ****;
grant connect to PASS;
grant unlimited tablespace to PASS;
-- для использования разных TABLESPACE's если требуется
grant create user to PASS;
grant alter user to PASS;
grant drop user to PASS;
grant create trigger to PASS;
-- если нужны триггера для изменения данных
grant select any dictionary to PASS;
grant select on SYS.V_$SESSION_LONGOPS to PASS; -- для контроля
продолжительности операций
Для сохранения лога в файл должен быть доступ к пакету
SYS.UTL_FILE
и разрешена запись в директорию пользовательского дампа
UDUMP (в соответствии с параметрами
инициализации).
Для отправки почтовых сообщений должен быть установлен и доступен пакет
MAILER.
Принцип работы:
Известное
значение имени пользователя и хешированного значения пароля передаются при
вызове процедуры MONITOR. Если указанный пользователь не существует в
локальной БД, то создается такой пользователь. После чего изменяется пароль
этого пользователя в соответствии с указанными параметрами (опциями) и
результат хеширования сравнивается с исходным значением хэша.
В случае совпадения значений данный пароль считается найденным, его значение
помещается в таблицу BRUTUS и выводится в качестве результата.
Результат каждого вызова процедуры MONITOR может быть занесен в таблицу
HPASS и отправлен почтовым сообщением. Все несовпадающие значения могут быть
( - опционально) перемещены в промежуточный архив HOLD (блоками по 100000
записей) по ходу генерации хешей и построчно по окончании генерации. Все
сгенерированные значения могут быть ( - опционально) внесены в архив текущих
значений ARCHIV построчно.
Архив
сгенерированных значений состоит из таблиц ARCHIV и ARCHIV_ALL, ARCHIV_SYS,
ARCHIV_SYSTEM. Основной объем данных хранится в таблицах ARCHIV_ALL,
ARCHIV_SYS, ARCHIV_SYSTEM. Таблица ARCHIV используется для сокращения
времени для экспорта результатов. Данные из таблицы ARCHIV в таблицы
ARCHIV_ALL, ARCHIV_SYS, ARCHIV_SYSTEM могут быть перемещены после экспорта и
предварительной обработки в свободное время применением самостоятельной
процедуры из пакета ARCHIVER_ALL. Сгенерированные значения разделяются по
имени пользователя и отдельно хранятся для пользователей SYS, SYSTEM и
всех остальных пользователей.
Таблицы
ARCHIV_ALL, ARCHIV_SYS, ARCHIV_SYSTEM могут иметь неуникальный индекс по
любому полю. При наличии уникального ключа каждая ошибка при вставке
приведет к потере данных вставляемого блока. (Считается багом,
дорабатывается).
Поиск по
значению хэша ведется в всех таблицах архива. По окончании вычислений
восстанавливается исходный пароль пользователя, если он существовал ранее в
БД или пользователь удаляется, если его не было в БД.
Последовательность анализа:
- поиск в архиве хэшей (в таблицах ARCHIV \ ARCHIV_SYS
...) - опционально;
- использование имени пользователя в качестве пароля; (всегда выполняется)
- генерация хэша по словарю BRUTUS - опционально;
- генерация хэша по словарю NAMES - опционально;
- генерация хэша по словарю DICT - опционально;
- генерация пароля из одного знака - опционально;
- генерация пароля из двух знаков - опционально;
- генерация пароля из случайных наборов знаков фиксированной длины - до 8
знаков - опционально.
Генерация
значений по словарям NAMES, DICT и случайных значений длиной более 2 знаков
ограничивается по времени путем установки максимальной
продолжительности расчетов минутах при запуске
программы.
Последовательность обработки результатов:
- перемещение сгенерированных значений хешей и паролей в архив;
- фиксация ошибочных значений паролей;
- анализ таблиц с помощью пакета DBMS_STATS;
- выдача результатов работы пакета, включая отправку почтового сообщения и
запись в файл на диске.
Параметры запуска указываются при вызове процедуры RANDOM.MONITOR (внешняя
процедура с примером - ST).
Контроль текущего этапа выполнения пакета может быть произведен из другого
сеанса вызовом RANDOM.LOOK (внешняя процедура WHAT).
Поиск в архиве может быть проведен или через процедуру RANDOM.MONITOR с
соответствующими параметрами или RANDOM.HASH_FIND(p_hash => <значение_хэша>)
или с использованием внешней процедуры FIND (<значение хэша>)
Не следует запускать одновременно несколько сеансов
для одного имени пользователя и устанавливать опцию очистки
промежуточной таблицы HOLD при запуске нескольких сеансов для разных имен
проверяемых пользователей
Настройка СУБД должна учитывать следующие
особенности:
- Программа не должна запускаться в SHARED режиме.
- Значение PGA должно быть не менее 32М. (pga_aggregate_target=33554432)
- sort_area_retained_size = 8M and more.
- shared_pool_size= 33554432 and more.
- db_cache_size=33554432 and more.
- db_file_multiblock_read_count=128.
- cursor_space_for_time = true
# Important
Основное значение для повышения производительности
имеет
- работа в режиме NOARCHIVELOG.
- размещение на разных дисках табличного пространства UNDO (сегментов
отката) и журнальных файлов REDO.
В процессе работы программы основные дисковые операции ведутся с табличными
пространствами отмены UNDO и содержащими таблицы используемых словарей.
Нагрузка на табличное пространствос таблицей ARCHIV незначительна.
Ориентировочная скорость генерации
значений для ATHLON XP 1700 \ ATHLON 800 при наличии 512М ОЗУ и двух
физических дисках 7200rpm/min:
- 600000 \ 400000 вариантов в час - при записи в таблицы.
- 5 млн записей \ 12 мин при перемещении из HOLD to ARCHIV
- 20 мин полное сканирование всех архивных таблиц при 200 млн записей в них.
Скрипты для инсталляции пакета RANDOM содержат описание всех необходимых объектов схемы, при этом тело пакета обработано утилитой WRAP. Для получения исходного текста пакета следует обратиться к авторам safeguardian@yandex.ru . Исходный текст будет выслан бесплатно после уточнения ряда вопросов с заказчиком.
Наполнение словарей для эффективной работы пакета RANDOM может быть проведено лицом, его применяющим, в соответствии с собственными предпочтениями. Можно использовать словари, перечисленные здесь. Для проверки паролей можно воспользоваться услугами авторов, условия такой проверки указаны здесь. Пакет для отправки почтовых сообщений через SMTP-сервер, использованный в RANDOM, можно получить здесь.