Можно ли обеспечить подотчетность, о которой только что шла речь, без обязательного принуждения к использованию паролей при передаче данных через небезопасное сетевое пространство? Да, если использовать SSH. Когда протокол SSH выполняет переадресацию команды, то при этом он по умолчанию использует очень ограниченное окружение, которое ему предоставляет командная оболочка. Окружение по умолчанию – это комбинация
sshd и директории /bin/sh, владельцем которых является пользователь с правами суперпользователя. Отчасти окружение по умолчанию игнорирует клиента. По умолчанию оно обладает иммунитетом к каким-либо повреждениям, которые могут произойти в командной оболочке по вине ее конфигурационных файлов или еще чего-нибудь. Это делает окружение по умолчанию идеальным окружением для
su!
ssh user@host -t “/bin/su –l user2”
Хотя приведенная команда приводит к самой важной записи пользователя, но это слишком долгий путь для решения задачи аутентификации. Окружение остается в таком же непорочном состоянии, что и процесс, владельцем которого является суперпользователь и который породил это окружение. Работая в таком непорочном окружении, инструментарий su предоставляет функции TTY и сообщает о переключении к другому пользователю. Поскольку это непорочное окружение функции, то, безусловно, это та программа su, которая в действительности выполняется, и ничто иное.
Обратите внимание, что только /bin/sh доверено поддерживать чистоту окружения команды. Например, bash загрузит свои конфигурационные файлы даже в случае ее применения для выполнения команды. Рассмотренный метод потребуется команде chsh (смена командной оболочки) для обеспечения своей безопасности. Но для пользователя это не означает необходимости переключиться от bash к /bin/sh, используя. profile конфигурацию в своей домашней директории. Пользователь может поместить команду exec bash – login – i и получить доступ к bash во время интерактивного подключения, пока ему доступно безопасное окружение для удаленного выполнения команд.
Существует другая важная проблема, о которой мало что известно. SSHD загружает файл ~/.ssh/environment даже для переадресованных команд, устанавливая параметры пользовательского окружения. Поэтому в первую очередь могут быть атакованы параметры окружения, предназначенные для хранения пути запуска удаленного инструментария su. Переназначая путь к некоторому поврежденному двоичному файлу, владельцем которого выступает пользователь, может оказаться уязвимым ввод чего-либо в командной строке. Отключить синтаксический разбор файла ~/.ssh/environment непросто. Обычно гораздо легче определить абсолютный путь к su – /bin/su, хотя иногда путь /usr/bin/su лучше не взламывать. Другой основной способ атаки предусматривает предварительную загрузку библиотеки, изменяющую функции, от которых могло бы зависеть выполнение данного приложения. Поскольку инструментарий su является приложением класса setuid, то система будет автоматически игнорировать любую предварительно загруженную библиотеку.
Наконец, важно использовать опцию
-l инструментария
su для определения необходимости очистки всего окружения входа в систему сразу после установки соединения. Иначе помехи от пользовательской командной оболочки распространятся до оболочки суперпользователя!
Переадресация портов: доступ к ресурсам удаленных сетей
Протокол SSH, установив соединение, предоставляет возможность создать портал (портал – общедоступный региональный узел компьютерной сети) ограниченной возможности соединения от клиента к серверу или от сервера к клиенту. Это не глобальный портал. Простое выполнение протокола SSH по мановению волшебной палочки не инкапсулирует сетевой трафик машины читателя. Существование самолетов еще не означает, что человек может полететь, лишь помахав руками. Но существуют способы и системы, которые позволяют добиться максимальной полезности от применения протокола SSH при создании систем сетевого туннелирования.
Переадресация локального порта
По существу, переадресация (перенаправление) локального порта (local port forward) является запросом к протоколу SSH прослушать порт клиента TCP (очень жалко, но в силу достаточно серьезных причин протокол UDP не поддерживается). По мере поступления данных их перенаправляют по каналу через SSH-соединение на заданную машину, видимую с сервера. Образующийся при этом локальный трафик может быть послан на внешний IP-адрес машины, который в целях удобства обычно равен значению «127.0.0.1», а ключевое слово «localhost» ссылается на «этот хост» вне зависимости от значения внешнего IP-адреса.
Читать дальше
Конец ознакомительного отрывка
Купить книгу