Wstęp
Zaledwie tydzień temu pisałem referat na temat wskazany w tytule i natknąłem się na to, że, mówiąc krótko, dostępnych informacji w sieci jest niewiele. Głównie suche fakty i instrukcje dotyczące konfiguracji. Dlatego postanowiłem nieco poprawić tekst i opublikować go jako artykuł.
Czym jest FTP
FTP (File Transfer Protocol) – protokół transferu plików w sieci. Jest jednym z podstawowych protokołów Ethernet. Powstał w 1971 roku i początkowo działał 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). Zdefiniowany w RFC 959.
Protokół definiuje następujące aspekty:
- W jaki sposób będzie dokonywana kontrola błędów
- Metoda pakowania danych (jeśli pakowanie jest używane)
- W jaki sposób urządzenie nadające informuje, że zakończyło wiadomość
- W jaki sposób urządzenie odbierające informuje, że otrzymało wiadomość
Interakcja między klientem a serwerem
Przyjrzyjmy się bliżej procesom zachodzącym podczas pracy FTP. Połączenie jest inicjowane przez interpreter protokołu użytkownika. Kontrola wymiany odbywa się przez kanał sterujący w standardzie TELNET. Komendy FTP są generowane przez interpreter protokołu użytkownika i przesyłane do serwera. Odpowiedzi serwera są również wysyłane do użytkownika przez kanał sterujący. W ogólnym zarysie użytkownik ma możliwość nawiązania kontaktu z interpreterem protokołu serwera i innymi niż interpreter użytkownika metodami.
Podstawową cechą FTP jest to, że wykorzystuje podwójne połączenie. Jedno z nich służy do przesyłania poleceń do serwera i odbywa się domyślnie przez port TCP 21, który może być zmieniony. Połączenie zarządzające istnieje przez cały czas, gdy klient komunikuje się z serwerem. Kanał sterujący musi być otwarty podczas przesyłania danych między maszynami. W przypadku jego zamknięcia transfer danych zostaje wstrzymany. Przez drugie połączenie odbywa się bezpośredni transfer danych. Jest ono otwierane za każdym razem, gdy następuje transfer pliku między klientem a serwerem. W przypadku jednoczesnego przesyłania kilku plików, dla każdego z nich otwierany jest osobny kanał transferu.
FTP może działać w trybie aktywnym lub pasywnym, co wpływa na sposób nawiązywania połączenia. W trybie aktywnym klient tworzy kontrolne połączenie TCP z serwerem i przesyła mu swój adres IP oraz losowy numer portu klienta, po czym czeka, aż serwer nawiąże połączenie TCP z tym adresem i numerem portu. Jeśli klient znajduje się za zaporą i nie może przyjąć przychodzącego połączenia TCP, można użyć trybu pasywnego. W tym trybie klient wykorzystuje strumień sterujący do wysłania serwerowi polecenia PASV, a następnie otrzymuje od serwera jego adres IP oraz numer portu, które są następnie używane przez klienta do otwarcia strumienia danych z dowolnego portu.
Może się zdarzyć, że dane mogą być przesyłane na trzecią maszynę. W takim przypadku użytkownik organizuje kanał sterujący z dwoma serwerami i tworzy bezpośredni kanał danych między nimi. Polecenia sterujące przechodzą przez użytkownika, a dane bezpośrednio między serwerami.
Podczas przesyłania danych przez sieć można użyć czterech reprezentacji danych:
- ASCII – używane do tekstu. Dane, jeśli to konieczne, są konwertowane przed przesłaniem z reprezentacji znakowej na hoście nadawcy na „osiem-bitowy ASCII”, a (ponownie, jeśli to konieczne) na reprezentację znakową hosta odbierającego. W szczególności zmieniane są znaki nowej linii. W związku z tym tryb ten nie jest odpowiedni do plików zawierających nie tylko zwykły tekst.
- Tryb binarny – urządzenie nadawcze przesyła każdy plik bajt po bajcie, a odbiorca przechowuje strumień bajtów po jego odebraniu. Obsługa tego trybu została zalecana dla wszystkich implementacji FTP.
- EBCDIC – używane do przesyłania zwykłego tekstu między hostami w kodowaniu EBCDIC. W pozostałych kwestiach ten tryb jest podobny do trybu ASCII.
- Tryb lokalny – pozwala dwóm komputerom z identycznymi ustawieniami przesyłać dane w swoim własnym formacie bez konwersji na ASCII.
Przesyłanie danych może odbywać się w jednym z trzech trybów:
- Tryb strumieniowy – dane są przesyłane w postaci ciągłego strumienia, uwalniając FTP od jakiejkolwiek obróbki. Cała obróbka jest przeprowadzana przez TCP. Wskaźnik końca pliku nie jest potrzebny, z wyjątkiem oddzielenia danych na rekordy.
- Tryb blokowy – FTP dzieli dane na kilka bloków (blok nagłówka, ilość bajtów, pole danych), a następnie przesyła je przez TCP.
- Tryb kompresji – dane są kompresowane za pomocą jednego algorytmu (zwykle kodowaniem długości serii).
Serwer FTP – to serwer, który umożliwia korzystanie z protokołu transferu plików. Ma on szczególne cechy, które odróżniają go od zwykłych serwerów WWW:
- Wymagana jest autoryzacja użytkowników.
- Wszystkie operacje są prowadzone w ramach bieżącej sesji.
- Możliwość wykonywania różnych działań z systemem plików.
- Używany jest oddzielny kanał dla każdego połączenia.
Klient FTP – to program, który pozwala połączyć się z zdalnym serwerem przez FTP i wykonywać na nim potrzebne działania z elementami systemu plików. Klientem może być również przeglądarka, w której pasku adresu należy wpisać adres, przedstawiający ścieżkę do określonego katalogu lub pliku na zdalnym serwerze, zgodnie z ogólnym schematem URL:
ftp://user:pass@address:port/directory/file
Jednakże, korzystanie z przeglądarki internetowej w taki sposób pozwoli jedynie przeglądać lub pobierać interesujące pliki. Aby w pełni wykorzystać wszystkie zalety FTP, jako klient należy zastosować specjalistyczne oprogramowanie.
Autoryzacja FTP używa schematu nazwa użytkownika/hasło do udostępnienia dostępu. Nazwa użytkownika jest przesyłana na serwer poleceniem USER, a hasło poleceniem PASS. Jeśli podane przez klienta informacje są akceptowane przez serwer, ten wysyła klientowi zaproszenie i rozpoczyna się sesja. Użytkownicy mogą, jeśli serwer wspiera tę opcję, zalogować się bez podawania danych uwierzytelniających, ale serwer może zaoferować tylko ograniczony dostęp w takich sesjach.
Host oferujący usługi FTP może zapewnić anonimowy dostęp do FTP. Użytkownicy zwykle logują się jako „anonymous” (może być rozróżniane wielkością liter na niektórych serwerach FTP) jako nazwę użytkownika. Chociaż zazwyczaj prosi się użytkowników o podanie adresu ich poczty elektronicznej zamiast hasła, żadne potwierdzenie w rzeczywistości nie jest przeprowadzane. Wiele hostów FTP, które oferują aktualizacje oprogramowania, wspiera anonimowy dostęp.
Schemat protokołu
Interakcję „klient-serwer” podczas połączenia FTP można zobrazować w następujący sposób:

Bezpieczny FTP
FTP pierwotnie nie był zaprojektowany jako bezpieczny, ponieważ miał na celu komunikację między wieloma obiektami wojskowymi i instytucjami. Jednak wraz z rozwojem i rozpowszechnieniem Internetu zagrożenie nieautoryzowanego dostępu wzrosło wielokrotnie. Pojawiła się konieczność ochrony serwerów przed różnorodnymi atakami. W maju 1999 roku autorzy RFC 2577 sporządzili listę podatności w postaci następujących problemów:
- Ataki ukryte (bounce attacks)
- Ataki spoofingowe (spoof attacks)
- Ataki metodą brute-force (brute force attacks)
- Przechwytywanie pakietów, sniffing (packet capture, sniffing)
- Przechwytywanie portów (port stealing)
Zwykły FTP nie ma możliwości przesyłania danych w zaszyfrowanej postaci, w związku z czym nazwy użytkowników, hasła, polecenia i inne informacje mogą być łatwo przechwytywane przez złośliwców. Zwykłym rozwiązaniem tego problemu jest użycie „bezpiecznych” wersji protokołu zabezpieczonego protokołem TLS (FTPS) lub innego, bardziej zabezpieczonego protokołu, takiego jak SFTP/SCP, oferowanego przez większość realizacji protokołu Secure Shell.
FTPS
FTPS (FTP + SSL) to rozszerzenie standardowego protokołu transferu plików, które dodaje do jego podstawowej funkcjonalności możliwość nawiązywania zaszyfrowanych sesji za pomocą protokołu SSL (Secure Sockets Layer — poziom zabezpieczonych gniazd). Obecnie ochrona zapewniana jest przez jego bardziej zaawansowany odpowiednik TLS (Transport Layer Security — ochrona na poziomie transportowym).
SSL
Protokół SSL został zaproponowany przez firmę Netscape Communications w 1996 roku w celu zapewnienia bezpieczeństwa i poufności połączeń internetowych. Protokół obsługuje uwierzytelnianie (ustalanie tożsamości) klienta i serwera, nie jest zależny od aplikacji i jest przezroczysty dla protokołów HTTP, FTP i Telnet.
Protokół SSL Handshake składa się z dwóch etapów: uwierzytelniania serwera i opcjonalnego uwierzytelniania klienta. W pierwszym etapie serwer w odpowiedzi na żądanie klienta wysyła swój 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 potwierdza swoją tożsamość klientowi, odsyłając mu komunikat potwierdzony kluczem głównym klienta.
Dalsze dane są szyfrowane i podpisywane kluczami uzyskanymi na podstawie tego klucza głównego. W drugim etapie, który nie jest obowiązkowy, serwer wysyła prośbę do klienta, a klient potwierdza autentyczność serwera, odsyłając prośbę z własnym podpisem cyfrowym i certyfikatem klucza publicznego.
SSL wspiera różnorodne algorytmy kryptograficzne. W trakcie nawiązywania połączenia wykorzystywany jest system kryptograficzny z kluczem publicznym RSA. Po wymianie kluczy używane są różne szyfry: RC2, RC4, IDEA, DES oraz TripleDES. Wykorzystuje się także MD5 — algorytm generowania skrótów wiadomości. Składnia certyfikatów klucza publicznego opisana jest w X.509.
Jedną z ważnych zalet SSL jest jego całkowita niezależność od platformy sprzętowej i oprogramowania. Protokół został stworzony w oparciu o zasady przenośności, a ideologia jego budowy nie zależy od aplikacji, w których jest stosowany. Oprócz tego ważne jest, że na protokole SSL mogą być nakładane inne protokoły, aby zwiększyć stopień ochrony docelowych strumieni informacyjnych lub dostosować możliwości kryptograficzne SSL do określonych zadań.
Połączenie SSL

Dostarczany bezpieczny kanał SSL ma trzy główne cechy:
- Kanał jest prywatny. Szyfrowanie stosowane jest dla wszystkich wiadomości po prostym dialogu, służącym do ustalenia sekretnego klucza.
- Kanał jest uwierzytelniony. Strona serwerowa dialogu zawsze jest uwierzytelniona, podczas gdy strona kliencka jest uwierzytelniana opcjonalnie.
- Kanał jest niezawodny. Transport wiadomości obejmuje weryfikację integralności (z wykorzystaniem MAC).
Cechy FTPS
Istnieją dwie implementacje FTPS, które wykorzystują różne metody zapewnienia bezpieczeństwa:
- Metoda niejawna zakłada użycie standardowego protokołu SSL z nawiązywaniem sesji przed wysłaniem danych, co narusza kompatybilność z tradycyjnymi klientami i serwerami FTP. Dla zapewnienia zgodności z klientami, którzy nie obsługują FTPS, kontrolne połączenie używa portu TCP 990, a do przesyłania danych — 989. Pozwala to na zachowanie standardowego portu 21 dla protokołu FTP. Metoda ta uznawana jest za przestarzałą.
- FTPS jawny jest znacznie wygodniejszy, ponieważ używa standardowych poleceń FTP, ale podczas odpowiedzi szyfruje dane, co pozwala na używanie tego samego połączenia zarządzającego zarówno dla FTP, jak i FTPS. Klient musi wyraźnie zażądać szyfrowanej transmisji danych od serwera, a następnie zatwierdzić metodę szyfrowania. Jeśli klient nie zażąda szyfrowanej transmisji, serwer FTPS ma prawo do zachowania lub zamknięcia nieszyfrowanego połączenia. Mechanizm uzgadniania identyfikacji i ochrony danych został dodany w ramach RFC 2228, który obejmuje nową komendę FTP AUTH. Chociaż ten standard nie definiuje wyraźnie mechanizmów ochrony, określa, że zabezpieczone połączenie powinno być inicjowane przez klienta przy użyciu opisanego wcześniej algorytmu. Jeśli zabezpieczone połączenia nie są obsługiwane przez serwer, powinien zostać zwrócony kod błędu 504. Klienci FTPS mogą uzyskać informacje o obsługiwanych przez serwer protokołach ochrony za pomocą polecenia FEAT, jednak serwer nie jest zobowiązany do ujawnienia, jakie poziomy bezpieczeństwa obsługuje. Najbardziej powszechne polecenia FTPS to AUTH TLS i AUTH SSL, zapewniające odpowiednio ochronę TLS i SSL.
SFTP
SFTP (Secure File Transfer Protocol) – protokół aplikacyjny do transferu plików, działający na bezpiecznym kanale. Nie należy mylić z (Simple File Transfer Protocol), który ma tę samą akronim. Jeśli FTPS jest jedynie rozszerzeniem FTP, to SFTP to oddzielny, niezwiązany z nim protokół, który jako podstawę wykorzystuje SSH (Secure Shell – bezpieczna powłoka).
Secure Shell
Prace nad protokołem prowadziła jedna z grup IETF pod nazwą Secsh. Dokumentacja robocza dotycząca nowego protokołu SFTP nie stała się oficjalnym standardem, ale zaczęła być aktywnie stosowana w rozwoju aplikacji. W późniejszym czasie wydano sześć wersji protokołu. Jednak stopniowe zwiększanie funkcjonalności doprowadziło do podjęcia 14 sierpnia 2006 roku decyzji o zaprzestaniu prac nad rozwojem protokołu ze względu na realizację głównego celu projektu (rozwój SSH) oraz brak wystarczającego poziomu ekspertyzy potrzebnej do przejścia do opracowania pełnoprawnego protokołu zdalnego systemu plików.
SSH – to protokół sieciowy umożliwiający zdalne zarządzanie systemem operacyjnym oraz tunelowanie połączeń TCP (na przykład do przesyłania plików). Funkcjonalnie przypomina protokoły Telnet i rlogin, ale, w przeciwieństwie do nich, szyfruje cały ruch, łącznie z przesyłanymi hasłami. SSH pozwala na wybór różnych algorytmów szyfrowania. Klienty SSH oraz serwery SSH dostępne są dla większości systemów operacyjnych.
SSH umożliwia bezpieczne przesyłanie w niezabezpieczonym środowisku praktycznie każdego innego protokołu sieciowego. Dzięki temu można nie tylko zdalnie pracować na komputerze poprzez powłokę, ale również przesyłać przez zaszyfrowany kanał strumień audio lub wideo (na przykład z kamery internetowej). Dodatkowo SSH może stosować kompresję przesyłanych danych przed ich szyfrowaniem, co jest wygodne na przykład podczas zdalnego uruchamiania klientów X Window System.
Pierwsza wersja protokołu, SSH-1, została opracowana w 1995 roku przez badacza Tatu Ulonena z Technicznego Uniwersytetu w Helsinkach (Finlandia). SSH-1 został stworzony w celu zapewnienia większej prywatności niż protokoły rlogin, telnet i rsh. W 1996 roku powstała bezpieczniejsza wersja protokołu, SSH-2, która nie jest kompatybilna z SSH-1. Protokół zyskał jeszcze większą popularność, a do roku 2000 miał około dwóch milionów użytkowników. Obecnie pod nazwą „SSH” zazwyczaj kryje się właśnie SSH-2, ponieważ pierwsza wersja protokołu z powodu poważnych wad jest obecnie praktycznie nieużywana. W 2006 roku protokół został zatwierdzony przez grupę roboczą IETF jako standard internetowy.
Są dwie rozpowszechnione realizacje SSH: prywatna komercyjna i darmowa wersja wolna. Wolna realizacja nosi nazwę OpenSSH. Do 2006 roku 80% komputerów w sieci Internet wykorzystywało właśnie OpenSSH. Prywatna realizacja jest rozwijana przez organizację SSH Communications Security, która jest w 100% poddostawcą firmy Tectia; jest bezpłatna do użytku niekomercyjnego. Te realizacje zawierają praktycznie identyczny zestaw poleceń.
Protokół SSH-2, w przeciwieństwie do protokołu telnet, jest odporny na ataki podsłuchu ruchu („sniffing”), ale nie jest odporny na ataki typu „człowiek w środku”. Protokół SSH-2 jest również odporny na ataki polegające na przejęciu sesji, ponieważ niemożliwe jest przyłączenie się do już ustanowionej sesji lub jej przechwycenie.
Aby zapobiec atakom „człowiek w środku” podczas łączenia z hostem, którego klucz nie jest jeszcze znany klientowi, oprogramowanie klienckie wyświetla użytkownikowi „odcisk klucza”. Zaleca się dokładne sprawdzenie odcisku klucza wyświetlanego przez oprogramowanie klienckie z odciskiem klucza serwera, najlepiej uzyskanym za pośrednictwem niezawodnych kanałów komunikacyjnych lub osobiście.
Wsparcie dla SSH jest zaimplementowane we wszystkich systemach podobnych do UNIX, a na większości z nich wśród standardowych narzędzi znajdują się klient i serwer ssh. Istnieje wiele wdrożeń klientów SSH dla systemów nie-UNIX. Protokół zyskał dużą popularność po szerokim rozwoju analizatorów ruchu i metod zakłócania pracy sieci lokalnych jako alternatywa dla niebezpiecznego protokołu Telnet do zarządzania kluczowymi węzłami.
Łączenie za pomocą SSH
Do pracy z SSH potrzebny jest serwer SSH i klient SSH. Serwer nasłuchuje połączeń od maszyn klienckich i przy nawiązaniu połączenia przeprowadza uwierzytelnianie, po czym zaczyna obsługę klienta. Klient jest używany do logowania się na zdalnej maszynie oraz wykonywania poleceń.

Porównanie z FTPS
Najważniejszą różnicą między SFTP a standardowym FTP i FTPS jest to, że SFTP szyfruje absolutnie wszystkie komendy, nazwy użytkowników, hasła i inne poufne informacje.
Oba protokoły FTPS i SFTP wykorzystują kombinację algorytmów asymetrycznych (RSA, DSA), algorytmów symetrycznych (DES/3DES, AES, Twhofish itp.), a także algorytm do wymiany kluczy. Do uwierzytelniania FTPS (lub, mówiąc dokładniej, SSL/TLS w protokole FTP) korzysta z certyfikatów X.509, podczas gdy SFTP (protokół SSH) wykorzystuje klucze SSH.
Certyfikaty X.509 zawierają klucz publiczny oraz pewne informacje o certyfikacie właściciela. Informacje te pozwalają z drugiej strony zweryfikować integralność samego certyfikatu, autentyczność oraz właściciela świadectwa. Certyfikat X.509 posiada odpowiedni klucz prywatny, który zazwyczaj jest przechowywany osobno od certyfikatu ze względów bezpieczeństwa.
Klucz SSH zawiera tylko klucz publiczny (odpowiadający mu klucz prywatny jest przechowywany osobno). Nie zawiera żadnych informacji o właścicielu klucza. Niektóre implementacje SSH wykorzystują certyfikaty X.509 do uwierzytelniania, ale w rzeczywistości nie sprawdzają całego łańcucha certyfikatów — używany jest tylko klucz publiczny (co czyni takie uwierzytelnienie niekompletnym).
Podsumowanie
Protokół FTP z pewnością nadal odgrywa ważną rolę w przechowywaniu i dystrybucji informacji w sieci, mimo swojego zacnego wieku. Jest to wygodny, wielofunkcyjny i ustandaryzowany protokół. Na jego podstawie powstało wiele archiwów plików, bez których prace techniczne byłyby zdecydowanie mniej efektywne. Ponadto, jest łatwy w konfiguracji, a serwery i klienty programowe istnieją praktycznie dla wszystkich aktualnych i mniej popularnych platform.
Z kolei jego zabezpieczone wersje rozwiązują problem prywatności przechowywanych i przesyłanych danych w dzisiejszym świecie. Oba nowe protokoły mają swoje zalety i wady oraz pełnią nieco różne role. W obszarach, gdzie potrzebne jest konkretnie archiwum plików, lepiej wykorzystać FTPS, szczególnie jeśli wcześniej używano klasycznego FTP. SFTP jest mniej rozpowszechniony z powodu braku kompatybilności ze starym protokołem, ale jest bardziej zabezpieczony i ma większą funkcjonalność, ponieważ jest częścią systemu zdalnego zarządzania.
Lista źródeł
Źródło: habr.com
