Эксплуатация SUID-бинарных файлов

LinuxBeginner
Практиковаться сейчас

Введение

В Linux и Unix-подобных системах права доступа к файлам являются фундаментальным аспектом безопасности. Одним из специальных типов прав является бит SUID (Set Owner User ID). Когда у бинарного файла установлен бит SUID, он выполняется с привилегиями владельца файла, а не пользователя, который его запустил.

Хотя это необходимо для некоторых законных системных функций (например, команды passwd, которой нужен доступ root для обновления пароля), это становится серьезной угрозой безопасности при неправильной настройке. Если системный администратор случайно установит бит SUID на стандартную утилиту, такую как find, vim или bash, злоумышленник может использовать эти инструменты для выполнения команд от имени пользователя root, что приведет к полному компрометированию системы, известному как повышение привилегий (Privilege Escalation).

Опасность SUID заключается в том, что он меняет контекст привилегий самого процесса выполнения программы. Если программа затем может запускать другие команды или оболочки, эти привилегии могут «вытечь» наружу.

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

Поиск SUID-бинарных файлов (find)

На этом этапе вы узнаете, как искать в файловой системе Linux бинарные файлы, у которых установлен бит прав доступа SUID.

Для поиска таких файлов мы используем встроенную команду find. Команда find невероятно мощная и позволяет искать файлы на основе их специфических прав доступа. Мы будем искать файлы, начиная с корневого каталога /, у которых включен бит SUID (представленный восьмеричным значением 4000).

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

Выполните следующую команду в терминале, чтобы найти SUID-бинарные файлы и сохранить результаты в текстовый файл suid_results.txt в директории вашего проекта:

find / -perm -4000 -type f 2> /dev/null > ~/project/suid_results.txt

Давайте разберем эту команду, чтобы вы поняли, что именно она делает. Символ / указывает команде начать поиск с самого верха файловой системы. Флаг -perm -4000 ищет файлы именно с установленным битом SUID. Флаг -type f гарантирует, что мы ищем только обычные файлы, а не директории. Наконец, 2>/dev/null — это полезный трюк, который перенаправляет все сообщения об ошибках «Permission denied» в «черную дыру» (/dev/null), сохраняя вывод чистым. Символ > перенаправляет чистый вывод в наш текстовый файл.

Теперь давайте посмотрим содержимое созданного файла, чтобы увидеть, какие бинарные файлы имеют установленный бит SUID:

cat ~/project/suid_results.txt

Вы увидите вывод, похожий на этот:

/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/find
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/mount
/usr/bin/umount

Внимательно изучите список. Ожидается, что у многих из них, таких как passwd и su, установлен бит SUID. Однако один из этих бинарных файлов выглядит крайне необычно и потенциально опасно.

Определение эксплуатируемых бинарных файлов (GTFOBins)

На этом этапе вы проанализируете результаты поиска и определите, какой бинарный файл можно эксплуатировать.

Глядя на вывод предыдущего шага, вы можете заметить в списке /usr/bin/find. Команда find — это стандартная утилита для поиска файлов, и ей совершенно не нужны права root для нормальной работы. Тот факт, что у нее установлен бит SUID, является серьезной ошибкой конфигурации безопасности.

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

Чтобы понять, как это можно использовать, специалисты по безопасности обращаются к ресурсу под названием GTFOBins. GTFOBins — это курируемый список Unix-бинарных файлов, которые можно использовать для обхода локальных ограничений безопасности в неправильно настроенных системах. Если бы вы посетили сайт GTFOBins и поискали «find», вы бы обнаружили, что у find есть функция, позволяющая выполнять другие команды.

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

Чтобы подтвердить свою находку, создайте файл vulnerable_binary.txt и запишите в него имя уязвимого бинарного файла. Выполните следующую команду:

echo "find" > ~/project/vulnerable_binary.txt

Вы можете проверить содержимое файла, выведя его в терминал:

cat ~/project/vulnerable_binary.txt

Вывод должен быть простым:

find

Выявив эту ошибку конфигурации, вы нашли точку входа для атаки на повышение привилегий.

Создание команды эксплойта

На этом этапе вы подготовите конкретную полезную нагрузку (payload), необходимую для эксплуатации ошибки конфигурации SUID в бинарном файле find.

Согласно GTFOBins, команда find имеет параметр -exec. Этот параметр обычно используется для выполнения определенного действия над каждым файлом, который находит find. Однако злоумышленники могут использовать этот параметр для запуска системной оболочки (/bin/sh).

Стандартная полезная нагрузка эксплойта выглядит так: find . -exec /bin/sh -p \; -quit.

Давайте разберем, почему этот пейлоад работает. Точка . говорит find начать поиск в текущей директории. Флаг -exec указывает запустить следующую за ним команду. Мы передаем /bin/sh для запуска оболочки. Флаг -p критически важен; он говорит оболочке сохранить привилегии, с которыми она была запущена (в данном случае — права root, предоставленные битом SUID). Символ \; обозначает конец команды, которую мы хотим выполнить. Наконец, -quit говорит find немедленно прекратить поиск после однократного выполнения команды, вместо того чтобы повторять ее для каждого файла в директории.

Для подготовки к финальному выполнению сохраним этот пейлоад в скрипт под названием exploit.sh. Выполните следующую команду:

echo 'find . -exec /bin/sh -p \; -quit' > ~/project/exploit.sh

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

cat ~/project/exploit.sh

Вывод покажет ваш созданный пейлоад:

find . -exec /bin/sh -p \; -quit

Теперь у вас есть точная команда, необходимая для того, чтобы заставить бинарный файл find предоставить вам оболочку с правами root.

Выполнение повышения привилегий

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

Вместо того чтобы сразу переходить в интерактивную оболочку (что может быть сложно проверить в автоматизированной лабораторной среде), мы немного изменим наш пейлоад, чтобы выполнить одну команду от имени root и сохранить результат. Мы используем команду whoami, которая выводит имя текущего эффективного пользователя.

Выполните следующую команду, чтобы запустить whoami через уязвимый бинарный файл find и перенаправить вывод в файл root_proof.txt:

/usr/bin/find . -exec whoami \; -quit > ~/project/root_proof.txt

Обратите внимание, что мы использовали абсолютный путь /usr/bin/find, чтобы гарантировать выполнение именно того бинарного файла, который мы определили ранее. Команда find запускается, активирует флаг -exec, выполняет whoami с правами root (благодаря биту SUID) и сохраняет результат.

Теперь давайте проверим содержимое вашего файла с доказательством, чтобы увидеть, был ли эксплойт успешным:

cat ~/project/root_proof.txt

Если эксплойт сработал правильно, вывод будет таким:

root

Поздравляем! Вы успешно использовали неправильно настроенный SUID-бинарный файл для выполнения команд от имени пользователя root.

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

/usr/bin/find . -exec /bin/sh -p \; -quit

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

Резюме

В этой лабораторной работе вы успешно научились находить и эксплуатировать ошибки конфигурации SUID в системе Linux. Вы начали с использования команды find для поиска бинарных файлов с установленным битом прав доступа SUID. Определив /usr/bin/find как аномалию, вы узнали, как ресурсы вроде GTFOBins могут использоваться для поиска пейлоадов эксплойтов. Наконец, вы создали и выполнили команду, которая использовала параметр -exec бинарного файла find, что позволило вам выполнять команды с привилегиями root.

Это упражнение подчеркивает критическую важность правильного управления правами доступа в Linux. Системные администраторы должны регулярно проводить аудит SUID-бинарных файлов, чтобы гарантировать, что стандартные утилиты непреднамеренно не создают путь для повышения привилегий.