Перейти к содержанию

Kerberos

Протокол в основном используется в локальных сетях. Широко применяется в Active Directory.

Основные понятия

  1. Ticket - билет, зашифрованный пакетом данных, который выдается доверенным центром аутентификации.
  2. Key Distribution Center (KDC, центр распределения ключей, доверенный центр аутентификации) — третья доверенная сторона.
  3. Ticket Granting Ticket (TGT) — первичное удостоверение пользователя для доступа к сетевым ресурсам.
  4. Ticket Granting Service (TGS) — удостоверение для доступа к конкретному сетевому ресурсу, выдается на основе TGT.
  5. keytab(сокращение от «key table») — хранит долгосрочные ключи для одного или нескольких участников. Ключевые таблицы обычно представлены файлами в стандартном формате, хотя в редких случаях они могут быть представлены другими способами. Таблицы ключей чаще всего используются для того, чтобы серверные приложения могли принимать аутентификации от клиентов, но также могут использоваться для получения начальных учетных данных для клиентских приложений. См. документацию.
  6. ccache — кэш учетных данных. Хранит учетные данные Kerberos, пока они остаются действительными и, как правило, пока длится сеанс пользователя, так что многократная аутентификация в службе (например, подключение к веб-серверу или почтовому серверу более одного раза) не требует обращения в KDC каждый раз. См. документацию.

При любых взаимодействиях по сети не передаются ни пароли, ни значения хэша паролей в открытом виде. Kerberos требует, чтобы системные часы всех участников взаимодействия были синхронизированы.

Участники информационного обмена

  1. Клиент — запрашивает доступ к сетевой службе.
  2. Сервер — узел, на котором работает сетевая служба.
  3. KDC — работает на физически защищенном сервере.

KDC ведет базу учетных данных с информацией обо всех участниках безопасности (security principal) своей области.

В базе данных KDC сохраняются криптографический ключ каждого участника безопасности, известный только этому участнику и службе KDC (долговременный ключ). На Клиенте и KDC должен храниться один и тот же долговременный ключ. На Сервере KDC - аналогично. Реализация этого механизма в спецификации протокола Kerberos не рассматривается.

Основные этапы работы

Приведено упрощённое описание схемы работы. Подробности следует смотреть в документации.

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

  1. Если Клиент хочет получить доступ к Серверу, то он сначала должен обратиться к KDC.
  2. Клиент передает login, domain, зашифрованный долговременным ключом клиента timestamp.
  3. KDC находит в своей БД login, берет его долговременный пароль, расшифровывает полученный timestamp. Разница во времени отправки запроса и текущего времени на KDC не должна превышать установленного политикой Kerberos значения.
  4. KDC отправляет Клиенту TGT с установленным TTL, зашифрованный мастер-ключем KDC. Клиент не может его расшифровать, т.к. ключа KDC у него нет. Дополнительно KDC отправляет Клиенту информацию, включающую Сессионный ключ Клиент-KDC, необходимую для того, чтобы Клиент был уверен, что TGT пришел от доверенного KDC.
  5. KDC не выдаст TGT, если в запросе Клиента указаны неверные login, domain или использован неверный долговременный ключ Клиента.

Авторизация Клиента

  1. На этом этапе Клиент имеет выданный ему ранее TGT. Теперь ему нужно получить TGS для доступа к конкретному серверу.
  2. Клиент направляет KDC свой TGT и зашифрованный с помощью Сессионного ключа Клиент-KDC timestamp.
  3. KDC расшифровывает сообщение, проверяет TTL и информацию из TGT (login, domain).
  4. KDC создает отдельные TGS с установленными TTL для Сервера и для Клиента. Шифрует ключом Сервера. TGS Сервера включает Сессионный ключ Клиент-Сервер.
  5. Затем KDC шифрует всю эту информацию Сессионным ключом Клиент-KDC и возвращает Клиенту.
  6. Клиент, обладая Сессионным ключом Клиент-KDC, расшифровывает сообщение, получает себе TGS Клиента и TGS Сервера (Клиент не может его расшировать, т.к. он зашифрован ключом Сервера).
  7. Далее Клиент направляет Серверу зашифрованный timestamp и TGS Сервера. Сервер расшифровывает TGS Сервера своим ключом, достает из него Сессионный ключ Клиент-Сервер. Сервер удостоверяется в легитимности Клиента, т.к. Клиент мог получить зашифрованный TGS только от доверенного KDC.
  8. На этом этапе Клиент и Сервер имеют Сессионный ключ Клиент-Сервер и могут начать взаимодействовать.

Справочник CLI-утилит

См. документацию.

Утилита Что делает
kdestroy Уничтожает активные авторизационные тикеты Kerberos пользователя, перезаписывая и удаляя кэш учетных данных, который их содержит.

Если кэш учетных данных не указан, уничтожается кэш учетных данных по умолчанию.
kinit Получает и кэширует первоначальный TGT для principal.
klist Выводит список Kerberos pricnipal и Kerberos tickets, хранящиеся в кэше учетных данных, или ключи, хранящиеся в файле keytab. Например, klist -Aedf.
kpasswd
krb5-config
ksu
kswitch Делает указанный кэш учетных данных основным кэшем для коллекции, если коллекция кэша доступна. Например, kswitch -p <principal>. Проверять через klist.
kvno
sclient
ktadd Добавляет principal в файл keytab.
ktremove Удаляет запись из keytab.
ktutil Вызывает командный интерфейс, с помощью которого администратор может читать, записывать или редактировать записи в keytab.

Конфигурирование

Свойства Kerberos tickets

Для ticket можно задавать свойства, например, forwardable, см. описание свойств.

Конфигурационные файлы

  1. krb5.conf — содержит информацию о конфигурации Kerberos, включая расположение KDC и серверов администрирования для интересующих областей Kerberos, значения по умолчанию для текущей области и для приложений Kerberos, а также сопоставления имен хостов с областями Kerberos. См. документацию.
  2. Поддерживаемые форматы даты и времени , в т.ч. для указания значений в конфигурационных файлах.

Переменные окружения

См. документацию.

  1. KRB5CCNAME
  2. KRB5_KTNAME
  3. KRB5_CONFIG
  4. KRB5_KDC_PROFILE
  5. KRB5RCACHENAME
  6. KRB5RCACHETYPE
  7. KRB5RCACHEDIR
  8. KRB5_TRACE — можно использовать для отладки. Например:
    env KRB5_TRACE=/dev/stdout <команда>
    
  9. KRB5_CLIENT_KTNAME
  10. KPROP_PORT
  11. GSS_MECH_CONFIG

Значения MIT Kerberos по умолчанию

См. документацию.

Раздел содержит в т.ч. пути по умолчанию для Unix-like систем.

Типы шифрования

См. документацию здесь и здесь.

В разделе перечислены поддерживаемые типы шифрования. Полезно убедиться, что ты используешь современный тип, не признанный weak или deprecated.

Источники

  1. Протокол Kerberos, видео, 31 минута.
  2. MIT Kerberos Documentation.
  3. RFC4120: The Kerberos Network Authentication Service (V5).
  4. Secure Hash Algorithms (SHA).
  5. Advanced Encryption Standard (AES).

Что дальше?

  1. Нашли эту статью полезной? Поделитесь ею и помогите распространить знания!
  2. Нашли ошибку или есть идеи 💡 о том, что и как я могу улучшить? Напишите мне в Telegram.
  3. Хотите узнать обо мне больше? Читайте здесь.