Введение
Протокол аутентификации компьютера Kerberos (/kɜːr/bər/ɒs/) — это сетевой протокол аутентификации, работающий на основе билетов, позволяющий узлам, взаимодействующим по незащищенной сети, безопасно подтверждать свою идентичность друг другу. Он был разработан в первую очередь для клиент-серверной модели и обеспечивает взаимную аутентификацию – как пользователь, так и сервер проверяют подлинность друг друга. Сообщения протокола Kerberos защищены от перехвата и атак повторного воспроизведения. Kerberos базируется на симметричном шифровании и требует наличия доверенной третьей стороны, а также может опционально использовать асимметричное шифрование на определенных этапах аутентификации. По умолчанию Kerberos использует UDP-порт 88. Протокол получил свое название в честь Кербера (или Цербера) из греческой мифологии – свирепого трехглавого пса, охраняющего царство Аида.
Kerberos ('/k//ɜːr//b//ər//ɒ//s/) is a computer network authentication protocol that works on the basis of tickets to allow nodes communicating over a non secure network to prove their identity to one another in a secure manner. Its designers aimed it primarily at a client–server model, and it provides mutual authentication—both the user and the server verify each other's identity. Kerberos protocol messages are protected against eavesdropping and replay attacks. Kerberos builds on symmetric key cryptography and requires a trusted third party, and optionally may use public key cryptography during certain phases of authentication. Kerberos uses UDP port 88 by default. The protocol was named after the character Kerberos (or Cerberus) from Greek mythology, the ferocious three headed guard dog of Hades.
История и развитие
Массачусетский технологический институт (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, предлагающие коммерчески поддерживаемые версии.
Encryption and Checksum Specifications (RFC 3961). Advanced Encryption Standard (AES) Encryption for Kerberos 5 (RFC 3962). A new edition of the Kerberos V5 specification "The Kerberos Network Authentication Service (V5)" (RFC 4120). This version obsoletes RFC 1510, clarifies aspects of the protocol and intended use in a more detailed and clearer explanation. A new edition of the Generic Security Services Application Program Interface (GSS API) specification "The Kerberos Version 5 Generic Security Service Application Program Interface (GSS API) Mechanism: Version 2" (RFC 4121). MIT makes an implementation of Kerberos freely available, under copyright permissions similar to those used for BSD. In 2007, MIT formed the Kerberos Consortium to foster continued development. Founding sponsors include vendors such as Oracle, Apple Inc., Google, Microsoft, Centrify Corporation and TeamF1 Inc., and academic institutions such as the Royal Institute of Technology in Sweden, Stanford University, MIT, and vendors such as CyberSafe offering commercially supported versions.
Описание
Клиент аутентифицируется на сервере аутентификации (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.
Message A: Client/TGS Session Key encrypted using the secret key of the client/user. Message B: Ticket Granting Ticket (TGT, which includes the client ID, client network address, ticket validity period, and the Client/TGS Session Key) encrypted using the secret key of the TGS. Once the client receives messages A and B, it attempts to decrypt message A with the secret key generated from the password entered by the user. If the user entered password does not match the password in the AS database, the client's secret key will be different and thus unable to decrypt message A. With a valid password and secret key the client decrypts message A to obtain the Client/TGS Session Key. This session key is used for further communications with the TGS. (Note: The client cannot decrypt Message B, as it is encrypted using TGS's secret key.) At this point, the client has enough information to authenticate itself to the TGS.
Запрос на обслуживание клиентов
После получения сообщений E и F от TGS, клиент располагает достаточной информацией для аутентификации на Сервере обслуживания (SS). Клиент подключается к SS и отправляет следующие два сообщения:
Сообщение E: Билет клиента на сервер, полученный на предыдущем шаге (зашифрованный TGS с использованием секретного ключа службы). Сообщение G: Новый аутентификатор, включающий идентификатор клиента и временную метку, зашифрованный с использованием ключа сеанса клиент/сервер. SS расшифровывает билет (сообщение E) с помощью своего собственного секретного ключа для получения ключа сеанса клиент/сервер. Используя ключ сеанса, SS расшифровывает аутентификатор и сравнивает идентификатор клиента из сообщений E и G. Если они совпадают, сервер отправляет клиенту следующее сообщение для подтверждения его подлинности и готовности к обслуживанию:
Сообщение H: Временная метка из аутентификатора клиента (увеличенная на 1 в версии 4, но необязательная в версии 5), зашифрованная с использованием ключа сеанса клиент/сервер. Клиент расшифровывает подтверждение (сообщение H) с помощью ключа сеанса клиент/сервер и проверяет корректность временной метки. Если она верна, клиент может доверять серверу и начинать отправлять запросы на обслуживание. Сервер предоставляет клиенту запрошенные услуги.
Message E: From the previous step (the Client to server ticket, encrypted using service's Secret key by the TGS). Message G: A new Authenticator, which includes the client ID, timestamp and is encrypted using Client/Server Session Key. The SS decrypts the ticket (message E) using its own secret key to retrieve the Client/Server Session Key. Using the sessions key, SS decrypts the Authenticator and compares client ID from messages E and G, if they match server sends the following message to the client to confirm its true identity and willingness to serve the client:
Message H: The timestamp found in client's Authenticator (plus 1 in version 4, but not necessary in version 5), encrypted using the Client/Server Session Key. The client decrypts the confirmation (message H) using the Client/Server Session Key and checks whether the timestamp is correct. If so, then the client can trust the server and can start issuing service requests to the server. The server provides the requested services to the client.
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, создает уязвимости в системе безопасности.