Предотвращение взлома пароля sudo вредоносным ПО
Я часто слышу, как люди цитируют sudo
в качестве одного из основных барьеров для вредоносных программ, заражающих компьютер Linux.
Похоже, что наиболее распространенный аргумент идет по следующему принципу: для изменения конфигурации системы требуются привилегии root, а для получения привилегий root требуется пароль, поэтому вредоносные программы не могут изменять конфигурацию системы без запроса пароля.
Но мне кажется, что по умолчанию в большинстве систем, когда вредоносная программа заражает учетную запись администратора, повышение привилегий становится тривиальным - вредоносному ПО просто нужно дождаться запуска пользователя sudo
,
Какие существуют методы, позволяющие вредоносным программам получить права root при запуске пользователя sudo
и как мы можем защитить от них?
Изменить: я особенно заинтересован в защите от скомпрометированной учетной записи администратора; то есть учетная запись, которая имеет полные права root с sudo
(например, учетная запись пользователя в типичной настольной системе).
5 ответов
Получив доступ к учетной записи пользователя, вредоносное ПО может:
1. Создайте псевдоним bash (в текущей оболочке и в ~/.bashrc
) к команде, которая подделывает [sudo] password for $USER:
подскажите и украдет пароль пользователя.
alias sudo='echo -n "[sudo] password for $USER: " && \
read -r password && \
echo "$password" >/tmp/sudo-password'
2. Точно так же он может разместить исполняемый файл с именем sudo
в ~/.bin
и измените PATH
переменная для достижения того же эффекта: PATH="$HOME/.bin:$PATH"
3. Поймать нажатие клавиши через X-сервер, следить за словом sudo
, затем попробуйте текст между следующими двумя нажатиями клавиш Enter в качестве пароля.
4. Подобную вещь можно сделать в любой среде (консоли, Wayland, X), используя, например, $LD_PRELOAD
,
5. Если вредоносное ПО заражает оболочку, которая использует sudo
, а также sudo
кэширует учетные данные, вредоносная программа может постоянно проверять, возможно ли sudo
без пароля:
while : ; do
echo | sudo -S echo "test" &>/dev/null && break
sleep 10
done
sudo echo "We now have root access"
Предупреждение:
1 и 2. Использование \/bin/sudo
, \
игнорирует псевдонимы и /bin/…
игнорируемых $PATH
, Или добавьте псевдоним, например: ssudo="\/bin/sudo"
и всегда использовать ssudo
вместо sudo
, Кажется маловероятным, что вирус будет достаточно умен, чтобы переназначить этот псевдоним.
3. Не вводите свой пароль при использовании X11. Вместо этого используйте виртуальную консоль или Weston.
5. Установить timestamp_timeout=0
в /etc/sudoers
,
Единственный способ полностью исключить возможность sudo
пароль, который прослушивается, кажется, чтобы избежать его вообще. Вместо этого войдите в систему как пользователь root с виртуальной консоли.
По словам Александра Песляка: "единственное безопасное использование su [и sudo] - это переключение с более привилегированного аккаунта на менее привилегированный…"
С другой стороны, у sudo есть некоторые контрмеры:
sudo
читает изtty
вместоstdin
, такalias sudo='tee -a /tmp/sudo-password | sudo'
брейкиsudo
(но захватывает пароль).
Там нет реальной защиты.
Защищенный паролем доступ к sudo восходит к эпохе, предшествующей сложным средам оболочки с командами, выполняемыми прокладками. После того, как пароль введен, появляется окно возможностей, в котором шим может выполнять команды через sudo, без какого-либо уведомления и с полным контролем системы.
Если бы я был намерен получить доступ, я бы создал полезную оболочку для bash, zsh, fish и т. Д. Я бы контролировал выполненные команды. Вскоре после того, как sudo вернулось со статусом ноль, я бы начал выпускать "sudo chmod + s / bin / sh" или другие ностальгии.
В тот момент, когда sudo дали удовлетворительный пароль, и у вас есть оболочки, которые запускают команды для получения подсказки, у вас могут возникнуть проблемы. Там нет защиты, кроме оптимизма.
Другие ответы были направлены на защиту пароля. Как агрессор, я бы об этом не беспокоился. Я бы сосредоточился на продолжительности после того, как пароль был задан, когда пароль не нужен. Это самое рискованное время, когда злоумышленнику нужно делать меньше всего, чтобы полностью скомпрометировать систему.
Защищать от этого? Вы должны защитить свои файлы RC. Проверьте любые прокладки или другие команды, используемые в приглашениях командной строки. Ищите сопутствующие процессы, связанные с оболочкой, и инструменты, используемые для поддержки среды оболочки. Основными средствами защиты будут средства проникновения на хост, но это не так. Предотвращение атак? Только использование простых оболочек без сложной автоматической настройки и активных запросов - вот среда, для которой был разработан sudo.
Раньше я играл в игры с другими разработчиками (1980-е годы), где мы пытались написать материал, который бы использовал терминал, который использовал другой разработчик, для вставки команд - это, по сути, та же проблема. И мы значительно упростили встраивание инструментов, которые бы выполняли вставку команд без видимых следов.:)
Если вы заинтересованы в системе, которая, по вашему мнению, может быть скомпрометирована, запустите "Rootkit" и используйте "Tripwire" для проверки целостности файловой системы.
Также советую вам укрепить привилегии sudo, так как вам не нужно, чтобы все пользователи имели доступ ко всем командам root, а скорее предоставляете доступ к определенным командам через SUDO.
Не уверен ни в каких методах получения доступа суперпользователями привилегированных пользователей, но я знаю кое-что, что вы можете сделать, чтобы sudo
немного менее опасно, если вы хотите сказать это. sudo
позволяет вам настраивать детализированные разрешения, чтобы определять группы пользователей с определенными привилегиями и конкретными командами, которые могут запускать определенные пользователи.
СУДО - ГРАНУЛЯРНОЕ УПРАВЛЕНИЕ
Пользовательский раздел
Здесь вы можете настроить группы для пользователей, для которых вы будете указывать команды. Позволяет настроить группу операций;
User_Alias OPS = bob, jdoe
Это создает группу OPS и помещает пользователей с именами bob и jdoe в группу
Cmnd_Alias
Здесь мы указываем конкретные наборы команд. Вы должны указать полный путь и любые параметры команды, которые вы хотите использовать. Позволяет настроить команды группы операций;
Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test
Это добавляет три указанные команды в группу команд OPSCMD.
Спецификация привилегий пользователя
Это где мы будем использовать группы, которые мы настроили до сих пор;
OPS ALL=(root) OPSCMD
Первое, что мы указываем, это пользователи, здесь мы используем группу OPS, которую мы настраиваем. Тогда ALL означает, что оно применяется ко всем серверам, это полезно, только если вы используете sudo на нескольких серверах, каждый из которых использует один и тот же файл конфигурации. Далее мы указываем пользователю, что группа "Операции" будет выполнять указанные команды как, в этом случае мы хотим, чтобы они выполнялись от имени пользователя root. Наконец, мы указываем команды, которые мы хотим, чтобы группа OPS могла выполнять, в частности, мы используем группу OPSCMD, которую мы настраиваем. Если вы не хотите, чтобы они вводили свой пароль каждый раз, когда они использовали sudo, тогда спецификацией команды будет NOPASSWD: OPSCMD.
Просто закалить sudo
политики столько, сколько вы не доверяете своим пользователям :)
Прежде всего взгляните на /etc/sudoers
файл.
Синтаксис будет user MACHINE=COMMANDS
формат.
Например, пользователь root будет иметь root ALL=(ALL) ALL
Это означает, что пользователь root может запускать любые (все) команды в любом месте.
Если ваша запись также имеет ALL=(ALL)
тогда вы почти равны пользователю root. Если это не так, и у вас есть только определенные ограниченные привилегии, то злоумышленник / вредоносная программа может сделать только то, что может сделать ваша привилегия sudo.
Советы, которые могут вам помочь:
- Изучите свой
/etc/sudoers
файл. - Запустите сканер безопасности, такой как chkrootkit, руткит-хантер, Config server, сканер эксплойтов, snort и т. Д.
- использование
visudo
Команда для редактирования и изменения привилегий вашего файла sudoers. - Запустите сканеры снова.
Ссылка: Linux man-страница sudoers и sudo man sudoers