Vorwort
Vor einer Woche schrieb ich eine Abhandlung über das im Titel genannte Thema und stellte fest, dass es, sagen wir mal, nicht so viele aufschlussreiche Informationen im Netz gibt. Hauptsächlich trockene Fakten und Anleitungen zur Einrichtung. Daher beschloss ich, den Text etwas zu überarbeiten und als Artikel zu veröffentlichen.
Was ist FTP
FTP (File Transfer Protocol) ist ein Protokoll zur Übertragung von Dateien über Netzwerke. Es gehört zu den grundlegenden Ethernet-Protokollen. Es wurde 1971 eingeführt und arbeitete ursprünglich in den DARPA-Netzen. Heute basiert die Dateiübertragung, wie auch HTTP, auf einem Modellsystem, das aus einer Vielzahl von TCP/IP-Protokollen (Transmission Control Protocol/Internet Protocol) besteht. Es ist in RFC 959 definiert.
Das Protokoll definiert Folgendes:
- Wie die Fehlerkontrolle durchgeführt wird
- Die Methode der Datenverpackung (falls Verpackung verwendet wird)
- Wie das sendende Gerät signalisiert, dass es die Nachricht beendet hat
- Wie das empfangende Gerät signalisiert, dass es die Nachricht erhalten hat
Interaktion zwischen Client und Server
Lassen Sie uns die Prozesse, die beim Arbeiten mit FTP ablaufen, näher betrachten. Die Verbindung wird vom Protokoll-Interpreter des Benutzers initiiert. Die Verwaltung des Austauschs erfolgt über einen Kontrollkanal nach dem TELNET-Standard. FTP-Befehle werden vom Protokoll-Interpreter des Benutzers generiert und an den Server gesendet. Die Serverantworten werden an den Benutzer ebenfalls über den Kontrollkanal gesendet. Im Allgemeinen hat der Benutzer die Möglichkeit, Kontakt mit dem Protokoll-Interpreter des Servers mithilfe von Methoden herzustellen, die sich von denen des Benutzer-Protokoll-Interpreters unterscheiden.
Das Hauptmerkmal von FTP besteht darin, dass es eine doppelte Verbindung verwendet. Eine davon wird für die Übermittlung von Befehlen an den Server verwendet und erfolgt standardmäßig über TCP-Port 21, der geändert werden kann. Die Steuerverbindung besteht so lange, wie der Client mit dem Server kommuniziert. Der Kontrollkanal muss offen sein, während Daten zwischen den Maschinen übertragen werden. Bei Schließung wird die Datenübertragung unterbrochen. Über die zweite Verbindung erfolgt die direkte Datenübertragung. Diese wird jedes Mal geöffnet, wenn eine Datei zwischen Client und Server übertragen wird. Wenn mehrere Dateien gleichzeitig übertragen werden, wird für jede von ihnen ein eigener Übertragungskanal eröffnet.
FTP kann im aktiven oder passiven Modus arbeiten, was den Verbindungsaufbau beeinflusst. Im aktiven Modus stellt der Client eine Steuer-TCP-Verbindung zum Server her und sendet diesem seine IP-Adresse sowie eine zufällige Client-Portnummer, bevor er darauf wartet, dass der Server die TCP-Verbindung mit dieser Adresse und Portnummer aufbaut. Wenn sich der Client hinter einer Firewall befindet und keine eingehende TCP-Verbindung akzeptieren kann, kann der passive Modus verwendet werden. In diesem Modus nutzt der Client den Steuerkanal, um dem Server den Befehl PASV zu senden und erhält anschließend von diesem dessen IP-Adresse und Portnummer, die dann vom Client verwendet werden, um einen Datenstrom von seinem zufälligen Port zu öffnen.
Es kann vorkommen, dass Daten an eine dritte Maschine übertragen werden. In diesem Fall richtet der Benutzer einen Steuerkanal zwischen zwei Servern ein und organisiert einen direkten Datenkanal zwischen ihnen. Die Steuerbefehle gehen über den Benutzer, die Daten jedoch direkt zwischen den Servern.
Bei der Datenübertragung über ein Netzwerk können vier Datenformate verwendet werden:
- ASCII – wird für Text verwendet. Daten werden, falls erforderlich, vor der Übertragung vom Zeichenformat des sendenden Hosts in 'achtbitige ASCII' umgewandelt und (nochmals, falls erforderlich) in das Zeichenformat des empfangenden Hosts. Insbesondere werden die Zeilenumbruchzeichen geändert. Daher ist dieser Modus nicht für Dateien geeignet, die nicht nur normalen Text enthalten.
- Binärmodus – das sendende Gerät sendet jede Datei byteweise, und der Empfänger speichert den Stream von Bytes beim Empfang. Die Unterstützung dieses Modus wurde für alle FTP-Implementierungen empfohlen.
- EBCDIC – wird verwendet, um normalen Text zwischen Hosts im EBCDIC-Format zu übertragen. Ansonsten ähnelt dieser Modus dem ASCII-Modus.
- Lokaler Modus – ermöglicht es zwei Computern mit identischen Einstellungen, Daten in ihrem eigenen Format ohne Umwandlung in ASCII zu senden.
Die Datenübertragung kann in einem der drei Modi erfolgen:
- Streammodus – die Daten werden als kontinuierlicher Datenstrom gesendet, wodurch FTP von jeglicher Verarbeitung befreit wird. Stattdessen erfolgt die gesamte Verarbeitung über TCP. Ein End-of-File-Indikator ist nicht erforderlich, es sei denn, die Daten müssen in Datensätze aufgeteilt werden.
- Blockmodus – FTP teilt Daten in mehrere Blöcke auf (Headerblock, Byteanzahl, Datenfeld) und überträgt sie dann über TCP.
- Komprimierungsmodus – Daten werden mit einem einheitlichen Algorithmus (in der Regel durch Laufzeitcodierung) komprimiert.
FTP-Server – ist ein Server, der die Nutzung des File Transfer Protocols ermöglicht. Er hat bestimmte Besonderheiten, die ihn von gewöhnlichen Webservern unterscheiden:
- Benutzerauthentifizierung ist erforderlich
- Alle Operationen werden innerhalb der aktuellen Sitzung durchgeführt
- Möglichkeit zur Durchführung verschiedener Aktionen mit dem Dateisystem
- Es wird ein separater Kanal für jede Verbindung verwendet
FTP-Client – ist ein Programm, das es ermöglicht, sich über FTP mit einem entfernten Server zu verbinden und auch notwendige Aktionen mit den Elementen des Dateisystems durchzuführen. Ein Browser kann als Client fungieren, indem in die Adresszeile eine Adresse eingegeben wird, die den Pfad zu einem bestimmten Verzeichnis oder einer Datei auf dem entfernten Server darstellt, gemäß dem allgemeinen Blockschema von URLs:
ftp://user:pass@address:port/directory/file
Die Verwendung eines Webbrowsers in diesem Kontext erlaubt jedoch lediglich das Anzeigen oder Herunterladen interessierender Dateien. Um alle Vorteile von FTP vollständig zu nutzen, sollte spezialisierte Software als Client verwendet werden.
FTP-Authentifizierung verwendet das Schema Benutzername/Passwort, um Zugang zu gewähren. Der Benutzername wird an den Server mit dem Befehl USER gesendet, das Passwort mit dem Befehl PASS. Wenn die vom Client bereitgestellten Informationen vom Server akzeptiert werden, sendet der Server eine Aufforderung an den Client, und die Sitzung beginnt. Benutzer können, sofern der Server diese Funktion unterstützt, sich ohne Angabe von Anmeldedaten einloggen, aber der Server kann nur eingeschränkten Zugriff für solche Sitzungen gewähren.
Der Host, der den FTP-Dienst anbietet, kann anonymen Zugang zum FTP bereitstellen. Benutzer melden sich üblicherweise als „anonymous“ (kann bei einigen FTP-Servern zu Groß- und Kleinschreibung abhängig sein) als Benutzername an. Obwohl Benutzer normalerweise gebeten werden, ihre E-Mail-Adresse anstelle eines Passworts anzugeben, wird in der Regel keine tatsächliche Prüfung durchgeführt. Viele FTP-Hosts, die Software-Updates bereitstellen, unterstützen anonymen Zugang.
Protokollschema
Die Interaktion zwischen „Client-Server“ bei einer FTP-Verbindung lässt sich folgendermaßen veranschaulichen:

Sicheres FTP
FTP wurde ursprünglich nicht als sicher konzipiert, da es für die Kommunikation zwischen mehreren militärischen Einrichtungen und Objekten gedacht war. Mit der Entwicklung und Verbreitung des Internets ist die Gefahr des unbefugten Zugriffs jedoch erheblich gestiegen. Es entstand die Notwendigkeit, Server vor verschiedenen Arten von Angriffen zu schützen. Im Mai 1999 hielten die Autoren der RFC 2577 die Schwachstellen in folgender Liste von Problemen fest:
- Verdeckte Angriffe (Bounce-Angriffe)
- Spoofing-Angriffe (Spoof-Angriffe)
- Brute-Force-Angriffe (Brute-Force-Angriffe)
- Paketüberwachung, Sniffing (Packet Capture, Sniffing)
- Port-Stealing (Port-Diebstahl)
Standard-FTP ermöglicht keine Übertragung von Daten in verschlüsselter Form, weshalb Benutzernamen, Passwörter, Kommandos und andere Informationen von Angreifern relativ einfach abgefangen werden können. Eine gängige Lösung für dieses Problem ist die Verwendung von „sicheren“, TLS-geschützten Versionen des verwundbaren Protokolls (FTPS) oder eines anderen, sichereren Protokolls wie SFTP/SCP, das mit den meisten Implementierungen des Secure Shell-Protokolls bereitgestellt wird.
FTPS
FTPS (FTP + SSL) ist eine Erweiterung des Standard-Dateiübertragungsprotokolls, die seiner grundlegenden Funktionalität die Möglichkeit hinzufügt, verschlüsselte Sitzungen mithilfe des SSL-Protokolls (Secure Sockets Layer - Schicht für gesicherte Sockel) zu erstellen. Heutzutage wird der Schutz durch seinen fortschrittlicheren Nachfolger TLS (Transport Layer Security - Transportsicherheit) gewährleistet.
SSL
Das SSL-Protokoll wurde 1996 von der Firma Netscape Communications eingeführt, um die Sicherheit und Vertraulichkeit von Internetverbindungen zu gewährleisten. Das Protokoll unterstützt die Authentifizierung von Client und Server, ist unabhängig von Anwendungen und transparent für die Protokolle HTTP, FTP und Telnet.
Der SSL-Handshake besteht aus zwei Phasen: der Authentifizierung des Servers und der optionalen Authentifizierung des Clients. In der ersten Phase sendet der Server als Antwort auf die Anfrage des Clients sein Zertifikat und die Verschlüsselungsparameter. Anschließend generiert der Client einen Master-Schlüssel, verschlüsselt ihn mit dem öffentlichen Schlüssel des Servers und sendet ihn an den Server. Der Server entschlüsselt den Master-Schlüssel mit seinem privaten Schlüssel und bestätigt seine Authentizität gegenüber dem Client, indem er ihm eine Nachricht zurücksendet, die mit dem Master-Schlüssel des Clients signiert ist.
Die nachfolgenden Daten werden verschlüsselt und mit Schlüsseln signiert, die auf Grundlage dieses Master-Schlüssels erhalten werden. In der zweiten Phase, die optional ist, sendet der Server eine Anfrage an den Client, und der Client bestätigt die Authentizität des Servers, indem er die Anfrage mit seiner eigenen digitalen Signatur und dem öffentlichen Schlüsselzertifikat zurücksendet.
SSL unterstützt eine Vielzahl von kryptografischen Algorithmen. Bei der Verbindung wird das RSA-Öffentlichkeitsschlüsselsystem verwendet. Nach dem Schlüsselaustausch kommen verschiedene Verschlüsselungen zum Einsatz: RC2, RC4, IDEA, DES und TripleDES. Auch MD5 wird verwendet – ein Algorithmus zur Erstellung von Nachrichten-Digests. Die Syntax der öffentlichen Schlüsselsignaturen wird in X.509 beschrieben.
Einer der bedeutendsten Vorteile von SSL ist seine vollständige Software- und plattformunabhängige Natur. Das Protokoll wurde auf den Prinzipien der Portabilität entwickelt und dessen Ideologie ist unabhängig von den Anwendungen, in denen es verwendet wird. Darüber hinaus ist es wichtig, dass über das SSL-Protokoll auch andere Protokolle transparent gelegt werden können, entweder um den Schutz der Zielinformationsströme weiter zu erhöhen oder um die kryptografischen Fähigkeiten von SSL an eine spezifische Aufgabe anzupassen.
SSL-Verbindung

Der bereitgestellte sichere SSL-Kanal hat drei Hauptmerkmale:
- Der Kanal ist privat. Die Verschlüsselung wird für alle Nachrichten nach einem einfachen Dialog verwendet, der zur Bestimmung des geheimen Schlüssels dient.
- Der Kanal ist authentifiziert. Die serielle Seite des Dialogs wird stets authentifiziert, während die Client-Seite optional authentifiziert wird.
- Der Kanal ist zuverlässig. Der Transport von Nachrichten umfasst eine Integritätsprüfung (mit MAC).
Besonderheiten von FTPS
Es gibt zwei Implementierungen von FTPS, die unterschiedliche Methoden zur Bereitstellung von Sicherheit verwenden:
- Die implizite Methode sieht die Verwendung des Standard-SSL-Protokolls vor, bei dem eine Sitzung vor dem Datenaustausch eingerichtet wird, was die Kompatibilität mit herkömmlichen FTP-Clients und -Servern beeinträchtigt. Für die Rückwärtskompatibilität mit Clients, die FTPS nicht unterstützen, wird der TCP-Port 990 für die Steuerverbindung und 989 für den Datentransfer verwendet, was den Standardport 21 für das FTP-Protokoll beibehält. Diese Methode gilt als veraltet.
- Das explizite FTPS-Angebot ist deutlich benutzerfreundlicher, da es die Standard-FTP-Befehle verwendet und bei der Antwort die Daten verschlüsselt. Dies ermöglicht die Nutzung einer einzigen Steuerverbindung sowohl für FTP als auch für FTPS. Der Client muss den Server ausdrücklich um eine sichere Datenübertragung bitten und anschließend die Verschlüsselungsmethode genehmigen. Wenn der Client keine sichere Übertragung anfordert, hat der FTPS-Server das Recht, die ungesicherte Verbindung entweder aufrechtzuerhalten oder zu schließen. Der Mechanismus zur Aushandlung der Identifikation und Datensicherung wurde unter RFC 2228 hinzugefügt, das einen neuen FTP-Befehl AUTH umfasst. Obwohl dieser Standard die Schutzmechanismen nicht ausdrücklich definiert, besagt er, dass die sichere Verbindung vom Client gemäß dem oben beschriebenen Algorithmus initiiert werden muss. Wenn sichere Verbindungen vom Server nicht unterstützt werden, muss der Fehlercode 504 zurückgegeben werden. FTPS-Clients können Informationen über die vom Server unterstützten Schutzprotokolle mit dem Befehl FEAT abrufen; der Server ist jedoch nicht verpflichtet, die unterstützten Sicherheitsstufen offenzulegen. Die gebräuchlichsten FTPS-Befehle sind AUTH TLS und AUTH SSL, die jeweils TLS- und SSL-Schutz bieten.
SFTP
SFTP (Secure File Transfer Protocol) ist ein Anwendungsprotokoll zur Dateiübertragung, das über einen sicheren Kanal arbeitet. Verwechseln Sie es nicht mit dem (Simple File Transfer Protocol), das dieselbe Abkürzung hat. Während FTPS lediglich eine Erweiterung von FTP ist, ist SFTP ein eigenständiges und von ihm unabhängig operierendes Protokoll, das SSH (Secure Shell - sichere Shell) als Basis verwendet.
Sichere Shell
Die Entwicklung des Protokolls wurde von einer IETF-Gruppe namens Secsh durchgeführt. Die Arbeitsdokumentation zum neuen SFTP-Protokoll wurde kein offizieller Standard, fand jedoch schnell Anwendung bei der Entwicklung von Anwendungen. In der Folge wurden sechs Versionen des Protokolls veröffentlicht. Jedoch führte die schrittweise Erweiterung seiner Funktionalität dazu, dass am 14. August 2006 beschlossen wurde, die Arbeiten an der Weiterentwicklung des Protokolls aufgrund der Erfüllung der Hauptaufgabe des Projekts (Entwicklung von SSH) und des Mangels an ausreichendem Fachwissen für die Entwicklung eines vollständigen Protokolls für ein entferntes Dateisystem einzustellen.
SSH ist ein Netzwerkprotokoll, das die Fernsteuerung von Betriebssystemen und das Tunneln von TCP-Verbindungen (zum Beispiel für den Dateitransfer) ermöglicht. Es ist in seiner Funktionalität verwandt mit den Protokollen Telnet und rlogin, verschlüsselt jedoch im Gegensatz zu diesen den gesamten Datenverkehr, einschließlich der übertragenden Passwörter. SSH erlaubt die Auswahl verschiedener Verschlüsselungsalgorithmen. SSH-Clients und SSH-Server sind für die meisten Netzwerkbetriebssysteme verfügbar.
SSH ermöglicht die sichere Übertragung nahezu jedes anderen Netzwerkprotokolls in einer ungesicherten Umgebung. Damit kann man nicht nur remote auf einem Computer über eine Kommandozeile arbeiten, sondern auch über einen verschlüsselten Kanal Audio- oder Video-Streams (zum Beispiel von einer Webcam) übertragen. Außerdem kann SSH die übertragenen Daten komprimieren, bevor sie verschlüsselt werden, was zum Beispiel für das entfernte Starten von X WindowSystem-Clients nützlich ist.
Die erste Version des Protokolls, SSH-1, wurde 1995 von dem Forscher Tatu Ylönen an der Technischen Universität Helsinki (Finnland) entwickelt. SSH-1 wurde zur Gewährleistung einer höheren Vertraulichkeit als die Protokolle rlogin, telnet und rsh entwickelt. Im Jahr 1996 wurde eine sicherere Version des Protokolls, SSH-2, entwickelt, die nicht mit SSH-1 kompatibel ist. Das Protokoll erlangte noch größere Popularität, und bis zum Jahr 2000 gab es etwa zwei Millionen Nutzer. Heutzutage wird unter dem Begriff „SSH“ in der Regel SSH-2 verstanden, da die erste Version des Protokolls aufgrund erheblicher Mängel praktisch nicht mehr verwendet wird. Im Jahr 2006 wurde das Protokoll von der IETF-Arbeitsgruppe als Internet-Standard anerkannt.
Es gibt zwei verbreitete Implementierungen von SSH: eine kommerzielle und eine kostenlose Open-Source-Version. Die freie Implementierung trägt den Namen OpenSSH. Bis 2006 nutzten 80 % der Computer im Internet tatsächlich OpenSSH. Die kommerzielle Implementierung wird von SSH Communications Security entwickelt, einer hundertprozentigen Tochtergesellschaft von Tectia, und ist für die nichtkommerzielle Nutzung kostenlos. Diese Implementierungen enthalten praktisch den gleichen Befehlssatz.
Das SSH-2-Protokoll ist im Gegensatz zum Telnet-Protokoll gegen Abhörangriffe („Sniffing“) resistent, jedoch anfällig für „Man-in-the-Middle“-Angriffe. Das SSH-2-Protokoll ist auch resistent gegen Session-Hijacking-Angriffe, da es nicht möglich ist, sich in eine bereits etablierte Sitzung einzuschalten oder diese abzufangen.
Um Man-in-the-Middle-Angriffe beim Verbindungsaufbau zu einem Host, dessen Schlüssel dem Client noch nicht bekannt ist, zu verhindern, zeigt die Client-Software dem Benutzer einen „Schlüsseldruck“ (engl. key fingerprint) an. Es wird empfohlen, den angezeigten „Schlüsseldruck“ der Client-Software sorgfältig mit dem Schlüsseldruck des Servers zu vergleichen, idealerweise über vertrauenswürdige Kommunikationskanäle oder persönlich.
SSH wird in allen UNIX-ähnlichen Systemen unterstützt, und auf den meisten von ihnen sind Client und Server ssh als Standard-Utilities vorhanden. Es gibt viele Implementierungen von SSH-Clients auch für Nicht-UNIX-Betriebssysteme. Das Protokoll erfreute sich großer Beliebtheit nach der weitreichenden Entwicklung von Traffic-Analyse-Tools und Methoden zur Störung von lokalen Netzwerken, als sichere Alternative zum unsicheren Telnet-Protokoll zur Verwaltung wichtiger Knoten.
Kommunikation mit SSH
Für die Nutzung von SSH wird ein SSH-Server und ein SSH-Client benötigt. Der Server lauscht auf Verbindungen von Client-Maschinen und authentifiziert sich beim Verbindungsaufbau, bevor er den Client bedient. Der Client wird zum Zugriff auf die entfernte Maschine und zur Ausführung von Befehlen verwendet.

Vergleich mit FTPS
Das Hauptmerkmal, das SFTP von standardmäßigem FTP und FTPS unterscheidet, ist, dass SFTP absolut alle Befehle, Benutzernamen, Passwörter und andere vertrauliche Informationen verschlüsselt.
Sowohl die Protokolle FTPS als auch SFTP verwenden eine Kombination aus asymmetrischen Algorithmen (RSA, DSA), symmetrischen Algorithmen (DES/3DES, AES, Twhofish usw.) sowie Schlüsselvereinbarungsalgorithmen. Für die Authentifizierung verwendet FTPS (oder genauer gesagt SSL/TLS über das FTP-Protokoll) X.509-Zertifikate, während SFTP (SSH-Protokoll) SSH-Schlüssel verwendet.
X.509-Zertifikate beinhalten den öffentlichen Schlüssel und einige Informationen über den Zertifikatsinhaber. Diese Informationen ermöglichen es wiederum, die Integrität des Zertifikats, die Echtheit und den Eigentümer des Weißen Zertifikats zu überprüfen. Jedes X.509-Zertifikat hat den entsprechenden privaten Schlüssel, der normalerweise aus Sicherheitsgründen getrennt vom Zertifikat aufbewahrt wird.
Der SSH-Schlüssel enthält nur den öffentlichen Schlüssel (der dazugehörige private Schlüssel wird separat aufbewahrt). Er enthält keine Informationen über den Besitzer des Schlüssels. Einige SSH-Implementierungen verwenden X.509-Zertifikate zur Authentifizierung, überprüfen jedoch tatsächlich nicht die gesamte Zertifikatskette – es wird nur der öffentliche Schlüssel verwendet (was eine unvollständige Authentifizierung zur Folge hat).
Fazit
Das FTP-Protokoll spielt zweifellos immer noch eine wichtige Rolle bei der Speicherung und Verbreitung von Informationen im Internet, trotz seines hohen Alters. Es handelt sich um ein praktisches, multifunktionales und standardisiertes Protokoll. Darauf basieren viele Dateiarichive, ohne die technische Arbeiten nicht so effizient wären. Außerdem ist es einfach einzurichten, und Server- und Client-Programme existieren praktisch für alle relevanten und weniger relevanten Plattformen.
Seine sicheren Versionen lösen im modernen Bereich das Problem der Vertraulichkeit gespeicherter und übertragener Daten. Beide neuen Protokolle haben ihre Vor- und Nachteile und erfüllen ein wenig unterschiedliche Rollen. In Bereichen, in denen ein Dateiarichiv erforderlich ist, ist es vorzuziehen, FTPS zu verwenden, insbesondere wenn dort zuvor das klassische FTP genutzt wurde. SFTP ist aufgrund seiner Inkompatibilität mit dem alten Protokoll weniger verbreitet, bietet jedoch mehr Sicherheit und Funktionalität, da es Teil eines Systems zur Remote-Verwaltung ist.
Literaturverzeichnis
Quelle: habr.com
