Открыть сервис

Протокол SSH-2

Протокол SSH-2 — это сетевой протокол прикладного уровня, предназначенный для удалённого управления операционными системами и туннелирования сетевых соединений, обеспечивающий шифрование передаваемых данных, аутентификацию сторон и целостность соединения. Является второй версией протокола Secure Shell (SSH), разработанной в 1995 году организацией IETF (Internet Engineering Task Force) и стандартизированной в 2006 году в документе RFC 4251. SSH-2 пришёл на смену протоколу SSH-1, который имел критические уязвимости в механизмах шифрования и аутентификации.

История создания

Разработка первой версии протокола SSH (SSH-1) была начата финским исследователем Тату Улёненом (Tatu Ylönen) в 1995 году в ответ на атаку сниффинга (перехвата паролей) в сети Университета Хельсинки. Первая реализация, SSH-1, быстро распространилась в академической среде, однако в 1996 году были обнаружены серьёзные уязвимости: в алгоритме шифрования использовался слабый CRC-32 для проверки целостности, что позволяло злоумышленникам внедрять вредоносные пакеты в поток данных.

В 1996 году Улёнен основал компанию SSH Communications Security и начал работу над SSH-2. Новая версия была полностью переработана: она отказалась от использования единого протокола, разделив функции на три независимых подпротокола (транспортный, аутентификации и соединения), внедрила строгую криптографическую проверку целостности (HMAC) и поддержку современных на тот момент алгоритмов шифрования (AES, 3DES, Blowfish). В 2006 году IETF опубликовала серию RFC (4250–4256), формализовав SSH-2 как интернет-стандарт.

К 2023 году SSH-1 считается устаревшим и небезопасным; практически все современные реализации (OpenSSH, PuTTY, Dropbear) поддерживают только SSH-2.

Архитектура протокола

SSH-2 построен на архитектуре «клиент-сервер» и состоит из трёх вложенных подпротоколов, работающих последовательно:

Транспортный протокол (SSH-TRANS)

Обеспечивает установление зашифрованного канала между клиентом и сервером. На этом этапе:

  • Стороны обмениваются версиями протокола (например, SSH-2.0-OpenSSH_8.9p1).
  • Происходит согласование алгоритмов шифрования, хеширования и сжатия.
  • Выполняется обмен ключами по алгоритму Диффи — Хеллмана (или его эллиптической версии ECDH) для создания общего сеансового ключа.
  • Сервер аутентифицируется перед клиентом с помощью цифровой подписи (на основе RSA, ECDSA или Ed25519).

После успешного завершения транспортного протокола все данные передаются в зашифрованном виде.

Протокол аутентификации пользователя (SSH-USERAUTH)

Работает поверх транспортного протокола. Клиент доказывает свою легитимность серверу. Поддерживаются следующие методы:

  • Парольная аутентификация — передача пароля в зашифрованном виде (устаревает из-за риска перебора).
  • Аутентификация по публичному ключу — клиент подписывает случайное сообщение своим закрытым ключом, сервер проверяет подпись открытым ключом (наиболее распространённый метод).
  • GSSAPI (Kerberos) — аутентификация через службы каталогов (например, Active Directory).
  • Keyboard-interactiveмногофакторная аутентификация (например, пароль + одноразовый код).

Протокол соединения (SSH-CONNECT)

После аутентификации этот протокол управляет сессиями: открывает каналы для выполнения команд, перенаправления портов (туннелирования) и передачи файлов (SFTP, SCP). Каждый канал (channel) имеет уникальный номер и может быть мультиплексирован в рамках одного SSH-соединения.

Ключевые криптографические механизмы

SSH-2 использует строгие криптографические примитивы, которые настраиваются при согласовании:

  • Шифрование симметричное: AES-256 (CTR или GCM), ChaCha20-Poly1305 (современные реализации OpenSSH).
  • Обмен ключами: Curve25519 (X25519), Diffie-Hellman group14, ECDH с P-256/P-384.
  • Хеширование и HMAC: SHA-2 (SHA-256, SHA-512), HMAC-SHA2-256.
  • Цифровые подписи: RSA (с длиной ключа не менее 2048 бит), ECDSA (P-256), Ed25519 (рекомендуется).

Все алгоритмы могут быть перечислены в порядке предпочтения в конфигурационных файлах (/etc/ssh/sshd_config на сервере, ~/.ssh/config на клиенте).

Применение

SSH-2 является стандартом де-факто для безопасного удалённого администрирования Unix-подобных систем (Linux, FreeBSD, macOS). В Windows протокол поддерживается через OpenSSH (встроен в Windows 10 версии 1809 и выше) или сторонние клиенты (PuTTY, KiTTY).

Основные сценарии использования:

  • Удалённая командная строка — выполнение команд на сервере (например, ssh user@host).
  • Туннелирование портов — проброс TCP-соединений через зашифрованный канал (локальный, удалённый, динамический). Используется для обхода межсетевых экранов и защиты незашифрованных протоколов (например, VNC, HTTP).
  • Передача файлов — протоколы SFTP (SSH File Transfer Protocol) и SCP (Secure Copy), работающие поверх SSH-2.
  • Git-операции — клонирование и отправка изменений в удалённые репозитории через SSH (например, git clone git@github.com:user/repo.git).
  • Автоматизация — запуск скриптов и задач на удалённых хостах без интерактивного ввода (с использованием ключей и ssh-agent).

Реализации

Наиболее распространённая реализация SSH-2 — OpenSSH (OpenBSD Secure Shell), разрабатываемая проектом OpenBSD. Она входит в состав большинства дистрибутивов Linux, macOS и Windows. OpenSSH поддерживает все функции протокола, включая туннелирование, SFTP, аутентификацию по ключам и сертификатам.

Другие реализации:

  • PuTTY (Simon Tatham) — клиент для Windows, не включает серверную часть.
  • Dropbear — лёгкая реализация для встраиваемых систем (роутеры, IoT).
  • libssh2 — библиотека для встраивания SSH-2 в сторонние приложения.
  • paramiko — реализация на Python для автоматизации.

Безопасность

SSH-2 считается криптографически стойким при правильной настройке. Основные угрозы:

  • Атака «человек посередине» (MITM) — возможна при первом подключении, если клиент не проверяет отпечаток (fingerprint) сервера. Для защиты используется механизм Trust On First Use (TOFU) или публикация отпечатков через DNS (SSHFP-записи).
  • Слабые алгоритмы — использование устаревших шифров (3DES, RC4) или хешей (MD5) снижает безопасность. Современные рекомендации (NIST, IETF) предписывают отключать алгоритмы слабее AES-128 и SHA-256.
  • Утечка закрытых ключей — ключи должны храниться с правами доступа 600 (владелец только чтение) и защищаться парольной фразой (passphrase).
  • Брутфорс аутентификации — автоматизированные попытки подбора паролей. Защита: отключение парольной аутентификации, использование только ключей, настройка fail2ban, ограничение числа попыток в sshd_config (MaxAuthTries).

В 2019 году в OpenSSH была обнаружена уязвимость CVE-2019-6111, связанная с обходом проверки пути при использовании SCP, что позволяло перезаписывать файлы на клиенте. Уязвимость была устранена в версии 8.0.

Сравнение с SSH-1

ПараметрSSH-1SSH-2
СтандартизацияОтсутствует (проприетарный)RFC 4251–4256 (IETF)
ШифрованиеIDEA, DES, 3DES (слабые)AES, ChaCha20, ECDH
Проверка целостностиCRC-32 (уязвим)HMAC-SHA2
АутентификацияТолько пароль или ключМножество методов (ключи, Kerberos, 2FA)
МультиплексированиеНетПоддержка множества каналов
Поддержка SFTPНетДа

Интересные факты

  • Протокол SSH-2 изначально разрабатывался как проприетарное решение компании SSH Communications Security, но под давлением сообщества в 1998 году был выпущен как открытый стандарт.
  • В 2009 году в OpenSSH была добавлена поддержка протокола SFTP версии 3, который заменил устаревший SCP.
  • Алгоритм Ed25519, используемый для цифровых подписей в SSH-2, был разработан Дэниелом Бернштейном в 2011 году и отличается высокой скоростью и устойчивостью к атакам по сторонним каналам.
  • В России протокол SSH-2 широко используется в государственных информационных системах, прошедших сертификацию ФСТЭК России (например, в ОС Astra Linux).

Источники

  • RFC 4251 — The Secure Shell (SSH) Protocol Architecture (2006)
  • RFC 4252 — The Secure Shell (SSH) Authentication Protocol
  • RFC 4253 — The Secure Shell (SSH) Transport Layer Protocol
  • OpenSSH Manual (ssh(1), sshd_config(5)) — OpenBSD Project
  • Ylönen, T. (1996). SSH — Secure Login Connections over the Internet. Proceedings of the 6th USENIX Security Symposium
  • NIST SP 800-131A Rev. 2 — Transitioning the Use of Cryptographic Algorithms (2019)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →