Главная Security, Без рубрики, Новое Принципы аутентификации по протоколу Kerberos
  • Принципы аутентификации по протоколу Kerberos

    Kerberos и PKINIT Часть 1.

    Обеспечивая безопасность нельзя забывать о вопросах безопасной аутентификации. В нескольких предыдущих статьях я уже останавливался на некоторых аспектах этой проблемы, и разбирались с двухфакторной аутентификацией. В этой статье мы рассмотрим механизмы работы протокола Kerberos при аутентификации с помощью имени пользователя и пароля и при использовании технологий асимметричной криптографии.

     

    Общие сведения

    Протокол Kerberos был специально разработан для того, чтобы обеспечить надежную аутентификацию пользователей.

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

    Протокол Kerberos может использовать централизованное хранение аутентификационных данных и является основой для построения механизмов Single Sign-On (возможность использования единой учетной записи пользователя для доступа к любым ресурсам области).

    Протокол основан на понятии Ticket (билет).

    Ticket (билет) является зашифрованным пакетом данных, который выдается доверенным центром аутентификации, в терминах протокола Kerberos — Key Distribution Center (KDC, центр распределения ключей).

    Когда пользователь выполняет первичную аутентификацию, после успешного подтверждения его подлинности KDC выдает первичное удостоверение пользователя для доступа к сетевым ресурсам — Ticket Granting Ticket (TGT). В дальнейшем, при обращении к отдельным ресурсам сети, пользователь, предъявляя TGT, получает от KDC удостоверение для доступа к конкретному сетевому ресурсу — Service Ticket (TGS).

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

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

    В качестве примера реализации протокола Kerberos имеет смысл отметить доменную аутентификацию пользователей в операционных системах Microsoft, начиная с Windows 2000.

    Как работает аутентификация Kerberos?

    Рассмотрим, как осуществляется аутентификация посредством протокола Kerberos.

    В процессе аутентификации задействованы следующие основные компоненты:

    • Клиент, запрашивающий доступ к службе или пытающийся осуществить аутентификацию.
    • Сервер, на котором работают службы, доступ к которому требуется клиенту.
    • Компьютер, которому доверяет клиент (В данном случае речь идет о контроллере домена, на котором выполняется служба KDC).
    • KDC представляет собой службу, работающую на физически защищенном сервере.

    Она ведет базу ученых данных с информацией обо всех участниках безопасности (security principal) своей области. Если речь идет о сетях Windows 2000/2003/2008, понятию «область Kerberos» соответствует понятие «домен».

    Вместе с информацией о каждом security principal в базе данных KDC сохраняется криптографический ключ, известный только этому объекту и службе KDC. Указанный ключ, который называют долговременным, используется для связи пользователя системы безопасности с центром распределения ключей.

    Примечание: В большинстве практических реализаций протокола Kerberos долговременные ключи создаются на основе пароля пользователя.

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

    1. Получив приглашение на ввод имени пользователя, пароля и домена, пользователь указывает эти данные.

    2. Затем компьютер пользователя обращается к службе KDC[1] и передает ей имя пользователя, имя домена, а также текущее время на рабочей станции пользователя, при этом имя пользователя передается в открытом виде, текущее время на рабочей станции пользователя передается в зашифрованном виде и является аутентификатором. Ключ шифрования формируется из пароля пользователя в результате хеширования. См. рис. 1.

    1

    Рисунок 1

    3. Служба KDC ищет пользователя в AD, выявляет мастер ключ пользователя, который основан на пароле пользователя и расшифровывает аутентификатор, т. е. получает время отправки запроса. Разница во времени отправки запроса и текущего времени на контроллере домена не должно превышать определенного значения, установленного политикой протокола Kerberos[2].

    4. Затем KDC создает два объекта:

    a. ключ сессии, посредством которого будет обеспечиваться зашифрование данных при обмене между клиентом и службой KDC,

    b. билет на получение билета Ticket-Granting Ticket (TGT). TGT включает: вторую копию ключа сессии, имя пользователя, время окончания жизни билета. Билет на получение билета шифруется с использованием собственного мастер ключа службы KDC, который известен только KDC, т. е. TGT может быть расшифрован только самой службой KDC.

    5. Служба KDC зашифровывает аутентификатор пользователя (time stamp) и ключ сессии с помощью ключа клиента. После этого эти данные отправляются клиенту. См. Рис. 2.

    2

    Рисунок 2

    6. Компьютер клиента получает информацию от службы KDC, проверяет аутентификатор, расшифровывает ключ сессии.

    7. Теперь клиент обладает ключом сессии и TGT, что предоставляет возможность безопасного взаимодействия со службой KDC. Клиент аутентифицирован в домене и получает возможность осуществлять доступ к ресурсам домена, используя протокол Kerberos.

    Итак, клиенту, прошедшему аутентификацию посредством Kerberos, требуется получить доступ к ресурсам на других серверах в том же домене.

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

    2. KDC расшифровывает TGT, используя свой собственный ключ. Маркер времени расшифровывается с помощью сессионного ключа. Теперь KDC может подтвердить, что запрос пришел от «правильного» пользователя, т. к. этот пользователь может использовать этот сессионный ключ. См. рис. 3

    3

    Рисунок 3

    3. Затем KDC создает пару билетов, один для клиента, один для сервера, к ресурсам которого клиент должен будет получать доступ. Каждый билет содержит имя пользователя, запрашивающего доступ, получателя запроса, маркер времени, показывающий, когда был создан билет, а также срок жизни билета. Оба билета будут также содержать новый ключ, K_cs который, таким образом известен и клиенту и серверу. Этот ключ будет обеспечивать возможность безопасного взаимодействия между ними. KDC шифрует билет сервера, используя мастер – ключ сервера, затем вкладывает билет сервера внутрь билета клиента, который также содержит ключ K_cs

    4. Вся эта структура зашифровывается с помощью сессионного ключа, который стал доступен пользователю при аутентификации. После чего эта информация отправляется клиенту. См. Рис. 4

    4

    Рисунок 4

    5. Получив билет, клиент расшифровывает его с помощью сессионного ключа, т. е. K_cs становится доступным клиенту, K_cs доступен также и серверу. Клиент не может прочитать билет сервера, т. к. он зашифрован на ключе сервера. См. Рисунок 5

    5 

    Рисунок 5

    6. Клиент зашифровывает маркер времени с помощью ключа, K_cs затем отправляет маркер времени и билет сервера самому серверу, к ресурсам которого пытается получить доступ клиент. См. Рис. 6

    6

    Рисунок 6

    7. Получив эту информацию, на первом этапе сервер расшифровывает свой билет, используя свой долговременный ключ. Это предоставляет возможность получить доступ к K_cs , с помощью которого будет на втором этапе расшифрован маркер времени, полученный от клиента.

    8. Теперь и клиент, и сервер обладают ключом K_cs. Следовательно, сервер может быть уверен в том, что клиент правильно идентифицирован, т. к. для шифрования маркера времени был использован K_cs . В случае необходимости ответа сервера клиенту, сервер воспользуется ключом K_cs . Клиент будет знать, что сервер правильно идентифицирован, поскольку сервер должен использовать, чтобы получить K_cs .

    Разумеется, представленное в статье описание процедур аутентификации на основе Kerberos является упрощенным, тем не менее, мне представляется, что в значительной степени упростит понимание базовых принципов работы протокола. Если же читателя заинтересует более глубокое понимание работы Kerberos, то могу предложить ознакомиться с материалами, представленными в списке литературы.

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

    Продолжение следует…

    Леонид Шапиро

    Список литературы

    RFC4120 – The Kerberos Network Authentication Service (V5)

    RFC4556 – Public Key Cryptography for Initial Authentication in Kerberos (PKINIT)


    [1] Чтобы обратиться к службе KDC на контроллере домена, необходимо выполнить разрешение имени этой службы в IP-адрес. Этот процесс выполняется с помощью службы DNS, т.е. компьютер клиента должен «знать» адрес сервера DNS.

    [2] 5 минут по-умолчанию.

Комментарии

  1. “Как работает авторизация?”
    И ни слова про авторизацию собственно(

  2. Спасибо. Статья исправлена.

  3. Большое спасибо за статью!

  4. Браво! Оч хорошо и подробно расписано 🙂 На таком уровне в .ru сегменте по Kerberos маловато …

  5. Статья поверхностная, совсем. Много опущенных тем и случаев. Есть хорошая про “kerberos Алису и Боба”, гуглится за 5 минут.

  6. Денис, цель настоящей статьи знакомство с базовыми принципами. В рамках настоящей статьи не предусматривалось детальное знакомство с протоколом, только “базовое понимание”. Об этом, собственно говоря, я и пишу.
    “Разумеется, представленное в статье описание процедур аутентификации на основе Kerberos является упрощенным, тем не менее, мне представляется, что в значительной степени упростит понимание базовых принципов работы протокола. Если же читателя заинтересует более глубокое понимание работы Kerberos, то могу предложить ознакомиться с материалами, представленными в списке литературы.”
    Кроме того, это только 1-ая часть.

    Любой текст предназначается под определенную целевую аудиторию. И, если Вы хорошо знакомы с базовыми принципами протокола, то очевидно, что Вам не будет интересно. Разумеется, Вас заинтересуют детали, которые в настоящей статье я не рассматривал. Тем не менее, для коллег, которые пока не разобрались с основами, возможно, мой текст окажется небесполезен. Я намеренно не описывал детали, т. к. полагаю, что на первом этапе имеет смысл разобраться с принципами, и только потом изучать “тонкости”.

  7. Если хочется почитпть о Kerberos – tcnm прекрасный источник информации – “O’Reilly – Kerberos – The definitive guide”

  8. Денис, статья не “поверхностная”, а с “упрощенным” (адаптированным?) содержанием.

    Леонинд, надеюсь, в следующих сериях, мы узнаем и о том, как обеспечивается поддержка аутентификации по протоколу NTLM при регистрации с помощью PKINIT. 🙂

  9. Не получится… NTLM не дает такой возможности 🙂

  10. Леонид, а при чем тут возможности NTLM? Я говорю о возможностях PKCA, а не NTLM. В общем, я надеялся, что Вы все же упомяните о том, что KDC передает клиенту хеши его паролей, рассказывая про PAC’и… 😉

  11. Леонид, не обращайте внимания, продолжайте писать. Для новичков неплохо будет почитать.

  12. volk1234, ну просто всегда есть группа людей, которые считают, что статья обязана именно их чем то удивить. А если они уже это видели или читали гдето, то сразу Статья “поверхностная, совсем”, правда тут же предлагают другую, которая вообще упрощение для школьников. Лично я такую критику принимаю, только когда идет конструктив и критик сам показывает как надо. Пока из критиков реально такое право есть только у Поданса.

    З.Ы Это не относится когда люди ловят статьи на ошибках, за это большое спасибо.

  13. Хорошая статья. Про kerberos читаю уже не первый раз, каждый раз узнаю новое, но окончательного понимания, так сказать “на подсознании” достичь не могу. Придется читать снова и снова (;

  14. 1.
    при доступе к “другим” серверам:
    “KDC шифрует билет сервера, используя мастер – ключ сервера”

    что это за мастер-ключ, откуда он берётся у сервера и как о нём узнаёт KDC?

    2.
    на рис. 4
    “Билет клиента шифруется долговременным ключём клиента” – это опечатка? наверно сеансовым ключём клиент-KDC

  15. и ещё подскажите, “как/где” у пользователя хранится его пароль?

    я так представляю:
    1. при входе в систему, пользователь вводит пароль
    2. над паролем проводится хэширование
    3. пароль удаляется, но остаётся его хэш-значение, с помошью этого хэша шифруется штамп времени для KDC
    … формируется и отправляется “пакет” к KDC …
    Х. принятый ответ от KDC (в котором сеансовый ключ с KDC и билет TGT) расшифровывается с помошью хэша пароля пользователя и этот хэш удаляется

    все это время пароль и хэш (когда были на извесны системе) были в специально отведённой области оперативной памяти?

  16. в рассмотрении доступа клиента к некому серверу:

    “1. Клиент обращается к службе KDC. Клиент представляет KDC свой TGT и маркер времени, которые зашифрованы с помощью ключа сессии, известного службе KDC.”

    а инфрмацию к какому “ресурсу” хочет подключиться сервер, содержит этот билет?
    а как KDC узнаёт от кого пришёл билет? наверно имя пользователя, в запросе к KDC, есть в открытом виде…

  17. Вот в пункте 5 написано:
    “5. Служба KDC зашифровывает аутентификатор пользователя (time stamp) и ключ сессии с помощью ключа клиента. После этого эти данные отправляются клиенту. См. Рис. 2.”
    На рисунке 2:
    “Создание ключа сессии S. Шифрование TimeStamp’a клиента ключем клиента”.
    Разве там TimeStamp клиента, вроде там должен быть срок жизни билета??

  18. Dmitry,
    данная статья, для понимания “общей картины” работы протокола

    в приведенном вами пункте, всё верно написано, именно штамп времени, но кроме него передаются ещё «некоторые данные», в том числе и срок жизни билета, но эти данные были «упущены», чтобы легче было показать “общую картину” работы Kerberos

  19. Большое спасибо за отличную статью. Регулярно рассказываю про Kerberos слушателям на курсах. В погоне за лучшей усвояемостью материала слушателями с уводольствием читаю ваши статьи и ищу альтернативные взгляды на технологии, которые возможно будут более понятны моей аудитории. Так сказать, дополняю и расширяю свои способы изложения. Еще раз спасибо вам, Леонид, в частности, и другим авторам этого ресурса, в целом.

    В статье ссылка [1] битая. Поправьте, пожалуйста. Интересно, что скрывается под загадочным урлом http://itband.ru/Users/Leonid/Documents/TechDays/????????????/????????????%20???%206%20????????????????%20????????????????????????????%20????%20??????????????????%20Kerberos/#_ftnref1_5479 =)

  20. Тут говориться постоянно что чо то шифруется постоянно, а какими алгоритмами? например говориться что создается хэш пароля пользователя и это есть его ключ которым он шифрует а как им зашифвровать что то можно?)