Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

2007 г.

Шифрование паролей в СУБД Oracle
Часть 4

к.ф.-м.н. Пудовченко Ю.Е.

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

Рекомендации по повышению безопасности

С учетом результатов данной статьи становится понятно, что в системах с повышенными требованиями к безопасности для обеспечения надежной аутентификации следует использовать более сильные средства, чем парольная защита СУБД Oracle. Рекомендации естественно вытекают из описанных выше уязвимостей.
  1. Придерживаться принципа минимума привилегий при назначении ролей и выдаче привилегий.
  2. Усилить политику безопасности при выборе паролей, ограничив снизу минимальную длину пароля 10-12 знаками. Эти действия реализуются путем настройки профиля и выполнения скрипта utlpwdmg.sql. Скрипт utlpwdmg.sql рекомендуется изменить, с тем, чтобы применять в нем свои технологии генерации паролей.
  3. Запретить удаленное подключение как DBA (файл init.ora, spfile.ora).
    remote_os_authentication=FALSE
  4. Несмотря на наличие бреши, связанной с sys.user$, установить аудит SELECT-выражений выполняемых над таблицами, содержащими столбец PASSWORD:
    audit select on sys.link$;
    audit select on sys.user_history$;
    audit select on sys.dba_users;
    audit select on sys.KU$_ROLE_VIEW;
    audit select on sys.KU$_DBLINK_VIEW;
    audit select on sys.KU$_10_1_dblink_view;
    audit select on sys.KU$_USER_VIEW;
    audit select on sys.exu8phs;
    audit select on sys.user_db_links;
    audit select on sys.exu8rol;
    audit select on sys.KU$_psw_hist_list_view;
    
  5. Настройка IP-адресов, с которых возможно подключение к БД (файлы sqlnet.ora, protocol.ora):
    tcp.validnode_checking = YES
    tcp.excluded_nodes = {list of IP addresses} - список запрещенных IP-адресов
    tcp.invited_nodes = {list of IP addresses}    - список разрешенных IP-адресов
    
  6. Настроить шифрование TNS-трафика. Использовать создание защищенного канала при установке соединения, например, алгоритм Диффи-Хеллмана.
  7. В ОС Unix настроить список IP-адресов, с которых возможно подключение к серверу:

    файлы hosts.allow, hosts.deny

  8. Обеспечить подключение к серверу только по SSH.
  9. Максимально ограничить доступ потенциального злоумышленника к хешам паролей.

    Настроить права на файл паролей pwSID.ora и файл system.dbf так, чтобы исключить доступ всех пользователей, кроме владельца софта (обычно это учетная запись oracle в ОС). Т.е. члены группы dba не смогут просмотреть этот файл.

  10. Настройка аудита в ОС.
  11. В системах с повышенными требованиями к безопасности следует обратить внимание на привилегии пользователей, которые имеют доступ к БД через Интернет и не использовать привилегированных пользователей для web-приложений.
  12. Не забывать про важность организационных мер (ограничение круга лиц, которые имеют доступ к серверу и ОС, к root, к бэкапам, подписка о неразглашении, меры наказания), которые являются не менее серьезным барьером, чем парольная защита.

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

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

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

Процедура проверки качества пароля - это функция на 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;

Источники и литература

1.обратноJoshua Wright, Carlos Cid (18. Oct. 2005) An Assessment of the Oracle Password Hashing Algorithm
2.обратноБрюс Шнайер, Прикладная криптография, Издательство «Триумф» 2003 г.
3.обратноR. Morris, K. Thompson "Password security: A case history", Communications of ACM, v.22, n. 11, Nov. 1979., pp. 594-597.
4.обратноЛ. Дж. Хоффман "Современные методы защиты информации"(М.: Сов. радио, 1980).
5.обратноМарлен Терьо, Аарон Ньюмен «Oracle. Руководство по безопасности», Издательство Лори, 2004 г.
6.обратноBob Baldwin. (1993, July 9). "Oracle Password Encryption Algorithm?", Usenet Newsgroup comp.databases.oracle
7.обратноЖурналы «Конфидент» № 6/97, 3/98.

1(обратно к тексту)Системы защиты обычно имеют недружественный характер, поэтому здесь следует соблюдать компромисс между строгостью системы и удобством пользователей. Если например, повысить минимальную длину пароля до 20 знаков, следует ожидать, то мониторы пользователей будут увешаны списками паролей, а техподдержка будет перегружена звонками типа "не могу войти в …". В результате, в серьезной и строгой системе информационной безопасности самым слабым звеном окажется человеческий фактор.

НазадСодержаниеДалее
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...