RANDOM - архив хешей паролей

                   

ВЕРСИЯ:

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, можно получить здесь.

Сайт создан в системе uCoz