Usługi

Secure Shell (SSH)

Bezpieczny zdalny dostęp i transfer plików z uwierzytelnianiem kluczem publicznym.

1. Dlaczego Wprowadzono SSH

Wczesne protokoły zdalnego dostępu i transferu plików, takie jak Telnet i FTP, mogły przesyłać nazwy użytkowników, hasła, polecenia i zawartość plików jako czysty tekst. Obserwator mający dostęp do ścieżki sieciowej mógł odczytać ten ruch i przechwycić dane uwierzytelniające. SSH wprowadzono jako chroniony pakiet protokołów do zdalnego logowania, wykonywania poleceń i transferu plików.

Gdy internet stał się siecią publiczną, zdalny dostęp w czystym tekście tworzył niedopuszczalne ryzyko. W 1995 roku Tatu Ylönen, badacz z Politechniki Helsińskiej, opracował pierwszą wersję protokołu Secure Shell. zaprojektowano jako następcę Telnetu, zapewniającego szyfrowany kanał zdalnej komunikacji. SSH jest pakietem protokołów szeroko używanym do zdalnego administrowania komputerami i urządzeniami sieciowymi.

2. Podstawowa Architektura: Jedno Chronione Połączenie

SSH działa w modelu klient-serwer. Warstwa transportowa negocjuje ochronę kryptograficzną, a warstwa połączenia multipleksuje usługi w ramach ustanowionego transportu. Po przygotowaniu transportu protokół uruchamia usługę uwierzytelniania użytkownika, a następnie otwiera kanały dla żądanych aplikacji. Kanał może zostać zamknięty, gdy połączenie TCP nadal przenosi inne kanały.

  • Klient i Serwer SSH

    Sesja SSH angażuje dwa komponenty:

    • Klient SSH: Oprogramowanie na maszynie lokalnej, które inicjuje połączenie. Przykłady to narzędzie wiersza poleceń 'ssh' dostępne w systemach Linux, macOS i Windows, lub aplikacje graficzne takie jak PuTTY.
    • Serwer SSH (Demon): Program, często nazywany 'sshd', działający na maszynie zdalnej. Ciągle nasłuchuje na przychodzące żądania połączeń i jest odpowiedzialny za uwierzytelnianie użytkownika i zapewnienie dostępu.
  • Jedno połączenie TCP, domyślnie port 22

    Cała sesja, w tym uwierzytelnianie, wykonywanie poleceń i transfer danych, jest multipleksowana przez pojedyncze połączenie TCP. Serwery SSH domyślnie nasłuchują na porcie TCP 2222, lecz port można skonfigurować inaczej. Zapora może zezwolić na zdalny dostęp jedną regułą, gdy serwer korzysta z tego portu, w przeciwieństwie do protokołów wymagających oddzielnych portów sterowania i danych. Warstwa połączenia przypisuje kanały logiczne i okna sterowania przepływem, dlatego powłoka, przekierowany strumień i podsystem transferu plików mogą współdzielić transport.

3. Właściwości Bezpieczeństwa SSH

Połączenie SSH zapewnia uzgodnioną poufność, ochronę integralności i uwierzytelnianie. Skuteczność tych mechanizmów zależy od negocjacji algorytmów, weryfikacji klucza hosta i polityki uwierzytelniania użytkowników na serwerze. Transport wiąże także wymianę z identyfikatorem sesji i utrzymuje numery sekwencyjne pakietów, co pomaga zapobiegać użyciu danych uwierzytelniania w innej sesji oraz cichej zmianie kolejności chronionych pakietów.

A. Poufność i szyfrowanie

Po pomyślnej wymianie kluczy SSH szyfruje dane przesyłane kanałem za pomocą uzgodnionego szyfru. Bierny obserwator nie może odczytać chronionego ruchu, gdy algorytmy i klucze sesji pozostają bezpieczne. Proces ten jest dwuetapowy:

  1. Wstępna wymiana kluczy: Podczas ustanawiania połączenia klient i serwer używają , na przykład wymiany z rodziny Diffiego-Hellmana, aby wyprowadzić wspólną tajemnicę sesji. Klucz hosta serwera uwierzytelnia wymianę tylko wtedy, gdy klient zweryfikuje oczekiwany klucz hosta.
  2. Szyfrowanie Sesji: Po ustanowieniu wspólnego klucza cała późniejsza komunikacja jest szyfrowana za pomocą szybkiego i wydajnego algorytmu , takiego jak AES (Advanced Encryption Standard) lub ChaCha20. Każdy znak, który wpisujesz i każda linia wyjściowa są zamieniane w niezrozumiały szyfrogram.

B. Ochrona integralności

SSH wykrywa modyfikację przesyłanych danych. Zależnie od uzgodnionego szyfru transport dołącza do każdego pakietu albo używa trybu szyfrowania uwierzytelnionego.

  • W przypadku szyfru z MAC nadawca oblicza kluczową wartość integralności, na przykład HMAC-SHA2, dla danych pakietu i dołącza wynikowy MAC.
  • Odbiorca wykonuje dokładnie te same obliczenia na otrzymanych danych.
  • Jeśli kontrola integralności powiedzie się, odbiorca uznaje pakiet za autentyczny i niezmieniony. Po nieudanej kontroli pakiet jest odrzucany, a połączenie zwykle zostaje przerwane.

C. Uwierzytelnianie

SSH uwierzytelnia serwer wobec klienta za pomocą klucza hosta, a użytkownika wobec serwera za pomocą skonfigurowanej metody uwierzytelniania.

  1. Uwierzytelnianie serwera i weryfikacja klucza hosta:

    Jest to krok, który może zapobiec , gdy odcisk palca zostanie zweryfikowany. Każdy serwer SSH ma parę kluczy hosta. Przy pierwszym połączeniu klient wyświetla odcisk palca publicznego klucza serwera i prosi o potwierdzenie:

    Autentyczność hosta 'serwer.przyklad.pl (203.0.113.50203.0.113.50)' nie może zostać ustalona.
    Odcisk palca klucza ED25519 to SHA256:AbCdEf123...
    Czy na pewno chcesz kontynuować łączenie (tak/nie)?

    Wpisanie 'tak' zapisuje klucz w pliku 'known_hosts'. Przed pierwszą akceptacją należy sprawdzić odcisk palca z użyciem zaufanego kanału. Przy kolejnych połączeniach klient porównuje przedstawiony klucz z zapisanym. Niezgodność wywołuje ostrzeżenie, ponieważ serwer może być podstawiony albo rekonfigurowany.

  2. Uwierzytelnianie klienta i logowanie użytkownika:

    Po zweryfikowaniu tożsamości serwera, użytkownik musi udowodnić swoją własną tożsamość serwerowi. Istnieją dwie podstawowe metody:

    • Uwierzytelnianie Hasłem: Użytkownik podaje nazwę użytkownika i hasło. SSH szyfruje te dane przed wysłaniem ich do serwera w celu weryfikacji. Chociaż jest to bezpieczne przed podsłuchem sieciowym, jest wciąż podatne na ataki siłowe (brute-force) i polega na silnych hasłach.
    • Uwierzytelnianie kluczem publicznym: Użytkownik generuje parę kluczy prywatny/publiczny i umieszcza klucz publiczny na serwerze, podczas gdy prywatny pozostaje po stronie klienta. Klient potwierdza posiadanie klucza, podpisując związane z sesją dane uwierzytelniania. Serwer sprawdza podpis zapisanym kluczem publicznym, więc hasło nie musi przechodzić przez sieć. Metoda jest częsta w automatycznym dostępie SSH, pod warunkiem ochrony klucza prywatnego i możliwości jego unieważnienia po zakończeniu użycia.

4. Stos protokołów SSH

Protokół SSH jest warstwowy, co rozdziela ochronę transportu, uwierzytelnianie użytkownika i obsługę kanałów.

Podstawowe dokumenty RFC 4251, RFC 4252, RFC 4253 i RFC 4254 mają status Standards Track. Konkretne algorytmy i rozszerzenia są wybierane podczas negocjacji, więc polityka serwera określa dopuszczalne warianty.

  • Protokół Warstwy Transportowej (RFC 4253): Najniższa warstwa, działająca na TCP. Odpowiada za ustanowienie połączenia, prezentację klucza hosta, negocjację algorytmów szyfrowania i integralności, wymianę kluczy oraz bieżącą ochronę i kontrolę pakietów.
  • Protokół Uwierzytelniania Użytkownika (RFC 4252): Ta warstwa działa na warstwie transportowej. Jej jedynym celem jest uwierzytelnienie klienta na serwerze za pomocą metod takich jak hasło, klucz publiczny lub inne.
  • Protokół Połączenia (RFC 4254): To najwyższa warstwa. Definiuje, w jaki sposób wiele kanałów logicznych jest multipleksowanych w ramach uwierzytelnionego i zaszyfrowanego transportu. Kanały mogą przenosić interaktywną powłokę, przekierowania portów i sesję SFTP w ramach jednego połączenia SSH.

5. Zastosowania SSH

Protokół połączenia pozwala SSH obsługiwać więcej niż interaktywne zdalne logowanie.

  • Bezpieczny transfer plików (SFTP i SCP): SFTP działa jako podsystem SSH, a tradycyjny SCP wykorzystuje transport SSH do operacji kopiowania plików. Połączenie SSH chroni zawartość plików i polecenia zgodnie z uzgodnionymi algorytmami.
  • Tunelowanie SSH (Przekierowanie Portów): SSH może być używany do bezpiecznego tunelowania innych, niezabezpieczonych protokołów sieciowych.
    • Lokalne Przekierowanie Portów: Pozwala na bezpieczny dostęp do usługi w sieci zdalnej, tak jakby działała ona na Twojej lokalnej maszynie. Na przykład, możesz przekierować lokalny port na swoim laptopie do serwera bazy danych działającego na porcie 3306 w prywatnej sieci firmowej.
    • Zdalne przekierowanie portów: Odwrotność lokalnego przekierowania. Pozwala, aby gniazdo nasłuchujące na serwerze zdalnym przekazywało połączenia do usługi po stronie klienta. Dopuszczenie tej funkcji i zakres odbiorców zależą od polityki serwera SSH.
  • Zdalne Wykonywanie Poleceń:SSH pozwala na bezpieczne wykonanie pojedynczego polecenia na zdalnym serwerze bez otwierania pełnej interaktywnej sesji, co jest niezbędne do automatyzacji i pisania skryptów. Na przykład: 'ssh uzytkownik@serwer 'uptime''
  • Systemy Kontroli Wersji: Systemy takie jak Git intensywnie używają SSH jako bezpiecznego transportu do wysyłania (push) i pobierania (pull) zmian do i z repozytoriów zdalnych.

6. Wnioski

SSH łączy szyfrowanie transportu i ochronę integralności z weryfikacją klucza hosta, uwierzytelnianiem użytkownika i multipleksowaniem kanałów. Taka konstrukcja obsługuje zdalne powłoki, wykonywanie poleceń, przekierowanie portów, SFTP i inne usługi w ramach jednego połączenia TCP. Bezpieczne użycie nadal wymaga weryfikacji kluczy hosta, wyboru odpowiednich algorytmów, ochrony kluczy prywatnych, stosowania polityki dostępu serwera i audytowania decyzji dostępowych.

Powiązane artykuły