Как работает SSH: заглядываем внутрь протокола

Computerphile 909 тыс. 9 мин 3 мин 31.01.2019
Главное

Secure Shell, или SSH, — это фундаментальный протокол удаленного управления компьютерами, разработанный в 1995 году для защиты передачи данных в интернете. В этом материале мы разберем, как устроен этот протокол, почему он пришел на смену менее безопасным методам подключения и как именно он обеспечивает шифрование и мультиплексирование соединений.

🛡️ Зачем нужен SSH? 0:00

До середины 1990-х годов для удаленного доступа к машинам использовались протоколы Telnet, rlogin и rsh. Они были эффективны для работы внутри закрытых университетских или корпоративных сетей, где доступ к инфраструктуре имели только доверенные лица, например системные администраторы.

Однако по мере роста интернета эти протоколы стали небезопасными. Все передаваемые данные — включая пароли и команды — транслировались в открытом виде (in the clear). Любой пользователь, имеющий доступ к сети, через которую проходил трафик, мог воспользоваться «сниффером» пакетов и перехватить всю конфиденциальную информацию.

В 1995 году финский разработчик Тату Илонен (Tatu Ylönen) был обеспокоен этой уязвимостью и разработал протокол SSH. Его основная цель заключалась в шифровании данных, чтобы злоумышленник, даже перехватив поток, мог видеть лишь объем и частоту передаваемых пакетов, но не их содержимое.

📦 Внутренняя архитектура: структура пакетов 1:44

SSH работает поверх надежного сетевого соединения, обычно TCP, хотя протокол спроектирован так, что может функционировать через любые надежные транспортные каналы, такие как WebSockets или RS232.

Данные внутри SSH разбиваются на пакеты, имеющие строгую структуру. Каждый пакет включает:

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

[Image of network packet structure]

🔐 Шифрование и аутентификация 3:55

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

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

После успешного установления TCP-соединения и обмена версиями протокола происходит проверка совместимости и механизмов шифрования. Далее следует этап аутентификации пользователя (например, ввод пароля). Только после того как аутентификация подтверждена, система создает канал для интерактивной работы.

🌐 Мультиплексирование и туннелирование 5:02

SSH — это не просто способ запустить удаленный терминал. Поверх зашифрованного транспортного уровня протокол позволяет открывать серию «каналов». Эта возможность мультиплексирования позволяет передавать несколько соединений внутри одного SSH-туннеля.

Ключевые возможности, которые предоставляет такая архитектура:

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

💬 Цитаты

«Если вы логинитесь на удаленную машину, любой человек со сниффером пакетов между вами и машиной может видеть всё, что вы делаете.»

Автор видео 0:25

«SSH — это не просто способ подключения оболочки, это многослойная система, позволяющая делать много интересных вещей.»

Автор видео 7:13
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Packet Sniffer
Инструмент для перехвата и анализа сетевых пакетов, проходящих через интерфейс.
Payload
Полезная нагрузка пакета; та часть данных, которая является основной целью передачи.
Multiplexing
Способ передачи нескольких сигналов (потоков данных) по одному каналу связи.
TCP
Протокол управления передачей, обеспечивающий надежную доставку данных в сетях.
📊 Цифры
⚖️ Другая сторона
Технологии и IT Secure Shell TCP шифрование мультиплексирование