Файл, отправленный из системы с использованием OpenSSH 7.4p1, не принимается системой, использующей OpenSSH 8.7p1 – Как это разрешить?

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

У меня есть старая система Linux, и я использую проприетарное программное обеспечение, которое пытается копировать файлы (с помощью sftp или curl) на более новую систему Linux, но это не удается. Системы следующие:

Свойство Система-источник Система-назначение
ОС Derivative CentOS 7 Rocky Linux 9.5
ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024

Сниффинг обмена показал:

  • Пакет ответа на обмен группой Диффи-Хеллмана на сервере подтверждает следующие согласованные параметры:
    • Алгоритм обмена ключами (KEX): diffie-hellman-group-exchange-sha256 (соответствует поддержке клиента ✅)
    • Алгоритм шифрования: aes128-ctr (соответствует поддержке клиента ✅)
    • Алгоритм MAC: hmac-sha2-256 (соответствует поддержке клиента ✅)
    • Сжатие: none (соответствует поддержке клиента ✅)
    • Тип ключа хоста: ssh-rsa (соответствует поддержке клиента ✅, но см. ниже)
    • Тип подписи хоста: rsa-sha2-256 (потенциальная проблема ⚠️)

Тип ключа хоста в ответе KEX сервера – ssh-rsa, который поддерживается клиентом. Однако тип подписи, используемый сервером, – rsa-sha2-256, который клиент не заявлял о поддержке в своем сообщении SSH_MSG_KEXINIT.

Я выяснял, какие изменения можно сделать в файлах /etc/ssh/ssh_config и /etc/ssh/sshd_config на системе Rocky Linux 9.5 для поддержки этого обмена, но не нашел. Я также пробовал добавить следующее в /etc/ssh/sshd_config (как предложено в этом другом случае), но это также не получилось:


  # Разрешить немного устаревший выбор шифра
  Ciphers +aes128-cbc

  # Разрешить переговоры с использованием слабого DH
  # (добавлять group1 только при крайней необходимости)
  KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1

  # Предлагать SHA1 подписи для pubkey хоста
  HostKeyAlgorithms +ssh-rsa

  # Принимать SHA1 подписи для pubkey клиента
  PubkeyAcceptedAlgorithms +ssh-rsa

Настоящим решением будет обновление старой системы CentOS 7 derivative, но перед этим мне нужно, чтобы копирование файлов работало для завершения нескольких тестов.

Поэтому я ищу временное решение, где я мог бы изменить конфигурацию системы Rocky Linux 9.5 для разрешения передачи файлов. Кто-нибудь знает, какое изменение/дополнение нужно сделать в конфигурации?

Корень проблемы в общеизвестном факте, что RHEL 9 по умолчанию использует более строгие криптографические настройки, которые нарушают совместимость со старыми системами.

Вторая часть проблемы заключается в том, что RHEL 9 и такие производные, как Rocky Linux, влияют на криптографические настройки SSHD так, что они обходят любые криптографические настройки в /etc/ssh/sshd_config, используя “криптографические политики”. См. https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening

(В случае sshd (и других подобных демонов) криптополитика реализуется unit-ом systemd, добавляющим определенные опции командной строки, которые переопределяют настройки, найденные в /etc/ssh/sshd_config.)

Ваши варианты для SSH-демона на системе RHEL 9 следующие:

  • Переключить системную криптографическую политику на режим совместимости с более ранними выпусками, как описано в руководстве по упрочнению RHEL 9. В качестве root (или с sudo) выполните:

    # update-crypto-policies --set LEGACY
    Установка системной политики в LEGACY
    

    и перезагрузитесь.

    Примечание: это изменяет все демоны и системные настройки и является избыточным, если вам нужно настроить только ssh и sshd.

  • Исключить (только) sshd из системной криптографической политики.
    Вы можете отказаться, отредактировав /etc/sysconfig/sshd и раскомментировав строку # CRYPTO_POLICY=, (при необходимости вы можете дополнительно настроить /etc/ssh/sshd_config и добавить старые крипто-настройки). Это заставит ssh-демона снова обращаться только к файлу конфигурации для крипто-настроек. Может потребоваться использовать [sudo] systemctl daemon-reload, и вам точно нужно будет перезапустить ssh-демона с помощью [sudo] systemctl restart sshd

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

Проблема, возникающая при передаче файлов между системами с различными версиями OpenSSH, часто связана с изменениями в криптографической политике и алгоритмах шифрования. В данном случае мы имеем дело с несовместимостью между старыми и новыми версиями OpenSSH, установленными на двух различных Linux системах. На отправляющей стороне у нас CentOS 7 с OpenSSH 7.4p1, а на принимающей — Rocky Linux 9.5 с OpenSSH 8.7p1.

Теория:

С каждым новым выпуском OpenSSH разработчики делают значительные изменения, направленные на улучшение безопасности. Это значит, что устаревшие и небезопасные алгоритмы шифрования и подписи постепенно удаляются или становятся необязательными. Например, начиная с OpenSSH 8.2, алгоритм ssh-rsa по умолчанию считается устаревшим из-за использования SHA-1 для создания подписи, что в некоторых случаях может привести к уязвимостям.

В данной ситуации проблема заключается в том, что сервер OpenSSH 8.7p1 использует rsa-sha2-256 как тип подписи хоста, который не поддерживается клиентом OpenSSH 7.4p1, поскольку в его сообщении SSH_MSG_KEXINIT не было такой согласованной опции.

Пример:

На принимающей стороне (Rocky Linux 9.5) была предпринята попытка изменить файл конфигурации /etc/ssh/sshd_config, однако эти изменения, такие как включение алгоритмов ssh-rsa для конфликтующих ключей, не привели к успеху. Дело в том, что Rocky Linux использует системные криптографические политики, которые переопределяют настройки из этого файла с помощью параметров, передаваемых системным сервисным модулем (systemd).

Применение:

Чтобы решить эту проблему и обеспечить временную совместимость, можно использовать один из двух подходов:

  1. Изменение системной криптографической политики на принимающей стороне:

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

    sudo update-crypto-policies --set LEGACY

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

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

  2. Исключение только SSHD из системной криптографической политики:

    Если вы хотите изменить настройки исключительно для SSHD, вы можете исключить его из общемировой криптографической политики. Для этого отредактируйте файл /etc/sysconfig/sshd и раскомментируйте строку # CRYPTO_POLICY=. Это позволит SSHD использовать настройки из собственного конфигурационного файла /etc/ssh/sshd_config.

    После внесения изменений выполните:

    sudo systemctl daemon-reload
    sudo systemctl restart sshd

    Это убедит систему применить обновленные параметры только для SSHD.

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

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

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