Kerberos
Kerberos — это протокол аутентификации, основанный на криптографии с симметричными ключами, разработанный для обеспечения безопасного доступа к сетевым сервисам в условиях незащищённой среды. Протокол позволяет двум сторонам (клиенту и серверу) взаимно подтвердить свою подлинность без передачи паролей в открытом виде, используя для этого доверенный центр выдачи билетов — сервер аутентификации. Kerberos широко применяется в корпоративных информационных системах, в частности, в операционных системах Microsoft Windows (как часть Active Directory) и в Unix-подобных системах (например, в реализации Heimdal или MIT Kerberos).
История
Разработка Kerberos началась в середине 1980-х годов в Массачусетском технологическом институте (MIT) в рамках проекта Athena, целью которого было создание распределённой вычислительной среды для учебных и исследовательских целей. Основной задачей было обеспечение безопасной аутентификации пользователей в сети, состоящей из множества рабочих станций и серверов, где пароли могли быть перехвачены. Первая версия протокола (Kerberos I) была выпущена в 1986 году, но вскоре была признана небезопасной из-за уязвимостей в криптографических алгоритмах. В 1987 году появилась версия 2 (Kerberos II), которая также содержала критические недостатки.
Значительным улучшением стала версия 4 (Kerberos IV), выпущенная в 1988 году. Она была реализована на языке C и получила распространение в академической среде. Однако Kerberos IV не была полностью стандартизирована и имела ограничения, такие как использование устаревших методов шифрования и ограниченная поддержка межсетевых взаимодействий. В 1993 году вышла версия 5 (Kerberos V), которая стала последней и наиболее распространённой. Она была задокументирована в рекомендациях IETF RFC 1510, а затем в обновлённой версии RFC 4120 (2005 год). Kerberos V исправила проблемы предшественницы: ввела современные криптографические алгоритмы (DES, 3DES, AES), поддержку межсетевого взаимодействия (cross-realm authentication) и возможность расширения протокола.
Архитектура и принцип работы
Kerberos построен на модели с тремя основными компонентами:
- Клиент (Client) — пользователь или служба, желающая получить доступ к сетевому ресурсу.
- Сервер приложений (Application Server) — служба, к которой клиент хочет обратиться (файловый сервер, веб-сервер, почтовый сервер и т.д.).
- Центр распространения ключей (Key Distribution Center, KDC) — доверенный сервер, состоящий из двух логических частей: сервера аутентификации (Authentication Server, AS) и сервера выдачи билетов (Ticket-Granting Server, TGS).
Процесс аутентификации в Kerberos состоит из нескольких фаз и не требует передачи паролей по сети. Вместо этого используется система одноразовых «билетов» (tickets) и сеансовых ключей.
Фаза 1: Запрос и получение билета на получение билетов (TGT)
- Клиент отправляет запрос на сервер аутентификации (AS). В запросе указывается идентификатор пользователя (не пароль).
- AS проверяет, что пользователь существует в базе данных KDC. Затем AS генерирует сеансовый ключ (криптографический ключ для шифрования последующей коммуникации) и создаёт два объекта:
- Билет на получение билетов (Ticket-Granting Ticket, TGT), зашифрованный с помощью долговременного ключа TGS (известного только KDC и TGS). TGT содержит идентификатор пользователя, временную метку, срок действия и сеансовый ключ.
- Сообщение для клиента, содержащее тот же сеансовый ключ, но зашифрованное с помощью хеша пароля пользователя.
- Клиент расшифровывает сообщение с помощью своего пароля, извлекая сеансовый ключ. TGT сохраняется в памяти клиента. Расшифровать TGT клиент не может, так как он зашифрован ключом TGS.
Фаза 2: Получение билета для конкретного сервиса
- Когда клиент хочет обратиться к определённому серверу приложений (например, к почтовому серверу), он отправляет на сервер выдачи билетов (TGS) запрос, который включает три элемента:
- TGT (который клиент хранит с предыдущего шага).
- Идентификатор запрашиваемого сервера.
- Аутентификатор (authenticator) — блок данных, сгенерированный клиентом, зашифрованный сеансовым ключом (извлечённым на фазе 1) и содержащий имя пользователя и временную метку.
- TGS расшифровывает TGT своим ключом, извлекает сеансовый ключ клиента и с его помощью расшифровывает аутентификатор. TGS проверяет, что аутентификатор не истёк и не является повторной передачей (для этого используется временная метка и протокол защиты от replay-атак).
- Если проверка успешна, TGS генерирует новый сеансовый ключ (его будет использовать клиент для связи с сервером приложений) и создаёт:
- Билет для сервера приложений (Service Ticket), зашифрованный долговременным ключом этого сервера. Билет содержит имя пользователя и новый сеансовый ключ.
- Сообщение для клиента, содержащее новый сеансовый ключ, зашифрованное с помощью сеансового ключа (из TGT).
- Клиент расшифровывает сообщение, извлекая новый сеансовый ключ. Service Ticket сохраняется в памяти клиента.
Фаза 3: Аутентификация на сервере приложений
- Клиент отправляет на сервер приложений Service Ticket и новый аутентификатор, зашифрованный с помощью нового сеансового ключа.
- Сервер приложений расшифровывает Service Ticket своим ключом, извлекает имя пользователя и новый сеансовый ключ. Затем он расшифровывает аутентификатор сервера и проверяет его подлинность.
- Для взаимной аутентификации сервер может отправить клиенту ответное сообщение, содержащее временную метку из аутентификатора, зашифрованную сеансовым ключом. Клиент расшифровывает его и убеждается, что сервер знает правильный ключ.
- После этого клиент и сервер могут обмениваться данными, используя сеансовый ключ для шифрования (опционально) или только для аутентификации пакетов.
Ключи в Kerberos
В протоколе используются несколько типов криптографических ключей:
- Долговременный ключ (Long-term Key) — для каждого постоянного участника (пользователя, сервера) KDC знает длинный ключ, который генерируется на основе пароля пользователя или случайно для сервера. Этот ключ используется только для начальных фаз аутентификации.
- Сеансовый ключ (Session Key) — временный симметричный ключ, генерируемый KDC для каждого сеанса общения. Он может использоваться для шифрования данных между клиентом и сервером или между клиентом и KDC.
- Ключ TGS — долговременный ключ сервера выдачи билетов, известный только KDC.
Версии протокола
| Версия | Год выпуска | Основные характеристики |
|---|---|---|
| Kerberos I | 1986 | Первая экспериментальная версия, использовала протоколы Needham-Schroeder. |
| Kerberos II | 1987 | Исправила некоторые уязвимости первой версии, но проблемы безопасности остались. |
| Kerberos III | Не выпущена | Промежуточная разработка, не получившая статуса отдельной версии. |
| Kerberos IV | 1988 | Широко использовалась в академических кругах. Поддержка DES, ограниченная совместимость с другими системами. |
| Kerberos V | 1993, RFC 1510 (2005, RFC 4120) | Стандартизованная версия. Поддержка нескольких криптографических алгоритмов, межсетевое взаимодействие, гибкость. |
Применение
Kerberos является стандартом де-факто для аутентификации в корпоративных сетях. Основные области применения:
- Microsoft Active Directory — Kerberos V используется по умолчанию для аутентификации пользователей и компьютеров в домене Windows. Это позволяет получить доступ к таким службам, как файловые серверы, веб-приложения IIS, Exchange, SQL Server и другим.
- Unix-подобные системы — в средах Linux/Unix Kerberos реализован через пакеты MIT Kerberos (krb5) и Heimdal. Используется для аутентификации в сетях NFS, SSH, веб-серверах (через mod_auth_kerb), а также в различных службах GSS-API.
- Межсистемная интеграция — протокол позволяет организовывать доверительные отношения между разными доменами или Kerberos-областями (realms). Например, если две организации имеют свои KDC, они могут настроить cross-realm trust для предоставления доступа к ресурсам друг друга.
- Безопасное взаимодействие в распределённых системах — Kerberos может быть использован для защиты удалённого вызова процедур (RPC) и микросервисной архитектуры.
Безопасность и критика
Протокол Kerberos обладает рядом сильных сторон:
- Отсутствие передачи паролей в открытом виде — пароль используется только локально на клиенте для расшифровки начального сообщения.
- Взаимная аутентификация — как клиент, так и сервер доказывают свою подлинность.
- Защита от прослушивания и повторного использования (replay attack) — благодаря временным меткам и сеансовым ключам.
- Поддержка одноразовой аутентификации (Single Sign-On, SSO) — после ввода пароля пользователь может получить доступ ко всем серверам, которые доверяют тому же KDC, без повторного ввода данных.
Однако протокол не лишён уязвимостей и ограничений:
- Зависимость от единого центра (KDC) — если KDC выходит из строя или оказывается скомпрометирован, вся система аутентификации перестаёт работать. Для устранения этого недостатка используют резервные KDC и репликацию баз данных.
- Требование синхронизированных часов — для корректной работы временных меток все клиенты и серверы должны иметь точное системное время (обычно разница допускается не более 5 минут). Это создаёт зависимость от протокола NTP.
- Атака на пароли — злоумышленник может попытаться подобрать пароль пользователя методом перебора (brute force) на основе перехваченного начального сообщения (которое зашифровано с помощью хеша пароля).
- Уязвимости реализации — в различные периоды были обнаружены уязвимости в реализациях Kerberos (например, CVE-2020-17049 в Windows Kerberos).
- Сложность настройки — корректная настройка Kerberos в распределённой среде требует понимания криптографии и доверительных отношений.
Альтернативы
С развитием технологий появились протоколы и системы, которые могут использоваться как альтернативы или дополнения к Kerberos:
- LDAP (Lightweight Directory Access Protocol) — часто используется для хранения аутентификационных данных, но сам по себе не обеспечивает защиту передачи паролей (может быть объединён с TLS).
- OAuth 2.0 и OpenID Connect — современные протоколы для авторизации и аутентификации, основанные на токенах и JSON Web Token (JWT). Широко используются в веб-приложениях и облачных системах.
- SAML (Security Assertion Markup Language) — стандарт для обмена аутентификационными и авторизационными данными между разными доменами, часто используемый в корпоративных порталах.
- RADIUS и TACACS+ — протоколы для аутентификации в сетевом оборудовании, имеют централизованную архитектуру, но отличаются в деталях и степени поддержки шифрования.
Источники
- RFC 4120 — «The Kerberos Network Authentication Service (V5)» (2005).
- RFC 1510 — «The Kerberos Network Authentication Service (V5)» (1993).
- MIT Kerberos Documentation (https://web.mit.edu/kerberos/).
- Microsoft Docs — «Kerberos Authentication Overview» (Windows Server).
- Simson Garfinkel, Gene Spafford. «Practical UNIX & Internet Security», O'Reilly, 1996.
- William Stallings. «Cryptography and Network Security: Principles and Practice», 7th edition, Pearson, 2017.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →