SFTP- en FTPS-protocollen

Voorwoord

Nog maar een week geleden was ik een essay aan het schrijven over het onderwerp dat in de titel wordt aangegeven, en ik werd geconfronteerd met het feit dat er, laten we zeggen, niet zoveel educatieve informatie op internet te vinden is. Meestal droge feiten en installatie-instructies. Daarom besloot ik de tekst enigszins te corrigeren en als artikel te plaatsen.

Wat is FTP

FTP (File Transfer Protocol) is een protocol voor het overbrengen van bestanden via een netwerk. Het is een van de basis Ethernet-protocollen. Verscheen in 1971 en werkte aanvankelijk in DARPA-netwerken. Momenteel is bestandsoverdracht, net als HTTP, gebaseerd op een model dat bestaat uit een reeks TCP/IP-protocollen (Transmission Control Protocol/Internet Protocol). Gedefinieerd in RFC 959.

Het protocol definieert het volgende:

  • Hoe wordt de foutcontrole uitgevoerd?
  • Gegevensverpakkingsmethode (als verpakking wordt gebruikt)
  • Hoe geeft het verzendende apparaat aan dat het een bericht heeft voltooid?
  • Hoe geeft het ontvangende apparaat aan dat het een bericht heeft ontvangen?

Communicatie tussen client en server

Laten we de processen die plaatsvinden tijdens FTP-bewerking eens nader bekijken. De verbinding wordt geïnitialiseerd door de protocolinterpreter van de gebruiker. De centrale wordt bestuurd via een besturingskanaal in de TELNET-standaard. FTP-opdrachten worden gegenereerd door de protocolinterpreter van de gebruiker en naar de server verzonden. De antwoorden van de server worden ook via het besturingskanaal naar de gebruiker verzonden. Over het algemeen heeft de gebruiker de mogelijkheid om contact te leggen met de protocoltolk van de server en op andere manieren dan de tolk van de gebruiker.

Het belangrijkste kenmerk van FTP is dat het dubbele verbindingen gebruikt. Eén ervan wordt gebruikt om opdrachten naar de server te sturen en gebeurt standaard via TCP-poort 21, die kan worden gewijzigd. De besturingsverbinding bestaat zolang de client met de server communiceert. Het besturingskanaal moet open zijn bij het overbrengen van gegevens tussen machines. Als deze gesloten is, stopt de gegevensoverdracht. Via de tweede vindt directe gegevensoverdracht plaats. Het wordt geopend telkens wanneer er een bestandsoverdracht plaatsvindt tussen de client en de server. Als er meerdere bestanden tegelijkertijd worden overgedragen, opent elk zijn eigen transmissiekanaal.

FTP kan in actieve of passieve modus werken, waarvan de keuze bepaalt hoe de verbinding tot stand wordt gebracht. In de actieve modus creëert de client een TCP-controleverbinding met de server en verzendt zijn IP-adres en een willekeurig clientpoortnummer naar de server, en wacht vervolgens tot de server een TCP-verbinding start met dit adres en poortnummer. Als de client zich achter een firewall bevindt en een inkomende TCP-verbinding niet kan accepteren, kan de passieve modus worden gebruikt. In deze modus gebruikt de client de controlestroom om een ​​PASV-opdracht naar de server te sturen en ontvangt vervolgens van de server zijn IP-adres en poortnummer, die de client vervolgens gebruikt om een ​​gegevensstroom vanaf zijn willekeurige poort te openen.

Het is mogelijk dat gegevens naar een derde machine worden overgebracht. In dit geval organiseert de gebruiker een controlekanaal met twee servers en organiseert daartussen een direct datakanaal. Besturingsopdrachten gaan via de gebruiker en gegevens gaan rechtstreeks tussen de servers.

Bij het verzenden van gegevens via een netwerk kunnen vier gegevensrepresentaties worden gebruikt:

  • ASCII – gebruikt voor tekst. De gegevens worden, indien nodig, vóór verzending geconverteerd van de karakterrepresentatie op de zendende host naar "acht-bits ASCII", en (opnieuw, indien nodig) naar de karakterrepresentatie op de ontvangende host. In het bijzonder worden nieuweregeltekens gewijzigd. Als gevolg hiervan is deze modus niet geschikt voor bestanden die meer dan alleen platte tekst bevatten.
  • Binaire modus - het verzendende apparaat verzendt elk bestand byte voor byte, en de ontvanger slaat de stroom bytes op bij ontvangst. Ondersteuning voor deze modus wordt aanbevolen voor alle FTP-implementaties.
  • EBCDIC – gebruikt om platte tekst tussen hosts over te dragen in EBCDIC-codering. Voor het overige is deze modus vergelijkbaar met de ASCII-modus.
  • Lokale modus - maakt het mogelijk dat twee computers met identieke instellingen gegevens in hun eigen formaat verzenden zonder conversie naar ASCII.

Gegevensoverdracht kan in drie modi worden uitgevoerd:

  • Streammodus - gegevens worden verzonden als een continue stroom, waardoor FTP geen enkele verwerking hoeft uit te voeren. In plaats daarvan wordt alle verwerking gedaan door TCP. De indicator voor het einde van het bestand is niet nodig, behalve voor het scheiden van gegevens in records.
  • Blokmodus - FTP verdeelt de gegevens in verschillende blokken (headerblok, aantal bytes, gegevensveld) en verzendt deze vervolgens naar TCP.
  • Compressiemodus – gegevens worden gecomprimeerd met behulp van een enkel algoritme (meestal door runlengtes te coderen).

FTP-server is een server die de mogelijkheid biedt om het File Transfer Protocol te gebruiken. Het heeft bepaalde kenmerken die het onderscheiden van conventionele webservers:

  • Gebruikersauthenticatie vereist
  • Alle bewerkingen worden uitgevoerd binnen de huidige sessie
  • Mogelijkheid om verschillende acties uit te voeren met het bestandssysteem
  • Voor elke verbinding wordt een apart kanaal gebruikt

FTP-client is een programma waarmee u via FTP verbinding kunt maken met een externe server en daarop ook de nodige acties kunt uitvoeren met elementen van het bestandssysteem. De client kan heel goed een browser zijn, waarvan u in de adresbalk het adres moet invoeren, wat het pad is naar een specifieke map of bestand op de externe server, in overeenstemming met het algemene URL-blokdiagram:

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

Als u in deze context een webbrowser gebruikt, kunt u echter alleen de interessante bestanden bekijken of downloaden. Om alle voordelen van FTP volledig te kunnen benutten, dient u als client gebruik te maken van gespecialiseerde software.

FTP-authenticatie maakt gebruik van een gebruikersnaam/wachtwoord-schema om toegang te verlenen. De gebruikersnaam wordt met het USER-commando naar de server verzonden en het wachtwoord wordt met het PASS-commando verzonden. 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 functie ondersteunt, inloggen zonder inloggegevens op te geven, maar de server kan voor dergelijke sessies slechts beperkte toegang verlenen.

De host die de FTP-service levert, kan anonieme FTP-toegang bieden. Gebruikers loggen doorgaans in met "anoniem" (kan op sommige FTP-servers hoofdlettergevoelig zijn) als gebruikersnaam. Hoewel gebruikers doorgaans worden gevraagd hun e-mailadres op te geven in plaats van een wachtwoord, wordt er feitelijk geen verificatie uitgevoerd. Veel FTP-hosts die software-updates bieden, ondersteunen anonieme toegang.

Protocoldiagram

De client-server-interactie tijdens een FTP-verbinding kan als volgt worden gevisualiseerd:

SFTP- en FTPS-protocollen

Veilige FTP

FTP was oorspronkelijk niet bedoeld om veilig te zijn, omdat het bedoeld was voor communicatie tussen meerdere militaire installaties en agentschappen. Maar met de ontwikkeling en verspreiding van het internet is het gevaar van ongeoorloofde toegang vele malen groter geworden. Er was behoefte om servers te beschermen tegen verschillende soorten aanvallen. In mei 1999 vatten de auteurs van RFC 2577 de kwetsbaarheden samen in de volgende lijst met problemen:

  • Verborgen aanvallen (bounce-aanvallen)
  • Spoof-aanvallen
  • Brute force-aanvallen
  • Pakket vastleggen, snuiven
  • Haven stelen

Reguliere FTP heeft niet de mogelijkheid om gegevens in gecodeerde vorm over te dragen, waardoor gebruikersnamen, wachtwoorden, commando's en andere informatie eenvoudig en gemakkelijk door aanvallers kunnen worden onderschept. De gebruikelijke oplossing voor dit probleem is het gebruik van "veilige", TLS-beveiligde versies van het kwetsbare protocol (FTPS) of een ander, veiliger protocol, zoals SFTP/SCP, dat bij de meeste Secure Shell-protocolimplementaties wordt geleverd.

FTPS

FTPS (FTP + SSL) is een uitbreiding van het standaardprotocol voor bestandsoverdracht en voegt aan de basisfunctionaliteit het creëren van gecodeerde sessies toe met behulp van het SSL-protocol (Secure Sockets Layer). Tegenwoordig wordt bescherming geboden door de meer geavanceerde analoge TLS (Transport Layer Security).

SSL

Het SSL-protocol werd in 1996 door Netscape Communications voorgesteld om de veiligheid en privacy van internetverbindingen te garanderen. Het protocol ondersteunt client- en serverauthenticatie, is applicatie-onafhankelijk en transparant voor HTTP-, FTP- en Telnet-protocollen.

Het SSL Handshake-protocol bestaat uit twee fasen: serverauthenticatie en optionele clientauthenticatie. In de eerste fase reageert de server op het verzoek van de klant door het certificaat en de coderingsparameters te verzenden. De client genereert vervolgens een hoofdsleutel, codeert deze met de openbare sleutel van de server en stuurt deze naar de server. De server decodeert de hoofdsleutel met zijn privésleutel en authenticeert zichzelf bij de cliënt door een bericht terug te sturen dat is geverifieerd door de hoofdsleutel van de cliënt.

De daaropvolgende gegevens worden gecodeerd en geauthenticeerd met sleutels die zijn afgeleid van deze hoofdsleutel. In de tweede stap, die optioneel is, stuurt de server een verzoek naar de client en authenticeert de client zichzelf bij de server door het verzoek terug te sturen met zijn eigen digitale handtekening en een certificaat met een openbare sleutel.

SSL ondersteunt een verscheidenheid aan cryptografische algoritmen. Tijdens het tot stand brengen van de communicatie wordt gebruik gemaakt van het RSA public key cryptosysteem. Na de sleuteluitwisseling worden veel verschillende cijfers gebruikt: RC2, RC4, IDEA, DES en TripleDES. MD5 wordt ook gebruikt: een algoritme voor het maken van een berichtsamenvatting. De syntaxis voor certificaten met een openbare sleutel wordt beschreven in X.509.

Een van de belangrijke voordelen van SSL is de volledige onafhankelijkheid van het softwareplatform. Het protocol is ontwikkeld op basis van de principes van draagbaarheid, en de ideologie van de constructie ervan is niet afhankelijk van de toepassingen waarin het wordt gebruikt. Daarnaast is het ook belangrijk dat andere protocollen transparant over het SSL-protocol kunnen worden gelegd; ofwel om de mate van bescherming van doelinformatiestromen verder te vergroten, ofwel om de cryptografische mogelijkheden van SSL aan te passen voor een andere, goed gedefinieerde taak.

SSL-verbinding

SFTP- en FTPS-protocollen

Het beveiligde kanaal van SSL heeft drie hoofdeigenschappen:

  • Het kanaal is privé. Voor alle berichten wordt encryptie gebruikt na een eenvoudige dialoog die dient om de geheime sleutel te bepalen.
  • Het kanaal is geverifieerd. De serverkant van het gesprek wordt altijd geverifieerd, terwijl de clientkant optioneel wordt geverifieerd.
  • Het kanaal is betrouwbaar. Het berichtentransport omvat integriteitscontrole (met behulp van de MAC).

Kenmerken van FTPS

Er zijn twee implementaties van FTPS, die verschillende methoden gebruiken om beveiliging te bieden:

  • De impliciete methode omvat het gebruik van het standaard SSL-protocol om een ​​sessie tot stand te brengen voordat gegevens worden verzonden, wat op zijn beurt de compatibiliteit met reguliere FTP-clients en -servers verbreekt. Voor achterwaartse compatibiliteit met clients die FTPS niet ondersteunen, wordt voor de besturingsverbinding TCP-poort 990 gebruikt en voor de gegevensoverdracht 989. Hierbij blijft de standaardpoort 21 voor het FTP-protocol behouden. Deze methode wordt als verouderd beschouwd.
  • Expliciet is veel handiger, omdat het standaard FTP-opdrachten gebruikt, maar de gegevens codeert wanneer er wordt gereageerd, waardoor u dezelfde besturingsverbinding kunt gebruiken voor zowel FTP als FTPS. De client moet expliciet om veilige gegevensoverdracht van de server vragen en vervolgens de coderingsmethode goedkeuren. Als de client niet om een ​​veilige overdracht vraagt, heeft de FTPS-server het recht om de onbeveiligde verbinding in stand te houden of te verbreken. Onder RFC 2228 is een onderhandelingsmechanisme voor authenticatie en gegevensbeveiliging toegevoegd, dat de nieuwe FTP AUTH-opdracht bevat. Hoewel deze standaard geen expliciete beveiligingsmechanismen definieert, specificeert deze wel dat een beveiligde verbinding door de client moet worden geïnitieerd met behulp van het hierboven beschreven algoritme. Als beveiligde verbindingen niet door de server worden ondersteund, moet de foutcode 504 worden geretourneerd. FTPS-clients kunnen informatie verkrijgen over de beveiligingsprotocollen die door de server worden ondersteund met behulp van de FEAT-opdracht, maar de server hoeft niet bekend te maken welk beveiligingsniveau deze heeft. 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 bestandsoverdrachtprotocol op de applicatielaag dat bovenop een beveiligd kanaal draait. Niet te verwarren met (Simple File Transfer Protocol), dat dezelfde afkorting heeft. Als FTPS eenvoudigweg een uitbreiding van FTP is, dan is SFTP een afzonderlijk en niet-gerelateerd protocol dat SSH (Secure Shell) als basis gebruikt.

Secure Shell

Het protocol is ontwikkeld door een van de IETF-groepen genaamd Secsh. De werkdocumentatie voor het nieuwe SFTP-protocol werd geen officiële standaard, maar werd actief gebruikt voor de ontwikkeling van applicaties. Vervolgens werden zes versies van het protocol vrijgegeven. De geleidelijke toename van de functionaliteit ervan leidde er echter toe dat op 14 augustus 2006 werd besloten om te stoppen met werken aan de ontwikkeling van het protocol vanwege de voltooiing van de hoofdtaak van het project (SSH-ontwikkeling) en het gebrek aan van voldoende expertniveau om over te gaan tot de ontwikkeling van een volwaardig protocol voor bestandssystemen op afstand.

SSH is een netwerkprotocol dat afstandsbediening van het besturingssysteem en tunneling van TCP-verbindingen mogelijk maakt (bijvoorbeeld voor bestandsoverdracht). Vergelijkbaar in functionaliteit met de Telnet- en rlogin-protocollen, maar in tegenstelling tot deze versleutelt het al het verkeer, inclusief verzonden wachtwoorden. SSH biedt de keuze uit verschillende versleutelingsalgoritmen. SSH-clients en SSH-servers zijn beschikbaar voor de meeste netwerkbesturingssystemen.

Met SSH kunt u vrijwel elk ander netwerkprotocol veilig overbrengen in een onbeveiligde omgeving. Zo kunt u niet alleen op afstand op uw computer werken via de opdrachtshell, maar ook een audiostream of video (bijvoorbeeld vanaf een webcam) via een gecodeerd kanaal verzenden. SSH kan ook compressie van verzonden gegevens gebruiken voor daaropvolgende versleuteling, wat bijvoorbeeld handig is voor het op afstand starten van X WindowSystem-clients.

De eerste versie van het protocol, SSH-1, werd in 1995 ontwikkeld door onderzoeker Tatu Ulönen van de Technische Universiteit van Helsinki (Finland). SSH-1 is geschreven om meer privacy te bieden dan de rlogin-, telnet- en rsh-protocollen. In 1996 werd een veiligere versie van het protocol, SSH-2, ontwikkeld, die niet compatibel is met SSH-1. Het protocol werd nog populairder en had in 2000 ongeveer twee miljoen gebruikers. Momenteel betekent de term “SSH” meestal SSH-2, omdat De eerste versie van het protocol wordt nu praktisch niet gebruikt vanwege aanzienlijke tekortkomingen. In 2006 werd het protocol door de IETF-werkgroep goedgekeurd als internetstandaard.

Er zijn twee veel voorkomende implementaties van SSH: particuliere commerciële en gratis open source. De gratis implementatie heet OpenSSH. In 2006 gebruikte 80% van de computers op internet OpenSSH. De eigen implementatie is ontwikkeld door SSH Communications Security, een volledige dochteronderneming van Tectia Corporation, en is gratis voor niet-commercieel gebruik. Deze implementaties bevatten vrijwel dezelfde set opdrachten.

Het SSH-2-protocol is, in tegenstelling tot het telnet-protocol, bestand tegen aanvallen van het afluisteren van verkeer (“sniffing”), maar is niet bestand tegen man-in-the-middle-aanvallen. Het SSH-2-protocol is ook bestand tegen aanvallen van sessiekapingen, omdat het onmogelijk is om deel te nemen aan een reeds bestaande sessie of deze te kapen.

Om man-in-the-middle-aanvallen te voorkomen bij het verbinden met een host waarvan de sleutel nog niet bekend is bij de client, toont de clientsoftware de gebruiker een ‘sleutelvingerafdruk’. Het wordt aanbevolen om de “sleutelmomentopname” die door de clientsoftware wordt weergegeven, zorgvuldig te controleren met de momentopname van de serversleutel, bij voorkeur verkregen via betrouwbare communicatiekanalen of persoonlijk.

SSH-ondersteuning is beschikbaar op alle UNIX-achtige systemen, en de meeste hebben een ssh-client en -server als standaardhulpprogramma's. Er zijn veel implementaties van SSH-clients voor niet-UNIX-besturingssystemen. Het protocol kreeg grote populariteit na de wijdverbreide ontwikkeling van verkeersanalysatoren en methoden om de werking van lokale netwerken te verstoren, als alternatieve oplossing voor het onveilige Telnet-protocol voor het beheer van belangrijke knooppunten.

Communicatie via SSH

Om via SSH te werken heb je een SSH-server en een SSH-client nodig. De server luistert naar verbindingen van clientmachines en voert, wanneer een verbinding tot stand is gebracht, authenticatie uit, waarna hij begint met het bedienen van de client. De client wordt gebruikt om in te loggen op een externe machine en opdrachten uit te voeren.

SFTP- en FTPS-protocollen

Vergelijking met FTPS

Het belangrijkste dat SFTP onderscheidt van standaard FTP en FTPS is dat SFTP absoluut alle opdrachten, gebruikersnamen, wachtwoorden en andere vertrouwelijke informatie codeert.

Zowel FTPS- als SFTP-protocollen gebruiken een combinatie van asymmetrische algoritmen (RSA, DSA), symmetrische algoritmen (DES/3DES, AES, Twhofish, enz.), evenals een algoritme voor sleuteluitwisseling. Voor authenticatie gebruikt FTPS (of om preciezer te zijn, SSL/TLS via FTP) X.509-certificaten, terwijl SFTP (SSH-protocol) SSH-sleutels gebruikt.

X.509-certificaten bevatten een openbare sleutel en enige informatie over het certificaat van de eigenaar. Deze informatie maakt het daarentegen mogelijk om de integriteit van het certificaat zelf, de authenticiteit en de eigenaar van het certificaat te verifiëren. X.509-certificaten hebben een bijbehorende privésleutel, die om veiligheidsredenen meestal apart van het certificaat wordt opgeslagen.

De SSH-sleutel bevat alleen de publieke 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 ze verifiëren niet daadwerkelijk de hele certificaatketen; alleen de publieke sleutel wordt gebruikt (wat een dergelijke authenticatie onvolledig maakt).

Conclusie

Het FTP-protocol speelt ongetwijfeld nog steeds een belangrijke rol bij de opslag en distributie van informatie op het netwerk, ondanks zijn eerbiedwaardige leeftijd. Het is een handig, multifunctioneel en gestandaardiseerd protocol. Op basis hiervan zijn veel bestandsarchieven gebouwd, zonder welke technisch werk niet zo effectief zou zijn. Bovendien is het eenvoudig in te stellen en bestaan ​​er server- en clientprogramma's voor vrijwel alle huidige en minder actuele platforms.

Op hun beurt lossen de beschermde versies het probleem van de vertrouwelijkheid van opgeslagen en verzonden gegevens in de moderne wereld op. Beide nieuwe protocollen hebben hun voor- en nadelen en vervullen enigszins verschillende rollen. In die gebieden waar een bestandsarchief nodig is, verdient het de voorkeur FTPS te gebruiken, vooral als daar al eerder klassieke FTP is gebruikt. SFTP komt minder vaak voor vanwege de incompatibiliteit met het oude protocol, maar is veiliger en heeft meer functionaliteit, omdat het deel uitmaakt van het systeem voor beheer op afstand.

Lijst met bronnen

Bron: www.habr.com

Voeg een reactie