Безопасно ли оставлять запущенную корневую оболочку в сеансе с отдельным экраном?

20

Мне интересно, как оставить корневую оболочку внутри отдельного сеанса экрана. Я обычно никогда не делаю этого.

Помимо вероятности того, что моя учетная запись пользователя без полномочий root может быть скомпрометирована (пароль раскрыт, ssh-ключ скомпрометирован и т. Д.), Существуют ли другие векторы входа в отдельный сеанс экрана, защищенный паролем, о котором я должен беспокоиться, или может быть отключенный экран сеанс считаться инертным?

Майкл
источник
Это не ответ, потому что я не знаю этого, но я не думаю, что есть какая-то разница между тем, как ты сказал, и уходом с работы sudo.
phunehehe
7
@phunehehe Есть разница, потому что, когда работа завершается, sudoдеактивируется, в то время как истинная корневая оболочка остается открытой.
Майкл

Ответы:

5

Я думаю, что это проблема безопасности, потому что «помимо возможного взлома моей учетной записи пользователя без полномочий root» может быть довольно большой.

Но помимо этого есть и другие повышенные риски. Например, вы теперь открыли для себя теоретический эксплойт, который позволяет изменять разрешения в dir сокета экрана ( /var/run/screenв моей системе, но иногда /tmpиспользуется). У этого эксплойта теперь есть путь к получению root-прав, что иначе не могло бы быть.

sudoимеет другие преимущества, если вы можете научиться использовать его для каждой команды, а не делать sudo su -. Он регистрирует действия (которые, если вы не входите удаленно, не значимо повышают безопасность, но дают вам след того, что вы сделали). И это помогает предотвратить аварии, требуя преднамеренного эскалации для каждой команды, а не переключения на полностью привилегированный сеанс.

mattdm
источник
1
Хотя такой эксплойт сейчас не известен, я буду продолжать не оставлять корневые оболочки открытыми на экране. Риски для учетной записи пользователя достаточно, как есть. Благодарю.
Майкл
-1 Если у меня есть эксплойт, который может изменить права доступа к файлу, мне не нужно взламывать какой-нибудь рабочий экран. Я могу делать с системой все, что захочу.
Let_Me_Be
@Let_Me_Be - это зависит от того, какие права доступа к файлам вы можете изменить. Может быть, вы можете сделать только несколько конкретных вещей при определенных иерархиях. Это не так надумано.
Mattdm
Сам экран имеет большую поверхность атаки. У меня нет полной атаки, чтобы показать , но есть явные недостатки.
Жиль "ТАК - перестань быть злым"
поправьте меня, если я ошибаюсь, но экранное приложение подключается через сеанс оболочки (либо непосредственно на системной консоли, либо через сеанс ssh). насколько я знаю, это не сетевой протокол как таковой. поэтому он так же безопасен, как и ваш ssh-сеанс или терминальный сеанс. если кто-то имеет доступ к сеансу ssh или вашему физическому компьютеру, все ставки отключены. если у них достаточно доступа для доступа к командной строке любого типа под любой учетной записью пользователя, то вы все равно можете отказаться от безопасности своего компьютера.
несинхронизировано
10

Если у вас есть корневая оболочка в сеансе экрана (отсоединен или нет, защищен паролем или нет), и ваш 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, гораздо меньше уязвимостей.

Жиль "ТАК - перестань быть злым"
источник
+1 Отличный ответ. Спасибо, что нашли время, чтобы объяснить все это.
Майкл
1

Каналы, созданные экраном, доступны только владельцу, поэтому это не должно быть проблемой безопасности.

Позволь мне быть
источник
5
Вы использовали «есть» в первой части предложения, где вы, вероятно, имели в виду «должен быть». Давайте не будем привыкать делать предположения.
Шадур
1
Э - э? Каналы, созданные на экране, доступны только владельцу (если вы не изменяете их вручную).
Let_Me_Be