Как узнать шифр TLS для подключения openldap?

Вопрос или проблема

Наши серверы OpenLDAP работают на версии EL6. OpenLDAP построен с использованием библиотек Mozilla Network Security Services (NSS). Наши клиенты LDAP работают на самых разных Unix и Linux системах.

Мы не можем заставить работать подключения OpenLDAP для клиентов или репликации, когда используем наши предпочтительные шифры TLS.

Например, если мы используем список Только самые сильные доступные шифры от Red Hat, такой как этот:

# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL

Соединения с клиентами не проходят, потому что они не соответствуют нашему требованию ACL для минимального фактора силы безопасности (SSF):

slapd[22887]: conn=1022 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[22887]: conn=1022 fd=20 TLS established tls_ssf=128 ssf=128
...
slapd[22887]: <= check a_authz.sai_ssf: ACL 256 > OP 128

Как я могу увидеть, какой шифр используется для этого соединения, чтобы я мог исключить его из списка?

Если мы отключаем список шифров и используем значения по умолчанию, предоставляемые OpenLDAP + NSS, это работает:

# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
# TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL


slapd[6020]: conn=1003 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[6020]: conn=1003 fd=20 TLS established tls_ssf=256 ssf=256

Однако список по умолчанию неприемлем, потому что он включает некоторые слабые шифры, которые наша служба безопасности не хочет, например, шифры RC4-SHA и RC4-MD5.

Мы знаем, что EL6 становится EOL к концу года. Это другая проблема.

Мне не удалось сделать это напрямую с помощью tcpdump или tshark на узле. Что мне пришлось сделать, так это захватить tcpdump на машине, передать данные на мой ноутбук, а затем запустить современную версию Wireshark, как указано на https://security.stackexchange.com/questions/52150/identify-ssl-version-and-cipher-suite

Еще одной очень полезной командой было использование скриптов nmap для перечисления шифров:

$ nmap --script ssl-enum-ciphers -p 636 ldap.example.org -Pn


PORT    STATE SERVICE
636/tcp open  ldapssl
| ssl-enum-ciphers: 
...
|   TLSv1.2
|     Ciphers (16)
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA
|       TLS_RSA_WITH_AES_128_CBC_SHA256
|       TLS_RSA_WITH_AES_128_GCM_SHA256
|       TLS_RSA_WITH_AES_256_CBC_SHA
|       TLS_RSA_WITH_AES_256_CBC_SHA256
|       TLS_RSA_WITH_AES_256_GCM_SHA384
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA


Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

Эти шифры AES_128 вызывают мою проблему, и поэтому я отключил их, добавив в список исключенных шифров:

TLSCipherSuite HIGH:!LOW:!MEDIUM:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL:!AES128

С недавней версией openssl вы можете попробовать разные наборы шифров.
Для начала вы можете использовать:

openssl s_client -connect FQHN:port -starttls ldap

Он покажет цепочку сертификатов и выбранный шифр.
Например:

...
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 5335 bytes and written 452 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2400 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
...

.

Ответ или решение

Для решения вопроса о том, как определить шифр TLS, используемый в соединении OpenLDAP, необходимо учитывать несколько аспектов касательно конфигурации OpenLDAP и взаимодействия с клиентами через протоколы безопасности. Рассмотрим возможность идентификации используемого шифра, устранения проблем с безопасностью и соответствия требованиям к шифрам, установленным вашей организацией.

Теория

Для начала важно понять, что OpenLDAP использует библиотеки Mozilla Network Security Services (NSS) для реализации TLS. При этом, конфигурация шифров, поддерживаемых вашим сервером OpenLDAP, играет ключевую роль в успешности установления соединения с клиентами. В случае, если ваш сервер пытается использовать шифры, которые не поддерживаются клиентом или не соответствуют требованиям безопасности, установленным вашей организацией, это может привести к сбоям в соединениях.

В ситуации, описанной в вопросе, серверная конфигурация включает параметр TLSCipherSuite, который определяет список допустимых шифров. Проблема возникает, когда применяемый шифр не соответствует минимальному требованию к фактору безопасности (Security Strength Factor, SSF).

Пример

Рассмотрим конфигурацию OpenLDAP:

# /etc/openldap/slapd.conf
TLSProtocolMin 3.2
TLSCipherSuite ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL

При этой настройке соединения могут проваливаться с ошибкой, как показано в логах:

slapd[22887]: conn=1022 fd=20 ACCEPT from IP=192.168.100.101:35936 (IP=192.168.100.100:636)
slapd[22887]: conn=1022 fd=20 TLS established tls_ssf=128 ssf=128
...
slapd[22887]: <= check a_authz.sai_ssf: ACL 256 > OP 128

Здесь видно, что SSF 128 не соответствует требованию ACL в 256, что приводит к отказу в соединении.

Практическое применение

Чтобы диагностировать, какой конкретно шифр используется в соединении и рассматривается с недостаточной SSF, можно использовать ряд инструментов:

  1. tcpdump и WireShark: хотя это может быть неудобно на вашем устаревшем оборудовании, возможность захвата трафика с помощью tcpdump и последующего анализа в WireShark на более совершенной платформе может предоставить детальную информацию о безопасном соединении, включая используемый шифр.

  2. nmap: с помощью команды

    nmap --script ssl-enum-ciphers -p 636 ldap.example.org -Pn

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

  3. openssl: использование команды

    openssl s_client -connect FQDN:port -starttls ldap

    позволяет вам как вручную протестировать связь, так и получить информацию о выбранном шифре после установления соединения.

Отказ от поддержки шифров с низким уровнем безопасности, таких как AES_128, может устранить проблемы с соответствием требованиям безопасности. В вашем случае, добавление следующих параметров к TLSCipherSuite для отключения небезопасных шифров послужило решением:

TLSCipherSuite HIGH:!LOW:!MEDIUM:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL:!AES128

Вывод

Уверенность в том, что ваш сервер OpenLDAP использует современные, безопасные и соответствующие корпоративной политике шифры, требует тщательной настройки и проверки конфигурации. Используйте инструменты диагностики, чтобы проверить, какие шифры имеют поддержку и какие используются в реальных соединениях. Это поможет вам не только устранить текущие проблемы с конфигурацией, но и обеспечить безопасность и совместимость в будущем.

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

Оцените материал
Добавить комментарий

Капча загружается...