Как работает вход в доменный компьютер

Как работает вход в доменный компьютер#

При входе пользователя в доменный компьютер аутентификация осуществляется по протоколу Kerberos.

Протокол назван так по имени трехголовой собаки Цербера, охраняющей выход из царства мёртвых по древнегреческой мифологии. Каждая голова этой собаки соответствует одному из трех участников процедуры аутентификации:

  • Клиент (Client) — субъект, желающий получить доступ к ресурсу;

  • Сервер приложения (Application Server, AP) — служба, к ресурсу которой клиент хочет получить доступ;

  • Центр распределения ключей (Key Distribution Center, KDC) — доверенная третья сторона, отвечающая за аутентификацию (Authentication Servicec, AS) пользователей и выпуск билетов для доступа к сетевым службам в домене (Ticket Granting Server, TGS).

Рассмотрим процесс аутентификации пользователя.

  1. Пользователь Алиса через приложение графического входа (Fly Display Manager Greet) передает логин и пароль в открытом виде клиенту Kerberos, в роли которого выступает System Security Services Daemon (SSSD). Учетные данные пользователя обрабатываются стеком модулей аутентификации (Pluggable Authentication Modules, PAM).

../../../_images/package_9.png
  1. Клиент Kerberos рассчитывает долгосрочный мастер ключ Алисы (UPN long-term key или Master key), как хэш от введенного пароля, и может удалить из памяти компьютера пароль в открытом виде для повышения устойчивости системы к взлому.

../../../_images/package_10.png
  1. Клиент отправляет запрос службе аутентификации Центра распределения ключей (Key Distribution Center, KDC).

../../../_images/package_11.png
  1. KDC расшифровывает аутентификатор, используя хэш пароля Алисы из LDAP-каталога. Ключи для аутентификации по протоколу Kerberos хранятся в атрибуте krbPrincipalKey, который представляет из себя бинарный объект, зашифрованный мастер-ключом KDC.

Если процедура расшифровки завершилась успешно и полученная временная метка расходится с временем сервера не более, чем на 5 минут, то считается, что предварительная аутентификация пройдена успешно. По этой причине для корректной работы kerberos-протокола так важна синхронизация времени между всеми участниками.

../../../_images/package_12.png
  1. Для повышения безопасности системы KDC генерирует временный сессионный ключ (S1) и передает его клиенту, чтобы использовать в дальнейшем для шифрования сообщений между клиентом и KDC вместо хэша пароля пользователя.

../../../_images/package_13.png
  1. Не смотря на то, что сессионный ключ был сгенерирован сервером, в домене может быть несколько контроллеров, и Клиент вправе обратиться с последующим запросом к любому из них. Клиенту выдается билет на выдачу билетов (Ticket-granting ticket, TGT), который он должен предъявлять в KDC при последующих обращениях.

../../../_images/package_14.png
  1. Сессионный ключ и билет шифруются симметричным алгоритмом с помощью долгосрочного ключа клиента, поэтому только клиент сможет расшифровать сообщение, подтверждая этим фактом, что является тем, за кого себя выдает. Данная проверка аутентичности считается основной.

../../../_images/package_15.png
  1. Клиент расшифровывает сессионный ключ и TGT билет своим долгосрочным ключом. Возможность использования этих данных в последующих запросах означает, что Клиент является тем, за кого себя выдает.

../../../_images/package_16.png

9. Клиент отправляет контроллеру запрос на доступ к серверу приложению, в котором содержится имя пользователя, имя сервера приложения, билет на выдачу билетов (TGT) и аутентификатор. В качестве аутентификатора выступает метка времени, зашифрованная симметричным алгоритмом с помощью сессионного ключа S1.

../../../_images/package_17.png
  1. KDC расшифровывает информацию из TGT билета, используя долгосрочный ключ KDC из LDAP-каталога, после чего ему становится доступна следующая информация: имя пользователя, сессионный ключ и срок действия билета. Сервер расшифровывает аутентификатор, используя сессионный ключ из TGT билета, и, если полученное значение расходится с временем сервера не более, чем на 5 минут, то считается, что аутентификация пройдена успешно.

../../../_images/package_18.png
  1. Для повышения безопасности протокола KDC генерирует новый сессионный ключ (S2) и передает его клиенту, чтобы использовать в дальнейшем для шифрования сообщений между клиентом и сервером приложения вместо сессионного ключа S1.

../../../_images/package_19.png
  1. Ключ S2 был сгенерирован сервером KDC и его следует передать Серверу приложения. Клиенту выдается зашифрованный сервисный билет (Service ticket, ST), который он должен предъявлять серверу приложения.

../../../_images/package_20.png
  1. После передачи сервисного билета Клиенту информация о ключах больше не требуется и может быть удалена для повышения безопасности системы.

../../../_images/package_21.png
  1. Клиент расшифровывает сессионный ключ S2 и сервисный билет ST известным ему сессионным ключом S1. Возможность использования этих данных в последующих запросах означает, что Клиент является тем, за кого себя выдает.

../../../_images/package_22.png
  1. Клиент отправляет серверу приложения запрос на аутентификацию, в котором содержится имя пользователя, сервисный билет (ST) и аутентификатор. В качестве аутентификатора выступает метка времени, зашифрованная симметричным алгоритмом с помощью сессионного ключа S2.

../../../_images/package_23.png
  1. Сервер приложения, в роли которого выступает служба SSSD на пользовательском компьютере расшифровывает ответ. Используя этот долгосрочный ключ, служба SSSD может расшифровать информацию из сервисного билета (ST), после чего ей становится доступна следующая информация: имя пользователя, сессионный ключ S2 и срок действия билета. SSSD расшифровывает аутентификатор, используя сессионный ключ S2 из сервисного билета, и, если полученное значение расходится с временем компьютера не более, чем на 5 минут, то считается, что аутентификация пройдена успешно.

../../../_images/package_24.png
  1. Для подтверждения сервером приложения своей аутентичности он увеличивает полученную метку времени на 1, шифрует симметричным алгоритмом, используя сессионный ключ S2, и возвращает клиенту. Данное подтверждение актуально при аутентификации в сетевых приложения, когда клиент и сервер приложения являются разными субъектами.

../../../_images/package_25.png
  1. Клиент расшифровывает аутентификатор, используя сессионный ключ S2. Если полученное значение можно получить, прибавляя 1 к ранее отправленному значению, то взаимная аутентификация считается пройденной успешно. Получив подтверждение, что вход в компьютер действительно хочет выполнить Алиса, приложение DM запускает приложение рабочий стол (Fly Windows Manager, fly-wm) от ее имени.

../../../_images/package_26.png