Настройка аутентификации Kerberos

Пакет inno-samba включает центр распространения ключей (KDC) в реализации Heimdal для обеспечения аутентификации по протоколу Kerberos.

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

Также приводятся рекомендации по устранению ошибок, связанных с аутентификацией Kerberos.

Устранение ошибки KRB5KDC_ERR_TGT_REVOKED

При эксплуатации контроллеров Эллес в одном домене с контроллерами на ОС Windows Server в процессе обработки запроса сервисного билета (TGS-Request) контроллером Эллес может возникать ошибка с кодом возврата (TGS-Response) KRB5KDC_ERR_TGT_REVOKED.

Она вызвана тем, что выдающий TGT-билет контроллер домена на Windows Server формирует PAC без атрибута PAC_TYPE_REQUESTER_SID. Данный атрибут содержит идентификатор безопасности (SID) запросившей билет учетной записи. Эллес ожидает данный атрибут и не может корректно обработать запрос при его отсутствии.

Для устранения данной проблемы необходимо установить на контроллере домена на Windows Server следующее обновление, соответствующее версии операционной системы:

После установки обновления в PAC добавляется атрибут PAC_TYPE_REQUESTER_SID, что позволяет Эллес корректно обработать запрос билета Kerberos.

Настройка типов шифрования

Под типом шифрования (enctype) в Kerberos понимается определенная комбинация криптографического алгоритма и алгоритма обеспечения целостности передаваемых данных.

Сервер KDC Heimdal в составе Эллес поддерживает следующие типы шифрования:

  • aes256-cts-hmac-sha384-192;

  • aes128-cts-hmac-sha256-128;

  • aes256-cts-hmac-sha1-96;

  • aes128-cts-hmac-sha1-96;

  • arcfour-hmac-md5 (rc4-hmac);

  • des-cbc-crc, des-cbc-md4, des-cbc-md5, des3-cbc-sha1 (отключены по умолчанию).

От клиентов KDC получает запросы (KDC-REQ) двух видов:

  • AS-REQ — запросы к сервису аутентификации (Authentication Service, AS) на получение первоначальных билетов (как правило — билетов Ticket-Granting Ticket, TGT);

  • TGS-REQ — запросы к серверу выдачи билетов для доступа к сервисам (Ticket-Granting Service, TGS).

KDC использует три различных ключа при выдаче билета клиенту:

  • долговременный ключ сервиса — KDC использует данный ключ для шифрования самого сервисного билета;

  • сессионный ключ — KDC выбирает данный ключ случайным образом и помещает одну его копию внутрь билета, а вторую — в зашифрованную часть ответа;

  • ключ для шифрования ответа — KDC использует этот ключ для шифрования ответа, отправляемого клиенту; для ответов на запросы к AS используется долговременный ключ клиента; в случае ответов на запросы к TGS используется либо сессионный ключ аутентификационного билета, либо подсессиссионный ключ.

Каждый из перечисленных ключей имеет свой собственный тип шифрования (enctype).

Для каждого типа запросов клиент может предоставить список типов шифрования (enctypes), которые он готов принимать. В случае запросов AS-REQ такой список влияет как на выбор сессионного ключа, так и на выбор ключа для шифрования ответа. Применительно к запросам TGS-REQ данный перечень влияет на выбор сессионного ключа.

KDC выбирает тип шифрования (enctype) для сессионного ключа, сопоставляя список типов шифрования, которые указаны в конфигурации KDC как используемые по умолчанию, список долговременных ключей с максимальным номером версии и список типов шифрования, запрошенных клиентом. При выборе типа шифрования для сессионного ключа KDC исходит из допущения, что все сервисы поддерживают современные алгоритмы шифрования AES; по умолчанию типы шифрования DES и RC4 при выдаче сессионных ключей не используются.

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

Настройки библиотеки Kerberos (krb5.conf)

Для управления составом типов шифрования, используемых локальным сервером KDC при обработке клиентских запросов и формировании ключей, в разделе [libdefaults] файла /etc/krb5.conf могут быть заданы следующие параметры:

  • default_etypes — список типов шифрования для использования во всех запросах (по умолчанию — все типы, кроме DES; если allow_weak_crypto = TRUE — все типы, включая DES);

  • default_as_etypes — список типов шифрования для использования в запросах к сервису аутентификации (AS-REQ) (по умолчанию — значение параметра default_etypes);

  • default_tgs_etypes — список типов шифрования для использования в запросах на выдачу билетов для доступа к сервисам (TGS-REQ) (по умолчанию — значение параметра default_etypes);

  • allow_weak_crypto — признак использования уязвимых алгоритмов шифрования, включая DES (возможные значения — true | false; по умолчанию — false);

  • tgt-use-strongest-session-key — признак выбора KDC наиболее защищенного алгоритма шифрования для сессионного ключа при выдаче билета из списка типов шифрования клиента для AS-REQ и TGS-REQ, поддерживаемых KDC и целевым субъектом безопасности в тех случаях, когда в качестве такого субъекта выступает субъект krbtgt; если признак не установлен, KDC выбирает первый элемент из списка типов шифрования клиента для AS-REQ, поддерживаемый KDC и целевым субъектом безопасности (возможные значения — true | false; по умолчанию — false);

    Для устранения уязвимости CVE-2022-37966, позволяющей добиться локального повышения привилегий, Эллес принудительно устанавливает данный параметр в true.

  • svc-use-strongest-session-key — аналогично tgt-use-strongest-session-key применительно к типу шифрования сессионного ключа билетов для сервисов, отличных от субъектов безопасности krbtgt (возможные значения — true | false; по умолчанию — false);

    Для устранения уязвимости CVE-2022-37966, позволяющей добиться локального повышения привилегий, Эллес принудительно устанавливает данный параметр в true.

  • preauth-use-strongest-session-key — признак выбора наиболее защищенного алгоритма шифрования для сессионного ключа из списка типов шифрования клиента для AS-REQ при прохождении предварительной аутентификации по паролю (PA-ETYPE-INFO2); если признак не установлен, KDC выбирает первый элемент из списка типов шифрования клиента для AS-REQ (возможные значения — true | false; по умолчанию — false);

    Для устранения уязвимости CVE-2022-37966, позволяющей добиться локального повышения привилегий, Эллес принудительно устанавливает данный параметр в true.

  • use-strongest-server-key — признак выбора KDC для ключа зашифрованной части билета наиболее защищенного типа шифрования из списка поддерживаемых в текущем наборе ключей в записи HDB субъекта безопасности, представляющего целевой сервис; если признак не установлен, KDC выбирает первый поддерживаемый тип шифрования из набора ключей в записи в HDB (возможные значения — true | false; по умолчанию — true).

    Для устранения уязвимости CVE-2022-37966, позволяющей добиться локального повышения привилегий, Эллес принудительно устанавливает данный параметр в true.

Настройки Эллес (smb.conf)

Эллес использует библиотеку Kerberos в реализации Heimdal для получения билетов Kerberos. Как правило, конфигурирование работы данной библиотеки, включая настройку используемых типов шифрования, выполняется вне Эллес с помощью файла krb5.conf (см. «Настройки библиотеки Kerberos (krb5.conf)»).

Однако Эллес реализует протоколы и алгоритмы Active Directory для определения контроллеров в домене, в рамках которых некоторые процессы (winbindd и net) должны указывать библиотеке Kerberos, какой контроллер домена следует использовать. Для управления поведением библиотеки при вызове процессами Эллес формируется отдельный файл krb5.conf. Данный файл определяет все аспекты взаимодействия Эллес с библиотекой Kerberos, включая типы шифрования. Соответствующие настройки задаются в собственном конфигурационном файле Эллес — /app/inno-samba/etc/smb.conf.

Некоторые настройки в разделе [global] конфигурационного файла smb.conf, влияющие на выбор алгоритма шифрования Kerberos:

  • kerberos encryption types — типы шифрования для использования в тех случаях, когда Эллес выступает в качестве клиента Kerberos; возможные значения:

    • all (по умолчанию) — допускаются все типы шифрования;

    • strong — использовать только типы шифрования на основе AES;

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

    • legacy — использовать только тип шифрования rc4-hmac.

      Не рекомендуется использовать из-за уязвимости CVE-2022-37966, позволяющей добиться локального повышения привилегий.

  • kdc default domain supported enctypes — значение по умолчанию атрибута msDS-SupportedEncryptionTypes для тех сервисных учетных записей в домене Active Directory, у которых атрибут msDS-SupportedEncryptionTypes не установлен или имеет значение 0;

    Данный параметр в контексте администрирования домена Эллес является аналогом ключа реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\KDC\DefaultDomainSupportedEncTypes на ОС Windows.

    В отличие от ключа реестра Windows в Эллес значение для параметра может быть задано в трех форматах — десятичном, шестнадцатеричном или в виде списка наименований типов шифрования. Заданные в значении типы объединяются побитно с помощью логического оператора OR.

    Поддерживаемые типы шифрования:

    • arcfour-hmac-md5, rc4-hmac, 0x4, 4;

    • aes128-cts-hmac-sha1-96, aes128-cts, 0x8, 8;

    • aes256-cts-hmac-sha1-96, aes256-cts, 0x10, 16;

    • aes256-cts-hmac-sha1-96-sk, aes256-cts-sk, 0x20, 32.

      Разрешает шифрование AES для сессионных ключей. Если значение задано, оно указывает KDC на возможность использования AES для шифрования сессионных ключей даже в тех случаях, когда в параметре не указаны типы шифрования aes256-cts и aes128-cts. Это позволяет использовать ключи AES при взаимодействии с хостами, настроенными на работу с ключами билетов с типом шифрования RC4.

    Значение по умолчанию: kdc default domain supported enctypes = 0 (соответствует набору типов шифрования arcfour-hmac-md5 aes256-cts-hmac-sha1-96-sk).

  • kdc supported enctypes — список поддерживаемых типов шифрования для локального KDC, работающего на контроллере домена Эллес;

    Данный параметр может использоваться для отключения поддержки уязвимых типов шифрования аналогично ключу реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters\SupportedEncryptionTypes на ОС Windows.

    В отличие от ключа реестра Windows в Эллес значение для параметра может быть задано в трех форматах — десятичном, шестнадцатеричном или в виде списка наименований типов шифрования. Заданные в значении типы объединяются побитно с помощью логического оператора OR.

    Поддерживаемые типы шифрования:

    • arcfour-hmac-md5, rc4-hmac, 0x4, 4;

    • aes128-cts-hmac-sha1-96, aes128-cts, 0x8, 8;

    • aes256-cts-hmac-sha1-96, aes256-cts, 0x10, 16.

    Значение по умолчанию: kdc supported enctypes = 0 (соответствует набору типов шифрования arcfour-hmac-md5 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96).

  • kdc force enable rc4 weak session keys — признак того, что, независимо от значения, установленного в атрибуте msDS-SupportedEncryptionTypes сервисной учетной записи, KDC может использовать тип шифрования rc4-hmac для сессионных ключей (в отличие от ключей билетов), если клиенты запрашивают его;

    Согласно RFC8429 алгоритмы шифрования Kerberos rc4-hmac являются уязвимыми. Данный параметр позволяет включить их для обеспечения совместимости при работе в доменах с клиентами и контроллерами домена на ОС Windows.

    Значение по умолчанию: kdc force enable rc4 weak session keys = no.

Пример изменения настроек для принудительного включения поддержки rc4-hmac

Например, при вводе контроллера Эллес в домен Active Directory, в котором по каким-либо причинам атрибут msDS-SupportedEncryptionTypes принудительно установлен в значение RC4_HMAC_MD5, для корректной работы репликации необходимо в файле /etc/krb5.conf задать следующее значение для параметра default_etypes:

[libdefaults]
        [...]
        default_etypes = rc4-hmac

В этом случае при обработке запросов и формировании ключей КDC на контроллере домена Эллес будет использовать тип шифрования rc4-hmac.

Использование протокола TCP

Библиотека Kerberos использует протокол UDP и переходит на TCP в том случае, если объем данных, отправляемых KDC, превышает установленный лимит.

При взаимодействии в домене Эллес в состав билета Kerberos включается PAC, что приводит к увеличению размера билета и в большинстве случаев ведет к необходимости перехода на TCP.

Чтобы избежать повторной отправки запроса аутентификации, рекомендуется в настройках Kerberos (в файле /etc/krb5.conf) на клиентах, выполняющих запросы аутентификации, задать параметр udp_preference_limit = 1 в разделе [libdefaults]:

[libdefaults]
        [...]
        udp_preference_limit = 1