Protokoły SFTP i FTPS

Przedmowa

Jeszcze tydzień temu pisałam esej na temat wskazany w tytule i stanęłam przed faktem, że w Internecie, powiedzmy, nie ma zbyt wielu informacji edukacyjnych. Głównie suche fakty i instrukcje konfiguracji. Dlatego też postanowiłem nieco poprawić tekst i opublikować go jako artykuł.

Co to jest FTP

FTP (File Transfer Protocol) to protokół przesyłania plików w sieci. Jest to jeden z podstawowych protokołów Ethernet. Pojawił się w 1971 roku i początkowo pracował w sieciach DARPA. Obecnie, podobnie jak HTTP, transfer plików opiera się na modelu składającym się z zestawu protokołów TCP/IP (Transmission Control Protocol/Internet Protocol). Zdefiniowane w RFC 959.

Protokół określa, co następuje:

  • W jaki sposób będzie przeprowadzana kontrola błędów?
  • Metoda pakowania danych (jeśli stosowane jest pakowanie)
  • W jaki sposób urządzenie wysyłające sygnalizuje, że zakończyło wysyłanie wiadomości?
  • W jaki sposób urządzenie odbierające sygnalizuje, że otrzymało wiadomość?

Komunikacja pomiędzy klientem a serwerem

Przyjrzyjmy się bliżej procesom zachodzącym podczas działania FTP. Połączenie jest inicjowane przez interpreter protokołu użytkownika. Sterowanie centralą odbywa się poprzez kanał sterujący w standardzie TELNET. Polecenia FTP są generowane przez interpreter protokołu użytkownika i wysyłane do serwera. Odpowiedzi serwera przesyłane są także do użytkownika kanałem kontrolnym. Ogólnie rzecz biorąc, użytkownik ma możliwość nawiązania kontaktu z interpreterem protokołu serwera i to za pomocą środków innych niż interpreter użytkownika.

Główną cechą FTP jest to, że wykorzystuje podwójne połączenia. Jeden z nich służy do wysyłania poleceń do serwera i domyślnie odbywa się poprzez port TCP 21, który można zmienić. Połączenie sterujące istnieje tak długo, jak klient komunikuje się z serwerem. Kanał kontrolny musi być otwarty podczas przesyłania danych pomiędzy maszynami. Jeśli jest zamknięty, transmisja danych zostaje zatrzymana. Przez drugi następuje bezpośredni transfer danych. Otwiera się za każdym razem, gdy następuje transfer pliku między klientem a serwerem. Jeżeli jednocześnie przesyłanych jest kilka plików, każdy z nich otwiera własny kanał transmisji.

FTP może działać w trybie aktywnym lub pasywnym, od którego wyboru zależy sposób nawiązania połączenia. W trybie aktywnym klient tworzy połączenie sterujące TCP z serwerem i wysyła do serwera swój adres IP oraz dowolny numer portu klienta, a następnie czeka, aż serwer rozpocznie połączenie TCP z tym adresem i numerem portu. W przypadku, gdy klient znajduje się za zaporą sieciową i nie może zaakceptować przychodzącego połączenia TCP, można zastosować tryb pasywny. W tym trybie klient wykorzystuje przepływ kontrolny do wysłania polecenia PASV do serwera, a następnie otrzymuje od serwera swój adres IP i numer portu, których następnie używa do otwarcia przepływu danych z dowolnego portu.

Istnieje możliwość przesłania danych do trzeciej maszyny. W tym przypadku użytkownik organizuje kanał kontrolny z dwoma serwerami i organizuje między nimi bezpośredni kanał danych. Polecenia sterujące przechodzą przez użytkownika, a dane przesyłane są bezpośrednio pomiędzy serwerami.

Podczas przesyłania danych przez sieć można zastosować cztery reprezentacje danych:

  • ASCII – używany do tekstu. Dane są, jeśli to konieczne, konwertowane z reprezentacji znakowej na hoście wysyłającym na „ośmiobitowy kod ASCII” przed transmisją i (ponownie, jeśli to konieczne) na reprezentację znakową na hoście odbierającym. W szczególności zmieniane są znaki nowej linii. W rezultacie ten tryb nie jest odpowiedni dla plików zawierających więcej niż zwykły tekst.
  • Tryb binarny – urządzenie wysyłające wysyła każdy plik bajt po bajcie, a odbiorca przechowuje strumień bajtów po otrzymaniu. Zalecono obsługę tego trybu dla wszystkich implementacji protokołu FTP.
  • EBCDIC – służy do przesyłania zwykłego tekstu pomiędzy hostami w kodowaniu EBCDIC. W przeciwnym razie ten tryb jest podobny do trybu ASCII.
  • Tryb lokalny - umożliwia dwóm komputerom o identycznych ustawieniach wysyłanie danych we własnym formacie bez konwersji do ASCII.

Przesyłanie danych może odbywać się w jednym z trzech trybów:

  • Tryb strumieniowy - dane przesyłane są w postaci ciągłego strumienia, uwalniając FTP od wykonywania jakiegokolwiek przetwarzania. Zamiast tego całe przetwarzanie odbywa się przez protokół TCP. Wskaźnik końca pliku nie jest potrzebny, z wyjątkiem rozdzielania danych na rekordy.
  • Tryb blokowy - FTP dzieli dane na kilka bloków (blok nagłówka, liczba bajtów, pole danych), a następnie przesyła je do protokołu TCP.
  • Tryb kompresji – dane są kompresowane przy użyciu jednego algorytmu (zwykle poprzez kodowanie długości serii).

Serwer FTP to serwer zapewniający możliwość korzystania z protokołu przesyłania plików. Posiada pewne cechy, które odróżniają go od konwencjonalnych serwerów WWW:

  • Wymagane uwierzytelnienie użytkownika
  • Wszystkie operacje wykonywane są w ramach bieżącej sesji
  • Możliwość wykonywania różnych działań w systemie plików
  • Dla każdego połączenia wykorzystywany jest oddzielny kanał

Klient FTP to program, który umożliwia połączenie się ze zdalnym serwerem za pośrednictwem protokołu FTP, a także wykonanie na nim niezbędnych działań z elementami systemu plików. Klientem może być także przeglądarka, w której pasku adresu należy wpisać adres będący ścieżką do konkretnego katalogu lub pliku na zdalnym serwerze, zgodnie z ogólnym schematem blokowym URL:

ftp://user:pass@address:port/directory/file

Jednakże korzystanie z przeglądarki internetowej w tym kontekście umożliwi jedynie przeglądanie lub pobieranie interesujących plików. Aby w pełni wykorzystać wszystkie zalety FTP, należy jako klienta skorzystać ze specjalistycznego oprogramowania.

Uwierzytelnianie FTP wykorzystuje schemat nazwy użytkownika/hasła w celu udzielenia dostępu. Nazwa użytkownika jest wysyłana do serwera za pomocą polecenia USER, a hasło jest wysyłane za pomocą polecenia PASS. Jeżeli informacje podane przez klienta zostaną zaakceptowane przez serwer, wówczas serwer wyśle ​​do klienta zaproszenie i rozpocznie się sesja. Użytkownicy mogą, jeśli serwer obsługuje tę funkcję, logować się bez podawania poświadczeń, ale serwer może przyznać jedynie ograniczony dostęp dla takich sesji.

Host świadczący usługę FTP może zapewnić anonimowy dostęp FTP. Użytkownicy zazwyczaj logują się, podając nazwę użytkownika „anonimowy” (na niektórych serwerach FTP może uwzględniać wielkość liter). Chociaż użytkownicy są zazwyczaj proszeni o podanie adresu e-mail zamiast hasła, w rzeczywistości nie jest przeprowadzana żadna weryfikacja. Wiele hostów FTP udostępniających aktualizacje oprogramowania obsługuje dostęp anonimowy.

Schemat protokołu

Interakcję klient-serwer podczas połączenia FTP można zwizualizować w następujący sposób:

Protokoły SFTP i FTPS

Bezpieczne FTP

Pierwotnie FTP nie miał być bezpieczny, ponieważ był przeznaczony do komunikacji między wieloma instalacjami wojskowymi i agencjami. Jednak wraz z rozwojem i rozprzestrzenianiem się Internetu ryzyko nieuprawnionego dostępu wzrosło wielokrotnie. Zaistniała potrzeba zabezpieczenia serwerów przed różnego rodzaju atakami. W maju 1999 r. autorzy dokumentu RFC 2577 podsumowali luki w poniższej liście problemów:

  • Ukryte ataki (ataki odbicia)
  • Fałszywe ataki
  • Brutalna siła atakuje
  • Przechwytywanie pakietów, wąchanie
  • Kradzież portu

Zwykły FTP nie ma możliwości przesyłania danych w formie zaszyfrowanej, w wyniku czego nazwy użytkowników, hasła, polecenia i inne informacje mogą zostać łatwo i łatwo przechwycone przez atakujących. Typowym rozwiązaniem tego problemu jest użycie „bezpiecznych”, chronionych przez TLS wersji podatnego protokołu (FTPS) lub innego, bezpieczniejszego protokołu, takiego jak SFTP/SCP, dostarczanego z większością implementacji protokołu Secure Shell.

FTPS

FTPS (FTP + SSL) jest rozszerzeniem standardowego protokołu przesyłania plików, które do swojej podstawowej funkcjonalności dodaje możliwość tworzenia szyfrowanych sesji z wykorzystaniem protokołu SSL (Secure Sockets Layer). Dziś ochronę zapewnia bardziej zaawansowany analogowy TLS (Transport Layer Security).

SSL

Protokół SSL został zaproponowany przez firmę Netscape Communications w 1996 roku w celu zapewnienia bezpieczeństwa i prywatności połączeń internetowych. Protokół obsługuje uwierzytelnianie klientów i serwerów, jest niezależny od aplikacji i jest przezroczysty dla protokołów HTTP, FTP i Telnet.

Protokół SSL Handshake składa się z dwóch etapów: uwierzytelnienia serwera i opcjonalnego uwierzytelnienia klienta. W pierwszym etapie serwer odpowiada na żądanie klienta przesyłając jego certyfikat i parametry szyfrowania. Następnie klient generuje klucz główny, szyfruje go kluczem publicznym serwera i wysyła do serwera. Serwer odszyfrowuje klucz główny swoim kluczem prywatnym i uwierzytelnia się przed klientem, zwracając wiadomość uwierzytelnioną kluczem głównym klienta.

Kolejne dane są szyfrowane i uwierzytelniane za pomocą kluczy pochodzących z tego klucza głównego. W drugim kroku, który jest opcjonalny, serwer wysyła żądanie do klienta, a klient uwierzytelnia się na serwerze, zwracając żądanie z własnym podpisem cyfrowym i certyfikatem klucza publicznego.

SSL obsługuje wiele algorytmów kryptograficznych. Podczas nawiązania komunikacji wykorzystywany jest kryptosystem klucza publicznego RSA. Po wymianie kluczy stosuje się wiele różnych szyfrów: RC2, RC4, IDEA, DES i TripleDES. Wykorzystywany jest także MD5 – algorytm tworzenia podsumowania wiadomości. Składnia certyfikatów klucza publicznego jest opisana w X.509.

Jedną z ważnych zalet protokołu SSL jest jego całkowita niezależność od platformy programowej. Protokół opracowany jest w oparciu o zasady przenośności, a ideologia jego budowy nie jest uzależniona od zastosowań, w jakich jest używany. Ponadto ważne jest również, aby inne protokoły można było w przezroczysty sposób nakładać na protokół SSL; albo w celu dalszego zwiększenia stopnia ochrony docelowych przepływów informacji, albo w celu dostosowania możliwości kryptograficznych protokołu SSL do innego, dobrze określonego zadania.

Połączenie SSL

Protokoły SFTP i FTPS

Bezpieczny kanał zapewniany przez SSL ma trzy główne właściwości:

  • Kanał jest prywatny. Szyfrowanie jest stosowane w przypadku wszystkich wiadomości po prostym dialogu, który służy do ustalenia tajnego klucza.
  • Kanał jest uwierzytelniony. Strona serwera konwersacji jest zawsze uwierzytelniana, natomiast strona klienta jest opcjonalnie uwierzytelniana.
  • Kanał jest niezawodny. Transport wiadomości obejmuje sprawdzanie integralności (przy użyciu adresu MAC).

Funkcje FTPS

Istnieją dwie implementacje protokołu FTPS, wykorzystujące różne metody zapewniania bezpieczeństwa:

  • Metoda niejawna polega na użyciu standardowego protokołu SSL w celu nawiązania sesji przed wysłaniem danych, co z kolei psuje kompatybilność ze zwykłymi klientami i serwerami FTP. Aby zapewnić wsteczną kompatybilność z klientami, którzy nie obsługują FTPS, do połączenia sterującego używany jest port TCP 990, a do przesyłania danych używany jest port 989. Zachowuje to standardowy port 21 dla protokołu FTP. Ta metoda jest uważana za przestarzałą.
  • Jawne jest znacznie wygodniejsze, ponieważ używa standardowych poleceń FTP, ale szyfruje dane podczas odpowiadania, co pozwala na użycie tego samego połączenia sterującego zarówno dla FTP, jak i FTPS. Klient musi jawnie zażądać bezpiecznego przesyłania danych z serwera, a następnie zatwierdzić metodę szyfrowania. Jeśli klient nie zażąda bezpiecznego transferu, serwer FTPS ma prawo utrzymać lub zamknąć niezabezpieczone połączenie. W RFC 2228 dodano mechanizm negocjacji uwierzytelniania i bezpieczeństwa danych, który zawiera nowe polecenie FTP AUTH. Chociaż standard ten nie definiuje wprost mechanizmów bezpieczeństwa, określa, że ​​bezpieczne połączenie musi zostać zainicjowane przez klienta przy użyciu algorytmu opisanego powyżej. Jeżeli serwer nie obsługuje bezpiecznych połączeń, powinien zostać zwrócony kod błędu 504. Klienci FTPS mogą uzyskać informację o protokołach bezpieczeństwa obsługiwanych przez serwer za pomocą komendy FEAT, jednak serwer nie ma obowiązku ujawniania, jakie poziomy bezpieczeństwa posiada obsługuje. Najpopularniejszymi poleceniami FTPS są AUTH TLS i AUTH SSL, które zapewniają odpowiednio bezpieczeństwo TLS i SSL.

SFTP

SFTP (Secure File Transfer Protocol) to protokół przesyłania plików w warstwie aplikacji, który działa w oparciu o bezpieczny kanał. Nie mylić z (Simple File Transfer Protocol), który ma ten sam skrót. Jeśli FTPS jest po prostu rozszerzeniem FTP, wówczas SFTP jest oddzielnym i niepowiązanym protokołem, którego podstawą jest SSH (Secure Shell).

Secure Shell

Protokół został opracowany przez jedną z grup IETF o nazwie Secsh. Dokumentacja robocza nowego protokołu SFTP nie stała się oficjalnym standardem, ale zaczęła być aktywnie wykorzystywana do tworzenia aplikacji. Następnie wydano sześć wersji protokołu. Jednakże stopniowy wzrost jego funkcjonalności spowodował, że 14 sierpnia 2006 roku podjęto decyzję o zaprzestaniu prac nad rozwojem protokołu ze względu na zakończenie głównego zadania projektu (rozwój SSH) oraz brak na wystarczającym poziomie eksperckim, aby przystąpić do opracowania pełnoprawnego protokołu zdalnego systemu plików.

SSH to protokół sieciowy umożliwiający zdalną kontrolę systemu operacyjnego i tunelowanie połączeń TCP (na przykład w celu przesyłania plików). Podobny w funkcjonalności do protokołów Telnet i rlogin, ale w przeciwieństwie do nich szyfruje cały ruch, w tym przesyłane hasła. SSH umożliwia wybór różnych algorytmów szyfrowania. Klienci i serwery SSH są dostępne dla większości sieciowych systemów operacyjnych.

SSH umożliwia bezpieczne przesyłanie niemal każdego innego protokołu sieciowego w niezabezpieczonym środowisku. Dzięki temu możesz nie tylko pracować zdalnie na komputerze za pomocą powłoki poleceń, ale także przesyłać strumień audio lub wideo (na przykład z kamery internetowej) zaszyfrowanym kanałem. SSH może także zastosować kompresję przesyłanych danych w celu ich późniejszego zaszyfrowania, co jest wygodne np. przy zdalnym uruchamianiu klientów X WindowSystem.

Pierwsza wersja protokołu, SSH-1, została opracowana w 1995 roku przez badacza Tatu Ulönena z Politechniki Helsińskiej (Finlandia). SSH-1 został napisany, aby zapewnić większą prywatność niż protokoły rlogin, telnet i rsh. W 1996 roku opracowano bezpieczniejszą wersję protokołu SSH-2, która jest niekompatybilna z SSH-1. Protokół zyskał jeszcze większą popularność i do 2000 roku miał około dwóch milionów użytkowników. Obecnie termin „SSH” zwykle oznacza SSH-2, ponieważ Pierwsza wersja protokołu praktycznie nie jest obecnie używana ze względu na istotne niedociągnięcia. W 2006 roku protokół został zatwierdzony przez grupę roboczą IETF jako standard internetowy.

Istnieją dwie powszechne implementacje protokołu SSH: prywatna, komercyjna i bezpłatna wersja open source. Darmowa implementacja nazywa się OpenSSH. Do 2006 roku 80% komputerów w Internecie korzystało z OpenSSH. Zastrzeżona implementacja została opracowana przez SSH Communications Security, spółkę zależną będącą w całości własnością Tectia Corporation i jest bezpłatna do użytku niekomercyjnego. Implementacje te zawierają prawie taki sam zestaw poleceń.

Protokół SSH-2, w przeciwieństwie do protokołu telnet, jest odporny na ataki polegające na podsłuchiwaniu ruchu („sniffing”), ale nie jest odporny na ataki typu man-in-the-middle. Protokół SSH-2 jest również odporny na ataki polegające na przejęciu sesji, ponieważ nie jest możliwe dołączenie lub przejęcie już ustanowionej sesji.

Aby zapobiec atakom typu man-in-the-middle podczas łączenia się z hostem, którego klucz nie jest jeszcze znany klientowi, oprogramowanie klienckie pokazuje użytkownikowi „odcisk palca klucza”. Zaleca się dokładne sprawdzenie „zrzutu klucza” pokazywanego przez oprogramowanie klienckie z zrzutem klucza serwera, najlepiej uzyskanym za pośrednictwem sprawdzonych kanałów komunikacji lub osobiście.

Obsługa protokołu SSH jest dostępna we wszystkich systemach typu UNIX, a większość z nich ma klienta i serwer ssh jako standardowe narzędzia. Istnieje wiele implementacji klientów SSH dla systemów operacyjnych innych niż UNIX. Protokół zyskał dużą popularność po powszechnym rozwoju analizatorów ruchu i metod zakłócania pracy sieci lokalnych, jako alternatywne rozwiązanie dla niepewnego protokołu Telnet do zarządzania ważnymi węzłami.

Komunikacja za pomocą protokołu SSH

Aby pracować przez SSH, potrzebujesz serwera SSH i klienta SSH. Serwer nasłuchuje połączeń z komputerów klienckich i po nawiązaniu połączenia przeprowadza uwierzytelnianie, po czym rozpoczyna obsługę klienta. Klient służy do logowania się na zdalnym komputerze i wykonywania poleceń.

Protokoły SFTP i FTPS

Porównanie z FTPS

Najważniejszą rzeczą odróżniającą SFTP od standardowego FTP i FTPS jest to, że SFTP szyfruje absolutnie wszystkie polecenia, nazwy użytkowników, hasła i inne poufne informacje.

Zarówno protokoły FTPS, jak i SFTP wykorzystują kombinację algorytmów asymetrycznych (RSA, DSA), algorytmów symetrycznych (DES/3DES, AES, Twhofish itp.), a także algorytmu wymiany kluczy. Do uwierzytelnienia FTPS (a dokładniej SSL/TLS przez FTP) wykorzystuje certyfikaty X.509, natomiast SFTP (protokół SSH) wykorzystuje klucze SSH.

Certyfikaty X.509 zawierają klucz publiczny i pewne informacje o certyfikacie właściciela. Informacje te pozwalają natomiast zweryfikować integralność samego certyfikatu, autentyczność oraz właściciela certyfikatu. Certyfikaty X.509 mają odpowiedni klucz prywatny, który ze względów bezpieczeństwa jest zwykle przechowywany oddzielnie od certyfikatu.

Klucz SSH zawiera wyłącznie klucz publiczny (odpowiedni klucz prywatny jest przechowywany osobno). Nie zawiera żadnych informacji o właścicielu klucza. Niektóre implementacje SSH wykorzystują do uwierzytelniania certyfikaty X.509, ale tak naprawdę nie weryfikują całego łańcucha certyfikatów — używany jest jedynie klucz publiczny (co sprawia, że ​​takie uwierzytelnienie jest niekompletne).

wniosek

Protokół FTP niewątpliwie nadal odgrywa ważną rolę w przechowywaniu i dystrybucji informacji w sieci, pomimo swojego sędziwego wieku. Jest to wygodny, wielofunkcyjny i ustandaryzowany protokół. Na jego bazie zbudowano wiele archiwów plików, bez których prace techniczne nie byłyby tak efektywne. Ponadto jest łatwy w konfiguracji, a programy serwerowe i klienckie istnieją dla prawie wszystkich obecnych i mniej obecnych platform.

Z kolei jego chronione wersje rozwiązują problem poufności przechowywanych i przesyłanych danych we współczesnym świecie. Obydwa nowe protokoły mają swoje wady i zalety oraz pełnią nieco inne role. W obszarach, w których potrzebne jest archiwum plików, lepiej jest użyć FTPS, zwłaszcza jeśli wcześniej był tam używany klasyczny FTP. SFTP jest mniej powszechny ze względu na jego niezgodność ze starym protokołem, ale jest bezpieczniejszy i ma większą funkcjonalność, ponieważ jest częścią systemu zdalnego zarządzania.

Lista źródeł

Źródło: www.habr.com

Dodaj komentarz