Повышение привилегий Linux за счет использования бита SUID

Добро пожаловать в серию статей о безопасности Linux! В этой серии статей мы обсудим проблемы безопасности, влияющие на системы Linux, и общие ошибки конфигурации, которые к ним приводят. Давайте начнем!

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

Если злоумышленники смогут найти способ заставить систему думать, что они являются пользователем root, они смогут проводить более мощные атаки, такие как чтение и запись конфиденциальных файлов и установка постоянных бэкдоров в систему. И здесь вступает в дело эскалация привилегий. Сегодня давайте поговорим о том, как злоумышленники могут использовать программы SUID для повышения своих привилегий до получения root-прав.

Бит SUID

SUID означает «SetUID». Это флаг разрешений Linux, который позволяет пользователям запускать этот конкретный исполняемый файл в качестве владельца исполняемого файла. Например, если файл принадлежит пользователю root, программа всегда будет запускаться от имени root, независимо от того, кто запустил выполнение.

Почему эта функция может быть полезна? Обычный вариант использования SetUID - это утилита для смены пароля. Чтобы изменить свой собственный пароль, вам придется изменить важные системные файлы, такие как /etc/shadow. Этот файл обычно доступен только для пользователей root, поэтому вам потребуются привилегии root для изменения пароля. Но поскольку система не хочет предоставлять обычному пользователю привилегии root, SUID позволяет пользователям получать привилегии root только при запуске определенных программ. В этом случае SUID в утилите смены пароля позволяет пользователям получить временный root-доступ для изменения своих паролей без получения root-доступа по всем направлениям. По большей части это нормальное и необходимое поведение. Но если злоумышленник может найти способ выполнить произвольный код при запуске этих программ SUID, он может использовать временный root-доступ для выполнения кода в качестве пользователя root в системе!

Например, давайте сначала посмотрим на редактор файлов «Vim». Предположим, что Vim принадлежит пользователю root и в системе установлен бит SUID. Это означает, что всякий раз, когда пользователь запускает редактор Vim, Vim запускается с правами root. Ничего особенного, правда?

Этот параметр может фактически означать смертный приговор для вашей системы, потому что вы действительно можете запускать произвольные системные команды из редактора vim! Чтобы запускать команды в Vim, вам нужно ввести символы двоеточие «:!», А затем команду, которую вы хотите запустить. Например, чтобы запустить команду «ls», вы можете ввести «:!ls» и нажать Enter. Теперь вы должны увидеть результаты команды ls на своем терминале.

Это означает, что если в исполняемом файле Vim установлен бит SUID, злоумышленник может выполнять системные команды от имени пользователя root из редактора Vim! Другие редакторы, такие как «больше» и «меньше», также позволяют выполнять команды изнутри программы. Вы можете ввести символ взрыва «!» затем команду, которую вы хотите выполнить для этих программ. Например, чтобы запустить команду «ls», вы можете ввести «!ls» и нажать Enter. Теперь вы должны увидеть результаты команды ls на своем терминале.

Помимо редакторов файлов, еще одна программа, которая позволяет пользователям запускать произвольные системные команды, - это команда «найти». Команда find обычно используется для поиска файлов и часто имеет бит SUID, который позволяет пользователям находить файлы в системе. Но find позволяет выполнять системные команды через флаг «-exec»! Например, чтобы запустить команду «ls» из команды find, вы можете использовать команду «find . -exec ls \;». Таким образом, если у исполняемого файла find установлен бит SUID, злоумышленник может выполнять системные команды от имени пользователя root!

Повышение привилегий с помощью уязвимости

Эти неправильные конфигурации делают повышение привилегий тривиальным. Например, злоумышленник может использовать возможность выполнять команды от имени пользователя root и добавить себя в качестве пользователя root в файл /etc/passwd. Эта команда сделает именно это.

echo “vickie::0:0:System Administrator:/root/root:/bin/bash” >> /etc/passwd

Эта команда добавляет пользователя root с именем пользователя «vickie» и пустым паролем. Поскольку «0» - это UID пользователя root, добавление пользователя с UID «0» предоставит этому пользователю привилегии root. Эта команда недоступна для обычных пользователей, потому что только привилегированные пользователи могут изменять важные для системы файлы, такие как файл /etc/password.

Больше опасностей SUID

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

Например, если в редакторе файлов «Nano» установлен бит SUID, злоумышленник может использовать права root Nano, чтобы открыть файл «/etc/passwd» и добавить себя в качестве пользователя root прямо в редактор файлов!

А системная утилита «cp» используется для копирования и перезаписи файлов. Если для него установлен бит SUID, злоумышленники могут вмешаться в любой файл в системе, перезаписав исходный файл с его привилегиями root! Например, злоумышленник может создать копию оригинального /etc/password в свой собственный файл. Затем они могут добавить себя в качестве пользователя root, отредактировав копию файла passwd. Наконец, они используют команду «cp», чтобы перезаписать файл original/etc/password измененным.

Будь осторожен!

Как видите, при неправильном использовании SUID может стать невероятно опасным. Права SUID следует предоставлять только программам, когда это необходимо, а не программам, которые разрешают выполнение команд или произвольную запись в файлы в системе.

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