Протокол 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-1 | SSH-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 →