stringtranslate.com

Безопасная оболочка

Протокол Secure Shell ( SSH ) — это криптографический сетевой протокол для безопасной работы сетевых служб в незащищенной сети. [1] Наиболее известными приложениями являются удаленный вход в систему и выполнение из командной строки .

SSH был разработан для Unix-подобных операционных систем в качестве замены Telnet и незащищенных протоколов удаленной оболочки Unix , таких как Berkeley Remote Shell (rsh) и связанных с ним протоколов rlogin и rexec , которые используют небезопасные методы аутентификации в виде открытого текста . как пароли .

Поскольку такие механизмы, как Telnet и Remote Shell , предназначены для доступа к удаленным компьютерам и управления ими, отправка токенов аутентификации (например, имени пользователя и пароля ) для этого доступа к этим компьютерам через общедоступную сеть незащищенным способом создает большой риск того, что третьи лица получат доступ к удаленным компьютерам. пароль и достижение того же уровня доступа к удаленной системе, что и пользователь telnet. Secure Shell снижает этот риск за счет использования механизмов шифрования, которые предназначены для сокрытия содержимого передачи от наблюдателя, даже если наблюдатель имеет доступ ко всему потоку данных. [2]

SSH был впервые разработан в 1995 году финским ученым-компьютерщиком Тату Юлёненом. Последующая разработка набора протоколов продолжалась в нескольких группах разработчиков, создав несколько вариантов реализации. В спецификации протокола различаются две основные версии, называемые SSH-1 и SSH-2. Наиболее часто реализуемым программным стеком является OpenSSH , выпущенный в 1999 году разработчиками OpenBSD как программное обеспечение с открытым исходным кодом . Реализации распространяются для всех типов общеупотребительных операционных систем, включая встроенные системы.

Приложения SSH основаны на архитектуре клиент-сервер , соединяющей экземпляр клиента SSH с сервером SSH . [3] SSH работает как многоуровневый набор протоколов, включающий три основных иерархических компонента: транспортный уровень обеспечивает аутентификацию сервера, конфиденциальность и целостность; протокол аутентификации пользователя проверяет пользователя на сервере; и протокол соединения мультиплексирует зашифрованный туннель в несколько логических каналов связи. [1]

Определение

SSH использует криптографию с открытым ключом для аутентификации удаленного компьютера и позволяет ему аутентифицировать пользователя, если это необходимо. [3]

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

Когда пара открытого и закрытого ключей создается пользователем вручную, аутентификация по существу выполняется при создании пары ключей, а затем сеанс может быть открыт автоматически без запроса пароля. В этом сценарии открытый ключ размещается на всех компьютерах, которые должны предоставлять доступ владельцу соответствующего закрытого ключа, который владелец сохраняет в тайне. Хотя аутентификация основана на закрытом ключе, ключ никогда не передается по сети во время аутентификации. SSH только проверяет, что тот же человек, предлагающий открытый ключ, также владеет соответствующим секретным ключом.

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

Аутентификация: управление ключами OpenSSH.

В Unix-подобных системах список авторизованных открытых ключей обычно хранится в домашнем каталоге пользователя, которому разрешен удаленный вход в систему, в файле ~/.ssh/authorized_keys. [4] Этот файл учитывается SSH только в том случае, если он не доступен для записи никому, кроме владельца и пользователя root. Когда открытый ключ присутствует на удаленном конце, а соответствующий закрытый ключ присутствует на локальном конце, ввод пароля больше не требуется. Однако для дополнительной безопасности сам закрытый ключ можно заблокировать с помощью парольной фразы.

Закрытый ключ также можно искать в стандартных местах, а его полный путь можно указать в качестве параметра командной строки (опция -iдля ssh). Утилита ssh-keygen создает открытый и закрытый ключи, всегда парами.

SSH также поддерживает аутентификацию на основе пароля, которая зашифрована автоматически сгенерированными ключами. В этом случае злоумышленник может имитировать законную сторону сервера, запросить пароль и получить его ( атака «человек посередине» ). Однако это возможно только в том случае, если обе стороны никогда раньше не аутентифицировались, поскольку SSH запоминает ключ, который ранее использовала серверная сторона. Клиент SSH выдает предупреждение перед принятием ключа нового, ранее неизвестного сервера. Аутентификация по паролю может быть отключена на стороне сервера.

Использовать

SSH обычно используется для входа на удаленный компьютер и выполнения команд, но он также поддерживает туннелирование , переадресацию TCP-портов и соединений X11 ; он может передавать файлы, используя соответствующие протоколы передачи файлов SSH (SFTP) или защищенного копирования (SCP). [3] SSH использует модель клиент-сервер .

Клиентская программа SSH обычно используется для установления соединений с демоном SSH , например sshd, принимая удаленные соединения. Оба обычно присутствуют в большинстве современных операционных систем , включая macOS , большинстве дистрибутивов Linux , OpenBSD , FreeBSD , NetBSD , Solaris и OpenVMS . Примечательно, что версии Windows до Windows 10 версии 1709 по умолчанию не включают SSH, но проприетарные , бесплатные и открытые версии различных уровней сложности и полноты существовали и существуют (см. Сравнение_SSH_клиентов ). В 2018 году Microsoft начала портировать исходный код OpenSSH в Windows [5] , а в Windows 10 версии 1709 теперь доступен официальный порт OpenSSH для Win32. Файловые менеджеры для UNIX-подобных систем (например, Konqueror ) могут использовать протокол FISH для предоставления графического интерфейса с разделенной панелью и возможностью перетаскивания. Программа Windows с открытым исходным кодом WinSCP [6] обеспечивает аналогичные возможности управления файлами (синхронизация, копирование, удаленное удаление), используя PuTTY в качестве серверной части. И WinSCP [7] , и PuTTY [8] доступны в пакете для запуска непосредственно с USB-накопителя, без необходимости установки на клиентский компьютер. Расширение защищенной оболочки браузера Chrome также позволяет подключаться по SSH без установки программного обеспечения и даже позволяет использовать SSH с компьютера Chromebook . Настройка SSH-сервера в Windows обычно включает в себя включение функции в приложении «Настройки».

SSH важен в облачных вычислениях для решения проблем с подключением, избегая проблем безопасности, связанных с размещением облачной виртуальной машины непосредственно в Интернете. Туннель SSH может обеспечить безопасный путь через Интернет через брандмауэр к виртуальной машине. [9]

IANA назначила для этого протокола TCP- порт 22, UDP -порт 22 и SCTP - порт 22. [10] Еще в 2001 году IANA включила стандартный TCP-порт 22 для SSH-серверов в число широко известных портов. [11] SSH также можно запускать с использованием SCTP , а не TCP в качестве протокола транспортного уровня, ориентированного на соединение. [12]

Историческое развитие

Версия 1

В 1995 году Тату Юленен , исследователь из Хельсинкского технологического университета в Финляндии, разработал первую версию протокола (теперь называемого SSH-1 ), вызванную атакой с перехватом пароля в его университетской сети . [13] Целью SSH была замена более ранних протоколов rlogin , TELNET , FTP [14] и rsh , которые не обеспечивали надежную аутентификацию и не гарантировали конфиденциальность. Он выбрал порт номер 22, потому что он находится между telnet(портом 23) и ftp(портом 21). [15]

Юленен выпустил свою реализацию как бесплатное ПО в июле 1995 года, и инструмент быстро завоевал популярность. К концу 1995 года база пользователей SSH выросла до 20 000 пользователей в пятидесяти странах. [ нужна цитата ]

В декабре 1995 года Юленен основал SSH Communications Security для продвижения и развития SSH. Первоначальная версия программного обеспечения SSH использовала различные части свободного программного обеспечения , такие как GNU libgmp , но более поздние версии, выпущенные SSH Communications Security, превратились во все более несвободное программное обеспечение .

Было подсчитано, что к 2000 году число пользователей выросло до 2 миллионов. [16]

Версия 2

«Secsh» было официальным названием рабочей группы IETF, ответственной за версию 2 протокола SSH, от IETF. [17] В 2006 году пересмотренная версия протокола SSH-2 была принята в качестве стандарта. Эта версия несовместима с SSH-1. SSH-2 отличается улучшенной безопасностью и функциональностью по сравнению с SSH-1. Например, лучшая безопасность достигается за счет обмена ключами Диффи-Хеллмана и строгой проверки целостности с помощью кодов аутентификации сообщений . Новые функции SSH-2 включают возможность запуска любого количества сеансов оболочки через одно соединение SSH. [18] Из-за превосходства и популярности SSH-2 над SSH-1, некоторые реализации, такие как libssh (v0.8.0+), [19] Lsh [20] и Dropbear [21], поддерживают только протокол SSH-2.

Версия 1.99

В январе 2006 года, намного позже появления версии 2.1, в RFC  4253 было указано, что SSH-сервер, поддерживающий 2.0, а также предыдущие версии, должен идентифицировать версию своего протокола как 1.99. [22] Этот номер версии не отражает историческую версию программного обеспечения, а является методом определения обратной совместимости .

ОпенСШ и ОСШ

В 1999 году разработчики, желая получить бесплатную версию программного обеспечения, возобновили разработку программного обеспечения с версии 1.2.12 оригинальной программы SSH, которая была последней выпущенной под лицензией с открытым исходным кодом . [23] Это послужило базой кода для программного обеспечения OSSH Бьорна Грёнвалля. [24] Вскоре после этого разработчики OpenBSD разделили код Грёнвалля и создали OpenSSH , который поставлялся с версией 2.6 OpenBSD. Из этой версии была сформирована ветка «переносимости» для переноса OpenSSH на другие операционные системы. [25]

По состоянию на 2005 год OpenSSH был единственной наиболее популярной реализацией SSH, являясь версией по умолчанию во многих дистрибутивах операционных систем. ОСШ тем временем устарела. [26] OpenSSH продолжает поддерживаться и поддерживает протокол SSH-2, однако поддержка SSH-1 была исключена из кодовой базы в версии OpenSSH 7.6.

Использование

Пример туннелирования приложения X11 через SSH: пользователь «josh» подключился по SSH с локального компьютера «foofighter» на удаленный компьютер «tengwar» для запуска xeyes .
Вход в OpenWrt через SSH с использованием PuTTY , работающего в Windows .

SSH — это протокол, который можно использовать для многих приложений на многих платформах, включая большинство вариантов Unix ( Linux , BSD , включая Apple macOS и Solaris ), а также Microsoft Windows . Некоторым из приведенных ниже приложений могут потребоваться функции, доступные или совместимые только с определенными клиентами или серверами SSH. Например, использование протокола SSH для реализации VPN возможно, но в настоящее время только с реализацией сервера и клиента OpenSSH .

Протоколы передачи файлов

Протоколы Secure Shell используются в нескольких механизмах передачи файлов.

Архитектура

Схема двоичного пакета SSH-2.

Протокол SSH имеет многоуровневую архитектуру с тремя отдельными компонентами:

Эта открытая архитектура обеспечивает значительную гибкость, позволяя использовать SSH для различных целей, помимо защищенной оболочки. Функциональность только транспортного уровня сравнима с безопасностью транспортного уровня (TLS); уровень аутентификации пользователей легко расширяется за счет пользовательских методов аутентификации; а уровень соединения обеспечивает возможность мультиплексировать множество вторичных сеансов в одно соединение SSH — функция, сравнимая с BEEP и недоступная в TLS.

Алгоритмы

Уязвимости

СШ-1

В 1998 году в SSH 1.5 была описана уязвимость, которая позволяла несанкционированно вставлять контент в зашифрованный поток SSH из-за недостаточной защиты целостности данных от CRC-32 , используемой в этой версии протокола. [33] [34] Исправление, известное как SSH-компенсационный детектор атак [35], было введено в большинство реализаций. Многие из этих обновленных реализаций содержали новую уязвимость переполнения целого числа [36] , которая позволяла злоумышленникам выполнять произвольный код с привилегиями демона SSH, обычно root.

В январе 2001 года была обнаружена уязвимость, позволяющая злоумышленникам изменить последний блок сеанса, зашифрованного IDEA . [37] В том же месяце была обнаружена еще одна уязвимость, которая позволяла злонамеренному серверу пересылать аутентификацию клиента на другой сервер. [38]

Поскольку SSH-1 имеет присущие ему конструктивные недостатки, которые делают его уязвимым, в настоящее время он обычно считается устаревшим, и его следует избегать, явно отключив резервный вариант SSH-1. [38] Большинство современных серверов и клиентов поддерживают SSH-2. [39]

Восстановление открытого текста CBC

В ноябре 2008 года для всех версий SSH была обнаружена теоретическая уязвимость, которая позволяла восстанавливать до 32 битов открытого текста из блока зашифрованного текста, зашифрованного с использованием стандартного режима шифрования по умолчанию — CBC . [40] Самое простое решение — использовать CTR , режим счетчика, вместо режима CBC, поскольку это делает SSH устойчивым к атаке. [40]

Предполагаемая расшифровка со стороны АНБ

28 декабря 2014 года Der Spiegel опубликовал секретную информацию [41], просочившуюся разоблачителем Эдвардом Сноуденом , которая предполагает, что Агентство национальной безопасности может расшифровать некоторый SSH-трафик. Технические подробности, связанные с таким процессом, не разглашаются. Анализ хакерских инструментов ЦРУ BothanSpy и Gyrfalcon, проведенный в 2017 году , показал, что протокол SSH не был скомпрометирован. [42]

Атака черепахи

В 2023 году была обнаружена новая атака «человек посередине» против большинства современных реализаций ssh. Первооткрыватели назвали ее атакой Terrapin . [43] [44] Однако риск снижается за счет требования перехвата подлинного сеанса ssh и того, что атака ограничена по объему, что случайно приводит в основном к неудачным соединениям. [45] [46] Разработчики ssh заявили, что основное воздействие атаки заключается в ухудшении функций запутывания времени нажатия клавиш в ssh. [46] Уязвимость была исправлена ​​в OpenSSH 9.6, но для полной эффективности исправления требуется обновление как клиента, так и сервера.

Документация по стандартам

Следующие публикации RFC рабочей группы IETF «secsh» документируют SSH-2 как предлагаемый стандарт Интернета .

Спецификации протокола были позже обновлены следующими публикациями:

Кроме того, проект OpenSSH включает в себя несколько спецификаций/расширений протоколов поставщиков:

Смотрите также

Рекомендации

  1. ^ аб Т. Илонен; К. Лонвик (январь 2006 г.). Архитектура протокола Secure Shell (SSH). Траст IETF. дои : 10.17487/RFC4251 . РФК 4251.
  2. ^ S&T Университета Миссури: Безопасный Telnet
  3. ^ abc Т. Илонен; К. Лонвик (январь 2006 г.). Протокол аутентификации Secure Shell (SSH). Траст IETF. дои : 10.17487/RFC4252 . РФК 4252.
  4. ^ «Как настроить авторизованные ключи» . Архивировано из оригинала 10 мая 2011 г.
  5. ^ Win-32 OpenSSH
  6. ^ "Домашняя страница WinSCP" . Архивировано из оригинала 17 февраля 2014 г.
  7. ^ «Страница WinSCP для PortableApps.com» . Архивировано из оригинала 16 февраля 2014 г.
  8. ^ «Страница PuTTY для PortableApps.com» . Архивировано из оригинала 16 февраля 2014 г.
  9. ^ Эмис, А; Ву, КФ; Ван, GC; Кривети, М (2012). «Сеть в облаке». IBM DeveloperWorks . Архивировано из оригинала 14 июня 2013 г.
  10. ^ «Реестр имен служб и номеров портов транспортного протокола» .
  11. ^ «Реестр имен служб и номеров портов транспортного протокола» . iana.org . Архивировано из оригинала 4 июня 2001 г.
  12. ^ Зеггельманн, Р.; Туксен, М.; Ратгеб, ЕП (18–20 июля 2012 г.). SSH через SCTP — Оптимизация многоканального протокола путем его адаптации к SCTP . 8-й Международный симпозиум по системам связи, сетям и цифровой обработке сигналов (CSNDSP). стр. 1–6. дои : 10.1109/CSNDSP.2012.6292659. ISBN 978-1-4577-1473-3. S2CID  8415240.
  13. ^ Тату Юленен. «Новый ключ-отмычка: изменение замков в вашей сетевой среде». Архивировано из оригинала 20 августа 2017 г.
  14. ^ Тату Юленен. «SSH-порт». Архивировано из оригинала 3 августа 2017 г.
  15. ^ Юлёнен, Тату. «История порта SSH — 22». www.ssh.com . Проверено 30 ноября 2023 г.
  16. ^ Николас Росаско и Дэвид Ларошель. «Как и почему более безопасные технологии добиваются успеха на устаревших рынках: уроки успеха SSH» (PDF) . Цитируем Барретта и Сильвермана, SSH, Secure Shell: The Definitive Guide, O'Reilly & Associates (2001) . Кафедра компьютерных наук, Univ. из Вирджинии. Архивировано (PDF) из оригинала 25 июня 2006 г. Проверено 19 мая 2006 г.
  17. ^ "Документы протокола Secsh" . ВанДайк Программное обеспечение, Inc. Архивировано из оригинала 13 января 2010 г.
  18. ^ «Часто задаваемые вопросы по SSH» . Архивировано из оригинала 10 октября 2004 г.
  19. Ссылки _
  20. ^ «Реализация GNU протоколов Secure Shell». Архивировано из оригинала 4 февраля 2012 г.
  21. ^ "Dropbear SSH" . Архивировано из оригинала 14 октября 2011 г.
  22. ^ Илонен, Т.; Лонвик, К. «Старый клиент, новый сервер». Протокол транспортного уровня Secure Shell (SSH). IETF. сек. 5.1. дои : 10.17487/RFC4253 . РФК 4253.
  23. ^ ssh-1.2.13 теперь доступен: политика копирования изменена (теперь требуется разрешение для коммерческой продажи ssh, использование по-прежнему разрешено для любых целей)
  24. ^ Источники ОСШ
  25. ^ «OpenSSH: История проекта и авторы». openssh.com. 22 декабря 2004 г. Архивировано из оригинала 24 декабря 2013 г. Проверено 27 апреля 2014 г.
  26. ^ «Информация OSSH для VU № 419241» . Координационный центр CERT . 15 февраля 2006 г. Архивировано из оригинала 27 сентября 2007 г. В любом случае ossh устарел и устарел, и я не рекомендую его использовать.
  27. ^ Собелл, Марк (2012). Практическое руководство по командам, редакторам и программированию оболочки Linux (3-е изд.). Река Аппер-Седл, Нью-Джерси: Прентис-Холл. стр. 702–704. ISBN 978-0133085044.
  28. ^ Харрис, Б.; Велвиндрон, Л. (февраль 2020 г.). Алгоритмы открытых ключей Ed25519 и Ed448 для протокола Secure Shell (SSH). дои : 10.17487/RFC8709 . РФК 8709.
  29. ^ аб Стебила, Д.; Грин, Дж. (декабрь 2009 г.). Интеграция алгоритма эллиптической кривой на транспортном уровне Secure Shell. дои : 10.17487/RFC5656 . РФК 5656 . Проверено 12 ноября 2012 г.
  30. ^ Миллер, Д.; Вылчев П. (3 сентября 2007 г.). Использование UMAC в протоколе транспортного уровня SSH. Идентификатор проекта-miller-secsh-umac-00.
  31. ^ Илонен, Т.; Лонвик, К. Протокол транспортного уровня Secure Shell (SSH). IETF. дои : 10.17487/RFC4253 . РФК 4253.
  32. ^ Иго, К.; Солинас, Дж. (август 2009 г.). Режим счетчика AES Galois для протокола Secure Shell Transport Layer. дои : 10.17487/RFC5647 . РФК 5647.
  33. ^ «Атака с вставкой SSH» . Основные технологии безопасности . Архивировано из оригинала 8 июля 2011 г.
  34. ^ «Примечание об уязвимости VU # 13877 — слабая CRC позволяет внедрять пакеты в сеансы SSH, зашифрованные с помощью блочных шифров» . СЕРТ США . Архивировано из оригинала 10 июля 2010 г.
  35. ^ «Уязвимость детектора компенсационных атак SSH CRC-32» . БезопасностьФокус . Архивировано из оригинала 25 июля 2008 г.
  36. ^ «Примечание об уязвимости VU # 945216 — код обнаружения атаки SSH CRC32 содержит удаленное целочисленное переполнение» . СЕРТ США . Архивировано из оригинала 13 октября 2005 г.
  37. ^ «Примечание об уязвимости VU # 315308 — слабая CRC позволяет изменить последний блок SSH-пакета, зашифрованного IDEA, без предварительного уведомления» . СЕРТ США . Архивировано из оригинала 11 июля 2010 г.
  38. ^ ab «Примечание об уязвимости VU#684820 — SSH-1 позволяет пересылать аутентификацию клиента вредоносным сервером на другой сервер». СЕРТ США . Архивировано из оригинала 1 сентября 2009 г.
  39. ^ «Как использовать ключи SSH для аутентификации» . Вверх по облакам . 17 сентября 2015 года . Проверено 29 ноября 2019 г.
  40. ^ ab «Примечание об уязвимости VU # 958563 — уязвимость SSH CBC» . СЕРТ США . Архивировано из оригинала 22 июня 2011 г.
  41. ^ «Любопытные глаза: внутри войны АНБ с интернет-безопасностью». Шпигель онлайн . 28 декабря 2014 г. Архивировано из оригинала 24 января 2015 г.
  42. ^ Илонен, Тату (3 августа 2017 г.). «BothanSpy & Gyrfalcon — Анализ хакерских инструментов ЦРУ для SSH». ssh.com . Проверено 15 июля 2018 г.
  43. ^ "Атака черепахи". terrapin-attack.com . Проверено 20 декабря 2023 г.
  44. ^ Джонс, Коннор. «SSH потрясен, но не затронут уязвимостью понижения версии Terrapin». www.theregister.com . Проверено 20 декабря 2023 г.
  45. ^ Джонс, Коннор. «SSH потрясен, но не затронут уязвимостью понижения версии Terrapin». www.theregister.com . Проверено 20 декабря 2023 г.
  46. ^ ab «Примечания к выпуску OpenSSH 9.6». openssh.com . 2023-12-18.

дальнейшее чтение

Внешние ссылки