О SSH и OpenSSH
SSH (Secure Shell) — это протокол, который обеспечивает безопасную связь между двумя системами с использованием архитектуры клиент-сервер и позволяет пользователям удалённо входить в серверные хост-системы. В отличие от других протоколов удалённой связи, таких как FTP, Telnet или rlogin, SSH шифрует сеанс входа, делая соединение трудным для злоумышленников для сбора незашифрованных паролей.
|
Статус: работа в процессе. Содержимое этого раздела находится на рассмотрении и обновляется. Отзывы приветствуются! |
Программа ssh предназначена для замены более старых, менее безопасных терминальных приложений, используемых для входа на удалённые хосты, таких как telnet или rsh. Связанная программа под названием scp заменяет более старые программы, предназначенные для копирования файлов между хостами, такие как rcp. Поскольку эти более старые приложения не шифруют пароли, передаваемые между клиентом и сервером, избегайте их, когда это возможно. Использование безопасных методов входа в удалённые системы снижает риски как для клиентской системы, так и для удалённого хоста.
Fedora включает общий пакет OpenSSH, openssh, а также пакеты сервера OpenSSH openssh-server и клиента openssh-clients. Обратите внимание, что пакеты OpenSSH требуют пакета OpenSSL openssl-libs, который устанавливает несколько важных криптографических библиотек, позволяя OpenSSH обеспечивать шифрованную связь.
Зачем использовать SSH?
Потенциальные злоумышленники имеют в своём распоряжении множество инструментов, позволяющих им нарушать, перехватывать и перенаправлять сетевой трафик в попытке получить доступ к системе. В общих чертах эти угрозы можно классифицировать следующим образом:
- Перехват связи между двумя системами
-
Злоумышленник может находиться где-то в сети между взаимодействующими сторонами, копируя любую информацию, передаваемую между ними. Он может перехватить и сохранить информацию или изменить информацию и отправить её intended получателю.
Эта атака обычно выполняется с использованием сниффера пакетов — довольно распространённой сетевой утилиты, которая захватывает каждый пакет, проходящий через сеть, и анализирует его содержимое.
- Выдача себя за конкретный хост
-
Система злоумышленника настроена на то, чтобы выдавать себя за предполагаемого получателя передачи. Если эта стратегия сработает, система пользователя останется в неведении о том, что она взаимодействует с неправильным хостом.
Эта атака может быть выполнена с использованием техники, известной как отравление DNS, или через так называемый спуфинг IP. В первом случае злоумышленник использует взломанный DNS-сервер, чтобы направить клиентские системы на вредоносно дублированный хост. Во втором случае злоумышленник отправляет фальсифицированные сетевые пакеты, которые выглядят как исходящие от доверенного хоста.
Обе техники перехватывают потенциально конфиденциальную информацию, и, если перехват совершается по враждебным причинам, результаты могут быть катастрофическими. Если SSH используется для удалённого входа в оболочку и копирования файлов, эти угрозы безопасности могут быть значительно уменьшены. Это потому, что клиент и сервер SSH используют цифровые подписи для проверки своей идентичности. Кроме того, вся связь между клиентской и серверной системами шифруется. Попытки подделать идентичность любой из сторон связи не работают, поскольку каждый пакет шифруется с использованием ключа, известного только локальной и удалённой системам.
Основные возможности
Протокол SSH обеспечивает следующие гарантии:
- Никто не может выдать себя за предполагаемый сервер
-
После первоначального подключения клиент может проверить, что он подключается к тому же серверу, к которому подключался ранее.
- Никто не может перехватить информацию аутентификации
-
Клиент передаёт свою информацию аутентификации на сервер с использованием сильного шифрования.
- Никто не может перехватить связь
-
Все данные, отправленные и полученные во время сеанса, передаются с использованием сильного шифрования, что делает перехваченные передачи чрезвычайно трудными для расшифровки и чтения.
Кроме того, он также предлагает следующие возможности:
- Он предоставляет безопасные средства для использования графических приложений по сети
-
Используя технику, называемую перенаправлением X11, клиент может перенаправлять приложения X11 (X Window System) с сервера. Обратите внимание, что если вы установите опцию
ForwardX11Trustedвyesили используете SSH с опцией-Y, вы обходите элементы управления расширения X11 SECURITY, что может привести к угрозе безопасности. - Он предоставляет способ защитить иначе незащищённые протоколы
-
Протокол SSH шифрует всё, что он отправляет и получает. Используя технику, называемую перенаправлением портов, сервер SSH может стать каналом для защиты иначе незащищённых протоколов, таких как POP, и повышения общей безопасности системы и данных.
- Его можно использовать для создания защищённого канала
-
Сервер и клиент OpenSSH можно настроить для создания туннеля, подобного виртуальной частной сети, для трафика между серверными и клиентскими машинами.
- Он поддерживает аутентификацию Kerberos
-
Серверы и клиенты OpenSSH можно настроить для аутентификации с использованием реализации GSSAPI (Generic Security Services Application Program Interface) протокола сетевой аутентификации Kerberos.
Версии протокола
В настоящее время существуют две разновидности SSH: версия 1 и версия 2. Набор OpenSSH в Fedora использует SSH версии 2, которая имеет улучшенный алгоритм обмена ключами, не подверженный известной уязвимости в версии 1. Версия протокола 1 была удалена из набора OpenSSH и больше не поддерживается.
Последовательность событий SSH-соединения
Следующая последовательность событий помогает защитить целостность связи SSH между двумя хостами.
-
Выполняется криптографическое рукопожатие, чтобы клиент мог проверить, что он взаимодействует с правильным сервером.
-
Транспортный уровень соединения между клиентом и удалённым хостом шифруется с использованием симметричного шифра.
-
Клиент аутентифицирует себя на сервере.
-
Клиент взаимодействует с удалённым хостом через шифрованное соединение.
Транспортный уровень
Основная роль транспортного уровня — обеспечивать безопасную и защищённую связь между двумя хостами во время аутентификации и во время последующей связи. Транспортный уровень выполняет это путём обработки шифрования и дешифрования данных, а также обеспечения защиты целостности пакетов данных при их отправке и получении. Транспортный уровень также обеспечивает сжатие, ускоряя передачу информации.
Как только клиент SSH связывается с сервером, происходит обмен ключевой информацией, чтобы две системы могли правильно построить транспортный уровень. Во время этого обмена происходят следующие шаги:
-
Определяется алгоритм обмена ключами
-
Определяется алгоритм подписи открытым ключом
-
Определяется алгоритм симметричного шифрования
-
Определяется алгоритм аутентификации сообщений
-
Выполняется обмен ключами
Во время обмена ключами сервер идентифицирует себя клиенту с помощью уникального ключа хоста. Если клиент никогда ранее не взаимодействовал с этим конкретным сервером, ключ хоста сервера неизвестен клиенту, и он не подключается. OpenSSH уведомляет пользователя о том, что подлинность хоста не может быть установлена, и предлагает пользователю принять или отклонить её. Ожидается, что пользователь независимо проверит новый ключ хоста, прежде чем принять его. При последующих подключениях ключ хоста сервера проверяется по сохранённой версии на клиенте, обеспечивая уверенность в том, что клиент действительно взаимодействует с предполагаемым сервером. Если в будущем ключ хоста больше не совпадает, пользователь должен удалить сохранённую версию на клиенте, прежде чем подключение сможет произойти.
|
Всегда проверяйте целостность нового SSH-сервера
Возможно, что злоумышленник выдаст себя за SSH-сервер во время первоначального контакта, поскольку локальная система не знает разницы между предполагаемым сервером и ложным, настроенным злоумышленником. Чтобы помочь предотвратить это, проверьте целостность нового SSH-сервера, связавшись с администратором сервера перед первым подключением или в случае несовпадения ключа хоста. |
SSH разработан для работы практически с любым типом алгоритма открытого ключа или формата кодирования. После того как первоначальный обмен ключами создаёт хеш-значение, используемое для обменов, и общее секретное значение, две системы немедленно начинают вычислять новые ключи и алгоритмы для защиты аутентификации и будущих данных, отправляемых по соединению.
После передачи определённого объёма данных с использованием данного ключа и алгоритма (точное количество зависит от реализации SSH, алгоритма шифрования и конфигурации) происходит ещё один обмен ключами, генерирующий ещё один набор хеш-значений и новое общее секретное значение. Даже если злоумышленник сможет определить хеш и общее секретное значение, эта информация полезна только в течение ограниченного периода времени.
Аутентификация
Как только транспортный уровень построил защищённый туннель для передачи информации между двумя системами, сервер сообщает клиенту о различных поддерживаемых методах аутентификации, таких как использование подписи, закодированной закрытым ключом, или ввод пароля. Затем клиент пытается аутентифицировать себя на сервере, используя один из этих поддерживаемых методов.
Серверы и клиенты SSH можно настроить на разрешение различных типов аутентификации, что даёт каждой стороне оптимальный уровень контроля. Сервер может решить, какие методы шифрования он поддерживает, исходя из своей модели безопасности, а клиент может выбрать порядок методов аутентификации для попытки из доступных опций.
Каналы
После успешной аутентификации через транспортный уровень SSH открывается несколько каналов с помощью техники, называемой мультиплексированием[1]. Каждый из этих каналов обрабатывает связь для разных терминальных сеансов и для перенаправленных сеансов X11.
Как клиенты, так и серверы могут создавать новый канал. Каждому каналу затем присваивается разный номер на каждом конце соединения. Когда клиент пытается открыть новый канал, клиент отправляет номер канала вместе с запросом. Эта информация сохраняется сервером и используется для направления связи в этот канал. Это делается для того, чтобы разные типы сеансов не влияли друг на друга и чтобы при завершении данного сеанса его канал можно было закрыть, не нарушая основное SSH-соединение.
Каналы также поддерживают управление потоком, что позволяет им отправлять и получать данные упорядоченным образом. Таким образом, данные не отправляются по каналу до тех пор, пока клиент не получит сообщение о том, что канал открыт.
Клиент и сервер автоматически согласовывают характеристики каждого канала в зависимости от типа службы, запрашиваемой клиентом, и способа подключения пользователя к сети. Это обеспечивает большую гибкость в обработке различных типов удалённых подключений без необходимости изменять базовую инфраструктуру протокола.
Дополнительные ресурсы
Для получения дополнительной информации о протоколе SSH см. ресурсы, перечисленные ниже.
-
Домашняя страница OpenSSH — Домашняя страница OpenSSH, содержащая дополнительную документацию, часто задаваемые вопросы, ссылки на списки рассылки, отчёты об ошибках и другие полезные ресурсы.
-
Домашняя страница OpenSSL — Домашняя страница OpenSSL, содержащая дополнительную документацию, часто задаваемые вопросы, ссылки на списки рассылки и другие полезные ресурсы.
Want to help? Learn how to contribute to Fedora Docs ›