Протоколи SFTP и FTPS

Предговор

Буквално преди седмица написах реферат по темата, посочена в заглавието, и се сблъсках с факта, че, да кажем така, полезната информация в интернет не е толкова много. Основно сухи факти и инструкции за настройка. Затова решение да коригирам текста и да го публикувам като статия.

Какво е FTP

FTP (File Transfer Protocol) – протокол за прехвърляне на файлове по мрежата. Той е един от основните протоколи на Ethernet. Появил се през 1971 година и първоначално работел в мрежите на DARPA. В момента, както и HTTP, предаването на файлове се основава на модел, състоящ се от набор от протоколи TCP/IP (Transmission Control Protocol/Internet Protocol). Определен в RFC 959.

Протоколът определя следното:

  • Как ще се извършва проверка за грешки
  • Метод на опаковане на данни (ако се използва опаковане)
  • Как устройството, което изпраща, уведомява, че е завършило съобщението
  • Как устройството, което получава, уведомява, че е получило съобщението

Взаимодействие между клиента и сървъра

Нека разгледаме по-подробно процесите, които протичат при работа с FTP. Свързването се инициира от интерпретатора на протокола на потребителя. Управлението на обмена се осъществява по управленски канал в стандарта TELNET. Командите на FTP се генерират от интерпретатора на протокола на потребителя и се предават на сървъра. Отговорите на сървъра също се изпращат на потребителя по управленския канал. Обикновено потребителят има възможност да установи контакт с интерпретатора на протокола на сървъра и с различни средства, отличаващи се от интерпретатора на потребителя.

Основната характеристика на FTP е, че той използва двойно свързване. Едното от тях се използва за предаване на команди на сървъра и по подразбиране се осъществява през TCP порт 21, който може да бъде променен. Управляващото свързване съществува през цялото време, докато клиентът комуникира със сървъра. Управленският канал трябва да бъде отворен при предаване на данни между машините. При затварянето му предаването на данни спира. Второто свързване е за непосредствено предаване на данни. То се отваря всеки път, когато се извършва прехвърляне на файл между клиента и сървъра. В случай, че се предават няколко файла едновременно, за всеки от тях се отваря собствен канал за прехвърляне.

FTP може да работи в активен или пасивен режим, от избора на който зависи начинът на установяване на връзката. В активен режим клиентът създава управляваща TCP връзка със сървъра и изпраща на сървъра своя IP адрес и произволен номер на клиентския порт, след което изчаква, докато сървърът стартира TCP връзка с този адрес и номер на порта. В случай, че клиентът е зад защитна стена и не може да приеме входяща TCP връзка, може да се използва пасивен режим. В този режим клиентът използва управляващ поток, за да изпрати на сървъра команда PASV, след което получава от сървъра неговия IP адрес и номер на порт, които след това се използват от клиента за отваряне на поток данни от своя произволен порт.

Възможна е ситуация, при която данните могат да се предават на трета машина. В този случай потребителят организира управляващ канал с два сървъра и организира директен канал за данни между тях. Управляващите команди преминават през потребителя, а данните директно между сървърите.

При предаване на данни в мрежата могат да се използват четири представяния на данни:

  • ASCII – използва се за текст. Данните, ако е необходимо, преди предаване се конвертират от символното представяне на хоста-изпращач в „осембитен ASCII“, и (отново, ако е необходимо) в символното представяне на приемащия хост. По-специално, символите за нов ред се променят. Следователно, този режим не е подходящ за файлове, съдържащи не само обикновен текст.
  • Бинарен режим – устройството-изпращач изпраща всеки файл байт по байт, а получателят запазва потока от байтове при получаването. Поддръжката на този режим беше препоръчана за всички реализации на FTP.
  • EBCDIC – използва се за предаване на обикновен текст между хостове в кодировката EBCDIC. В останалото този режим е аналогичен на ASCII режима.
  • Локален режим – позволява на две компютри с идентични настройки да изпращат данни в собствен формат без конвертиране в ASCII.

Предаването на данни може да се извършва в който и да е от трите режима:

  • Потоков режим – данните се изпращат под формата на непрекъснат поток, освобождавайки FTP от извършването на каквото и да е обработване. Вместо това цялата обработка се извършва от TCP. Индикаторът за край на файла не е необходим, освен за разделяне на данните на записи.
  • Блочен режим – FTP разделя данните на няколко блока (блок заглавие, количество байтове, поле данни) и след това ги предава по TCP.
  • Режим на компресия – данните се компресират с един общ алгоритъм (обикновено кодиране на дълги серии).

FTP сървър – това е сървър, който позволява използването на протокол за пренос на файлове. Той притежава определени характеристики, които го отличават от обикновените уеб сървъри:

  • Необходима е аутентификация на потребителите
  • Всички операции се извършват в рамките на текущата сесия
  • Възможност за извършване на различни действия с файловата система
  • Използва се отделен канал за всяко свързване

FTP клиент – това е програма, която позволява свързване с отдалечен сървър по FTP и също така извършване на необходимите действия с елементите на файловата система. Клиент може да бъде и браузър, в адресната лента на който трябва да се въведе адрес, представляващ път към определен каталог или файл на отдалечения сървър, в съответствие с общата блок-схема на URL:

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

Обаче, използването на уеб браузър в този контекст ще позволи само преглед или изтегляне на интересуващите файлове. За да се използват в пълна степен всички предимства на FTP, като клиент трябва да се използва специализирано софтуерно приложение.

FTP аутентификацията използва схема име на потребител/парола за предоставяне на достъп. Името на потребителя се изпраща на сървъра с командата USER, а паролата – с командата PASS. Ако информацията, предоставена от клиента, бъде приета от сървъра, сървърът ще изпрати покана на клиента и започва сесия. Потребителите могат, ако сървърът поддържа тази функция, да влязат в системата без предоставяне на данни за влизане, но сървърът може да предостави само ограничен достъп за такива сесии.

Хостът, осигуряващ FTP услуга, може да предостави анонимен достъп до FTP. Потребителите обикновено влизат в системата като "anonymous" (може да е чувствителен към регистъра на някои FTP сървъри) като име на потребител. Въпреки че обикновено потребителите се молят да изпратят адреса на своя имейл вместо парола, всъщност не се провежда никаква проверка. Много FTP хостове, предлагащи актуализации на софтуер, поддържат аноимен достъп.

Схема на протокола

Взаимодействието между «клиент-сервер» при FTP-свързване може да бъде представено по следния начин:

Протоколи SFTP и FTPS

Сигурен FTP

FTP първоначално не е създаден като защитен, тъй като е предназначен за комуникация между различни военни обекти и институции. Но с развитието и разпространението на интернет, опасността от несанкциониран достъп нарасна многократно. Появи се необходимостта от защита на сървърите от различни видове атаки. През май 1999 г. авторите на RFC 2577 обобщиха уязвимостите в следния списък от проблеми:

  • Скритите атаки (bounce attacks)
  • Спуф-атаки (spoof attacks)
  • Атаки с груба сила (brute force attacks)
  • Перехват на пакети, снифинг (packet capture, sniffing)
  • Захващане на портове (port stealing)

Обикновеният FTP не предлага възможността за предаване на данни в криптиран вид, поради което потребителските имена, паролите, командите и друга информация могат лесно да бъдат прихванати от злонамерени лица. Обичайното решение на този проблем е използването на «сигурни», защитени с TLS версии на уязвимия протокол (FTPS) или друг, по-защитен протокол, като SFTP/SCP, предоставен с повечето реализации на протокола Secure Shell.

FTPS

FTPS (FTP + SSL) е разширение на стандартния протокол за предаване на файлове, добавящо в неговия базов функционал създаването на криптирани сесии чрез SSL протокол (Secure Sockets Layer — ниво на защитените сокети). В днешно време защитата се осигурява от неговия по-напреднал аналог TLS (Transport Layer Security — защита на транспортно ниво).

SSL

SSL протоколът е предложен от компанията Netscape Communications през 1996 г. с цел осигуряване на безопасността и конфиденциалността на интернет-съединенията. Протоколът поддържа удостоверяване (установяване на автентичност) на клиента и сървъра, независим е от приложенията и е прозрачен за протоколите HTTP, FTP и Telnet.

SSL Handshake протоколът се състои от два етапа: удостоверяване на сървъра и незадължително удостоверяване на клиента. На първия етап сървърът по време на запитването от клиента изпраща своя сертификат и параметри за криптиране. След това клиентът генерира основен ключ, криптира го с публичния ключ на сървъра и го изпраща обратно на сървъра. Сървърът дешифрира основния ключ с неговия частен ключ и потвърджа своята автентичност на клиента, връщайки му съобщение, заверено с основния ключ на клиента.

Следващите данни се шифроват и заверяват с ключове, получени на базата на този майстор-ключ. На втория етап, който не е задължителен, сървърът изпраща искане към клиента, а клиентът потвърд消ава на сървъра своята автентичност, връщайки искането със собствен цифров подпис и сертификат за публичен ключ.

SSL поддържа разнообразни криптографски алгоритми. При създаване на връзка се използва криптосистема с публичен ключ RSA. След обмена на ключове се използват много различни шифри: RC2, RC4, IDEA, DES и TripleDES. Също така се използва MD5 — алгоритъм за създаване на дайджести на съобщения. Синтаксисът на сертификатите за публичен ключ е описан в X.509.

Едно от важните предимства на SSL е неговата пълна софтуерно-платформена независимост. Протоколът е разработен на принципите на преносимост и идеологията му не зависи от приложенията, в които се използва. Освен това е важно, че над протокола SSL могат безпроблемно да се наложат и други протоколи; или за допълнително увеличаване на степента на защита на целевите информационни потоци, или за адаптиране на криптографските възможности на SSL към конкретна задача.

SSL свързване

Протоколи SFTP и FTPS

Предоставеният от SSL безопасен канал притежава три основни свойства:

  • Каналът е личен. Шифроването се използва за всички съобщения след простия диалог, който служи за определяне на тайния ключ.
  • Каналът е автентифициран. Сървърната страна на диалога винаги се автентифицира, докато клиентската — опционално.
  • Каналът е надежден. Транспортировката на съобщенията включва проверка на целостта (с участието на MAC).

Характеристики на FTPS

Съществуват две реализации на FTPS, използващи различни методи за осигуряване на безопасност:

  • Неявният метод предполага използване на стандартния протокол SSL с установяване на сесия преди изпращане на данни, което нарушава съвместимостта с обикновените FTP клиенти и сървъри. За обратна съвместимост с клиенти, които не поддържат FTPS, за контролиращо свързване се използва TCP порт 990, а за предаване на данни — 989. Това позволява запазването на стандартния порт 21 за протокола FTP. Този метод е признат за остарял.
  • Явният метод е значително по-удобен, тъй като използва команди на стандартния FTP, но шифрова данните при отговор, което позволява едно и също управляващо свързване да се използва както за FTP, така и за FTPS. Клиентът трябва да поиска изрично защитена предаване на данни от сървъра и след това да одобри начина на шифруване. Ако клиентът не поиска защитена предаване, сървърът FTPS има право или да запази, или да затвори незащитеното свързане. Механизмът за съгласуване на идентификацията и защитата на данните беше добавен в съответствие с RFC 2228, което включва нова FTP команда AUTH. Въпреки че този стандарт не определя изрично механизмите на защита, той посочва, че защитеното свързване трябва да бъде инициирано от клиента с помощта на описания по-горе алгоритъм. Ако сървърът не поддържа защитени свързвания, трябва да се върне код на грешка 504. Клиентите FTPS могат да получат информация за поддържаните от сървъра протоколи за защита с помощта на командата FEAT, но_serverът не е задължен да разкрива какви нива на сигурност поддържа. Най-разпространени са FTPS командите AUTH TLS и AUTH SSL, които предоставят защита съответно TLS и SSL.

SFTP

SFTP (Secure File Transfer Protocol) е протокол на приложеното ниво за предаване на файлове, работещ върху защитен канал. Не трябва да се бърка с (Simple File Transfer Protocol), който носи същата абревиатура. Докато FTPS е просто разширение на FTP, SFTP е отделен и несвързан с него протокол, който за основа използва SSH (Secure Shell – защитена обвивка).

Secure Shell

Разработката на протокола бе осъществена от една от групите на IETF, носеща името Secsh. Работната документация към новия протокол SFTP не стана официален стандарт, но започна активно да се прилага за разработка на приложения. Впоследствие бяха издадени шест версии на протокола. Въпреки това, постепенното увеличаване на функционалността в него доведе до решение на 14 август 2006 година да бъде спряна работата по развитието на протокола в съответствие с изпълнението на основната задача на проекта (разработка на SSH) и отсъствието на достатъчно експертно ниво за преминаване към разработката на пълен протокол за отдалечена файловата система.

SSH е мрежов протокол, който позволява дистанционно управление на операционната система и тунелиране на TCP съединения (например, за предаване на файлове). Функционално е сходен с протоколите Telnet и rlogin, но за разлика от тях, шифрова целия трафик, включително и предаваните пароли. SSH позволява избор на различни алгоритми за шифроване. SSH клиенти и SSH сървъри са налични за повечето мрежови операционни системи.

SSH позволява безопасна предаване на практически всеки друг мрежов протокол в незашитена среда. Така може не само да се работи дистанционно на компютър чрез команден ред, но и да се предава звуков поток или видео (напр. от уеб камера) през шифрован канал. Освен това, SSH може да използва компресия на предаваните данни за последващо шифроване, което е удобно например за дистанционно стартиране на клиенти X WindowSystem.

Първата версия на протокола, SSH-1, е разработена през 1995 година от изследователя Тату Улеънен от Технологичния университет в Хелзинки (Финландия). SSH-1 е написан, за да осигури по-голяма конфиденциалност в сравнение с протоколите rlogin, telnet и rsh. През 1996 година е разработена по-сигурната версия на протокола, SSH-2, несъвместима с SSH-1. Протоколът добива още по-голяма популярност и към 2000 година вече има около два милиона потребители. В момента под термина „SSH“ обикновено се разбира именно SSH-2, тъй като първата версия на протокола, поради съществени недостатъци, в момента практически не се използва. През 2006 година протоколът е утвърден от работната група IETF като интернет-стандарт.

Разпространени са две реализации на SSH: частна търговска и безплатна свободна. Свободната реализация се нарича OpenSSH. Към 2006 година 80 % от компютрите в интернет използват именно OpenSSH. Частната реализация се разработва от организацията SSH Communications Security, която е 100% дъщерно дружество на корпорацията Tectia и е безплатна за некомерсиално използване. Тези реализации съдържат практически идентичен набор от команди.

Протоколът SSH-2, за разлика от протокола telnet, е устойчив на атаки за подслушване на трафика („снифинг“), но не е устойчив на атаки „човек в средата“. Протоколът SSH-2 също така е устойчив на атаки по време на присъединяване в средата (англ. session hijacking), тъй като е невъзможно да се включите в вече установена сесия или да я прихванете.

За да се предотвратят атаките „човек в средата“ при свързване към хост, чийто ключ все още не е известен на клиента, клиентското софтуерно приложение показва на потребителя „отпечатък на ключа“ (англ. key fingerprint). Препоръчва се внимателно да се провери показаният от клиентското ПО „отпечатък на ключа“ с отпечатъка на ключа на сървера, предпочитано получен по надеждни комуникационни канали или лично.

Поддръжката на SSH е реализирана във всички UNIX-подобни системи, и на повечето от тях сред стандартните утилити се включват клиент и сървър ssh. Съществуват множество реализации на SSH-клиенти и за не-UNIX ОС. Протоколът е спечелил голяма популярност след широкото развитие на анализаторите на трафик и начините за нарушаване на работата на локални мрежи, служейки като алтернатива на небезопасния протокол Telnet за управление на важни узли.

Свързване с използване на SSH

За работа по SSH е нужен SSH-сървър и SSH-клиент. Сървърът прослушва връзки от клиентски машини и при установяване на връзката извършва аутентификация, след което започва обслужването на клиента. Клиентът се използва за влизане на отдалечена машина и изпълнение на команди.

Протоколи SFTP и FTPS

Сравнение с FTPS

Основната разлика между SFTP и стандартния FTP и FTPS е, че SFTP криптира напълно всички команди, имена на потребители, пароли и друга конфиденциална информация.

И двата протокола FTPS и SFTP използват комбинация от асиметрични алгоритми (RSA, DSA), симетрични алгоритми (DES/3DES, AES, Twofish и т.н.), както и алгоритми за обмен на ключове. За аутентификация FTPS (или, ако бъдем по-точни, SSL/TLS по протокол FTP) използва сертификати X.509, докато SFTP (SSH протокол) използва SSH ключове.

Сертификатите X.509 включват публичен ключ и известна информация за сертификата на собственика. Тази информация позволява от друга страна, да се провери целостта на самия сертификат, автентичността и собственика на свидетелството. Сертификатите X.509 имат съответстващ частен ключ, който обикновено се съхранява отделно от сертификата по съображения за сигурност.

SSH ключът съдържа само публичния ключ (съответстващият частен ключ се съхранява отделно). В него няма информация за собственика на ключа. Някои реализации на SSH използват сертификати X.509 за удостоверяване, но на практика не проверяват цялата верига от сертификати — използва се само публичният ключ (което прави такава проверка на автентичността непълна).

Заключение

FTP протоколът несъмнено все още играе важна роля в съхранението и разпространението на информация в мрежата, въпреки почтения си възраст. Това е удобен, многофункционален и стандартизиран протокол. На базата му са изградени множество файлови архиви, без които техническата работа би била значително по-малко ефективна. Освен това, той е лесен за настройка, а съществуват практически серверни програми и клиенти за всички актуални и не толкова актуални платформи.

От своя страна защитените му версии решават проблема с конфиденциалността на съхраняваните и предавани данни в съвременния свят. И двата нови протокола имат свои плюсове и минуси и изпълняват малко различни роли. В области, където е необходим именно файлов архив, е за предпочитане да се използва FTPS, особено ако там вече е използван класическият FTP. SFTP е по-малко разпространен заради несъвместимостта си със стария протокол, но е по-защитен и има по-голям функционал, тъй като е част от системата за дистанционно управление.

Списък с източници

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster