- PVSM.RU - https://www.pvsm.ru -
Формально протокол SSH определён в ряде стандартов RFC (список ниже [3]). В то же время есть много реализаций этого протокола. OpenSSH — самая популярная из них, хотя не единственная [4]. Например, вот альтернативная реализация SSH на Go [5] (и несколько [6] примеров [7] кастомных [8] серверов [9] на её основе). По статистике Shodan [2], вторым по популярности демоном SSH является Dropbear SSH [10] (рис. 1). Все остальные далеко позади, если судить по количеству адресов на порту 22.
На практике спецификации OpenSSH [11] содержат в себе все стандарты RFC для SSH, включая черновики, а также немножко сверх этого.
Сейчас развитие протокола SSH управляется в основном разработчиками OpenSSH. То есть новые функции сначала появляются в OpenSSH, а потом разработчики других реализаций SSH решают, будут они их поддерживать или нет. Здравый смысл подсказывает согласиться ради взаимной совместимости. Таким образом, к настоящему моменту OpenSSH по сути стал синонимом SSH. Тем более что другие реализации SSH далеко не так популярны. Хотя, например, тот же Github использует у себя не OpenSSH, а другую систему.
По мнению некоторых экспертов [12], «OpenSSH как реализация представляет собой монолит, ориентированный на конкретный случай использования — общий доступ к одной компьютерной системе. Если у вас другой вариант использования (как у Github, например), то другие реализации могут показаться удобнее, чем попытки (безопасно) подстроить OpenSSH под свои нужды. Так что эти реализации всё равно имеют значение, даже если разработчики OpenSSH — единственные, кто действительно развивает протокол».
Такое противостояние «протокол — реализация» довольно часто встречается в компьютерной индустрии. Долгое время BIND [13] считался чуть ли не синонимом DNS, вплоть до того, что в официальных документах RFC цитируются спецификации из BIND или других реализаций протокола. Например, RFC 1035 [14] описывает синтаксис зональных файлов, который позаимствован из BIND или JEEVES:
The following is an example file which might be used to define the ISI.EDU zone and is loaded with an origin of ISI.EDU: @ IN SOA VENERA Action.domains ( 20 ; SERIAL 7200 ; REFRESH 600 ; RETRY 3600000; EXPIRE 60) ; MINIMUM NS A.ISI.EDU. NS VENERA NS VAXA MX 10 VENERA MX 20 VAXA A A 26.3.0.103 VENERA A 10.1.0.52 A 128.9.0.32 VAXA A 10.2.0.27 A 128.9.0.33
То есть сначала какой-то софт реализует этот синтаксис, а потом комитет по стандартизации его принимает как всеобщий стандарт.
Некоторые считают, что зональные файлы должны оставаться деталями реализации, а не быть описаны в стандарте. Например, такого мнения придерживался Даниэль Бернштейн [15] (Daniel Bernstein), автор альтернативной реализации djbdns [16], за что его в итоге исключили из списка рассылки IETF DNS [17] и из соответствующего комитета IETF по стандартизации.
Как видим, противоречия протокола и его реализаций могут приводить к настоящим конфликтам между людьми.
Аналогично тому, что OpenSSH — лишь отдельная реализация стандарта, также и сертификаты OpenSSH (и сертификаты SSH) не являются традиционными сертификатами TLS X.509 [18].
OpenSSH изначально развивался перпендикулярно системе SSL/TLS, не поддерживая стандартную систему PKI с центрами сертификации и их цепочкой доверия. Здесь собственные ключи, сертификаты и т. д. В каком-то смысле SSH-сертификаты можно сравнить с самоподписанными сертификатами HTTPS.
С другой стороны, поверх OpenSSH всё-таки реализуется поддержка сертификатов и центров сертификации [19], а также поддержка FIDO2 (в OpenSSH 8.2+), TOTP [20], LDAP, Kerberos с PAM и других систем аутентификации.
Протоколы SSH-2 описаны в пяти основных документах:
Дополнительно к основным протоколам SSH принято несколько расширений и стандартов [26], которые играют роль вспомогательных механизмов для SSH:
keyboard-interactive
для аутентификации пользователя в «интерактивном режиме», то есть с клавиатуры. В рамках сессии допускает любое количество запросов сервера и ответов клиента. Позволяет использовать схемы «вызов-ответ», такие как одноразовые пароли, и часто реализуется в Unix с помощью PAM [30].
Ещё несколько технологий пока находятся на стадии рассмотрения (черновики и предложения):
authorized_keys
, authorization
, authorized_keys2
, различные форматы хранения ключей и т. д.).Если одна конкретная реализация протокола становится настолько популярной, что фактически выполняет роль стандарта, то альтернативными реализациями уже никто не хочет пользоваться. По мнению Даниэля Бернштейна и некоторых представителей сообщества разработчиков протокола DNS, это неправильно. Другие же считают, что Даниэль сам вёл себя контрпродуктивно [44], а свою реализацию DNS написал в знак протеста и из чувства справедливости. Хотя это не умаляет его заслуги как выдающегося математика и криптографа, автора нескольких шифров и алгоритмов [45], в том числе Ed25519, Poly1305, Salsa20 и ChaCha20, которые в том или ином виде реализованы в ядре Linux, iOS, OpenSSH, Tor и других приложениях.
В целом, ситуация с SSH/OpenSSH как стандарта/реализации чем-то напоминает ту историю с BIND/DNS. Есть одна популярная реализация (программа), разработчики которой ведут за собой всех остальных и занимают ключевые позиции в комитете по стандартизации IETF, хотя он формально должен быть независимым органом. Но что делать… Возможно, в существующих условиях это наиболее продуктивная модель разработки SSH как открытого стандарта, такова жизнь.
Автор:
ru_vds
Источник [46]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/386380
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/751756/
[2] Shodan: https://www.shodan.io/search/facet?query=port%3A22&facet=product
[3] ниже: #1
[4] не единственная: https://drewdevault.com/2019/09/02/Interactive-SSH-programs.html
[5] реализация SSH на Go: https://pkg.go.dev/golang.org/x/crypto/ssh
[6] несколько: https://github.com/shazow/ssh-chat
[7] примеров: https://github.com/zachlatta/sshtron
[8] кастомных: https://github.com/quackduck/devzat
[9] серверов: https://github.com/donuts-are-good/shhhbb/
[10] Dropbear SSH: https://matt.ucc.asn.au/dropbear/dropbear.html
[11] спецификации OpenSSH: https://www.openssh.com/specs.html
[12] мнению некоторых экспертов: https://utcc.utoronto.ca/~cks/space/blog/tech/OpenSSHVersusSSH
[13] BIND: https://www.isc.org/bind/
[14] RFC 1035: https://datatracker.ietf.org/doc/html/rfc1035
[15] Даниэль Бернштейн: https://en.wikipedia.org/wiki/Daniel_J._Bernstein
[16] djbdns: https://cr.yp.to/djbdns.html
[17] списка рассылки IETF DNS: https://www.ietf.org/mailman/listinfo/dns-dir
[18] не являются традиционными сертификатами TLS X.509: https://utcc.utoronto.ca/~cks/space/blog/tech/OpenSSHCertificatesNotX509
[19] поддержка сертификатов и центров сертификации: https://dev.to/gvelrajan/how-to-configure-and-setup-ssh-certificates-for-ssh-authentication-b52
[20] TOTP: https://en.wikipedia.org/wiki/Time-based_one-time_password
[21] Соединение (RFC 4254): https://datatracker.ietf.org/doc/rfc4254/
[22] Архитектура SSH (RFC 4251): https://datatracker.ietf.org/doc/rfc4251/
[23] Транспорт (RFC 4253): https://datatracker.ietf.org/doc/rfc4253/
[24] Аутентификация (RFC 4252): https://datatracker.ietf.org/doc/rfc4252/
[25] Назначенные номера (RFC 4250): https://datatracker.ietf.org/doc/rfc4250/
[26] несколько расширений и стандартов: http://www.snailbook.com/protocols.html
[27] Использование DNS для безопасной публикации отпечатков ключей SSH (RFC 4255): https://datatracker.ietf.org/doc/rfc4255/
[28] RFC 6594: https://datatracker.ietf.org/doc/rfc6594/
[29] Общая аутентификация обмена сообщениями для SSH (RFC 4256): https://datatracker.ietf.org/doc/rfc4256/
[30] PAM: http://en.wikipedia.org/wiki/Pluggable_authentication_module
[31] Режимы шифрования на транспортном уровне (RFC 4344): https://datatracker.ietf.org/doc/rfc4344/
[32] уязвимости протокола: https://dl.acm.org/doi/10.1145/996943.996945
[33] Групповой обмен ключами Диффи — Хеллмана (RFC 4419): https://datatracker.ietf.org/doc/rfc4419/
[34] Обмен ключами RSA для протокола транспортного уровня Secure Shell (SSH) (RFC 4432): https://datatracker.ietf.org/doc/rfc4432/
[35] Аутентификация и обмен ключами GSSAPI для SSH (RFC 4462): https://datatracker.ietf.org/doc/rfc4462/
[36] Формат файла открытого ключа SSH (RFC 4716): https://datatracker.ietf.org/doc/rfc4716/
[37] Интеграция алгоритма на эллиптических кривых в транспортный уровень SSH (RFC 5656): https://datatracker.ietf.org/doc/rfc5656/
[38] Криптографические наборы Suite B для SSH (RFC 6239): https://datatracker.ietf.org/doc/rfc6239/
[39] Suite B: http://www.nsa.gov/ia/programs/suiteb_cryptography/
[40] Проверка целостности данных SHA-2 для протокола транспортного уровня SSH (RFC 6668): https://datatracker.ietf.org/doc/rfc6668/
[41] Протокол передачи файлов SSH: http://www.snailbook.com/docs/sftp.txt
[42] Аутентификация X.509 в SSH2: http://tools.ietf.org/html/draft-ietf-secsh-x509-03
[43] Канал открытого ключа SSH: http://www.snailbook.com/docs/publickey-channel.txt
[44] вёл себя контрпродуктивно: https://cr.yp.to/djbdns/namedroppers.html
[45] нескольких шифров и алгоритмов: https://en.wikipedia.org/wiki/Daniel_J._Bernstein#Cryptography
[46] Источник: https://habr.com/ru/companies/ruvds/articles/751756/?utm_source=habrahabr&utm_medium=rss&utm_campaign=751756
Нажмите здесь для печати.