Предотвращение взлома пароля sudo вредоносным ПО

10

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

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

Но мне кажется, что по умолчанию в большинстве систем, когда вредоносная программа заражает учетную запись администратора, повышение привилегий становится тривиальным - вредоносному ПО просто нужно дождаться запуска пользователя sudo.

Какие существуют методы, позволяющие вредоносным программам получать права root при запуске пользователя sudo, и как мы можем защитить их?

Изменить: я особенно заинтересован в защите от скомпрометированной учетной записи администратора; то есть, учетная запись, которая имеет полные права суперпользователя sudo(например, учетная запись пользователя в типичной настольной системе).

Zaz
источник
Пример того, что я ищу, смотрите в моем ответе . Я надеюсь, что кто-то может рассказать о некоторых рисках безопасности, возникающих там (или о любых других, которые они могут придумать), и предложить способы их снижения.
Zaz
Вы просите что-то вроде UAC или безопасной последовательности внимания в Windows. У Unixy систем этого нет. Путь (для) администраторов - не использовать их учетные записи для глупых вещей. Несколько вещей, о которых вы упоминаете в своем ответе, могут быть защищены с помощью ролевых и обязательных систем контроля доступа, таких как SELinux или Grsecurity. Там вы можете установить политики, чтобы исполняемые двоичные файлы без полномочий root не могли выполняться, поэтому на этом уровне нет троянов. Кстати, если вы не доверяете X, то не доверяйте системе вообще, поскольку X работает с привилегиями суперпользователя.
контррежим
Спасибо, я заглянул в SELinux, но, похоже, он больше предназначен для больших установок, требующих много времени для администрирования и настройки; Я надеялся на что-то более простое. Я разработчик, поэтому строгие правила в отношении запуска программ тоже не подходят.
Zaz
«X работает с привилегиями суперпользователя» - Что? По умолчанию установки из X , startxпрекрасно работает как обычный пользователь. На самом деле, я сейчас использую X как обычный пользователь.
Zaz
Да, кривая обучения крутая. Посмотрите на Grsecurity, это проще, но все же мощно. ~ Привилегии X: на моем компьютере X сервер является SUID root и запускает root.
контррежим

Ответы:

9

Получив доступ к учетной записи пользователя, вредоносное ПО может:

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. Нажмите клавишу Catch через 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(но захватывает пароль).
Zaz
источник
sudo запрашивает пароль пользователя, поэтому вредоносная программа будет захватывать пароль пользователя, к которому она уже получила доступ.
ограбить
3
@rob: Это на самом деле зависит от того, как вы sudoнастроили, но в любом случае, вредоносная программа теперь имеет требуемый пароль sudo, поэтому, если у пользователя есть root-доступ, то и вредоносная программа тоже.
Заз
3

Там нет реальной защиты.

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

Если бы я был намерен получить доступ, я бы создал полезную оболочку для bash, zsh, fish и т. Д. Я бы контролировал выполненные команды. Вскоре после того, как sudo вернулось со статусом ноль, я бы начал выпускать "sudo chmod + s / bin / sh" или другие ностальгии.

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

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

Защищать от этого? Вы должны защитить свои файлы RC. Проверьте любые прокладки или другие команды, используемые в приглашениях командной строки. Ищите сопутствующие процессы, связанные с оболочкой, и инструменты, используемые для поддержки среды оболочки. Основными средствами защиты будут средства проникновения на хост, но это не так. Предотвращение атак? Только использование простых оболочек без сложной автоматической настройки и активных запросов - вот среда, для которой был разработан sudo.

Раньше я играл в игры с другими разработчиками (1980-е годы), где мы пытались написать материал, который бы использовал терминал, который использовал другой разработчик, для вставки команд - это, по сути, та же проблема. И мы значительно упростили встраивание инструментов, которые бы выполняли вставку команд без видимых следов. :)

JezC
источник
1

Не уверен ни в каких методах получения доступа суперпользователями привилегированных пользователей, но я знаю кое-что, что вы можете сделать, чтобы сделать 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политику настолько, насколько вы не доверяете своим пользователям :)

Jimm-сл
источник
Извините, если мне неясно в этом вопросе, но я заинтересован в защите от скомпрометированных учетных записей администратора, то есть учетных записей, которые имеют полные привилегии root sudo. В частности, я имею в виду нормальные настольные системы.
Заз
1

Если вы заинтересованы в системе, которая, по вашему мнению, может быть скомпрометирована, запустите «Rootkit» и используйте «Tripwire» для проверки целостности файловой системы.

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

Rituraj
источник
0

Прежде всего, посмотрите на /etc/sudoersфайл.

Синтаксис будет user MACHINE=COMMANDSформатироваться.

Например, у пользователя root root ALL=(ALL) ALL Это означает, что пользователь root может выполнять любые (все) команды в любом месте.

Если ваша запись также имеет, ALL=(ALL)то вы почти равны пользователю root. Если это не так, и у вас есть только определенные ограниченные привилегии, то злоумышленник / вредоносная программа может сделать только то, что может сделать ваша привилегия sudo.

Советы, которые могут вам помочь:

  1. Изучите ваш /etc/sudoersфайл.
  2. Запустите сканер безопасности, такой как chkrootkit, руткит-хантер, Config server, сканер эксплойтов, snort и т. Д.
  3. Используйте visudoкоманду для редактирования и изменения прав вашего файла sudoers.
  4. Запустите сканеры снова.

Ссылка: Linux man-страница sudoers и sudo man sudoers

Раджа Рамараджан
источник