Введение

Протокол аутентификации компьютера Kerberos (/kɜːr/bər/ɒs/) — это сетевой протокол аутентификации, работающий на основе билетов, позволяющий узлам, взаимодействующим по незащищенной сети, безопасно подтверждать свою идентичность друг другу. Он был разработан в первую очередь для клиент-серверной модели и обеспечивает взаимную аутентификацию – как пользователь, так и сервер проверяют подлинность друг друга. Сообщения протокола Kerberos защищены от перехвата и атак повторного воспроизведения. Kerberos базируется на симметричном шифровании и требует наличия доверенной третьей стороны, а также может опционально использовать асимметричное шифрование на определенных этапах аутентификации. По умолчанию Kerberos использует UDP-порт 88. Протокол получил свое название в честь Кербера (или Цербера) из греческой мифологии – свирепого трехглавого пса, охраняющего царство Аида.

История и развитие

Массачусетский технологический институт (MIT) разработал Kerberos в 1988 году для защиты сетевых сервисов, предоставляемых Project Athena. Его первая версия была разработана в основном Стивом Миллером и Клиффордом Ньюманом на основе более раннего протокола симметричного шифрования Needham–Schroeder. Версии Kerberos с 1 по 3 были экспериментальными и не распространялись за пределами MIT. Версия Kerberos 4, первая публичная версия, была выпущена 24 января 1989 года. Поскольку Kerberos 4 был разработан в Соединенных Штатах и использовал алгоритм шифрования Data Encryption Standard (DES), ограничения на экспорт из США не позволяли экспортировать его в другие страны. MIT создал экспортируемую версию Kerberos 4 с удаленным кодом шифрования, названную "Bones" ("Кости"). Эрик Янг из австралийского университета Бонд повторно реализовал DES в Bones, создав версию под названием "eBones", которая могла свободно использоваться в любой стране. Шведский Королевский технологический институт выпустил еще одну реализацию под названием KTH KRB. Ньюман и Джон Кол опубликовали версию 5 в 1993 году с целью преодоления существующих ограничений и проблем безопасности. Версия 5 была представлена в RFC 1510, которая впоследствии была заменена RFC 4120 в 2005 году. В 2005 году рабочая группа Kerberos Internet Engineering Task Force (IETF) обновила спецификации. Обновления включали: Спецификации шифрования и контрольных сумм (RFC 3961). Стандарт расширенного шифрования (AES) для Kerberos 5 (RFC 3962). Новое издание спецификации Kerberos V5 "The Kerberos Network Authentication Service (V5)" (RFC 4120). Эта версия заменяет RFC 1510, уточняет аспекты протокола и предполагаемое использование, предоставляя более подробное и ясное описание. Новое издание спецификации "Интерфейс программного обеспечения для общих служб безопасности (GSS API)" "Механизм GSS API версии 5 Kerberos: версия 2" (RFC 4121). MIT предоставляет реализацию Kerberos в свободном доступе на условиях авторского права, аналогичных используемым для BSD. В 2007 году MIT создал Консорциум Kerberos для стимулирования дальнейшей разработки. Основателями-спонсорами являются такие компании, как Oracle, Apple Inc., Google, Microsoft, Centrify Corporation и TeamF1 Inc., а также учебные заведения, такие как Королевский технологический институт в Швеции, Стэнфордский университет, MIT, и поставщики, такие как CyberSafe, предлагающие коммерчески поддерживаемые версии.

Описание

Клиент аутентифицируется на сервере аутентификации (AS), который является частью центра распространения ключей (KDC). KDC выдает билет на получение билета (TGT), проставляет на него временную метку и шифрует его с помощью секретного ключа службы выдачи билетов (TGS), после чего возвращает зашифрованный результат на рабочую станцию пользователя. Это происходит нечасто, обычно при входе пользователя в систему; срок действия TGT истекает через определенное время, хотя он может быть автоматически продлен менеджером сеансов пользователя во время работы в системе. Когда клиенту необходимо взаимодействовать со службой на другом узле ("принципалом" в терминологии Kerberos), клиент отправляет TGT в TGS, который является другим компонентом KDC и обычно размещается на том же хосте, что и сервер аутентификации. Служба должна быть предварительно зарегистрирована в TGS с использованием имени субъекта-службы (SPN). Клиент использует SPN для запроса доступа к этой службе. После проверки действительности TGT и права пользователя на доступ к запрошенной службе, TGS выдает клиенту сервисный билет (ST) и ключи сеанса. Затем клиент отправляет этот билет на сервер службы (SS) вместе со своим запросом на обслуживание. Детальное описание протокола приведено ниже.

Вход на основе пользовательского клиента без Kerberos

Пользователь вводит имя пользователя и пароль на клиентской машине (или машинах). Другие механизмы аутентификации, такие как pkinit (RFC 4556), позволяют использовать открытые ключи вместо пароля. Клиент преобразует пароль в ключ симметричного шифра. Для этого используется либо встроенная процедура генерации ключей, либо односторонняя хеш-функция, в зависимости от выбранного набора шифров. Сервер получает имя пользователя и симметричный шифр и сравнивает их с данными из базы данных. Аутентификация считается успешной, если полученный шифр совпадает с шифром, хранящимся для данного пользователя.

Аутентификация клиента

Клиент отправляет в AS (сервер аутентификации) текстовое сообщение с идентификатором пользователя, запрашивая услуги от имени пользователя. (Примечание: Ни секретный ключ, ни пароль не отправляются в AS.) AS проверяет, есть ли клиент в своей базе данных. Если это так, AS генерирует секретный ключ, вычисляя хеш пароля пользователя, найденного в базе данных (например, Active Directory в Windows Server), и отправляет клиенту следующие два сообщения:
Сообщение A: Ключ сеанса клиент/TGS, зашифрованный с использованием секретного ключа клиента/пользователя. Сообщение B: Билет для получения билета (TGT, который включает идентификатор клиента, сетевой адрес клиента, срок действия билета и ключ сеанса клиент/TGS), зашифрованный с использованием секретного ключа TGS. Как только клиент получает сообщения A и B, он пытается расшифровать сообщение A с помощью секретного ключа, сгенерированного из пароля, введенного пользователем. Если введенный пользователем пароль не совпадает с паролем в базе данных AS, секретный ключ клиента будет другим и, следовательно, не сможет расшифровать сообщение A. При правильном пароле и секретном ключе клиент расшифровывает сообщение A, чтобы получить ключ сеанса клиент/TGS. Этот ключ сеанса используется для дальнейшей связи с TGS. (Примечание: Клиент не может расшифровать сообщение B, так как оно зашифровано с использованием секретного ключа TGS.) На этом этапе у клиента достаточно информации для аутентификации в TGS.

Запрос на обслуживание клиентов

После получения сообщений E и F от TGS, клиент располагает достаточной информацией для аутентификации на Сервере обслуживания (SS). Клиент подключается к SS и отправляет следующие два сообщения:
Сообщение E: Билет клиента на сервер, полученный на предыдущем шаге (зашифрованный TGS с использованием секретного ключа службы). Сообщение G: Новый аутентификатор, включающий идентификатор клиента и временную метку, зашифрованный с использованием ключа сеанса клиент/сервер. SS расшифровывает билет (сообщение E) с помощью своего собственного секретного ключа для получения ключа сеанса клиент/сервер. Используя ключ сеанса, SS расшифровывает аутентификатор и сравнивает идентификатор клиента из сообщений E и G. Если они совпадают, сервер отправляет клиенту следующее сообщение для подтверждения его подлинности и готовности к обслуживанию:
Сообщение H: Временная метка из аутентификатора клиента (увеличенная на 1 в версии 4, но необязательная в версии 5), зашифрованная с использованием ключа сеанса клиент/сервер. Клиент расшифровывает подтверждение (сообщение H) с помощью ключа сеанса клиент/сервер и проверяет корректность временной метки. Если она верна, клиент может доверять серверу и начинать отправлять запросы на обслуживание. Сервер предоставляет клиенту запрошенные услуги.

Microsoft Windows

Windows 2000 и более поздние версии используют Kerberos в качестве метода аутентификации по умолчанию. Некоторые дополнения Microsoft к набору протоколов Kerberos задокументированы в RFC 3244 «Протоколы смены и установки пароля Kerberos в Microsoft Windows 2000». RFC 4757 документирует использование Microsoft шифра RC4. Несмотря на то, что Microsoft использует и расширяет протокол Kerberos, она не использует программное обеспечение MIT. Kerberos используется как предпочтительный метод аутентификации: как правило, присоединение клиента к домену Windows означает включение Kerberos в качестве протокола по умолчанию для аутентификации этого клиента к службам в домене Windows и во всех доменах, имеющих доверительные отношения с этим доменом.

Unix и другие операционные системы

Многие Unix-подобные операционные системы, включая FreeBSD, macOS от Apple, Red Hat Enterprise Linux, Solaris от Oracle, AIX от IBM, HP-UX и другие, включают программное обеспечение для Kerberos-аутентификации пользователей или служб. Различные операционные системы, не относящиеся к Unix-подобным, такие как z/OS, IBM i и OpenVMS, также поддерживают Kerberos. Встраиваемая реализация протокола аутентификации Kerberos V для клиентских агентов и сетевых служб, работающих на встраиваемых платформах, также доступна от различных компаний.

Недостатки и ограничения

Kerberos предъявляет строгие требования ко времени, что означает, что часы участвующих хостов должны быть синхронизированы в пределах заданных лимитов. У билетов есть период действия, и если часы хоста не синхронизированы с часами сервера Kerberos, аутентификация завершится неудачно. Конфигурация по умолчанию, согласно требованиям MIT, предполагает разницу во времени не более пяти минут. На практике для синхронизации часов хостов обычно используются демоны Network Time Protocol. Следует отметить, что некоторые серверы (например, реализация Microsoft) могут возвращать результат KRB AP ERR SKEW, содержащий зашифрованное время сервера, если расхождение между часами превышает сконфигурированное максимальное значение. В этом случае клиент может повторить попытку, вычислив время на основе предоставленного сервером времени, чтобы определить величину расхождения. Такое поведение описано в RFC 4430. Протокол администрирования не стандартизирован и различается в зависимости от реализации сервера. Изменения паролей описаны в RFC 3244. В случае использования симметричной криптографии (Kerberos может работать как с симметричной, так и с асимметричной (криптографией с открытым ключом)), поскольку все аутентификации контролируются централизованным центром распространения ключей (KDC), компрометация этой инфраструктуры аутентификации позволит злоумышленнику выдавать себя за любого пользователя. Каждой сетевой службе, требующей отдельного имени хоста, потребуется свой собственный набор ключей Kerberos. Это усложняет виртуальный хостинг и кластеризацию. Kerberos требует, чтобы учетные записи пользователей и сервисы имели доверительные отношения с сервером токенов Kerberos. Необходимое доверие к клиенту затрудняет создание многоуровневых сред (например, отдельных доменов для тестовой, предпроизводственной и производственной сред): либо необходимо установить отношения доверия между доменами, что препятствует строгому разделению сред, либо для каждой среды потребуется предоставить дополнительных пользовательских клиентов.

Безопасность

Шифр стандарта шифрования данных (DES) может использоваться совместно с Kerberos, но больше не является интернет-стандартом из-за своей слабости. В продуктах, реализующих устаревшие версии Kerberos, отсутствующая поддержка современных алгоритмов шифрования, таких как AES, создает уязвимости в системе безопасности.