Содержание статьи
root благодаря кривой конфигурации и недостаткам системы.warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
NFS (Network File System) — распределенная файловая система, с помощью которой ты можешь монтировать удаленные папки на свою Linux-машину и работать с ними, как с локальными.
Работая с файловой системой через NFS, ты не увидишь разницы из‑за особенностей архитектуры. Как пользователь ты всегда взаимодействуешь с абстракцией ядра — VFS (Virtual File System). Она включает в себя и реально существующие файловые системы, и другие абстракции вроде NFS.
NFS формирует RPC-вызов с номером программы и номером процедуры. Упаковкой, аутентификацией и доставкой занимается Sun RPC. С помощью XDR он сериализует данные и отправляет их по TCP (ранее использовали UDP). Сервер проходит те же этапы, формирует ответ и возвращает его тем же маршрутом.

Неправильно сконфигурированный сервер и слабые механизмы NFS позволяют атакующему повысить привилегии на сервере. Обрати внимание, что я разбираю именно повышение привилегий с помощью NFS. Мы будем предполагать, что у тебя уже есть доступ к таргету и возможность выполнять на нем минимальный набор команд.
Setuid/setgid
По умолчанию в NFS используется опция понижения прав root_squash. В правильно настроенной NFS любой примонтировавшийся пользователь — это nobody. Иногда админы отключают эту защиту опцией no_root_squash, чтобы упростить работу с файловой системой. Опция no_root_squash стирает грань между локальным root, который подключился к серверу, и root самого сервера. У обоих пользователей UID равен 0.
Биты setuid и setgid указывают Linux, что бинарник должен запускаться не от имени пользователя, а с правами владельца файла или группы‑владельца. Полная схема атаки:
- Проверить экспорты сервера и найти экспорт с
no_root_squash. - Примонтировать папку и скопировать в нее бинарник с шеллом.
- Назначить владельцем
root. - Установить
setuid. - От имени обычного пользователя запустить шелл.

Для теста я буду использовать Metasploitable 2. Эта машина — одна большая уязвимость. Экспорты для NFS сделаны с no_root_squash, и мы легко реализуем повышение привилегий. Убедись в этом, выполнив на уязвимой машине cat /. Креды: msfadmin/.

Чтобы Kali Linux, запущенная в VirtualBox, увидела Metasploitable, я установил для обеих систем сетевые интерфейсы в режим «Виртуальный адаптер хоста».
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
