Skip to content

Kerberos

Kerberos

1. Определение

Kerberos — это сетевой протокол аутентификации, разработанный в MIT, который позволяет клиентам и серверам безопасно проверять подлинность друг друга с помощью третьей доверенной стороны (Key Distribution Center, KDC).

Kerberos использует симметричное шифрование и обеспечивает защиту от прослушивания и повторных атак (replay attacks). Он широко используется в таких системах, как:

  • Microsoft Active Directory
  • MIT Kerberos
  • Apple macOS
  • Linux (например, Red Hat Identity Management)
  • Hadoop, OpenStack и других

2. Основные компоненты Kerberos

Компонент Описание
Клиент (Client) Пользователь или приложение, запрашивающее доступ к сервису
Сервер (Server) Ресурс, к которому клиент хочет получить доступ (например, файловый сервер)
KDC (Key Distribution Center) Центральный сервер, состоящий из двух частей:
Authentication Server (AS)
Ticket Granting Server (TGS)
База данных принципалов (Principal Database) Хранит информацию о пользователях и сервисах, их паролях и ключах

3. Как работает Kerberos?

Этапы работы Kerberos:

1. Аутентификация клиента (AS Exchange)
  • Клиент отправляет запрос на Authentication Server (AS).
  • AS проверяет учётные данные и выдаёт Ticket-Granting Ticket (TGT), зашифрованный ключом KDC.
  • TGT содержит:
  • Имя пользователя
  • Время выдачи
  • Срок действия
  • Сессионный ключ между клиентом и TGS
2. Запрос билета на доступ к сервису (TGS Exchange)
  • Клиент отправляет TGT вместе с запросом на доступ к определённому сервису (например, базе данных).
  • TGS проверяет TGT и выдаёт Service Ticket, зашифрованный ключом этого сервиса.
  • Сервисный билет содержит:
  • Имя пользователя
  • Время выдачи
  • Сессионный ключ между клиентом и сервером
3. Доступ к сервису (Application Server Exchange)
  • Клиент отправляет Service Ticket на сервер.
  • Сервер расшифровывает его своим ключом и проверяет подлинность.
  • Если всё верно, клиент получает доступ к ресурсу.

4. Преимущества Kerberos

Преимущество Описание
Безопасность Пароли не передаются по сети, используются временные билеты
Единый вход (SSO) После получения TGT пользователь может обращаться к разным сервисам без повторной аутентификации
Защита от replay-атак Билеты содержат метку времени и могут использоваться только один раз
Поддержка взаимной аутентификации Не только клиент, но и сервер может проверить подлинность друг друга
Централизованное управление Все аутентификационные данные хранятся в одном месте — на KDC

5. Требования для использования Kerberos

Условие Описание
Точное время Разница во времени между клиентом, KDC и сервером должна быть минимальной (обычно ±5 минут)
Работающий DNS Для правильного разрешения имён сервисов
Платформенная совместимость Kerberos должен быть реализован на всех участвующих системах
Правильно настроенная инфраструктура Включая KDC, realm, принципалов, ключевые таблицы (keytabs)
Поддержка шифрования Современные версии Kerberos поддерживают AES, DES, RC4 и другие алгоритмы

6. Принципалы (Principals)

Принципал (Principal) — это уникальное имя, идентифицирующее пользователя или сервис в Kerberos.

Формат имени:

primary/instance@REALM

Примеры:

  • alice@EXAMPLE.COM — пользователь alice в домене EXAMPLE.COM
  • HTTP/www.example.com@EXAMPLE.COM — HTTP-сервис на сервере www.example.com
  • host/server01.example.com@EXAMPLE.COM — SSH-доступ к серверу server01

7. Реалм (Realm)

Реалм (Realm) — это логическая область безопасности в Kerberos, аналогичная домену в DNS. Обычно реалм пишется заглавными буквами.

Примеры:

  • EXAMPLE.COM
  • INTERNAL.NET
  • CORP.LOCAL

Реалмы позволяют группировать пользователей, сервисы и серверы под единым административным контролем.


8. Доверительные отношения между реалмами

Kerberos поддерживает доверительные отношения (trust relationships) между разными реалмами, что позволяет пользователям одного реалма получать доступ к сервисам другого.

Типы доверий:

Тип Описание
Одностороннее доверие A доверяет B, но не наоборот
Двустороннее доверие A и B доверяют друг другу
Транзитивное доверие Доверие распространяется на связанные реалмы
Нетранзитивное доверие Доверие ограничено конкретной парой реалмов

9. Kerberos в Microsoft Active Directory

В Windows Server и Active Directory Kerberos является стандартным протоколом аутентификации. AD использует модифицированную версию Kerberos, которая включает:

  • Интеграцию с LDAP
  • Поддержку SPNEGO (Simple and Protected GSS-API Negotiation Mechanism)
  • Расширения для междоменных доверий
  • Поддержку Resource-Based Constrained Delegation

Основные особенности:

  • KDC реализован как служба на контроллерах домена
  • Реалмы соответствуют DNS-именам домена (например, CORP.EXAMPLE.COM)
  • Пользователи и компьютеры автоматически регистрируются как принципалы
  • Сервисы используют SPNs (Service Principal Names) для регистрации в AD

10. SPN (Service Principal Name)

SPN (Service Principal Name) — это уникальное имя, привязанное к аккаунту (пользовательскому или компьютерному), которое указывает, какие службы предоставляет этот аккаунт.

Примеры SPN:

HTTP/www.example.com
MSSQLSvc/dbserver.example.com
ldap/dc01.example.com

SPN необходим для корректной работы Kerberos при аутентификации на сервисах.


11. Проблемы и распространённые ошибки в Kerberos

Проблема Причина Решение
Clock skew too great Разница во времени больше допустимой Настройте NTP-синхронизацию
Pre-authentication failed Неверный пароль или повреждённый билет Проверьте учётные данные, очистите билеты
Cannot find KDC for realm Неправильный DNS или конфигурация krb5.conf Проверьте DNS, записи SRV, файл конфигурации
Wrong principal in request Запрашивается неверный SPN Проверьте регистрацию SPN в AD
KDC has no support for encryption type Не поддерживается тип шифрования Обновите политики Kerberos или типы шифрования
Duplicate SPN found Дублирование SPN в AD Используйте setspn -X для поиска дубликатов

12. Инструменты диагностики Kerberos

Инструмент Описание
kinit Получение TGT
klist Просмотр текущих билетов
kdestroy Удаление билетов
setspn Управление SPN в Active Directory
Wireshark / Network Monitor Анализ сетевых пакетов Kerberos
Event Viewer → Security Logs Логи аутентификации в Windows
PowerShell / ktpass Создание keytab-файлов для сервисов

13. Лучшие практики использования Kerberos

Практика Описание
Использовать актуальные версии Kerberos Например, MIT Kerberos 1.19 или выше
Настроить точное время через NTP Это критично для работы протокола
Регулярно обновлять пароли и ключи Особенно для сервисных аккаунтов
Использовать strong encryption types Отказаться от DES и использовать AES
Избегать дублирования SPN Это вызывает ошибки аутентификации
Интегрировать Kerberos с LDAP или AD Для централизованного управления учетными записями
Мониторить и логировать активность Использовать SIEM-системы для анализа событий безопасности