Remote shell («удаленная оболочка») — инструмент, позволяющий через командную оболочку (программу для управления компьютером с помощью команд) на одном устройстве выполнять команды на другом.
Функциональность remote shell впервые появилась в 1983 году в операционной системе BSD. Позднее ее реализовали и в других ОС, в том числе в Windows. В качестве remote shell могут использоваться как встроенные инструменты системы, так и самописные утилиты.
Также термин remote shell может обозначать штатную утилиту операционной системы для удаленного выполнения команд (rsh) и устаревший протокол, который использует эта утилита (RSH).
Для чего нужна «удаленная оболочка»
Remote shell может использоваться для удаленной настройки устройств, мониторинга, обнаружения и исправления ошибок, работы на удаленном сервере и т. д. Также инструменты типа remote shell используют злоумышленники, чтобы получить доступ к компьютеру жертвы.
Bind shell и reverse shell
Инициировать сессию remote shell может как локальное устройство (которое отправляет команды), так и удаленное (на котором команды выполняются). В первом случае remote shell будет называться bind shell («прямая оболочка»), во втором — reverse shell («обратная оболочка»).
Reverse shell может использоваться, когда устройство, на котором нужно выполнить команду, недоступно напрямую, — например, для удаленного техобслуживания компьютеров, расположенных за NAT, к которым нельзя подключиться извне. Также reverse shell создают вредоносные программы, чтобы дать злоумышленникам возможность управлять зараженным устройством.
Протоколы RSH и SSH
Исторически для сессий remote shell использовался протокол RSH. Этот протокол использует для авторизации файлы со списком доверенных устройств и пользователей, которые могут без каких-либо проверок подключиться к компьютеру, на котором хранится файл. Этот протокол устарел и сейчас считается небезопасным по ряду причин:
- При передаче по этому протоколу данные не шифруются и их можно перехватить. Это делает взаимодействие через RSH уязвимым для MitM-атак.
- Протокол RSH допускает выполнение команд без проверки подлинности, если эти команды поступили с доверенного устройства, IP-адрес которого могут подделать злоумышленники.
На смену RSH пришел протокол SSH (Secure Shell, «защищенная оболочка») с возможностью шифрования и обязательной аутентификацией.