Please enable JavaScript.
Coggle requires JavaScript to display documents.
SSH (Secure Shell) - При SSH-соединении трафик шифруется и сжимается, что…
SSH (Secure Shell) - При SSH-соединении трафик шифруется и сжимается, что дает небольшой прирост скорости работы
Распространены две реализации SSH: собственническая коммерческая и бесплатная свободная (OpenSSH).
Протокол SSH-2 в отличие от протокола telnet устойчив к атакам прослушивания трафика («снифинг»), но неустойчив к атакам «man-in-themiddle». Протокол SSH-2 также устойчив к атакам путём присоединения посредине (англ. session hijacking) - невозможно включиться в или перехватить уже установленную сессию. Рекомендуется тщательно проверять показываемый клиентским ПО "слепок ключа" (key fingerprint) со слепком ключа сервера, желательно полученным по надёжным каналам связи или лично.
Структура SSH
- Протокол транспортного уровня, The transport Layer Protocol – [SSHTRANS].
Обеспечивает аутентификацию сервера, конфиденциальность и целостность передаваемой по сети информации. Так же поддерживается функция сжатия данных. Протокол транспортного уровня работает поверх соединения ТСР (порт SSH - 22-ой порт протокола TCP).
- При установке сервера, генерируется пара ключей (открытый и закрытый) для асимметричного шифрования RSA (для SSH1 и SSH2) и DSA (только для SSH2). Эта пара называется Host Key (HK), хранится на сервере постоянно, и
используется для всех соединений. Хранятся данные ключи на сервере в каталоге /etc/ssh .
- Также для каждого сеанса с клиентом сервер генерирует асимметричный ключ процесса сервера, Server process key pair (SK) – пара ключей, используемая только для каждого конкретного сеанса.
Схема установки соединения SSH2:
- Обмен информацией о версиях
- Клиент инициирует процесс обмена ключами – Keys exchange, KEX.
- обмен открытыми ключами с помощью алгоритма Diffie-Hellman
- проверка клиентом открытого ключа сервера по локальному файлу ssh_known_host
- Завершение
обмена ключами для симметричного шифрования клиент заканчивает процедуру обмена ключами, посылкой сообщения SSH_MSG_NEWKEYS
- Протокол аутентификации, The User Authentication Protocol – [SSHUSERAUTH]. С целью повышения безопасности происходит аутентификация клиентской стороны для сервера. Протокол аутентификации работает поверх протокола транспортного уровня.
- Аутентификацией клиента управляет сервер, посылая клиенту сообщение, что аутентификация может продолжаться. Методы аутентификации идентифицируются по имени.
- Клиент имеет локальный файл, определяющий соответствие имени сервера и его открытого ключа.
Методы аутентификации клиента:
- По адресу клиента - Каждый клиент и сервер имеют свои пары ключей RSA, которые называются ключи хоста.
- Аутентификация пользователя по его публичному ключу - Аутентификация удалённого пользователя по ключу идентична проверке ключа хоста (с посылкой рандомной строки) за тем исключением, что проверяется не адрес клиентской машины, а ключ клиента и имя пользователя.
- Обычная парольная аутентификация - В обоих версиях протокола в любом случае вначале идёт обмен
асимметрическими ключами, и хэш пароля передаётся в зашифрованном виде
- Протокол соединения, The Connection Protocol – [SSH-CONNECT]. Позволяет разделить шифрованный канал связи уровня ТСР/IР на несколько логических каналов. Он обеспечивает интерактивные входные сессии, удалённое выполнение команд, перенаправление ТСР/IP-соединений и перенаправление Х11-соединений. Все эти каналы мультиплексируются в единственный зашифрованный туннель.
Каналы являются потокоуправляемыми. Никакие данные не могут быть посланы по каналу до тех пор, пока полученное сообщение не укажет, что пространство окна доступно. Пространство окна определяет количество данных, которое можно передать по каналу в данный момент времени.
Также на данном уровне существует понятие интерактивной сессии. Сессией является удалённое выполнение программы.
Агент аутентификации
ssh-agent - держатель приватных ключей для RSA/DSA аутентификации. Запускается в начале сессии и устанавливает переменные окружения (SSH_AGENT_PID, SSH_AUTH_SOCK), с помощью которых остальные программы используют его для автоматической аутентификации ssh.
В директории /tmp создаётся unix сокет для общения других программ из пакета ssh с ssh-agent (его имя записывается в SSH_AUTH_SOCK).
Приватные ключи добавляются программой ssh-add, которая запрашивает парольную фразу, расшифровывает приватный ключ и посылает его ssh-agent.
Парольная фраза запрашивается только один раз за сеанс, а не при каждом вызове ssh/scp/sftp.
ssh-agent не передаёт приватный ключ своему клиенту, а выполняет необходимые действия от его имени.
ssh-keygen - Генерация, преобразование и управление ключами. По умолчанию генерирует RSA ключ (ключ -t позволяет задать тип ключа).
KnownHosts
Описываемый способ повышения безопасности SSH (KnownHosts) является
спорным. При подключении к очередному новому SSH-серверу вам на экран выдаётся приглашение с информацией об открытом ключе сервера. Вы должны знать отпечатки ключей (key fingerprint) — записать их или сохранить на каком-то носителе, который всегда с вами.
Рекомендации
- Запрещение удаленного root-доступа.
- Запрещение подключения с пустым паролем или отключение входа по паролю.
- Выбор нестандартного порта для SSH-сервера.
- Использование длинных SSH2 RSA-ключей (2048 бит и более) и нестандартной длины. По состоянию на 2006 год система шифрования на основе RSA считалась надёжной, если длина ключа не менее 1024 бит.
- Ограничение списка IP-адресов, с которых разрешён доступ. Например,настройкой файервола или самим ssh сервером ("from" в .authorized_keys или AllowUsers root@192.168.1.32 в конфиге сервера)
- Запрещение доступа с некоторых, потенциально опасных адресов.
- Отказ от использования распространённых или широко известных системных логинов для доступа по SSH.
- Регулярный просмотр сообщений об ошибках аутентификации.
- Ограничение списка команд для выполнения по ssh. ("command=" в .authorized_keys, PermitRootLogin forced-commands-only в конфиге сервера)
- Использование при конфигурации сервера параметров AllowUsers, AllowGroups, DenyUsers, DenyUsers для конкретного указания кто имеет право подключаться по SSH
- Для снижения нагрузки на сервер и повышения безопасности использовать такие параметры таймаутов и проверок, как ConnectTimeout, ClientAliveInterval, ClientAlive, CountMax, LoginGraceTime, MaxAuthTries, MaxStartups, StrictModes
-
- Использование для быстрого запрета входа по SSH файла /etc/nologin - при наличии этого файла запрещается вход пользователей, кроме root. Содержимое файла выдается в качестве сообщения о причине.