Шифрование паролей в СУБД Oracle

       

Средство СУБД Oracle по управления паролями в БД


Управление устареванием паролей в СУБД Oracle реализуется через использование profile с помощью операторов create profile и alter profile. Они обеспечивают возможность проверки качества (сложность) пароля и настройку политики устаревания паролей. Администраторы могут использовать для этой цели profile пользователя в БД и встроить в него свою функцию проверки качества пароля, чтобы заставить пользователей принимать более сильные пароли.

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

Процедура проверки качества пароля - это функция на PL/SQL в схеме SYS, принимающая на входе логин пользователя, старый пароль и новый пароль, и возвращающая TRUE, в зависимости от качества выбранного пользователем пароля. Простейший пример такой функции

SQL> CONNECT / AS SYSDBA; Connected.

SQL> CREATE OR REPLACE FUNCTION sys.password_verify 2 (username varchar2, password varchar2, old_password varchar2) 3 RETURN boolean IS 4 BEGIN 5 IF length(password) < 12 THEN 6 raise_application_error(-20000, 'Password less than 12 characters'); 7 END IF; 8 RETURN(TRUE); 9 END; 10 /

Эта функция выдает ошибку, если длина нового пароля менее 12 знаков. Эта функция не выполняет никаких других проверок пароля. Реальная функция проверки пароля должна быть, конечно, гораздо сложнее.

После создания такой функции ее необходимо ассоциировать с профилем. По умолчанию, в СУБД Oracle всегда существует профиль DEFAULT. С ним и будем ассоциировать:

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION password_verify;

SQL> connect scott/tiger Connected. SQL> ALTER USER scott IDENTIFIED BY "scott" REPLACE "tiger"; ALTER USER scott IDENTIFIED BY " scott " REPLACE "tiger" * ERROR at line 1: ORA-28003: password verification for the specified password failed ORA-20000: Password less than 12 characters SQL> ALTER USER scott IDENTIFIED BY "abcdefghijkl" REPLACE "tiger"; User altered.


Всем пользователям присваивается профиль с ограниченным сроком действия пароля. Если пароль не меняется, то дается ограниченный период, в течение которого будут выдаваться предупредительные сообщения. Если пароль не меняется в течение дополнительного периода, то логин будет заблокирован. Разблокировать пароль сможет только член группы ДБА командой alter user account unlock;

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

Управление историей хранения паролей реализуется с помощью параметров password_reuse_max и password_reuse_time. Эти параметры не позволяют пользователю завести для себя два пароля и менять их поочередно. Бывают пользователи, которые, только что сменив пароль на какой-нибудь новый, тут же повторно меняют его на старый. Эти параметры запрещают пользователю вернуться к одному из старых паролей, пока не пройдет определенный период времени. Один из параметров определяет, сколько дней должно пройти прежде, чем пароль можно будет использовать повторно, а другой определяет сколько раз нужно сменить пароль, прежде, чем его можно будет использовать повторно. СУБД запоминает все введенные пароли (точнее, их хеши) и сравнивает их.

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

Один из способов управления паролями заключается в редактировании и выполнении скрипта, предназначенного для настройки политики парольной защиты - $ORACLE_HOME/rdbms/utlpwdmg.sql. Этот скрипт имеет ряд предварительно установленных параметров, поэтому в большинстве случаев администратор может просто выполнить его.

Скрипт utlpwdmg.sql присваивает параметру password_reuse_time=1800, а password_reuse_max=UNLIMITED. Методологически целесообразнее присваивать значение параметру password_reuse_time, а не password_reuse_max, потому что настойчивый пользователь может обойти ограничение password_reuse_max, поменяв пароль password_reuse_max+1 раз.

История паролей хранится в таблице sys.user_history$.







SYS @ orcl >select * from user_history$;

USER# PASSWORD PASSWORD_DATE ---------- ------------------------------ --------- 79 8006C2C56E61DB9D 24-APR-06 66 8F4F9102D7864F47 23-MAY-06 66 87A9B0BB9A8B9FCD 06-JUN-06 5 8D2FA9B19EBC52C4 06-JUN-06 66 992FD456594C1A6E 06-JUN-06 66 11F1EC5B54F7D35B 06-JUN-06 66 BD8F1C27CA78D7D1 06-JUN-06

При создании БД автоматически создается профиль DEFAULT. Он содержит в числе прочих настроек еще и политику устаревания паролей.

Вот параметры до изменения


PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL

Название RESOURCE_NAME Смысл RESOURCE_NAME
FAILED_LOGIN_ATTEMPTS Допустимое количество неуспешных попыток регистрации до блокировки учетной записи
PASSWORD_LIFE_TIME Время жизни пароля
PASSWORD_REUSE_TIME Число дней, в течение которых пароль нельзя использовать повторно.
PASSWORD_REUSE_MAX Необходимое число изменений пароля, прежде чем им можно будет воспользоваться повторно.
PASSWORD_VERIFY_FUNCTION Скрипт проверки стойкости пароля. Допускается создавать собственные функции проверки пароля.
PASSWORD_LOCK_TIME Длительность блокировки в днях. Сколько времени будет заблокирована учетная запись после блокировки
PASSWORD_GRACE_TIME Продолжительность дополнительного периода в днях. В течение этого времени разрешается подключение к БД, но выводится предупреждение о смене пароля.

PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3
DEFAULT PASSWORD_LIFE_TIME PASSWORD 60
DEFAULT PASSWORD_REUSE_TIME PASSWORD 1800
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_LOCK_TIME PASSWORD .0006
DEFAULT PASSWORD_GRACE_TIME PASSWORD 10
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION


После применения скрипта utlpwdmg. sql поведение базы данных изменится. При вводе нового/изменении старого пароля СУБД будет выполнять следующие проверки:


  • Проверка, что пароль такой же, как логин
  • Проверка, что пароль длиннее 4-х знаков
  • Проверка, что пароль не 'welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd'
  • Проверка того, что пароль содержит не менее 1 буквы & 1 цифру & один знак пунктуации.
  • Проверка, что пароль отличается от предыдущего пароля не менее чем в 3-х знаках в соответствующих позициях.


Администратор может самостоятельно изменить параметры профиля примерно так:

SQL >ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null; Profile altered.

Полный синтаксис этой команды:

ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LIFE_TIME 60 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED PASSWORD_LOCK_TIME 1/1440 PASSWORD_GRACE_TIME 10 PASSWORD_VERIFY_FUNCTION verify_function;

Руководствуясь параметром failed_login_attempts, сервер автоматически блокирует учетную запись после заданного числа неуспешных попыток регистрации в системе.

Поскольку эта особенность может быть использована злоумышленником для блокировки работающих учетных записей, то средства блокировки можно настроить так, чтобы учетная запись разблокировалась автоматически через время password_lock_time (в днях). Если password_lock_time устанавливается в UNLIMITED, то автоматической разблокировки не происходит. Разблокировать учетную запись может только член группы ДБА.

Параметр password_lock_time=0.0006 указывается в сутках, величина 1/1440 означает задержку в 51,84 секунды.

Если попытки подключения прекратились, не достигнув значения failed_login_attempts, то по истечении времени password_lock_time счетчик блокировки будет сброшен в 0.

Для отмены политики управления паролями можно несколько раз выполнить команду Alter profile default limit, установив изменяемый параметр в unlimited, чтобы сбросить настроенные параметры к их значению по умолчанию:

alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited PASSWORD_LIFE_TIME unlimited PASSWORD_REUSE_TIME unlimited PASSWORD_REUSE_MAX unlimited PASSWORD_LOCK_TIME unlimited PASSWORD_GRACE_TIME unlimited PASSWORD_VERIFY_FUNCTION null;


Содержание раздела