Страницы

Все используют sudo неправильно или фундаментальная проблема $PATH

Никогда не видел, чтобы хотя бы где-то правильно указывали, как использовать sudo. Ни-ко-гда. Во всех официальных инструкциях, в книгах, в статьях, на форумах — везде предлагают использовать sudo неправильно. И ни один из известных мне дистрибутивов GNU/Linux не препятствует этому.

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

В чём же проблема?

Дело в том, что применение sudo при указании только имени без полного пути даёт возможность злонамеренному коду, выполняющемуся от имени пользователя повысить права и получить пароль пользователя.

Если злонамеренный код изменит переменную окружения PATH, добавив в её начало путь, где лежит исполнимый файл с именем sudo, или же воспользуется открытым для записи каталогом, уже находящимся в PATH для обеспечения дополнительной функциональности в пространстве пользователя, то при запуске по имени будет выполнен подложенный sudo, а не системный, со всеми вытекающими отсюда следствиями. Проверим:

echo "echo мама, где я, куда я попал?" > sudo
chmod +x sudo
export PATH=.:$PATH
sudo

Правильное содержимое лже-sudo можете придумать сами.

Главная неприятность заключается в том, что если приглядеться, то можно увидеть, что уязвимость относится не только к sudo, но и к другим утилитам: для смены пользователя, смены прав и владельца файла, программам, выполняющим и создающим другие программы: командным и скриптовым интерпретаторам, компиляторам. Не забудем и динамическую загрузку библиотек вместе с LD_LIBRARY_PATH.

Не слишком ли много всего? Слишком, достаточно слишком, чтобы ничего не менять в привычном для большинства пользователей GNU/Linux раскладе дел. И находясь в положении неуловимого Джо, по прежнему высокомерно смотреть в сторону пользователей Windows, посмеиваться над производителями антивирусов, и искромётно шутить о том, где же найти инструкцию, чтобы запустить таки зловредную программу.

Ждём грома? Нет? Тогда вот, что следует сделать разработчикам дистрибутивов GNU/Linux в сотрудничестве с разработчиками используемых программ, в первую очередь командных интерпретаторов:

  1. Совершать поиск по PATH и LD_LIBRARY_PATH не по порядку, заданном в тексте переменной, а ставить в приоритете системные каталоги.
  2. Запретить менять переменные окружения PATH и LD_LIBRARY_PATH без административных прав.
  3. Запретить по умолчанию изменение LD_LIBRARY_PATH
  4. Убрать права на запись для пользователя на файлы, используемые в автозагрузке.
  5. Запретить запуск без подписи ряда программ, находящихся в зоне риска.

Поскольку подобных изменений в ближайшем будущем ожидать не приходится, то бдительному пользователю стоит принять кое-какие меры самостоятельно:

  1. Запускать sudo только по полному пути. Если /usr/bin/sudo слишком длинно (в новых уже /bin/sudo), то можно его перенести в корень
    /usr/bin/sudo ln -s /usr/bin/sudo /do
  2. Сменить пользователя файлов .bashrc и .profile на root и ограничить права на запись
    /do chown root .bashrc .profile; /do 040 .bashrc .profile
  3. Выключить timeout по которому sudo можно вызывать бер пароля.
    /usr/bin/sudo sh -c 'echo "Defaults timestamp_timeout=0" >> /etc/sudoers.d/timeoutdisable
    chmod 0440 /etc/sudoers.d/timeoutdisable
    visudo --check'
    

Также не стоит пренебрегать антивирусами, быть бдительным и не предаваться высокомерному самодовольству.

Комментариев нет:

Отправить комментарий