Voorwoord
Een week geleden schreef ik een paper over het in de titel genoemde onderwerp en merkte ik op dat er, om het zo te zeggen, niet veel informatieve inhoud op het internet te vinden is. Vooral droge feiten en instructies voor configuratie. Daarom besloot ik de tekst iets aan te passen en deze als artikel te publiceren.
Wat is FTP
FTP (File Transfer Protocol) is een protocol voor bestandsoverdracht via netwerken. Het is een van de basisprotocollen van Ethernet. Het werd geïntroduceerd in 1971 en functioneerde aanvankelijk in de DARPA-netwerken. Tegenwoordig, net als HTTP, is bestandsoverdracht gebaseerd op een model dat bestaat uit een combinatie van TCP/IP-protocollen (Transmission Control Protocol/Internet Protocol). Het is gedefinieerd in RFC 959.
Het protocol definieert het volgende:
- Hoe foutcontrole zal plaatsvinden
- De gegevens verpakkingsmethode (indien verpakkingen worden gebruikt)
- Hoe het verzendende apparaat aangeeft dat het bericht is voltooid
- Hoe het ontvangende apparaat aangeeft dat het bericht is ontvangen
Interactie tussen klant en server
Laten we de processen die plaatsvinden tijdens het gebruik van FTP nader bekijken. De verbinding wordt geïnitialiseerd door de protocolinterpreter van de gebruiker. Het beheer van de uitwisseling gebeurt via de controlekanaal volgens de TELNET-standaard. FTP-commando's worden gegenereerd door de protocolinterpreter van de gebruiker en naar de server verzonden. De antwoorden van de server worden ook naar de gebruiker gestuurd via het controlekanaal. In het algemeen heeft de gebruiker de mogelijkheid om contact te leggen met de protocolinterpreter van de server met verschillende middelen dan die van de protocolinterpreter van de gebruiker.
Het belangrijkste kenmerk van FTP is dat het gebruikmaakt van een dubbele verbinding. Een van deze verbindingen wordt gebruikt voor het verzenden van commando's naar de server en vindt standaard plaats via TCP-poort 21, die kan worden gewijzigd. De controleverbinding bestaat zolang de klant met de server communiceert. Het controlekanaal moet geopend zijn tijdens de gegevensoverdracht tussen de machines. Als het wordt gesloten, wordt de gegevensoverdracht stopgezet. De andere verbinding maakt directe gegevensoverdracht mogelijk. Deze wordt elke keer geopend wanneer een bestand tussen de klant en de server wordt verzonden. Als meerdere bestanden tegelijkertijd worden verzonden, wordt voor elk bestand een eigen overdrachtkanaal geopend.
FTP kan werken in een actieve of passieve modus, afhankelijk van de gekozen verbindingsmethode. In de actieve modus maakt de client een beheers-TCP-verbinding met de server en stuurt het zijn IP-adres en een willekeurig nummer van de clientpoort naar de server, waarna hij wacht totdat de server de TCP-verbinding met dit adres en poortnummer opzet. Als de client achter een firewall zit en geen inkomende TCP-verbinding kan accepteren, kan de passieve modus worden gebruikt. In deze modus gebruikt de client de beheersverbinding om de server de PASV-opdracht te sturen en ontvangt vervolgens het IP-adres en poortnummer van de server, die door de client worden gebruikt om een gegevensstroom te openen vanaf zijn willekeurige poort.
Het is mogelijk dat gegevens naar een derde machine worden verzonden. In dat geval maakt de gebruiker een beheerskanaal met twee servers en organiseert een directe gegevensstroom tussen hen. Beheerscommando's gaan via de gebruiker, terwijl de gegevens direct tussen de servers gaan.
Bij het verzenden van gegevens over een netwerk kunnen vier gegevensrepresentaties worden gebruikt:
- ASCII - wordt gebruikt voor tekst. Gegevens worden, indien nodig, vooraf geconverteerd van de tekenrepresentatie op de verzendende host naar 'acht-bits ASCII', en (ook indien nodig) naar de tekenrepresentatie van de ontvangende host. In het bijzonder worden de regelovergangscharacters gewijzigd. Dit betekent dat deze modus niet geschikt is voor bestanden die niet alleen gewone tekst bevatten.
- Binaire modus - de verzendende apparaten versturen elk bestand byte voor byte, terwijl de ontvanger de stroom van bytes opslaat bij ontvangst. Ondersteuning voor deze modus wordt aanbevolen voor alle FTP-implementaties.
- EBCDIC - wordt gebruikt voor het verzenden van gewone tekst tussen hosts in EBCDIC-codering. Voor de rest is deze modus vergelijkbaar met de ASCII-modus.
- Lokale modus - staat twee computers met identieke instellingen toe om gegevens in hun eigen formaat te verzenden zonder conversie naar ASCII.
Gegevens kunnen in een van de drie modi worden verzonden:
- Stroommodus - gegevens worden verzonden als een continue stroom, waardoor FTP wordt ontslagen van enige verwerking. In plaats daarvan wordt alle verwerking uitgevoerd door TCP. Een einde-van-bestand-indicator is niet nodig, behalve voor het splitsen van gegevens in records.
- Blockmodus – FTP splitst gegevens op in verschillende blokken (kopblok, aantal bytes, gegevensveld) en verzendt ze vervolgens via TCP.
- Compressiemodus – gegevens worden samengeperst met een enkele algoritme (meestal door middel van reekscodering).
FTP-server – dit is een server die het gebruik van het bestandsoverdrachtprotocol mogelijk maakt. Hij heeft bepaalde kenmerken die hem onderscheiden van gewone webservers:
- Authenticatie van gebruikers is vereist.
- Alle bewerkingen worden uitgevoerd binnen de huidige sessie.
- Mogelijkheid om verschillende acties met het bestandssysteem uit te voeren.
- Er wordt een aparte lijn voor elke verbinding gebruikt.
FTP-client – dit is een programma waarmee je verbinding kunt maken met een externe server via FTP en ook de nodige acties op het bestandssysteem kunt uitvoeren. Een browser kan als client fungeren; voer in de adresbalk het adres in dat een pad naar een bepaalde map of bestand op de externe server vertegenwoordigt, volgens het algemene blokkenschema van de URL:
ftp://user:pass@address:port/directory/file
Echter, het gebruik van een webbrowser op deze manier stelt je alleen in staat om de gewenste bestanden te bekijken of te downloaden. Om optimaal gebruik te maken van alle voordelen van FTP, moet een gespecialiseerd softwarepakket als client worden gebruikt.
FTP-authenticatie maakt gebruik van een gebruikersnaam/wachtwoord-systeem voor toegang. De gebruikersnaam wordt naar de server gestuurd met het commando USER, en het wachtwoord met het commando PASS. Als de door de client verstrekte informatie door de server wordt geaccepteerd, stuurt de server een uitnodiging naar de client en begint de sessie. Gebruikers kunnen, als de server deze functionaliteit ondersteunt, inloggen zonder hun inloggegevens te verstrekken, maar de server kan alleen beperkte toegang voor dergelijke sessies bieden.
De host die FTP-diensten biedt, kan anonieme toegang tot FTP bieden. Gebruikers loggen meestal in als 'anonymous' (kan hoofdlettergevoelig zijn op sommige FTP-servers) als gebruikersnaam. Hoewel gebruikers normaal gesproken worden gevraagd om hun e-mailadres in te dienen in plaats van een wachtwoord, worden er feitelijk geen controles uitgevoerd. Veel FTP-hosts die software-updates bieden, ondersteunen anonieme toegang.
Protocolschema
De interactie tussen "client-server" bij een FTP-verbinding kan als volgt worden weergegeven:

Veilige FTP
FTP was oorspronkelijk niet ontworpen als een beveiligd protocol, aangezien het bedoeld was voor communicatie tussen verschillende militaire objecten en instellingen. Maar met de ontwikkeling en verspreiding van het internet is het gevaar van ongeautoriseerde toegang sterk toegenomen. Er ontstond een behoefte aan bescherming van servers tegen verschillende soorten aanvallen. In mei 1999 hebben de auteurs van RFC 2577 de kwetsbaarheden samengebracht in de volgende lijst van problemen:
- Verborgen aanvallen (bounce attacks)
- Spoof-aanvallen (spoof attacks)
- Aanvallen met brute kracht (brute force attacks)
- Pakketafleiding, sniffing (packet capture, sniffing)
- Poortafleiding (port stealing)
Standaard FTP biedt geen mogelijkheid om gegevens versleuteld over te dragen, waardoor gebruikersnamen, wachtwoorden, commando's en andere informatie gemakkelijk door kwaadwillenden kunnen worden onderschept. Een gebruikelijke oplossing voor dit probleem is het gebruik van "veilige", TLS-beveiligde versies van het kwetsbare protocol (FTPS) of een ander, beter beveiligd protocol zoals SFTP/SCP, dat wordt aangeboden met de meeste implementaties van het Secure Shell-protocol.
FTPS
FTPS (FTP + SSL) is een uitbreiding van het standaard bestandsoverdrachtprotocol en voegt aan de basisfunctionaliteit de creatie van versleutelde sessies toe via het SSL-protocol (Secure Sockets Layer — beveiliging van de socketlagen). Tegenwoordig wordt de beveiliging aangeboden door de meer geavanceerde variant TLS (Transport Layer Security — beveiliging op transportniveau).
SSL
Het SSL-protocol werd in 1996 voorgesteld door Netscape Communications met als doel de beveiliging en vertrouwelijkheid van internetverbindingen te waarborgen. Het protocol ondersteunt authenticatie (vaststelling van echtheid) van zowel de cliënt als de server, is onafhankelijk van toepassingen en is transparant voor de HTTP-, FTP- en Telnet-protocols.
De SSL Handshake bestaat uit twee fasen: de authenticatie van de server en de optionele authenticatie van de cliënt. In de eerste fase stuurt de server als reactie op het verzoek van de cliënt zijn certificaat en de versleutelparameters. Vervolgens genereert de cliënt een master-sleutel, versleutelt deze met de openbare sleutel van de server en verzendt deze naar de server. De server ontsleutelt de master-sleutel met zijn privé-sleutel en bevestigt zijn autenticiteit aan de cliënt door een bericht terug te sturen, ondertekend met de master-sleutel van de cliënt.
De volgende gegevens worden versleuteld en ondertekend met sleutels die zijn verkregen op basis van deze master-sleutel. In de tweede fase, die niet verplicht is, stuurt de server een verzoek naar de client, die de server zijn authenticiteit bevestigt door het verzoek terug te sturen met een eigen digitale handtekening en certificaat van de openbare sleutel.
SSL ondersteunt verschillende cryptografische algoritmen. Tijdens de verbinding wordt het RSA-publiekssleutelcryptosysteem gebruikt. Na de sleuteluitwisseling komen verschillende coderingen in gebruik: RC2, RC4, IDEA, DES en TripleDES. Ook wordt MD5 gebruikt - een algoritme voor het genereren van berichten-digests. De syntaxis van certificaten voor openbare sleutels is beschreven in X.509.
Een van de belangrijke voordelen van SSL is de volledige software- en platformonafhankelijkheid. Het protocol is ontwikkeld volgens de principes van draagbaarheid, en de ideologie ervan hangt niet af van de applicaties waarvan het deel uitmaakt. Daarnaast is het belangrijk dat er op het SSL-protocol transparant andere protocollen kunnen worden overlapt; hetzij om de graad van beveiliging van de doelinformatie-stromen verder te verhogen, hetzij om de cryptografische mogelijkheden van SSL aan te passen voor een andere, specifieke taak.
SSL-verbinding

De aangeboden SSL-veiligheidsverbinding heeft drie hoofdd kenmerken:
- De verbinding is privé. Versleuteling wordt gebruikt voor alle berichten na een eenvoudig dialoog dat dient om de geheime sleutel te bepalen.
- De verbinding is geauthenticeerd. De serverside van de dialoog wordt altijd geauthenticeerd, terwijl de clientzijde optioneel wordt geauthenticeerd.
- De verbinding is betrouwbaar. Het transport van berichten omvat een integriteitscontrole (met behulp van MAC).
Kenmerken van FTPS
Er zijn twee implementaties van FTPS, die verschillende methoden voor beveiliging gebruiken:
- De impliciete methode veronderstelt het gebruik van het standaard SSL-protocol met sessie-opzet vóór het verzenden van gegevens, wat op zijn beurt de compatibiliteit met reguliere FTP-clients en -servers verstoort. Voor achterwaartse compatibiliteit met clients die FTPS niet ondersteunen, wordt TCP-poort 990 voor de controleverbinding gebruikt, en poort 989 voor het verzenden van gegevens. Dit behoudt poort 21 als standaard voor het FTP-protocol. Deze methode wordt als verouderd beschouwd.
- Expliciet is veel handiger, omdat het gebruikmaakt van standaard FTP-commando's en de gegevens tijdens de overdracht versleutelt. Dit maakt het mogelijk om dezelfde beheersessie te gebruiken voor zowel FTP als FTPS. De client moet expliciet de server vragen om een beveiligde overdracht, en daarna de versleutelingsmethode bevestigen. Als de client geen beveiligde overdracht aanvraagt, heeft de FTPS-server het recht om de onbeveiligde verbinding zowel te behouden als te beëindigen. Het mechanisme voor identificatie en gegevensbescherming werd toegevoegd onder RFC 2228, dat een nieuwe FTP-opdracht AUTH omvat. Hoewel deze standaard de beveiligingsmechanismen niet expliciet definieert, bepaalt het dat de klant de beveiligde verbinding moet initiëren met behulp van het hierboven beschreven algoritme. Als beveiligde verbindingen niet door de server worden ondersteund, moet foutcode 504 worden geretourneerd. FTPS-clients kunnen informatie over ondersteunende beveiligingsprotocollen van de server verkrijgen met de opdracht FEAT, echter is de server niet verplicht te onthullen welke beveiligingsniveaus hij ondersteunt. De meest voorkomende FTPS-opdrachten zijn AUTH TLS en AUTH SSL, die respectievelijk TLS- en SSL-beveiliging bieden.
SFTP
SFTP (Secure File Transfer Protocol) is een protocol op toepassingsniveau voor bestandsoverdracht dat bovenop een veilige verbinding werkt. Dit moet niet worden verward met (Simple File Transfer Protocol), dat dezelfde afkorting heeft. Terwijl FTPS gewoon een uitbreiding van FTP is, is SFTP een apart en niet met hem verbonden protocol dat SSH (Secure Shell – veilige shell) als basis gebruikt.
Secure Shell
De ontwikkeling van het protocol werd uitgevoerd door een van de groepen van IETF genaamd Secsh. De werkdocumentatie voor het nieuwe SFTP-protocol is geen officiële standaard geworden, maar werd wel actief gebruikt voor de ontwikkeling van toepassingen. Later werden er zes versies van het protocol uitgebracht. De geleidelijke uitbreiding van functionaliteit leidde er echter toe dat op 14 augustus 2006 werd besloten de ontwikkeling van het protocol stop te zetten, omdat de belangrijkste doelstelling van het project (de ontwikkeling van SSH) was voltooid en er niet voldoende deskundigheid was voor de ontwikkeling van een volwaardig protocol voor een externe bestandssysteem.
SSH is een netwerkprotocol dat op afstand beheer van een besturingssysteem en het tunnelen van TCP-verbindingen mogelijk maakt (bijvoorbeeld voor bestandsoverdracht). Het is functioneel vergelijkbaar met de protocollen Telnet en rlogin, maar in tegenstelling tot hen versleutelt het al het verkeer, inclusief de overgedragen wachtwoorden. SSH staat verschillende versleutelingsalgoritmen toe. SSH-clients en SSH-servers zijn beschikbaar voor de meeste netwerkbesturingssystemen.
SSH maakt veilige overdracht van vrijwel elk ander netwerkprotocol mogelijk in een onveilige omgeving. Hierdoor is het niet alleen mogelijk om op afstand op een computer te werken via een commandoregel, maar ook om audiostreams of video (bijvoorbeeld van een webcam) via een versleutelde verbinding te verzenden. SSH kan ook compressie van de verzonden gegevens gebruiken voor de daaropvolgende versleuteling, wat handig is voor het op afstand starten van X Window System-clients.
De eerste versie van het protocol, SSH-1, werd ontwikkeld in 1995 door onderzoeker Tatu Ylönen van de Technische Universiteit van Helsinki (Finland). SSH-1 was geschreven om meer privacy te bieden dan de protocollen rlogin, telnet en rsh. In 1996 werd er een veiligere versie van het protocol ontwikkeld, SSH-2, die niet compatibel was met SSH-1. Het protocol verwierf nog meer populariteit en tegen het jaar 2000 had het ongeveer twee miljoen gebruikers. Tegenwoordig verwijst de term 'SSH' meestal naar SSH-2, aangezien de eerste versie van het protocol, gezien de aanzienlijke tekortkomingen, bijna niet meer wordt gebruikt. In 2006 werd het protocol goedgekeurd door de IETF-werkgroep als internetstandaard.
Er zijn twee gangbare implementaties van SSH: een commerciële versie en een gratis open-source versie. De vrije implementatie heet OpenSSH. Tegen 2006 gebruikte 80% van de computers op het internet precies OpenSSH. De commerciële versie wordt ontwikkeld door SSH Communications Security, dat een honderd procent dochteronderneming is van Tectia Corporation, en is gratis voor niet-commercieel gebruik. Deze implementaties bevatten praktisch dezelfde set commando's.
Het SSH-2-protocol is, in tegenstelling tot het telnet-protocol, bestand tegen afluisteraanvallen op het verkeer ("sniffing"), maar is niet bestand tegen man-in-the-middle-aanvallen. Het SSH-2-protocol is ook bestand tegen sessiekaping, omdat het onmogelijk is om deel te nemen aan een al gevestigde sessie of deze te onderscheppen.
Om man-in-the-middle-aanvallen te voorkomen bij verbinding met een host waarvan de sleutels nog niet bekend zijn bij de cliënt, toont de clientsoftware een "sleutelafdruk" ("key fingerprint") aan de gebruiker. Het wordt dus aanbevolen om de weergegeven sleutelafdruk zorgvuldig te controleren met de sleutelafdruk van de server, bij voorkeur verkregen via betrouwbare communicatiemiddelen of persoonlijk.
SSH-ondersteuning is geïmplementeerd in alle UNIX-achtige systemen, en op de meeste daarvan zijn zowel de SSH-client als de SSH-server standaardhulpmiddelen. Er zijn tal van implementaties van SSH-clienten voor niet-UNIX-besturingssystemen. Het protocol kreeg veel populariteit na de brede ontwikkeling van verkeersanalyzers en manieren om lokale netwerken te verstoren, als een veilig alternatief voor het onveilige telnetprotocol voor het beheer van belangrijke knooppunten.
Communicatie met behulp van SSH
Voor het gebruik van SSH is een SSH-server en SSH-client nodig. De server luistert naar verbindingen van clientmachines en voert authenticatie uit zodra de verbinding tot stand is gebracht, waarna deze begint met het bedienen van de cliënt. De cliënt wordt gebruikt om in te loggen op een externe machine en om opdrachten uit te voeren.

Vergelijking met FTPS
Het belangrijkste dat SFTP onderscheidt van standaard FTP en FTPS, is dat SFTP absoluut alle commando's, gebruikersnamen, wachtwoorden en andere vertrouwelijke informatie versleutelt.
Beide protocollen, FTPS en SFTP, gebruiken een combinatie van asymmetrische algoritmen (RSA, DSA), symmetrische algoritmen (DES/3DES, AES, Twofish, enz.), evenals sleuteluitwisselingsalgoritmen. Voor authenticatie maakt FTPS (of, om preciezer te zijn, SSL/TLS via het FTP-protocol) gebruik van X.509-certificaten, terwijl SFTP (SSH-protocol) SSH-sleutels gebruikt.
X.509-certificaten bevatten een openbare sleutel en bepaalde informatie over de certificaat eigenaar. Deze informatie stelt op zijn beurt in staat om de integriteit van het certificaat zelf, de authenticiteit en de eigenaar van het certificaat te controleren. X.509-certificaten hebben een bijbehorende privésleutel, die doorgaans om veiligheidsredenen apart van het certificaat wordt bewaard.
SSH-sleutel bevat alleen de openbare sleutel (de bijbehorende privésleutel wordt apart opgeslagen). Het bevat geen informatie over de eigenaar van de sleutel. Sommige SSH-implementaties gebruiken X.509-certificaten voor authenticatie, maar in feite verifiëren ze niet de volledige certificaatketen — alleen de openbare sleutel wordt gebruikt (wat deze verificatie onvolledig maakt).
Conclusie
Het FTP-protocol speelt ongetwijfeld nog steeds een belangrijke rol in de opslag en verspreiding van informatie op het netwerk, ondanks zijn respectabele leeftijd. Het is een handige, multifunctionele en gestandaardiseerde protocol. Op basis hiervan zijn er talloze bestanden archieven ontstaan, zonder welke de technische werkzaamheden veel minder efficiënt zouden zijn. Bovendien is het eenvoudig in te stellen, en server- en cliëntprogramma's zijn praktisch beschikbaar voor alle gangbare en minder gangbare platforms.
De beveiligde versies ervan lossen het probleem van de privacy van opgeslagen en verzonden gegevens in de moderne wereld op. Beide nieuwe protocollen hebben hun eigen voor- en nadelen en vervullen iets andere rollen. In gebieden waar een bestandsarchief echt nodig is, heeft FTPS de voorkeur, vooral als er eerder al gebruik werd gemaakt van de klassieke FTP. SFTP is minder wijdverspreid vanwege zijn incompatibiliteit met het oude protocol, maar is veiliger en heeft meer functionaliteit omdat het een onderdeel is van het systeem voor externe besturing.
Lijst van bronnen
Bron: habr.com
