Предаутентификация в протоколе Kerberos

  • В реализациях Kerberos традиционно (20+ лет) использовалась парольная аутентификация
  • В 2006 в MIT Kerberos добавили поддержку предаутентификации для использования смарт-карт и сертификатов (Nalin Dahyabhai, Red Hat Inc.)
  • Предаутентификация позволяет обмениваться дополнительными данными между клиентом и сервером до установления подлинности используемых факторов аутентификации
  • Механизм предаутентификации должен сам гарантировать защищенность соединения
  • Начиная с версии 1.9 в MIT Kerberos поддерживаются токены RSA SecurID как предаутентификация

Предаутентификация в протоколе Kerberos: FAST

RFC 6113

Предаутентификация в протоколе Kerberos: PKINIT

  • PKINIT (инфраструктура открытых ключей) использует предаутентификацию для обмена информацией о сертификатах
  • Использование PKINIT подразумевает, что в организации развернута инфраструктура по управлению сертификатами для пользователей и служб
  • PKINIT также обеспечивает сокрытие факта соединения конкретного пользователя со службой, anonymous PKINIT (RFC 6112, доступен в версии 1.8 MIT Kerberos)
    • Anonymous PKINIT можно использовать для создания защищенного соединения для шифрования канала передачи
    • Текущая версия RFC 6112 допускает MITM атаку в случае, если клиент не верифицирует аутентичность KDC, приславшего анонимный билет и не использует дополнительный фактор для шифрования

FAST и однократные пароли в Kerberos

RFC 6560

Реализация RFC 6560

... с утроенной силой

Делай “раз”. RFC 6560: MIT Kerberos

Двухфакторная авторизация в MIT Kerberos требовала несколько шагов:

  • поддержка FAST для клиента и KDC (1.8)
  • поддержка PKINIT с FAST на клиентской стороне (1.10)
  • реализация FAST с OTP на клиентской стороне (1.11)
  • реализация OTP преаутентификации на стороне KDC (1.11)

Преаутентификация OTP использует проксирование запросов к серверу RADIUS:

[otp]
    <name> = {
        server = <host:port или путь к файлу> ($KDCDIR/<name>.socket)
        secret = <путь к файлу>
        timeout = <число> (5 [секунд])
        retries = <число> (3)
        strip_realm = <true|false> (по умолчанию: true)
    }

Делай “два”. FAST в SSSD

SSSD отвечает за идентификацию, аутентификацию и авторизацию пользователей на клиентских машинах в Fedora и Red Hat Enterprise Linux. SSSD также присутствует в Debian GNU/Linux, Ubuntu, openSUSE и других дистрибутивах GNU/Linux.

  • SSSD создает канальный ключ на основе TGT указанного в настройках идентификатора Kerberos
  • Канал FAST с этим ключем затем используется для обмена дополнительной информацией так, как этого требует KDC
  • Запросы, передаваемые KDC, транслируются в запросы диалога PAM и ответы отправляются назад по зашифрованному каналу FAST
  • В случае успешной предаутентификации запрашивается TGT для идентификатора пользователя, он заменяет канальный ключ в ccache пользователя
  • Поддерживаются все приложения, использующие PAM

Делай “два”. FAST в SSSD (продолжение)

  • Поддержка FAST доступна в SSSD 1.5.1 (декабрь 2010) и позднее, но она не работает с OTP
  • Поддержка OTP требовала специальный механизм в libkrb5 (responder callback), появившийся в MIT Kerberos 1.11 и используемый в SSSD с весны 2013 года
  • Обнаружив необходимость OTP, krb5_child в SSSD послыает сообщение о статусе OTP. Это сообщение обрабатывается неправильно в SSSD (ошибка #2186)

Чтобы включить поддержку FAST, необходимо добавить опции в /etc/sssd/sssd.conf:

[domain/<name>]
        krb5_use_fast = try (по умолчанию не используется)
        krb5_fast_principal = host/<hostname>

Делай “три”. Управление токенами и аутентификация

Управление токенами:

  • создание, удаление, ресинхронизация
  • распространение пользователям на их устройства (soft-токены) или выдача аппаратных модулей
  • KDC и SSSD: “Это не наша проблема”
    • KDC делегирует обработку токенов внешнему процессу (RADIUS-сервер)
    • Двухфакторная авторизация предполагает, что токен не присутствует на клиентской машине, это принципально для обеспечения безопасности

Делай “три”. Управление токенами и аутентификация (часть 2)

Управление токенами:

  • FreeIPA интегрирует LDAP, Kerberos, DNS, Samba в единое решение с точки зрения администратора
  • Токены хранятся в LDAP, выдаются администратором и приписываются пользователям
  • FreeIPA предоставляет интегрированный демон проверки OTP, работающий вместе с MIT KDC
  • Предварительная версия была интегрирована в Fedora 19, требовала ручную настройку, как описано в Fedora Test Day: 2FA
  • Финальная версия будет доступна в FreeIPA 3.4 (Fedora 21)

Делай “три”. Управление токенами и аутентификация (демо)

Демонстрация текущего состояния (Fedora 20 плюс патчи):

  • ipa otptoken-{add,del,mod,show}
  • веб-интерфейс
  • SSH
  • sudo/su - <user>
  • ldapsearch

Делай “сам”: мобильные клиенты

Мобильный клиент для софт-токена:

  • Google Authenticator
    • Android, iOS 5+, Blackberry
    • Превращен в проприетарный проект с версии 2.22
    • Код последней доступной версии (2.21) лицензирован под Apache License 2.0
  • OTP Authenticator
    • Android, недоступен в Google Play
    • Основан на версии 2.21 Google Authenticator
  • FreeOTP
    • Android, iOS 5+
    • Основан на версии 2.21 Google Authenticator
    • Активно развивается командой FreeIPA
  • ... иные совместимые с Google Authenticator приложения

Делай вместе с другими: интеграция

Интеграция с другими приложениями:

  • PAM (pam_sss)
  • аутентификация посредством LDAP
  • Kerberos FAST
  • SAML 2.0 (в процессе разработки)

Сделай вместе с другими: неоконченное

Объем несделанного для Fedora 21:

  • Если разрешено использование и пароля, и OTP, pam_sss не дает войти по паролю (LDAP bind работает)
  • Показ QR кода существующего токена пользователю в режиме самообслуживания
  • Права доступа в режиме самообслуживания должны разрешать создание новых токенов
  • Настройка anonymous PKINIT для OTP "из коробки", чтобы работало получение билетов Kerberos через kinit для обычных пользователей
  • Обновление политик SELinux
  • Поддержка SAML 2.0