SSH

SSH ( англ. S ecure SH ell - "Безпечна оболонка" [1]) - мережевий протокол прикладного рівня, що дозволяє проводити віддалене управління операційною системою і туннелирование TCP -з'єднань (наприклад, для передачі файлів). Схожий за функціональністю з протоколами Telnet і rlogin, але, на відміну від них, шифрує весь трафік, включаючи і передавані паролі. SSH допускає вибір різних алгоритмів шифрування. SSH- клієнти і SSH- сервери доступні для більшості мережевих операційних систем.

SSH дозволяє безпечно передавати в незахищеною середовищі практично будь-якої іншої мережевий протокол. Таким чином, можна не тільки віддалено працювати на комп'ютері через командну оболонку, але і передавати по шифрованому каналу звуковий потік або відео (наприклад, з веб-камери) [2]. Також SSH може використовувати стиснення переданих даних для подальшого їх шифрування, що зручно, наприклад, для віддаленого запуску клієнтів X Window System.

Більшість хостинг-провайдерів за певну плату надають клієнтам доступ до їх домашнього каталогу по SSH. Це може бути зручно як для роботи в командному рядку, так і для віддаленого запуску програм (у тому числі графічних додатків).


1. Стандарти і програмні реалізації

Перша версія протоколу, SSH-1, була розроблена в 1995 дослідником Тату Улененом з Технологічного університету Гельсінкі ( Фінляндія). SSH-1 був написаний для забезпечення більшої конфіденційності, чим протоколи rlogin, telnet і rsh. В 1996 була розроблена більш безпечна версія протоколу, SSH-2, несумісна з SSH-1. Протокол набув ще більшої популярності, і до 2000 у нього було близько двох мільйонів користувачів. В даний час під терміном "SSH" зазвичай мається на увазі саме SSH-2, тому перша версія протоколу огляду істотних недоліків зараз практично не застосовується.

В 2006 протокол був затверджений робочою групою IETF в якості Інтернет-стандарту.

Однак, в деяких країнах ( Франція, Росія, Ірак і Пакистан) досі потрібен спеціальний дозвіл у відповідних структурах для використання певних методів шифрування, включаючи SSH. [3]

Поширені дві реалізації SSH: приватна комерційна та безкоштовна вільна. Вільна реалізація називається OpenSSH. До 2006 року 80% комп'ютерів мережі Інтернет використовувало саме OpenSSH. Приватна реалізація розробляється організацією SSH Communications Security, яка є стовідсотковим підрозділом корпорації Tectia [4], вона безкоштовна для некомерційного використання. Ці реалізації містять практично однаковий набір команд.

Протокол SSH-2, на відміну від протоколу telnet, стійкий до атак прослуховування трафіку (" сніфінг "), але нестійкий до атак" людина посередині ". Протокол SSH-2 також стійкий до атак шляхом приєднання посередині ( англ. session hijacking ), Так як неможливо включитися у вже встановлену сесію або перехопити її.

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

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

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

Для з'єднання сервер і клієнт повинні створити пари ключів - відкритих і закритих - і обмінятися відкритими ключами. Зазвичай використовується також і пароль.


1.1. SSH-сервери

1.2. SSH-клієнти і оболонки

  • GNU / Linux, * BSD: kdessh, lsh-client, openssh-client, putty, ssh, Vinagre
  • MS Windows і Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD, XShell
  • MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
  • Mac OS: NiftyTelnet SSH
  • Symbian OS: PuTTY
  • Java: MindTerm, AppGate Security Server
  • J2ME: MidpSSH
  • iPhone: i-SSH, ssh (в комплекті з Terminal)
  • Android: connectBot
  • Blackberry: BBSSH
  • MAEMO 5: OpenSSH

2. Поради щодо безпеки використання SSH

  1. Заборона віддаленого root -доступу.
  2. Заборона підключення з порожнім паролем або відключення входу по паролю.
  3. Вибір нестандартного порту для SSH-сервера.
  4. Використання довгих SSH2 RSA-ключів (2048 біт і більше). Системи шифрування на основі RSA вважаються надійними, якщо довжина ключа не менше 1024 біт. [6]
  5. Обмеження списку IP-адрес, з яких дозволений доступ (наприклад, настроюванням файервола).
  6. Заборона доступу з деяких потенційно небезпечних адрес.
  7. Відмова від використання поширених або широко відомих системних логінів для доступу по SSH.
  8. Регулярний перегляд повідомлень про помилки аутентифікації.
  9. Установка систем виявлення вторгнень ( IDS - Intrusion Detection System).
  10. Використання пасток, підроблюють SSH-сервіс ( honeypots).

3. Приклади використання SSH

Команда підключення до локального SSH-сервера з командного рядка GNU / Linux або FreeBSD для користувача pacify (сервер прослуховує нестандартний порт 30000):

 $ Ssh-p 30000 pacify@127.0.0.1 

Генерація пари ключів (в UNIX-подібних ОС) здійснюється командою

 $ Ssh-keygen 

Генерація пари SSH-2 RSA-ключів довжиною 4096 біта програмою puttygen під UNIX-подібними ОС:

 $ Puttygen-t rsa-b 4096-o sample 

Деякі клієнти, наприклад, PuTTY, мають і графічний інтерфейс користувача.

Для використання SSH в Python існують такі модулі, як python-paramiko і python-twisted-conch.


4. SSH-тунелювання

SSH-тунель - це тунель, створюваний за допомогою SSH-з'єднання і використовується для шифрування тунелювати даних. Використовується для того, щоб убезпечити передачу даних в Інтернеті (аналогічне призначення має IPsec). При пересиланні через SSH-тунель незашифрований трафік будь-якого протоколу шифрується на одному кінці SSH-з'єднання і розшифровується на іншому.

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

  • Створенням Socks-проксі для програм, які не вміють працювати через SSH-тунель, але можуть працювати через Socks-проксі
  • Використанням додатків, які вміють працювати через SSH-тунель.
  • Створенням VPN -тунелю, підходить практично для будь-яких додатків.
  • Якщо додаток працює з одним певним сервером, можна налаштувати SSH-клієнт таким чином, щоб він пропускав через SSH-тунель TCP -з'єднання, що приходять на певний TCP-порт машини, на якій запущений SSH-клієнт. Наприклад, клієнти Jabber підключаються за замовчуванням на порт 443. Тоді, щоб налаштувати підключення до сервера Jabber через SSH-тунель, SSH-клієнт налаштовується на перенаправлення підключень з будь-якого порту локальної машини (наприклад, з порту 4430) на віддалений сервер (наприклад, jabber.example.com і порт 443):
 $  ssh  -L  4430  : Jabber.example.com:  443  somehost 

В даному випадку Jabber-клієнт налаштовується на підключення до порту 4430 сервера localhost (якщо ssh-клієнт запущений на тій же машині що й Jabber-клієнт).

Для створення ssh-тунелю необхідна машина з запущеним ssh-сервером і доступом до jabber.example.com. Така конфігурація може використовуватися у випадку, якщо з локальної машини доступ до jabber.example.com закритий файерволом, але є доступ до деякого ssh-серверу, у якого обмеження доступу в Інтернет відсутні.


5. Технічна інформація про протокол

SSH - це протокол прикладного рівня. SSH-сервер зазвичай прослуховує з'єднання на TCP-порту 22. Специфікація протоколу SSH-2 міститься в RFC 4251. Для аутентифікації сервера в SSH використовується протокол аутентифікації сторін на основі алгоритмів електронно-цифрового підпису RSA або DSA. Для аутентифікації клієнта також може використовуватися ЕЦП RSA або DSA, але допускається також аутентифікація за допомогою пароля (режим зворотної сумісності з Telnet) і навіть ip-адреси хоста (режим зворотної сумісності з rlogin). Аутентифікація за паролем найбільш поширена; вона безпечна, оскільки пароль передається по зашифрованому віртуальному каналу. Аутентифікація по ip-адресі небезпечна, цю можливість найчастіше відключають. Для створення загального секрету (сеансового ключа) використовується алгоритм Діффі - Хеллмана (DH). Для шифрування переданих даних використовується симетричне шифрування, алгоритми AES, Blowfish або 3DES. Цілісність передачі даних перевіряється за допомогою CRC32 в SSH1 або HMAC - SHA1 / HMAC - MD5 в SSH2.

Для стиснення шіфруемих даних може використовуватися алгоритм LempelZiv ( LZ77), який забезпечує такий же рівень стиснення, що і архіватор ZIP. Стиснення SSH включається лише по запиту клієнта, і на практиці використовується рідко.


Примітки

  1. Варіант перекладу з Семенов Ю.А. - book.itep.ru/6/ssh_67.htm
  2. Для цього використовується Port Forwarding - www.ssh.com/support/documentation/online/ssh/adminguide/32/Port_Forwarding.html з'єднання TCP.
  3. Див закон Російської Федерації "Про федеральних органах урядового зв'язку і інформації" (закон втратив силу з 1 липня 2003 року у зв'язку з прийняттям федерального закону від 30.06.2003 № 86-ФЗ).
  4. About SSH Communications Security - www.ssh.com / index.php / about-us.html (Англ.)
  5. Інструкція по установці ssh-сервера для Windows через Cygwin - www.petri.co.il / setup-ssh-server-vista.htm
  6. CyberSecurity.ru: "768-бітний ключ RSA успішно зламаний" - www.cybersecurity.ru/crypto/85133.html. 08.01.2010