Настройка аутентификации 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