T1548.003: Команда sudo и кэширование sudo

Злоумышленники могут эксплуатировать кэширование sudo и (или) использовать файл sudoers для повышения уровня привилегий — например, с целью выполнения команд от имени других пользователей или порождения процессов с повышенными привилегиями.

В системах Linux и MacOS команда sudo (сокращение от superuser do — "выполнить от имени суперпользователя") позволяет выполнять в терминалах команды с повышенным уровнем привилегий и управлять списками пользователей, которые могут выполнять эти команды. Команда sudo позволяет системному администратору делегировать полномочия, предоставляя отдельным пользователям (или группам пользователей) возможность выполнять некоторые (или все) команды от имени root-пользователя или другого пользователя, и при этом ведет журнал команд и их аргументов. Поскольку sudo предназначена для системного администратора, она позволяет использовать расширенные параметры конфигурации, например timestamp_timeout, который определяет время между запусками sudo в минутах перед повторным запросом пароля. Это связано с тем, что sudo может хранить кэш учетных данных в течение определенного времени. Для установки времени хранения кэша sudo создает файл в /var/db/sudo с меткой времени последнего запуска sudo (или изменяет временные метки существующего файла). Кроме того, при установленном флаге tty_tickets каждый новый сеанс терминала (tty) рассматривается отдельно от других, то есть, в частности, срок действия повышенных привилегий, установленный для одного сеанса, не распространяется на другие сеансы (нужно будет снова вводить пароль).

Файл sudoers ( /etc/sudoers) содержит данные о том, какие пользователи могут выполнять те или иные команды и из каких терминалов, а также какие команды пользователи могут выполнять от имени других пользователей или групп. Это позволяет осуществлять администрирование по принципу предоставления минимальных привилегий, то есть пользователи работают с минимально допустимым уровнем привилегий большую часть времени и повышают его (получают дополнительные разрешения или право на выполнение операций от имени других пользователей) только по необходимости, что обычно сопровождается запросом пароля. Файл sudoers также может содержать указания о том, когда не следует запрашивать у пользователей пароли; для этого используются строки, подобные следующей: user1 ALL=(ALL) NOPASSWD: ALL. Для редактирования этого файла требуется повышенный уровень привилегий.

Злоумышленники могут также использовать ошибки в конфигурации этих механизмов для повышения уровня привилегий без ввода пароля. Например, они могут регулярно проверять, попадает ли временная метка файла /var/db/sudo в диапазон, заданный timestamp_timeout. Если это так, вредоносное ПО сможет выполнять команды sudo без ввода пароля пользователя. Кроме того, если флаг tty_tickets не установлен, злоумышленники могут выполнять команды из любого сеанса tty данного пользователя.

В реальной среде наблюдались случаи, когда вредоносное ПО отключало флаг tty_tickets с помощью команды echo 'Defaults !tty_tickets' >> /etc/sudoers, чтобы упростить использование сценариев. Чтобы применить изменения, использовалась команда killall Terminal. Начиная с macOS Sierra, флаг tty_tickets в файле sudoers установлен по умолчанию.

Какие продукты Positive Technologies покрывают технику

Экспертиза MaxPatrol SIEM

unix_mitre_attck_privilege_escalation: PT-CR-1663: Unix_Privilege_Escalation_Via_GTFOBINS: Запуск терминала с повышенными привилегиями с помощью утилиты группы GTFOBins. GTFOBins - двоичные файлы Unix, которые можно использовать для обхода локальных ограничений безопасности в неправильно настроенных системах

Способы обнаружения

IDDS0009Источник и компонент данныхПроцесс: Метаданные процессаОписание

Отслеживайте контекстные данные запущенных процессов, такие как переменные окружения, имя образа, пользователь и владелец, которые могут использоваться для кэширования sudo и (или) повышения уровня привилегий с помощью файла sudoers.

IDDS0022Источник и компонент данныхФайл: Изменение файлаОписание

В Linux модуль auditd может присылать уведомления каждый раз, если реальный (actual ID) и эффективный (effective ID) идентификаторы пользователей не совпадают (что всегда происходит при использовании sudo). Данная техника злоупотребляет особенностями обычной работы систем macOS и Linux, но если установить соответствующие директивы LOG_INPUT и LOG_OUTPUT в файле /etc/sudoers, sudo будет записывать все входные и выходные данные.

IDDS0017Источник и компонент данныхКоманда: Выполнение командОписание

Отслеживайте выполнение команд с аргументами, которые могут использоваться для кэширования sudo и (или) повышения уровня привилегий через файл sudoers, в частности выполнение команды sudo.

IDDS0009Источник и компонент данныхПроцесс: Создание процессаОписание

Отслеживайте запуск новых процессов, которые могут выполнять кэширование sudo и (или) использовать файл sudoers для повышения уровня привилегий.

Меры противодействия

IDM1022НазваниеОграничение разрешений для файлов и каталоговОписание

Файл sudoers должен быть строго отредактирован таким образом, чтобы всегда требовались пароли и чтобы пользователи не могли запускать рискованные процессы под видом пользователей с более высокими привилегиями.

IDM1028НазваниеИзменение конфигурации ОСОписание

Проследите, чтобы параметр tty_tickets был включен, это предотвратит утечку данных между сессиями tty.

IDM1026НазваниеУправление привилегированными учетными записямиОписание

Требуйте ввода пароля — таким образом, даже если злоумышленник получит доступ к терминалу, он должен будет знать пароль, чтобы запустить что-либо из файла sudoers. Если установить для параметра timestamp_timeout значение 0, то пользователю потребуется вводить пароль каждый раз при выполнении sudo.