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

Передмова

Буквально тиждень тому я писав реферат з зазначеної в заголовку темі і зіткнувся з тим, що, скажімо так, пізнавальної інформації в мережі не так багато. В основному сухі факти та інструкції з налаштування. Тому я вирішив дещо підкоригувати текст і викласти його як статтю.

Що таке FTP

FTP (File Transfer Protocol) – протокол передачі файлів через мережу. Є одним із базових протоколів Ethernet. З'явився у 1971 році та спочатку працював у мережах DARPA. На даний момент, як і HTTP, файлова передача ґрунтується на моделі, що складається з сукупності протоколів TCP/IP (Transmission Control Protocol/Internet Protocol). Визначено в RFC 959.

Протокол визначає таке:

  • Як здійснюватиметься перевірка на помилку
  • Метод упакування даних (якщо упаковка використовується)
  • Як надсилає пристрій повідомляє, що воно закінчило повідомлення
  • Як приймаючий пристрій повідомляє, що він отримав повідомлення

Взаємодія між клієнтом та сервером

Розглянемо процеси, що відбуваються при роботі FTP, докладніше. З'єднання ініціалізується інтерпретатором протоколу користувача. Управління обміном здійснюється каналом управління у стандарті TELNET. Команди FTP генеруються інтерпретатором протоколу користувача та передаються на сервер. Відповіді сервера надсилаються користувачеві також каналом управління. У випадку користувач має можливість встановити контакт з інтерпретатором протоколу сервера і відмінними від інтерпретатора користувача засобами.

Основною особливістю FTP є те, що він використовує подвійне підключення. Одне з них використовується для передачі команд серверу і відбувається за замовчуванням через порт 21 TCP, який може бути змінений. З'єднання, що управляє, існує весь час, поки клієнт спілкується з сервером. Канал керування повинен бути відкритий під час передачі даних між машинами. У разі закриття передача даних припиняється. Через друге відбувається безпосередня передача даних. Воно відкривається щоразу, коли здійснюється передача файлу між клієнтом та сервером. Якщо одночасно передається кілька файлів, для кожного з них відкривається свій канал передачі.

FTP може працювати в активному або пасивному режимі, від вибору якого залежить спосіб встановлення з'єднання. В активному режимі клієнт створює керуюче TCP-з'єднання з сервером і відправляє серверу свою IP-адресу та довільний номер клієнтського порту, після чого чекає, поки сервер запустить TCP-з'єднання з цією адресою та номером порту. У випадку, якщо клієнт знаходиться за брандмауером і не може прийняти вхідне з'єднання TCP, може бути використаний пасивний режим. У цьому режимі клієнт використовує потік керування, щоб надіслати серверу команду PASV, і потім отримує від сервера його IP-адресу і номер порту, які потім використовуються клієнтом для відкриття потоку даних зі свого довільного порту.

Можлива ситуація, коли дані можуть передаватись на третю машину. У цьому випадку користувач організує канал управління з двома серверами та організує прямий канал даних між ними. Команди управління йдуть через користувача, а дані безпосередньо між серверами.

При передачі даних через мережу можуть бути використані чотири подання даних:

  • ASCII – використовується тексту. Дані, якщо необхідно, до передачі конвертуються з символьної вистави на хосте-відправнику в «восьмибітний ASCII», і (знову ж таки, якщо необхідно) символьне уявлення приймаючого хоста. Зокрема, змінюються символи перекладу рядка. Як наслідок, цей режим не підходить для файлів, які містять звичайний текст.
  • Бінарний режим - пристрій-відправник посилає кожен файл байт за байтом, а одержувач зберігає потік байтів при отриманні. Підтримка цього режиму була рекомендована всім реалізацій FTP.
  • EBCDIC – використовується передачі звичайного тексту між хостами в кодуванні EBCDIC. В іншому цей режим аналогічний до ASCII-режиму.
  • Локальний режим – дозволяє двом комп'ютерам з ідентичними налаштуваннями надсилати дані у власному форматі без конвертації в ASCII.

Передача даних може здійснюватися у будь-якому з трьох режимів:

  • Поточний режим – дані посилаються у вигляді безперервного потоку, звільняючи FTP від ​​виконання будь-якої обробки. Натомість вся обробка виконується TCP. Індикатор кінця файлу не потрібний, за винятком поділу даних на запис.
  • Блоковий режим – FTP розбиває дані кілька блоків (блок заголовка, кількість байт, полі даних) і потім передає їх TCP.
  • Режим стиснення – дані стискуються єдиним алгоритмом (зазвичай кодуванням довжин серії).

FTP - це сервер, який передбачає можливість використання протоколу передачі файлів. Він має певні особливості, що відрізняють його від звичайних веб-серверів:

  • Необхідна автентифікація користувачів
  • Усі операції проводяться в рамках поточної сесії
  • Можливість здійснення різних дій із файловою системою
  • Застосовується окремий канал для кожного з'єднання

FTP client – ​​це програма, що дозволяє підключитися до віддаленого сервера 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, проте сервер не зобов'язаний розголошувати те, які рівні безпеки він підтримує. Найбільш поширені 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 також стійкий до атак шляхом приєднання посередині (англ. sessionhijacking), оскільки неможливо включитися у вже встановлену сесію або перехопити її.

Для запобігання атак «людина посередині» при підключенні до хоста, ключ якого ще не відомий клієнту, клієнтське програмне забезпечення показує користувачеві «зліпок ключа» (англ. keyfingerprint). Рекомендується ретельно перевіряти показуваний клієнтським ПЗ «зліпок ключа» зі зліпком ключа сервера, бажано отриманим по надійних каналах зв'язку або особисто.

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

Зв'язок із використанням SSH

Для роботи з SSH потрібен SSH-сервер та SSH-клієнт. Сервер прослуховує з'єднання від клієнтських машин і під час встановлення зв'язку здійснює аутентифікацію, після чого починає обслуговування клієнта. Клієнт використовується для входу на віддалену машину та виконання команд.

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

Порівняння з FTPS

Головне, що відрізняє SFTP від ​​стандартного FTP та FTPS, це те, що SFTP шифрує абсолютно всі команди, імена користувачів, паролі та іншу конфіденційну інформацію.

Обидва протоколи FTPS і SFTP використовують поєднання асиметричних алгоритмів (RSA, DSA), симетричних алгоритмів (DES/3DES, AES, Twhofish тощо), і навіть алгоритм обміну ключами. Для аутентифікації FTPS (або, якщо бути точнішим, SSL / TLS за протоколом FTP) використовує сертифікати X.509, тоді як SFTP (SSH протокол) використовує SSH ключі.

Сертифікати X.509 включає відкритий ключ і деяку інформацію про сертифікат власника. Ця інформація дозволяє, з іншого боку, перевірити цілісність самого сертифікату, справжність та власника свідоцтва. Сертифікат X.509 має відповідний закритий ключ, який зазвичай зберігається окремо від сертифіката з міркувань безпеки.

SSH ключ містить лише відкритий ключ (відповідний закритий ключ зберігається окремо). У ньому немає ніякої інформації про власника ключа. Деякі SSH реалізації використовують сертифікати X.509 для аутентифікації, але насправді вони не перевіряють весь ланцюжок сертифікатів – тільки відкритий ключ використовується (що робить таку автентифікацію неповною).

Висновок

Протокол FTP, безперечно, досі відіграє важливу роль у питанні зберігання та поширення інформації в мережі, незважаючи на свій поважний вік. Це зручний, багатофункціональний та стандартизований протокол. На базі побудовано безліч файлових архівів, без яких технічна робота була б настільки ефективна. Крім того, він легкий у налаштуванні, а програми-сервери та клієнти існують практично для всіх актуальних та не дуже платформ.

У свою чергу його захищені версії вирішують проблему конфіденційності даних, що зберігаються і передаються в сучасному світі. Обидва нові протоколи мають свої плюси та мінуси та виконують трохи різні ролі. У тих областях, де необхідний саме файловий архів, краще використовувати FTPS, особливо якщо раніше там вже використовувався класичний FTP. SFTP менш поширений через свою несумісність зі старим протоколом, але більш захищений і має більший функціонал, оскільки є частиною системи дистанційного керування.

Список джерел

Джерело: habr.com

Додати коментар або відгук