Сравнительные особенности хранения паролей в базе данных в шифрованном и хешированием виде.
Виды противодействия КС попыткам подбора паролей.
Еще одним аспектом политики учетных записей пользователей КС должно стать определение противодействия системы попыткам подбора паролей.
Могут применяться следующие правила:
• ограничение числа попыток входа в систему;
• скрытие логического имени последнего работавшего пользователя (знание логического имени может помочь нарушителю подобрать или угадать его пароль);
• учет всех попыток (успешных и неудачных) входа в систему в журнале аудита.
Реакцией системы на неудачную попытку входа пользователя могут быть:
• блокировка учетной записи, под которой осуществляется попытка входа, при превышении максимально возможного числа попыток (на заданное время или до ручного снятия блокировки администратором);
• нарастающее увеличение временной задержки перед предоставлением пользователю следующей попытки входа.
Постоянная блокировка учетной записи при обнаружении по-1 пытки подбора пароля (до снятия блокировки администратором) менее целесообразна, поскольку она позволит нарушителю намеренно заблокировать работу в КС легального пользователя (реализовать угрозу нарушения доступности информации).
При любой реакции системы на попытку подбора пароля необходимо в настройках параметров политики учетных записей обеспечить сброс значения счетчика попыток входа в систему под \ конкретной учетной записью через заданный промежуток времени, иначе значения счетчика будут суммироваться для разных сеансов работы пользователя.
При первоначальном вводе или смене пароля пользователя обычно применяются два классических правила:
• символы вводимого пароля не отображаются на экране (это же правило, применяется и для ввода пользователем пароля при его входе в систему);
• для подтверждения правильности ввода Пароля (с учетом первого правила) этот ввод повторяется дважды.
Очевидно, что в базе данных учетных записей пользователей КС пароли не могут храниться в открытом виде (иначе к ним может получить доступ как минимум администратор системы). Для хранения паролей возможно их предварительное шифрование или хеширование.
Шифрование паролей имеет два недостатка:
• поскольку при шифровании необходимо использовать ключ, требуется обеспечить его защищенное хранение в КС (знание ключа шифрования пароля позволит выполнить его расшифрование иосуществить несанкционированный доступ к информации);
• существует опасность расшифрования любого пароля и получения его в открытом виде.
Хеширование является необратимым преобразованием и знание хеш-значения пароля не даст нарушителю возможности его получения в открытом виде (он сможет только пытаться подобрать пароль при известной функции хеширования). Поэтому гораздо более безопасным является хранение паролей в хешированием виде. Недостатком является то, что не существует даже теоретической возможности восстановить забытый пользователем пароль.
Рассмотренные выше пароли можно назвать многоразовыми и применение перечисленных выше правил, конечно, может сделать парольную аутентификацию более безопасной, но она все-таки остается весьма уязвимой. Раскрытие пароля позволяет злоумышленнику действовать от имени легального пользователя. Гораздо более сильным средством, устойчивым к пассивному прослушиванию сети, являются одноразовые пароли.
Пусть пользователь КС получает список паролей Pi, Р2,..., Р„ ..., Ри. Каждый из паролей действует только на один сеанс входа (Р[ — на первый, Р2 — на второй и т.д.). В этом случае знание уже использовавшегося пользователем пароля ничего не даст нарушителю, а при каждом входе легального пользователя возможна проверка на использование данного пароля кем-либо еще.
Недостатки схемы одноразовых паролей:
• организация защищенного хранения длинного списка паролей (либо его запоминание, что маловероятно);
• неясность с номером следующего пароля, если после ввода предыдущего пароля из списка вход пользователя в систему не был осуществлен из-за сбоя в работе КС.
Эти недостатки могут быть устранены, если список паролей генерировать на основе некоторой необратимой функции, например функции хеширования. Пусть Р — начальный пароль пользователя, a F — необратимая функция. Обозначим: F'(P) = F(F(...F(P)...)) (функция F применяется последовательно i раз). Тогда список одноразовых паролей создается следующим образом: Р, = F" (Р), Р2 = = F-1(P), .... Рл_! = F(F(P)), Р„ = F(P).
При сбое в процессе входа пользователя в КС всегда осуществляется выбор следующего пароля из списка, а система последовательно применяет функцию F к введенному пользователем паролю, вплоть до совпадения с последним принятым от него паролем (и тогда пользователь допускается к работе в системе) или до превышения длины списка паролей (в этом случае попытка входа ] пользователя в КС отвергается).
Наиболее известным программным генератором одноразовых паролей является система S/KEY компании Bellcore. Идея этой системы состоит в следующем. Пусть имеется односторонняя функция f (то есть функция, вычислить обратную которой за приемлемое время не представляется возможным). Эта функция известна и пользователю, и серверу аутентификации. Пусть, далее, имеется секретный ключ K, известный только пользователю.
На этапе начального администрирования пользователя функция f применяется к ключу K n раз, после чего результат сохраняется на сервере. После этого процедура проверки подлинности пользователя выглядит следующим образом:
· сервер присылает на пользовательскую систему число (n-1);
· пользователь применяет функцию f к секретному ключу K (n-1) раз и отправляет результат по сети на сервер аутентификации;
· сервер применяет функцию f к полученному от пользователя значению и сравнивает результат с ранее сохраненной величиной. В случае совпадения подлинность пользователя считается установленной, сервер запоминает новое значение (присланное пользователем) и уменьшает на единицу счетчик (n).
На самом деле реализация устроена чуть сложнее (кроме счетчика, сервер посылает затравочное значение, используемое функцией f), но для нас сейчас это не важно. Поскольку функция f необратима, перехват пароля, равно как и получение доступа к серверу аутентификации, не позволяют узнать секретный ключ K и предсказать следующий одноразовый пароль.
Система S/KEY имеет статус Internet-стандарта (RFC 1938).
Другой подход к надежной аутентификации состоит в генерации нового пароля через небольшой промежуток времени (например, каждые 60 секунд), для чего могут использоваться программы или специальные интеллектуальные карты (с практической точки зрения такие пароли можно считать одноразовыми). Серверу аутентификации должен быть известен алгоритм генерации паролей и ассоциированные с ним параметры; кроме того, часы клиента и сервера должны быть синхронизированы.