Протоколи 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. Този метод е считан за остарял.
  • FTPS (File Transfer Protocol Secure) е много по-удобен, защото използва стандартни FTP команди, но шифрова данните при отговор, позволявайки на едно и също управляващо соединение да се използва както за FTP, така и за FTPS. Клиентът трябва явно да поиска защитен пренос на данни от сървъра, а след това да одобри начина на шифроване. Ако клиентът не поиска защитен трансфер, FTPS сървърът е в правото си да запази или да закрие незащитеното подключение. Механизмът за съгласуване на идентификцията и защитата на данните е добавен под RFC 2228, който включва нова FTP команда AUTH. Въпреки че този стандарт не определя ясни механизми за защита, той постановява, че защитената връзка трябва да се иницира от клиента по описания по-горе алгоритъм. Ако защитените връзки не се поддържат от сървера, трябва да бъде върнат код за грешка 504. FTPS клиентите могат да получат информация за подкрепяните от сървера защитни протоколи с помощта на командата FEAT, обаче сървърът не е задължен да разкрива какви нива на сигурност поддържа. Най-разпространените 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, която е изцяло подразделение на корпорацията 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