Secure Shell – Wikipedia, wolna encyklopedia

Secure Shell (SSH) – standard protokołów komunikacyjnych używanych w sieciach komputerowych TCP/IP, w architekturze klient-serwer, a od wersji 2 nawet w architekturze serwer-klient.

W ścisłym znaczeniu SSH to tylko następca protokołu Telnet, służącego do terminalowego łączenia się ze zdalnymi komputerami. SSH różni się od Telnetu tym, że transfer wszelkich danych jest zaszyfrowany oraz możliwe jest rozpoznawanie użytkownika na wiele różnych sposobów. W szerszym znaczeniu SSH to wspólna nazwa dla całej rodziny protokołów, nie tylko terminalowych, lecz także służących do przesyłania plików (SCP, SFTP), zdalnej kontroli zasobów, tunelowania i wielu innych zastosowań. Wspólną cechą wszystkich tych protokołów jest identyczna z SSH technika szyfrowania danych i rozpoznawania użytkownika. Obecnie protokoły z rodziny SSH praktycznie wyparły wszystkie inne mniej bezpieczne protokoły, takie, jak np. rlogin czy RSH.

Ogólne założenia protokołu SSH powstały w grupie roboczej IETF. W użyciu są obie jego wersje – 1 i 2. W wersji 2 możliwe jest użycie dowolnych sposobów szyfrowania danych i czterech różnych sposobów uwierzytelniania, podczas gdy SSH1 obsługiwało tylko stałą listę kilku sposobów szyfrowania i dwa sposoby rozpoznawania użytkownika (klucz RSA i zwykłe hasło).

Wersja 2 została przeprojektowana od zera ze względu na ujawnione w wersji 1.5 podatności na ataki kryptoanalityczne, umożliwiające wstrzykiwanie komend do zaszyfrowanego strumienia SSH[1]. W 2009 roku opublikowano kolejny atak tego typu na wersję 2[2]. Problem został naprawiony w OpenSSH 5.2 za pomocą zmiany domyślnego trybu szyfrowania z CBC na CTR[3].

Najczęściej stosowany sposób szyfrowania to AES, choć część serwerów nadal używa szyfrowania Blowfish i technik z rodziny DES.

Uwierzytelnienie użytkownika może się opierać na haśle, kluczu (RSA, DSA) lub protokole Kerberos.

Dwie najbardziej znane implementacje SSH to zamknięte ssh.com i otwarte OpenSSH. Z kolei najbardziej znaną implementacją klienta jest PuTTY.[potrzebny przypis]

Protokoły z rodziny SSH korzystają zwykle z portu 22 protokołu TCP, choć często stosuje się porty o innych numerach w celu utrudnienia wykrycia serwera SSH.

Protokół SSH jest zaimplementowany w warstwie aplikacji modelu OSI w ramach połączenia TCP.

Zastosowanie

[edytuj | edytuj kod]

SSH jest zwykle używany do zdalnego logowania z komputerem i wykonywania poleceń, ale obsługuje także tunele, przekazywanie portów TCP i X11. Możliwe jest przesyłanie plików przy użyciu protokołów przesyłania plików SSH (SFTP) lub SCP[4]. SSH używa modelu klient-serwer.

Standardowy port TCP 22 został przypisany do kontaktowania się z serwerami SSH[5].

Program klienta SSH jest zwykle używany do nawiązywania połączeń z demonem SSH akceptującym połączenia zdalne. Oba są powszechnie obecne w większości nowoczesnych systemów operacyjnych, w tym w macOS, większości dystrybucji Linuksa, OpenBSD, FreeBSD, NetBSD, Solaris i OpenVMS. Warto zauważyć, że Windows jest jednym z niewielu nowoczesnych systemów operacyjnych na komputery / serwery, które domyślnie nie zawierają SSH. Dostępne są zamknięte, bezpłatne i otwarte oprogramowania (np. PuTTY i OpenSSH) o różnych poziomach złożoności i kompletności. Menedżer plików (np. Konqueror) może wykorzystać protokół FISH aby zapewnić graficzny interfejs użytkownika. Program WinSCP zapewnia podobne zarządzanie plikami (synchronizacja, kopiowanie, zdalne kasowanie) za pomocą PuTTY. Zarówno WinSCP jak i PuTTY są dostępne w pakiecie do uruchamiania bezpośrednio z dysku USB, bez konieczności instalacji na komputerze klienta. W systemie Windows konfiguracja serwera SSH zazwyczaj wymaga instalacji (np. poprzez Cygwin[6]).

SSH jest ważny dla przetwarzania danych w chmurze, aby rozwiązać problemy z łącznością, unikając problemów bezpieczeństwa związanych z eksponowaniem wirtualnej maszyny w chmurze. Tunel SSH może zapewnić bezpieczną ścieżkę przez Internet, poprzez zaporę ogniową do maszyny wirtualnej.

Historia i rozwój

[edytuj | edytuj kod]

Wersja 1.x

[edytuj | edytuj kod]

W 1995 roku Tatu Ylönen, naukowiec z Technicznego Uniwersytetu Helsińskiego w Finlandii, zaprojektował pierwszą wersję protokołu (obecnie nazywaną SSH-1), spowodowany przez atak węszący na sieć uniwersytecką[7]. Celem SSH było zastąpienie wcześniejszych protokołów rlogin, Telnet, FTP i rsh, które nie zapewniały silnego uwierzytelnienia ani gwarancji poufności. Ylönen opublikował swoje narzędzie jako freeware w lipcu 1995 roku i szybko zyskało popularność. Pod koniec 1995 roku baza użytkowników SSH wzrosła do 20 000 użytkowników w 50 krajach.

W grudniu 1995 roku Ylönen założył SSH Communications Security, aby promować i rozwijać SSH. Oryginalna wersja oprogramowania SSH używała różnych darmowych programów, takich jak GNU libgmp, ale późniejsze wersje wydane przez SSH Communications Security ewoluowały coraz bardziej w zamknięte oprogramowanie.

Oszacowano, że do roku 2000 liczba użytkowników wzrosła do 2 milionów.

Wersja 2.x

[edytuj | edytuj kod]

W 2006 roku jako nowy standard została przyjęta poprawiona wersja protokołu, zwana SSH-2. Wersja ta została napisana całkowicie od nowa i nie jest kompatybilna z SSH-1. SSH-2 wprowadziło nowe mechanizmy wymiany kluczy oraz zmieniło strukturę protokołu, który został podzielony na oddzielne warstwy, podobne do protokołu ISO/OSI[8]. Lepsze bezpieczeństwo zapewnia protokół Diffiego-Hellmana i silne sprawdzanie integralności za pomocą kodów uwierzytelniania wiadomości. Nowe funkcje SSH-2 obejmują możliwość uruchamiania dowolnej liczby sesji na jednym połączeniu SSH[9].

OpenSSH i OSSH

[edytuj | edytuj kod]

W 1999 roku deweloperzy, chcąc mieć dostępną wersję darmową oprogramowania, powrócili do starszej wersji 1.2.12 oryginalnego programu SSH, który był ostatnim wydanym na licencji open source. Następnie z tej bazy kodu opracowano OSSH. W następnej kolejności programiści OpenBSD rozwinęli kod Grönvalla i pracowali nad nim tworząc OpenSSH, który został wydany wraz z wersją 2.6 OpenBSD. Od tej wersji zaczęto przenosić OpenSSH do innych systemów operacyjnych[10].

Od roku 2005, OpenSSH był najbardziej popularną implementacją SSH, domyślnie spotykaną w wielu systemach operacyjnych. OSSH tymczasem stał się przestarzały[11]. OpenSSH nadal obsługuje protokół SSH-2, po usunięciu obsługi SSH-1 z kodu źródłowego z wersją OpenSSH 7.6.

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Ariel Futoransky, Emiliano Kargieman: SSH Insertion Attack. CORE Security, 1998. [dostęp 2016-10-03]. (ang.).
  2. Plaintext Recovery Attack Against SSH. 14 listopada 2008. [dostęp 2016-10-03]. (ang.).
  3. OpenSSH 5.2: Changes since OpenSSH 5.1. 23 lutego 2009. [dostęp 2016-10-03]. (ang.).
  4. T. Ylonen, C. Lonvick, The Secure Shell (SSH) Authentication Protocol, RFC 4252, IETF, styczeń 2006, DOI10.17487/RFC4252, ISSN 2070-1721, OCLC 943595667 (ang.).
  5. Service Name and Transport Protocol Port Number Registry [online], www.iana.org [dostęp 2018-05-27].
  6. Enterprise Manager Cloud Control Basic Installation Guide [online], docs.oracle.com [dostęp 2018-05-27] (ang.).
  7. The new skeleton key: changing the locks in your network environment, „SC Media UK”, 28 marca 2013 [dostęp 2018-05-27] (ang.).
  8. O'Reily Secure Shell, The Definitive Guide
  9. SSH Frequently Asked Questions [online], www.snailbook.com [dostęp 2018-05-27].
  10. OpenSSH: Project History [online], www.openssh.com [dostęp 2018-05-27].
  11. OSSH Information for VU#419241 [online], www.kb.cert.org [dostęp 2018-05-27].

Linki zewnętrzne

[edytuj | edytuj kod]