Как собрать openSSH с помощью NSS или GnuTLS вместо OpenSSL?

Из-за проблем с безопасностью OpenSSL я хотел бы вместо этого использовать NSS или GnuTLS. Для нужд сервера Apache это просто, поскольку для каждого из них существует модуль. Но для SSH это выглядит сложно, если не невозможно.

Dropbear встраивает собственные алгоритмы и не открыта для внешнего мира. Раньше OpenSSH собирался с OpenSSL, но через несколько месяцев можно собрать без него благодаря новой опции:

make OPENSSL=no

Но тогда используются программные криптографические алгоритмы из работ Д. Дж. Бернштейна. Это хорошо, но не для меня, потому что я буду использовать TPM и, следовательно, иметь доступ к уровню pkcs11. Как следствие, правильным решением будет сборка OpenSSH либо с NSS, либо с GnuTLS.

Я не могу ждать LibReSSL в Linux или использовать OpenBSD, которая только что выпустила его и сделала своим SSL слой по умолчанию.

Итак, мой вопрос: кто-то пытался и сумел собрать OpenSSH с NSS или GnuTLS вместо OpenSSL, или исправил Dropbear или любое другое решение, чтобы сервер SSH работал с аутентификацией TPM и EC?

Примечание: поскольку у меня ограниченные ресурсы, я не могу использовать OpenSSL с OpenSSH и NSS с Apache. Мне абсолютно необходимо минимизировать встроенные библиотеки.


person lalebarde    schedule 16.10.2014    source источник


Ответы (2)


Нет. Но вы можете уменьшить увеличение использования диска, связанное с OpenSSL, статически связав libcrypto (часть OpenSSL, которую фактически использует OpenSSH) в sshd.

В моей системе я могу сделать это, вручную выполнив следующую команду после make sshd:

gcc -o sshd sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o auth-rh-rsa.o audit.o \
  audit-bsm.o audit-linux.o platform.o sshpty.o sshlogin.o servconf.o serverloop.o \
  auth.o auth1.o auth2.o auth-options.o session.o auth-chall.o auth2-chall.o \
  groupaccess.o auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \
  auth2-none.o auth2-passwd.o auth2-pubkey.o monitor_mm.o monitor.o monitor_wrap.o \
  kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o auth-krb5.o auth2-gss.o gss-serv.o \
  gss-serv-krb5.o loginrec.o auth-pam.o auth-shadow.o auth-sia.o md5crypt.o \
  sftp-server.o sftp-common.o roaming_common.o roaming_serv.o sandbox-null.o \
  sandbox-rlimit.o sandbox-systrace.o sandbox-darwin.o sandbox-seccomp-filter.o \
  sandbox-capsicum.o -L. -Lopenbsd-compat/  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack \
  -fstack-protector-strong  -lssh -lopenbsd-compat \
  /usr/lib/x86_64-linux-gnu/libcrypto.a -ldl -lutil -lz -lnsl  -lcrypt -lresolv

(это результат замены -lcrypto на полный путь к libcrypto.a и удаления флага -pie из команды компоновщика, сгенерированной make).

Затем запуск strip на sshd уменьшает его размер примерно до 2 МБ.

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

person salva    schedule 16.10.2014
comment
Спасибо сальва. Дело в том, что я хочу избежать всего, что связано с OpenSSL. Я изучаю оболочки GnuTLS и NSS, которые предоставляют API OpenSSL. Но они предоставляют только подмножество. Я должен проверить, достаточно ли этого для моих нужд или нет. - person lalebarde; 16.10.2014

Я определил три решения:

  1. Используйте NSS с Nss compat ossl, который предлагает 80%-совместимый API OpenSSL.
  2. Используйте GnuTLS с его Уровень совместимости с OpenSSL (покрытие не проверялось).
  3. Продолжайте использовать OpenSSL и перейдите на LibReSSL OpenBSD или BoringSSL, если он доступен. Первый уже доступен в OpenBSD, и они управляют проектом переноса на другие дистрибутивы nx, поэтому я предполагаю, что он будет доступен для Linux через несколько месяцев. Были выполнены огромные очистки и улучшения.
person lalebarde    schedule 17.10.2014
comment
Я знаю, что этот ответ устарел, но можете ли вы описать, какое решение вы выбрали в конце? Я столкнулся с тем же вопросом, и я хотел бы пойти с 2), но я просто не могу понять, как это сделать. - person flowit; 11.07.2016
comment
К сожалению, я переехал. Но, пожалуйста, напишите, когда у вас что-то работает. - person lalebarde; 25.07.2016