10.11.2020 | Методы проникновения в линуксовые системы (часть 2): NFS |
Автор: Scott Sutherland В этой статье мы рассмотрим сценарий атаки на небезопасные NFS экспорты и конфигурации флага setuid для получения шелла в Линуксе с правами суперпользователя. Статья будет полезна как начинающим пентестерам, так и тем, кто желает освежить знания по NFS. Это вторая из пяти частей серии, где будут затронуты методы первоначального проникновения и повышения локальных привилегий в Линуксе, используемые во время настоящих сетевых пентестов. Что такое NFSNFS (Network File System; Сетевая файловая система) представляет собой протокол, не использующий шифрования, для передачи файлов между системами. В чем же проблема? Примерно в половине случаев во время пентестов внутренних сетей мы находим NFS-сервера с небезопасными настройками, когда доступен неавторизированный доступ к конфиденциальной информации, что в некоторых случаях позволяет получить полноценный шелл в системе. Уровень доступа во многом зависит от конфигурации NFS. Для удаленного доступа к директориям, совместно используемым через NFS-экспорты, требуется два условия: права доступа для монтирования и для файлов.
Основная проблема NFSЕсли возможно смонтировать NFS-экспорты, обычно UID можно подделать на клиенте для обхода ограничений, связанных с правами доступа к файлам, настроенными для каталога, доступного через NFS-экспорт. Кроме того, доступ может быть разрешен случайно, если UID файла и UID подключающегося пользователя совпадают. Ниже показана схема возникновения непреднамеренного доступа:
Ниже показана наглядная иллюстрация этого сценария.
Рисунок 1: Схема возникновения непредумышленного доступа Поиск NFS-серверов NFS работает на UDP/TCP портах 111 и 2049 соответственно. Поиск открытых NFS-портов можно выполнить при помощи утилит навроде nmap. nmap -sS -pT:2049,111,U:2049,111 192.168.1.0/24 -oA nfs_scan grep -i "open" nfs_scan.gnmap
Рисунок 2: Поиск открытых NFS-портов Текущие поддерживаемые версии NFS также можно определить при помощи nmap или rpcinfo, что пригодится нам в дальнейшем, поскольку мы хотим использовать версию 3 или ниже с целью просмотра и имитации UID хозяев файлов. В случае если опция «root squashing» включена, может быть требование для доступа к файлам. Получение перечня поддерживаемых версий NFS при помощи Nmap: nmap -sV -p111,2049 192.168.1.171
Получение перечня поддерживаемых версий NFS при помощи rpcinfo: apt-get install nfs-client rpcinfo -p 192.168.1.171
Рисунок 3: Перечень доступных версий NFS Ниже приводится видео, где показан процесс обнаружения NFS-сервера. http://blog.netspi.com/wp-content/uploads/2020/03/NFS_ATTACK_DEMO_1.mp4
Перечень NFS-экспортовПришла очередь получить перечень доступных NFS-экспортов на удаленном сервере при помощи Metasploit или showmount. Пример с Metasploit: root@kali:~# msfconsole msf > use auxiliary/scanner/nfs/nfsmount msf auxiliary(nfsmount) > set rhosts 192.168.1.171 msf auxiliary(nfsmount) > run
Рисунок 4: Получение перечня доступных NFS-экспортов при помощи Metasploit Пример с showmount: apt-get install samba showmount -e 192.168.1.171
Рисунок 5: Получение перечня доступных NFS-экспортов при помощи showmount Монтирование NFS-экспортов Переходим к монтированию доступных NFS-экспортов, работая от имени root. Не забудьте указать флаг «-o vers=3», чтобы быть уверенным, что вы можете просматривать UID’ы владельцев файлов. Ниже показаны опции для монтирования экспорта: mkdir demo mount -o vers=3 192.168.1.171:/home demo mount -o vers=3 192.168.1.222:/home demo -o nolock или mount -t nfs -o vers=3 192.168.1.171:/home demo
или mount -t nfs4 -o proto=tcp,port=2049 192.168.1.171:/home demo
Рисунок 6: Монтирование NFS-экспортов Просмотр UID’ов у каталогов и файлов в NFS-экспортахЕсли у вас полный доступ ко всему, тогда функция «root squashing» возможно отключена. Однако если вы получаете сообщения об отказе в доступе, то нужно сымитировать UID владельца файла и перемонтировать NFS-экспорт для получения доступа (в этой статье эта техника не рассматривается). Просмотр UID’ов на подключенном диске: ls -an
Рисунок 7: Просмотр UID’ов непосредственно на подключенном диске Просмотр UID’ов при помощи nmap: nmap --script=nfs-ls 192.168.1.171 -p 111
Рисунок 8: Просмотр UID’ов при помощи nmap Поиск паролей и секретных ключей (получение непривилегированного доступа) Предположим, что мы смогли получить доступ к NFS с правами root или другого пользователя. Пришло время поискать пароли и ключи для доступа к удаленному серверу. Секретные ключи обычно находятся в директориях /home/<user>/.ssh, а пароли, как правило, разбросаны повсюду. Ищем файлы, в имени которых есть слово «password»: cd demo find ./ -name "*password*" cat ./test/password.txt
Рисунок 9: Поиск файлов, имя которых содержит слово «password» Ищем секретные ключи в директориях .ssh: mount 192.168.1.222:/ demo2/ cd demo2 find ./ -name "id_rsa" cat ./root/.ssh/id_rsa
Рисунок 10: Поиск секретных ключей Ниже показано короткое видео, с демонстрацией процесса монтирования и поиска файлов: http://blog.netspi.com/wp-content/uploads/2020/03/NFS_ATTACK_DEMO_2.mp4
Эксплуатация бинарных файлов с флагом Setuid (получение прав суперпользователя)Как только у нас появился интерактивный шелл под именем пользователя с минимальными привилегиями (test), дальше есть множество путей по расширению полномочий. Однако в этот раз мы сосредоточимся на бинарных файлах с флагом setuid, который дает возможность запуска с правами владельца. Схожим образом, бинарные файлы с флагом setguid позволяют выполнение с правами группы, связанной с файлом. С точки зрения администратора у этой возможности есть как плюсы, так и минусы.
Ниже показаны команды для поиска бинарных файлов с флагами setuid и setguid. Поиск бинарных файлов с флагом setuid: find / -perm -u=s -type f 2>/dev/null Поиск бинарных файлов с флагом setguid: find / -perm -g=s -type f 2>/dev/null
Ниже показан пример, который вы можете встретить во время пентеста.
Рисунок 11: Перечень файлов с флагом setuid Повторимся еще раз. Обычно наша цель – заставить бинарный файл выполнять произвольный код с правами root. В реальной жизни потребуется небольшое исследование или реверс-инжиниринг бинарных файлов с флагом setuid с целью разработки наилучшего способа для решения вышеупомянутой задачи. В нашем случае бинарный файл /home/test/exec позволяет напрямую выполнять команды операционной системы с правами суперпользователя. Исходный код примера можно скачать по ссылке https://github.com/nullbind/Other-Projects/blob/master/random/exec.c . Ниже показаны примеры команд и скриншот с результатами выполнения: cd /home/test/ ./exec whoami
Рисунок 12: Пример выполнения команды с привилегиями суперпользователя Как видно из рисунка выше, можно выполнять произвольные команды с правами суперпользователя без каких-либо проблем. Ниже показано видео, где демонстрируется использование файлов с флагом setuid. http://blog.netspi.com/wp-content/uploads/2020/03/NFS_ATTACK_DEMO_3.mp4
ЗаключениеВ этой статье был продемонстрирован один из способов получения шелла с правами суперпользователя в удаленной системе с Линуксом при помощи уязвимого NFS-экспорта и небезопасного бинарного файла с флагом setuid. Хотя существует множество методов решения одной задачи, я считаю, что мораль истории такова: все типы совместно используемых сетевых ресурсов должны быть сконфигурированы с минимально возможными привилегиями с целью предотвращения неправомерного доступа к данным и системам. Надеюсь, эта статья окажется полезной для начинающих пентестеров и специалистов по безопасности, которые пытаются оценить потенциальные риски, связанные с небезопасной конфигурацией NFS-серверов. Всего наилучшего. |
Проверить безопасность сайта