Если у вас есть корневая оболочка в сеансе экрана (отсоединен или нет, защищен паролем или нет), и ваш screen
исполняемый файл не имеет setxid, то злоумышленник, который получает ваши привилегии, может запускать команды в этой оболочке. Если ничего другого, они могут сделать это, отслеживая процесс экрана.
Если на экране установлен setuid или setgid, а сеанс отсоединен и защищен паролем, то в принципе для запуска команд в этой оболочке требуется экранный пароль. Если этот принцип действует, то кто-то, кто только скомпрометировал вашу учетную запись, должен будет поставить троян на место и ждать, пока вы введете пароль. Однако поверхность атаки (т. Е. Количество мест, где что-то может пойти не так из-за ошибки или неправильной конфигурации) неудобно велика. В дополнение к базовым функциям безопасности системы вы доверяете:
- экран, чтобы получить правильную проверку пароля.
- экран, чтобы предотвратить доступ к сеансу другими средствами.
- экран для правильного использования механизмов контроля доступа ОС (например, права доступа к каналам).
- ядро для правильного выполнения проверок безопасности ptrace (это частый источник уязвимостей).
- бегущая раковина не делает глупостей.
- какая-то другая особенность, чтобы не кусать тебя.
«Еще одна особенность - не кусать тебя»: да, это расплывчато. Но это всегда проблема безопасности. У вас может возникнуть соблазн отмахнуться от этого как от простого желаемого за действительное, но действительно ли вы об этом думаете? Например…
Пока вы можете записывать на терминальное устройство, вы можете вводить данные на вход этой оболочки. Под настройками экрана по умолчанию на моей машине:
printf '\ekfoo\017bar\e\\' >/dev/pts/33
printf '\e[21t' >/dev/pts/33
Это вставляет ␛]lfoobar␛l
во входной поток оболочки. \ek
является последовательностью управления, которая позволяет приложению (или всему, что может записать на терминальное устройство) установить заголовок окна (см. раздел «Имена окон» в руководстве по экрану ) и \e[21t
заставляет терминал сообщать свой заголовок на стандартном вводе приложения ( screen не документирует эту последовательность, но реализует ее, вы можете найти ее CSI Ps ; Ps ; Ps ; t
в списке управляющих последовательностей xterm . Фактически, по крайней мере, на экране 4.0.3 все управляющие символы удаляются из указанного заголовка, поэтому оболочка читает lfoobar
(при условии, что ␛]
он не привязан к команде редактирования) и никакой новой строки. Таким образом, злоумышленник не может выполнить команду таким образом, но может набрать такую команду, какchmod u+s /bin/sh
сопровождаемый большим количеством пробелов и вероятного вида подсказки.
Screen реализует несколько других аналогичных рискованных последовательностей управления, я не знаю, какова их потенциальная уязвимость. Но, надеюсь, теперь вы можете видеть, что защита, обеспечиваемая паролями экранной сессии, не так уж велика. У специального инструмента безопасности, такого как sudo, гораздо меньше уязвимостей.
sudo
.