
-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•---[ Виндовое SSH'частье: SSH серверы под Windows ]--
by ShadOS
Превед,
друх мой! =) Помнится,
прошлый раз я рассказывал тебе о системах удаленного администрирования
столь необходимых для вездесущего администратора? Все это конечно есть
гуд, однако спешу тебя заверить - не все так радужно, как может
показаться на первый взгляд. Что же делать если необходимо, например,
собрать статистику с десятка или даже сотни удаленных серверов? Ну не
зря же умные люди придумали командную строку и ее командный
интерпретатор. Сие счастье чрезвычайно удобно для выполнения некоторой
мелкорутинной работы, не требующей использования графического
интерфейса. Не открою тебе секрета, что в Linux и ему подобных для
этого чаще всего используется bash, а для удаленного доступа к нему -
защищенное SSH-подключение. Естественно, что и для твоего любимого
Windows существуют SSH-серверы, о которых мы и поговорим с тобой
сегодня. /*
Вводная */
Под перенаправлением портов нужно понимать защищенный доступ к различным TCP/IP серверным приложениям через шифрованный туннель. Иногда перенаправление портов еще называют тунеллированием. Данная штука также как и предыдущие чрезвычайно удобна: после того как создан защищенный туннель, SSH роутит трафик некоторого приложения (обычно клиентского) через него на сервер. Причем таким образом через один защищенный мультиплексированный канал могут работать несколько приложений, что опять же позволяет избежать открытия лишних портов, а значит не позволит злому хацкеру не только перехватывать трафик и пароли, но и делать предположения о запущенный службах и идентифицировать их. Вот таким вот образом можно засекюрить и твой любимый VNC, не поддерживающий шифрования, забыв про всяких буржуйских вездесущих админов, требующих зеленых президентов. ![]() /* Немного истории */ Первая версия протокола SSH появилась в далеком 1995 году на смену небезопасным UNIX’овым «r-команд» (rlogin, rsh, and rcp). Secure Shell версии 2 появился в 1997 году на смену SSH1 ввиду обнаруженных в нем серьезных уязвимостей. Кроме этого SSH2 обладал улучшенным механизмом передачи файлов. /* Безопасность, как она есть */ Итак, как я уже упомянул выше, протокол SSH предполагает следующие функции: - Аутентификация пользователей - Аутентификация хостов - Шифрование данных - Целостность данных Остановимся на каждом из пунктов подробнее. ![]() /* Аутентификация пользователей */ Также под этим понимают идентификацию – проверку системой пользователя на правомерность его пребывания в системе и запрещение доступа всем остальным. Большинство реализаций SSH-серверов включают в себя парольную идентификацию и аутентификацию публичным ключом, хотя некоторые могут обеспечивать и другие методы (kerberos, NTLM и т.д). Одним из самых безопасных методов считается использование публичного ключа. Этот метод подразумевает использование двух сгенерированных системой ключей – одного приватного и одного публичного. Каждый из ключей обычно 1024 – 2048 бит длинной. Генерируется этот Твикс с помощью утилиты генерации ключей. Вид их может быть следующий: ---- BEGIN SSH2 PUBLIC KEY ---- Subject: Comment: shados public key AAAAB3NzrC1kc3MAAACBAKoxPsYlv8Nu+fncH2ouLiqkuUNGIJo8iZaHdpDABAvCvLZn jFPUN+SGPtzP9XtW++2q8khlapMUVJS0OyFWgl0ROZwZDApr2olQK+vNsUC6ZwuUDRPV fYaqFCHrjzNBHqgmZV9qBtngYD19fGcpaq1xvHgKJFtPeQOPaG3Gt64FAAAAFQCJfkGZ e3alvQDU8L1AVebTUFi8OwAAAIBk9ZqNG1XQizw4ValQXREczlIN946Te/1pKUZpau3W iiDAxTFlK8FdE2714pSV3NVkWC4xlQ3x7wa6AUXIhPdLKtiUhTxtctm1epPQS+RZKrRI XjwKL71EO7UY+b8EOAC2jBNIRtYRy0Kxsp/NQ0YYzJPfn7bqhZvWC7uiC+D+ZwAAAIEA mx0ZYo5jENA0IinXGpc6pYH18ywZ8CCI2QrPeSGP4OxxOusNdPskqBTe5wHjsZSiQr1g b7TCmH8Tr50Zx+EJ/XGBU4XoWBJDifP/6Bwryejo3wwjh9d4gchaoZNvIXuHTCYLNPFo RKPx3cBXHJZ27khllsjzta53BxLpp ---- END SSH2 PUBLIC KEY ---- Оба ключа из пары генерируются одновременно, вычислить приватный ключ с помощью публичного не представляется возможным. Шифрование методом публичного ключа использует public key для шифрования и private key для дешифрования данных. Сам термин public key указывает на тот факт, что использовать этот метод можно без страха за безопасность передаваемых данных или ключ дешифрации, ибо последний просто не передается по данной технологии. Проще говоря, это означает, что нет опасности передачи public key по электронной почте или другими методами системному администратору удаленного сервера чтобы он помечтил его как авторизованный для последующего твоего доступа к удаленному серверу. Если кто-либо хочет получить несанкционированный доступ к нашим данным или воспользоваться входом при авторизации, то ему необходимо сначала получить доступ к нашему личному ключу и соответственно дешифровать его для идентификации сперва самого себя. Однако для большей защиты private key, при его генерации необходимо задать парольную-фразу для шифрации содержимого файла-ключа. Это должно предотвратить от дешифрования приватного ключа даже если кто-либо получит к нему доступ. Есть в SSH еще одна интересная фишка называемая Agent Forwarding. Под таким хитрым названием скрывается технология аутентификации пользователя по цепочке на нескольких машинах, позволяющая избегать повторного введения пароля при доступе к сети из нескольких SSH-серверов. Кроме того, эта технология позволяет избежать компрометирования приватного ключа (private key), т.к. его копия будет храниться только на клиентской машине, а пароль будет вводиться только на сервере А. Без использования Agent Forwarding, приватный ключ понадобилось бы хранить на всех серверах за исключением последнего, так как при обычной последовательной цепочечной аутентификации, например, представленной на рисунке, SSHserverA становится клиентом и на нем соответственно должен находиться приватный ключ клиента для аутентификации на SSHserverB. Надеюсь, теперь у тебя в голове прояснилось. ![]() /* Идентификация хостов */ Поехали дальше. В данном случае используется ключ хоста для идентификации клиентов о обратно - для идентификации клиентами доверенных хостов. Ключи хоста являются по большей части неизменными (или изменяются очень редко) и ассиметричными – во многом такая технология схода с системой public/private ключей. Если на машине запущен только один SSH-сервер, то ее ключ используется одновременно для идентификации как самой машины, так и для сервера. Естественно, если на машине запущенно несколько SSH-серверов, то каждый может использовать свой ключ для аутентификации. Ключи хоста очень часто путают с ключом сессии. Поговорим о них ниже. /* Шифрование данных */ Шифрование – технология, коорая означает, что передаваемые данные защищены от атаки типа сниффинга (sniffing) и внедрения в сессию. Шифр – это механизм, который описывает то, как должны быть зашифрованы данные передаваемые от одной к точке к другой по линии связи. Блочные шифры являются обычной формой симметричных алгоритмов шифрования данных (например DES, 3DES, Blowfish, AES, Twofish и т.д). Они оперируют над фиксированными блоками данных, используя секретный ключ и обычно включают в себя множественные повторения операций с нелинейными функциями. После того, как такая операция была произведена над данными, исходный вид их можно получить только при наличие ключа. Если ты хоть раз соединялся с SSH-сервером, знаешь, что обычно выдается предупреждение об использовании определенного алгоритма шифрования данный с которым стоит согласиться для продолжения сеанса. Ключи сессии – это разделяемые ключи (shared keys), используемые как сервером, так и клиентом одновременно для шифрования и дешифрования данных. Они генерируются в процессе установки соединения, после того, как процесс аутентификации хоста прошел успешно, но до того как начнется аутентификация пользователя. Отсюда становится ясно – пара имя пользователя/пароль уже передаются зашифрованными. Эти ключи могут быть изменены несколько раз в процессе сессии между сервером и клиентом. Это происходит, например, каждый час (естественно, все зависит от настроек). В конце сессии ключи уничтожаются специальным образом. /* Целостность данных */ Целостнось данных (т.е передача их в неизменном виде от одной точке к другой по каналу связи) в SSH не теряет своей актуальности – данные, передаваемые по сети могут быть подвергнуть внедрению некоторого нежелательного «мусора» в поток данных, и естественно от этого необходимо защищаться. SSH версии 2 использует технологию под названием код аутентификации сообщения (Message Authentication Code или просто MAC), в то время как SSH первой версии использовал простой алгоритм СRC32, что несомненно являлось угрозой безопасности и давало злобному злоумышленнику возможность внедрять некоторые «нежелательные» данные в поток данных. /* Софт */ Ну да ладно. Хватит с вас промывания мозгов =) Пора и добавить словесного мусора - моего личного компетентного мнения по поводу реализаций всех приведенных выше вещей для твоей любимой/нелюбимой (нужное подчеркнуть) операционной системы Microsoft Windows. Кандидатов будет не очень много, но они являются лучшими среди достойных, хоть таковых и немного. /* Vandyke Software VShell */ Vandyke Software VShell www.wandyke.com Пожалуй, редкой конторе стоит тягаться с клевой реализацией всех времен и народов –OpenSSH. Но вот ребята из Vandyke все-таки постарались. В результате их трудов получилось комплексное серверное решение включающее в себя мощное шифрование, встроенные списки контроля доступа (ACLs – Access Control Lists), SFTP сервер с поддержкой виртуальных директории и даже специальный механизм «триггеров», позволяющий автоматизировать различную рутинную работу. VShell предоставляет широкий ряд возможностей, помогающий настроить серверное окружение и обеспечить контроль доступа и привилегий каждому пользователю сети. Виртуальные каталоги позволяют контролировать доступ к безопасной передачи файлов на основе прав группы или конкретного пользователя. Технология chroot предоставляет возможность обеспечить безопасность файловой системы от несанкционированного доступа пользователей. Ну и пресловутые ACLы разрешают доступ определенным спискам адресов. Кроме того VShell отличается еще и большим разнообразием механизмов аутентификации: public/private ключами, Kerberos, интерактивный ввод с клавиатуры, цифровые сертификаты X.509 или RADIUS серверы, использующие SecurID чтобы создать двухфакторную модель аутентификации. И взаключение самое интересное: существуют реализации VShell для Windows, Linux, FreeBSD да и для многих других *nix платформ. Правда, буржуи требуют нехилое количество зеленой капусты за свой продукт, да и скачать на официальном сайте этот продукт не представляется возможным. Янки запрещают вывозить столь навороченные технологии из страны, а посему придется искать софтину на варезной сцене. Кто ищет – тот всегда найдет. Дядька Шадос уже нащел, если уж сильно приспичит – пиши. /* BitWise WinSSHD */ Bitwise WinSSHD www.bitwise.com В отличие от предыдущей софтины, WinSSHD, как видно из его названия, работает только в ОС Windows, однако, это дает и ряд преимуществ. Во-первых, после инсталляции сервис готов к работе прямо «из коробки». По большому счету тебе не потребуется его настраивать – он готов к использованию непосредственно после инсталляции. Во-вторых, WinSSHD работает непосредственно с группами и пользователями операционной системы, что позволяет настроить его отдельно для каждого пользователя. Помимо этого, WinSSHD может использовать виртуальных (применимых только для SSH-сервера) пользователей и групп как и любой другой SSH сервер. Особо удобной данная фишка становится при использовании множества отдельных аккаунтов SFTP-сервера, избавляя нас от необходимости заводить лишних пользователей в системе. В качестве ACLов используются правила DNS, также доступные в окне Settings. Еще одной интересной особенностью является возможность использования специальных текстовых конфигов или скриптов, доступных с помощью утилиты wcfg. К сожалению, тунеллированием, в отличие от VShell, занимается не встроенная тузла, а отдельная программа Bitwise Tuneller. Но все-таки, в конечном итоге WinSSHD ничуть не уступает VShell. /* Windows Access Server */ Windows Access Server www.foxitsoftware.com/wac Это продукт ко всему прочему является не только SSH-, но и telnet-сервером вкупе с сервером serial-порта. WAC поддерживает оба протокола – SSH1 и SSH2, имеет в своем арсенале тунеллирование и SFTP сервер. Хотя на вид его интерфейс кажется немного убогим, при ближайшем рассмотрении оказывается, что данный недостаток компенсируется интересными возможностями по взаимодействию пользователей между сессиями, печати на клиентской стороне. В довесок к серверу, разработчики присыпали продукт большим набором консольных утилит для доступа к различным аспектам жизнедеятельности windows: sysinfo, eventview… всякой разной дряни, даже winmine для консоли зачем-то переделали. Во извращенцы… /* Windows OpenSSH */ OpenSSH for Windows sshwindows.sourceforge.net Как и всегда случается с наилучшим *nix программным обеспечением, не без усилий группы разработчиков cygwin OpenSSH перетащили в Windows. Получилось совсем неплохо и достойно, особенно если учитывать всю мощь этого приложения. Как известно, OpenSSH является практически стандартом дефакто, а посему все технологии SSH, которые я описывал выше, будут применимы и для OpenSSH. Начиная с последних версий, OpenSSH после некоторго тюнинга файла \etc\passwd и \etc\group, уже можно использовать в своих целях. Все, что тебе придется сделать – это зайти в папку программы а затем произвести следующие действия: mkgroup -l >> ..\etc\group (local groups) mkgroup -d >> ..\etc\group (domain groups) 2) добавить авторизованных пользователей в файл passwd mkpasswd -l [-u <username>] >> ..\etc\passwd (local users) mkpasswd -d [-u <username>] >> ..\etc\passwd (domain users) 3) запустить сервис net start opensshd Затем можно смело коннектиться на 22й порт своей тачки любым SSH клиентом, будь то твой любимый PyTTY или SecureCRT. Естественно, можно использовать родной OpenSSH клиент вот таким вот образом: ssh <user@servername>. Короче, не буду углубляться в справочную документацию – ты и сам без меня читать умеешь и тебе не составит труда прочесть еще пару десятков килобайт текста из руководства по OpenSSH дабы понять как выжать из него все вкусности типа тунеллирования и SCP. Естественно, что OpenSSH совершенно бесплатен и это единственный пакет из моего обзора являющийся таковым. Делай выводы. /* Заключение */ Как ты, мой юный друг, заметил – я сильно не стал углубляться в разжевывание пошаговой настройки каждого из продуктов, иначе бы вся статья стала бы похожа на список поочерёдного нажимания кнопок. Любой из представленных серверов при желании можно поднять за минуту, а то и меньше. А если ещё документации подчитать, так вообще можно творить чудеса высшего пилотажа. Мораль сей басни такова: учи матчасть – будет тебе SSHщастье! (c) ShadOS // Hell Knights Crew // Xakep Magazine Автор: ShadOS Email:
ShadOS [at] real [d0t] xakep [d0t] ru
http://hellknights.void.ru/ -•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•-•- (c)
ShadOS, Hell Knights Crew
|
гЂЂ