Я часто слышу, как люди sudo
называют один из главных барьеров для вредоносных программ, заражающих компьютер с Linux.
Похоже, что наиболее распространенный аргумент идет по следующему принципу: для изменения конфигурации системы требуются привилегии root, а для получения привилегий root требуется пароль, поэтому вредоносные программы не могут изменять конфигурацию системы без запроса пароля.
Но мне кажется, что по умолчанию в большинстве систем, когда вредоносная программа заражает учетную запись администратора, повышение привилегий становится тривиальным - вредоносному ПО просто нужно дождаться запуска пользователя sudo
.
Какие существуют методы, позволяющие вредоносным программам получать права root при запуске пользователя sudo
, и как мы можем защитить их?
Изменить: я особенно заинтересован в защите от скомпрометированной учетной записи администратора; то есть, учетная запись, которая имеет полные права суперпользователя sudo
(например, учетная запись пользователя в типичной настольной системе).
startx
прекрасно работает как обычный пользователь. На самом деле, я сейчас использую X как обычный пользователь.Ответы:
Получив доступ к учетной записи пользователя, вредоносное ПО может:
1. Создайте псевдоним bash (в текущей оболочке и в
~/.bashrc
) для команды, которая подделывает[sudo] password for $USER:
приглашение и крадет пароль пользователя.2. Аналогично, он может поместить исполняемый файл с именем
sudo
в~/.bin
и изменитьPATH
переменную для достижения того же эффекта:PATH="$HOME/.bin:$PATH"
3. Нажмите клавишу Catch через X-сервер, найдите слово
sudo
, затем попробуйте ввести текст между двумя Enterнажатиями клавиш в качестве пароля.4. Подобная вещь может быть сделано в любой среде (консоль, Wayland , X) , используя , например
$LD_PRELOAD
.5. Если вредоносное ПО заражает оболочку, которая использует
sudo
иsudo
кэширует учетные данные, вредоносное ПО может непрерывно проверять, возможно ли этоsudo
без пароля:Предупреждение:
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
, поэтому, если у пользователя есть root-доступ, то и вредоносная программа тоже.Там нет реальной защиты.
Защищенный паролем доступ к sudo восходит к эпохе, предшествующей сложным средам оболочки с командами, выполняемыми прокладками. После того, как пароль введен, появляется окно возможностей, в котором шим может выполнять команды через sudo, без какого-либо уведомления и с полным контролем системы.
Если бы я был намерен получить доступ, я бы создал полезную оболочку для bash, zsh, fish и т. Д. Я бы контролировал выполненные команды. Вскоре после того, как sudo вернулось со статусом ноль, я бы начал выпускать "sudo chmod + s / bin / sh" или другие ностальгии.
В тот момент, когда sudo дали удовлетворительный пароль, и у вас есть оболочки, которые запускают команды для получения подсказки, у вас могут возникнуть проблемы. Там нет защиты, кроме оптимизма.
Другие ответы были направлены на защиту пароля. Как агрессор, я бы об этом не беспокоился. Я бы сосредоточился на продолжительности после того, как пароль был задан, когда пароль не нужен. Это самое рискованное время, когда злоумышленнику нужно делать меньше всего, чтобы полностью скомпрометировать систему.
Защищать от этого? Вы должны защитить свои файлы RC. Проверьте любые прокладки или другие команды, используемые в приглашениях командной строки. Ищите сопутствующие процессы, связанные с оболочкой, и инструменты, используемые для поддержки среды оболочки. Основными средствами защиты будут средства проникновения на хост, но это не так. Предотвращение атак? Только использование простых оболочек без сложной автоматической настройки и активных запросов - вот среда, для которой был разработан sudo.
Раньше я играл в игры с другими разработчиками (1980-е годы), где мы пытались написать материал, который бы использовал терминал, который использовал другой разработчик, для вставки команд - это, по сути, та же проблема. И мы значительно упростили встраивание инструментов, которые бы выполняли вставку команд без видимых следов. :)
источник
Не уверен ни в каких методах получения доступа суперпользователями привилегированных пользователей, но я знаю кое-что, что вы можете сделать, чтобы сделать
sudo
его немного менее опасным , если вы хотите сказать это.sudo
позволяет вам настраивать детализированные разрешения, чтобы определять группы пользователей с определенными привилегиями и конкретными командами, которые могут запускать определенные пользователи.СУДО - ГРАНУЛЯРНОЕ УПРАВЛЕНИЕ
Просто ужесточите свою
sudo
политику настолько, насколько вы не доверяете своим пользователям :)источник
sudo
. В частности, я имею в виду нормальные настольные системы.Если вы заинтересованы в системе, которая, по вашему мнению, может быть скомпрометирована, запустите «Rootkit» и используйте «Tripwire» для проверки целостности файловой системы.
Также советую вам укрепить привилегии sudo, так как вам не нужно, чтобы все пользователи имели доступ ко всем командам root, а скорее предоставляете доступ к определенным командам через SUDO.
источник
Прежде всего, посмотрите на
/etc/sudoers
файл.Синтаксис будет
user MACHINE=COMMANDS
форматироваться.Например, у пользователя root
root ALL=(ALL) ALL
Это означает, что пользователь root может выполнять любые (все) команды в любом месте.Если ваша запись также имеет,
ALL=(ALL)
то вы почти равны пользователю root. Если это не так, и у вас есть только определенные ограниченные привилегии, то злоумышленник / вредоносная программа может сделать только то, что может сделать ваша привилегия sudo.Советы, которые могут вам помочь:
/etc/sudoers
файл.visudo
команду для редактирования и изменения прав вашего файла sudoers.Ссылка: Linux man-страница sudoers и sudo man sudoers
источник