10

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

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

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

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

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

5 ответов5

9

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

1. Создайте псевдоним bash (в текущей оболочке и в ~/.bashrc) для команды, которая подделывает пароль [sudo] для приглашения [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 (но захватывает пароль).
3

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

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

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

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

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

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

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

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 настолько, насколько вы не доверяете своим пользователям :)

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .