"Человек - самое уязвимое место в системе безопасности.."

Протокол аутентификации Kerberos

Общее

Протокол Kerberos работает в системах клиент/сервер для аутентификации и обмена ключевыми данными. Kerberos работает в сетях TCP-IP и реализован на основе доверия участников протокола к третьей (доверенной) стороне. Защищенность в рамках сессии Kerberos достигается засчет реализации симметричных алгоритмов шифрования. Служба Kerberos разделяет отдельный секретный ключ с каждым участником сети, и знание такого ключа равносильно подлинности участника сети.

В протоколе Kerberos участвуют два пользователя и доверенный сервер KS, реализующий роль центра распределения ключей. Пользователи сеанса А и В имеют уникальные идентификаторы IdA и IdB. Стороны А и В разделяют свой секретный ключ с сервером KS по отдельности. К примеру пользователь А хочет получить сеансовій ключ для обмена данными с пользователем В. Пользователь провоцирует фазу распределения ключей, отправляя серверу KS идентификаторы IdA и IdB:

  • A → KS: IdA и IdB

Сервер KS создает пакет с временной отметкой Т, периодом работы L, случайным сеансовым ключом К и идентификатором IdA. Сервер шифрует пакет секретным ключом, который разделяет с пользователем В. Затем сервер KS берет все тоже самое, и шифрует секретным ключом разделенным с пользователем А. И оба пакета передает пользователю А:

  • KS &arr; A:EA(T,L,K,IdB),EB(T,L,K,IdA)

Пользователь А расшифровывает первый пакет своим ключом и проверяет отметку времени Т, чтобы убедиться, что этот пакет действителен. После пользователь А создает пакет со своим идентификатором Id и отметкой времени Т, шифрует его сеансовым ключом К и передает пользователю В. Также А передает для пользователя В пакет от KS, зашифрованное ключом стороны В.

  • A &arr; B: Ek(IdA,T), EB(T,L,K,IdA)

Только сторона В может расшифровать последние 2 пакета. Совпадение значений T и IdA подтверждает подлинность пользователя А к В. Чтобы пользователь В подтвердил свою подлинность пользователю А, он создает пакет, где содержится отметка времени Т +1 и шифрует его ключом К, затем передает его пользователю А.

  • B &arr; A: Ek(T+1)

Когда пользователь А расшифрует пакет и получит ожидаемый результат, пользователь В подтвердит свою подлинность пользователю А. Протокол успешно работает, когда часы пользователей синхронизированы с часами сервера KS.

Система Kerberos имеет структуру вида клиент/сервер (рис.1).

схема работы протокола KerberosРисунок — 1

Сервер Kerberos KS состоит из сервера аутентификации AS и сервера службы выдачи мандатов TGS. Kerberos создает сеансовые ключи, которые передаются клиентсу и серверу (или двум клиентам) и никому больше. Сеансовый ключ создается для шифрование пакетов, которые передаются между пользователями, и удаляется после конца сеанса. Область работы системы Kerberos распространяется на те участки сети, все пользователи которого зарегистрированы под именами и паролями в базе сервера системы.

Алгоритм работы системы Kerberos:

  • Клиент (С) &arr; AS — запрос клиента С к серверу AS разрешить обратиться к службе TGS
  • AS &arr; C — разрешение (мандат) от сервера AS клиенту С обратиться к службе TGS
  • C &arr; — запрос С к службе TGS на получение допуска (мандата) к серверу ресурсов RS
  • TGS &arr; C — разрешение (мандат) от службы TGS клиенту С для обращения к серверу ресурсов RS
  • C &arr; RS — запрос к ресурсу сервера RS
  • RS &arr; C — подтверждение подлинности сервера RS и предоставление ресурсов клиенту С

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

Мандат — нужен для безопасной транспортировки серверу идентификационных данных пользователя, которому дали мандат.

Аутентификатор — это дополнительный атрибут, предъявляемый вместе с мандатом.

Обозначение в документах kerberos:

  • c — клиент
  • S — сервер
  • a — сетевой адрес пользователя
  • v — время действие мандата
  • t — метка времени
  • Kx — секретный ключ х
  • Kx,y — сеансовый ключ для x,y
  • {m} Kx — пакет m, шифрованный секретным ключом Kx субъекта x
  • Tx,y — мандат x на реализацию y
  • Ax,y — аутентификатор x для y

Мандат kerberos имеет следующий вид: Tc,s = s, {c,a,v,Kc,s}Kx. Мандат дается конкретному пользователю на доступ к строгому серверу на определенное время. Пользователь не может расшифровать мандат, но он может предоставить его серверу в зашифрованном виде.

Аутентификатор Kerberos имеет следующий вид: Аc,s = {c,t, ключ} Kc,s. Аутентификатор создается пользователем каждый раз, когда он хочет получить доступ к серверу.

Сообщение Kerberos

Kerberos имеет 5 версий сообщений:

  • Клиент — Kerberos: c, tgs
  • Kerberos — клиент: {Kc,tgs}Kc {Tc,tgs} Ktgs
  • Клиент TGS: {Ac,s} Kc,tgs {Tc,tgs} Ktgs,s
  • TGS — клиент: {Kc,s} Kc,tgs {Tc,s} Ks
  • Клиент — сервер: {Ac,s} Kc,s {Tc,s} Ks

Получение первоначального мандата

У клиента есть данные, которые доказывают его личность — пароль. Система Kerveros минимизирует вероятность выявление пароля, но не разрешает идентифицировать пользователя, который не знает пароля. Клиент отправляет на сервер аутентификации Kerberos пакет, содержащее его имя и имя сервера TGS:

  • Клиент — Kerberos: c, tgs

На практике пользователь просто вводит свое имя, и приложение посылает запрос. Сервер аутентификации ищет данные о пользователе. Если информация есть, Kerberos создает сеансовый ключ Kc,tgs, который нужен для соединения между клиентом и сервером TGS. Система шифрует этот сеансовый ключ секретным ключом клиента Kc, и создает для клиента мандат на выделение мандата TGT (Ticket Granting Ticket). TGT шифруется на секретном ключе TGS и содержит идентификатора сервера и пользователя, сеансовый ключ пары TGS/клиент и время действия TGT. Сервер аутентификации отправляет пользователю этих два пакета:

  • Kerberos — клиент: {Kc,tgs}Kc {Tc,tgs} Ktgs

Пользователь принимает два пакета, расшифровывает первый пакет своим секретным ключом К и имеет сеансовый ключ Kc,tgs. Секретный ключ является однонаправленной хэш-функцией пользовательского пароля. Злоумышленник не получит мандат и сеансовый ключ, потому что он не знает пароль.

Пользователь сохраняет мандат сеансовый ключ и TGT, удаляя пароль и хэш-значение. Злоумышленник может получить TGT и сеансовый ключ имея доступ к ПК пользователя, но эти данные имеют срок жизни.

Получение серверных мандатов

Пользователь может получить отдельный мандат для конкретной услуги. ему нужно послать в службу TGS запрос:

  • Клиент TGS: {Ac,s} Kc,tgs {Tc,tgs} Ktgs,s

На практике приложение реализует такой запрос автоматически. TGS получив запрос, расшифровывает TGT своим личным секретным ключом. После TGS реализует включенный в TGT сеансовый ключ, чтобы расшифровать аутентификатор. Затем производится сравнение данных, имеющихся в аутентификаторе и информации мандата. Сравнивается сетевой адрес пользователя в мандате и тем, что указан в запросе, также сравнивается метка времени с текущем временем.

В ответ на верный запрос TGS дается пользователю мандат для доступа к нужному серверу. TGS создает сеансовый ключ для пользователя и нужно сервера, зашифрованный сеансовый ключом, общим для пользователя и TGS. Этих два пакета передаются пользователю:

  • TGS — клиент: {Kc,s} Kc,tgs {Tc,s} Ks

Запрос услуги

Для успешной процедуры аутентификации у целевого сервера, клиент реализует аутентификатор, содержащий его имя, сетевой адрес и метку времени шифрованный на сеансовом ключей «клиент/сервер» и вместе с мандатом передает серверу:

  • Клиент — сервер: {Ac,s} Kc,s {Tc,s} Ks

Сервер приняв пакеты, проводит проверку аутентификатора. Если нужна взаимная проверка подлинности, сервер отправляет пользователю пакет, содержащий метку времени зашифрованную сеансовым ключом.

Вывод

К протоколу Kerberos предъявлено ряд требований, который подробно описаны в RFC-1510. Основные из них:

  • Система Kerberos должна быть защищена от атак, направленных на отказ в обслуживании
  • нужна синхронизация системного времени всех участников системы
  • Kerberos не защищает от атак перебора пароля.
  • Мандаты и секретные ключи должны быть защищены от несанкционированного доступа