Всем известно, что Veeam – это довольно крутой и распространённый инструмент для бэкапа виртуальных машин. А знаете ли вы, что Veeam может пригодиться не только для создания резервных копий, но также может стать хорошим источником данных при проведении тестирования на проникновение. В этой статье я поделюсь своими наработками в части применения Veeam как инструментария для пентеста.
Итак, что, собственно, дает нам Veeam как инструментарий. Вы знаете, что Veeam имеет ролевую систему доступа, но обычно настройки по умолчанию остаются нетронутыми – в административную группу входят пользователи из локальной группы администраторов хоста. Таким образом доступ к консоли можно получить, заполучив сервисную учетную или пользовательскую учетную запись с правами администратора на ОС.
TL;DR
Из резервных копий можно восстановить отдельные файлы, например базу Active Directory, а также получить сохранённые учетные данные для подключения к гипервизорам, ВМ и т.д. двумя способами. Ссылка на скрипты в конце страницы.
Veeam позволяет делать резервные копии с ВМ на vSphere и Hyper-V и еще много чего. Эти резервные копии можно восстановить не только на гипервизор, но и на локальный диск. К тому же у него есть такая интересная возможность как восстановление отдельных файлов из ВМ. Уже поняли куда я клоню, да? Конечно, можно восстановить базу Active Directory.
Восстановление базы Active Directory
Для восстановления отдельных файлов необходимо выбрать нужную ВМ из списка задач из раздела Backups > Disk > ${JOB_NAME} и выбрать режим восстановления отдельных файлов из меню.
После выполнения мастера откроется окно выбора файлов. Для восстановления и расшифровки базы Active Directory нам понадобятся несколько файлов:
ntds.dit – зашифрованная база данных AD;
SYSTEM – ветка реестра, содержащая ключ шифрования BootKey;
SECURITY – ветка реестра, содержащая кэшированные пароли LSA Secrets;
SAM - The Security Accounts Manager, в котором содержатся хэши паролей локальных пользователей.
Файл ntds.dit находится в директории C:\Windows\System32\config\, остальные файлы находятся в директории C:\Windows\System32\config\.
Восстановив эти файлы получить хэши паролей не составит труда, для этого есть несколько утилит: impacket-secretsdump, ntdsxtract
Если же подключиться к консоли Veeam не удалось, но есть доступ к файлам с резервными копиями, то для извлечения можно воспользоваться Veeam Backup Extract Utility.
Извлечение учетных данных из базы Veeam
Если в резервных копиях нет полезной информации, то можно обратить внимание на учетные данные, которые Veeam хранит для подключения к хостам при создании резервных копий. Чаще всего это привилегированные учетные записи для подключения к гипервизору либо к ВМ для выполнения административных задач перед созданием копии.
Разумеется, просто так взять и получить пароль через менеджер нельзя, но не огорчайтесь, у меня для вас есть целых два рабочих метода!
Заранее предупреждаю, методы проверялись на работоспособность на версии Veaam 9.5, для более новых версий, возможно, придется поработать напильником.
Метод первый - подключение к фейковому хосту vSphere
Этот метод подходит для тех случаев, в которых вы смогли подключиться к консоли Veeam и у вас есть право создавать новые подключения к гипервизору. При том не важно запущена ли консоль на том же хосте либо на другом.
Суть в том, что при подключении Veeam к хосту ESXi передача логина и пароля происходит простым POST-запросом, вроде такого:
Для получения пароля таким способом можно воспользоваться утилитами типа OWASP ZAP или Burp Suite, при условии наличия рабочего хоста vSphere, но такие условия есть не всегда. Для удобства был подготовлен небольшой скрипт на Python, эмулирующий ответы SOAP-интерфейса ESXi. Ссылка на репозиторий приведена в конце статьи.
Используя этот скрипт, можно получить пароль от нужной учетной записи из Veeam в несколько шагов:
Клонировать репозиторий со скриптом:
git clone <REPO>
Запустить скрипт veeampot.py на подконтрольной машине:
cd veeam-creds; python3 veeampot.py
Создать в консоли Veeam новое подключение к серверу vSphere в разделе Inventory;
Ввести адрес машины с запущенным скриптом указав порт подключения 8443;
Выбрать нужную учетную запись и завершить мастер;
Получить пароль в выводе скрипта;
Рассмеяться в голос, если используется у/з с правами администратора домена.
В процессе Veeam пожалуется на доверенный сертификат и в конце выдаст ошибку подключения к нашему фейковому серверу vSphere, но дело будет сделано. В выводе скрипта будет виден логин и пароль открытым текстом.
Метод второй – получение паролей напрямую из БД
Первый способ безусловно подходит в большинстве случаев, когда вы находитесь в локальной сети заказчика с любимым ноутбуком и заряженным Kali Linux. А что делать, если машины с питоном рядом нет или RDP использовать нет возможности, но зато есть эскалированная сессия с Empire/Meterpreter ну или просто лень собирать пароли по одному?
Перед тем как продолжить, немного технических деталей. Veeam хранит пароли менеджера учетных данных в своей БД вместе с остальными настройками. Эти пароли зашифрованы при помощи Data Protection API (DPAPI), ключом локальной машины. Данные для подключения к БД хранятся в ветке реестра HKLM и для доступа к нему необходимо повышение прав (UAC).
Таким образом, для получения паролей открытым текстом необходимо сделать следующие действия:
Получить данные для подключения к БД Veeam;
Подключиться к БД и получить записи логин/шифрованный пароль;
Расшифровать пароли при помощи DPAPI.
Для удобства был подготовлен PowerShell скрипт Veeam-Get-Creds.ps1, при запуске которого будет автоматически выведен список учетных записей менеджера Veeam с паролем открытым текстом.
Если вы хотите использовать скрипт в PowerShell Empire, то его можно запустить на агенте, перейдя в режим командной строки (shell).
Получить «однострочник» из скрипта можно выполнив следующие команды в Linux:
echo -n "powershell -enc "; \
iconv -f UTF-8 -t UTF-16LE < \
Veeam-Get-Creds.ps1 | base64 -w0
Но это не удобно, да и вывод команды не будет структурированным. Гораздо удобнее использовать модули фреймворка для получения информации с агента. Для этого был подготовлен модуль VeeamGetCreds.yaml, содержащий адаптированный скрипт PowerShell для получения паролей из базы Veeam.
Для его использования необходимо скопировать модуль в папку empire/server/modules/powershell/credentials сервера Empire, после чего запустить сервер и клиент. Затем модуль можно использовать обычным образом.
Спасибо за внимание, надеюсь эта информация будет полезна.
Ссылка на репозиторий со всеми скриптами
P.S. Информация предоставлена в образовательных целях. Используйте только в том случае, если у вас есть разрешение владельца на раскрытие учетных данных.
Комментарии (11)
evros
03.11.2021 11:30+1"
Рассмеяться в голос, если используется у/з с правами администратора домена." - ну это если одна учетка на всё...Для бэкапа контроллера домена требуется учетка с правами администратора домена.
https://www.veeam.com/blog/ru/backing-up-domain-controller-best-practices-for-ad-protection.html
sadshade Автор
03.11.2021 11:51Сложно спорить с этим утверждением, когда есть эта сама резервная копия контроллера домена. Но если ее нет, а учетная запись с правами Администратора домена используется для вополнения задач на ВМ перед бэкапом, то это излишне.
KorP
https://www.youtube.com/watch?v=4k6AVuOQqNk
Вот ещё один способ :)
Но имея админский доступ к серверу было бы странно, если бы невозможно было получить какие-то данные :)
Scorpey
Это не странно, это нормально.
KorP
А я же так и написал? :)
Scorpey
Вы как раз противоположенное утверждали, а я уверен, что имея админский доступ к серверу совсем не обязательно иметь возможность получить доступ к данным.
KorP
Значит я вас не так понял :)
Scorpey
И насколько мне известно под решение такой задачи максимально заточена ОС Astra Linux
KorP
Но Veeam пока Windows only (имеется ввиду консоль управления). Хотя в плане безопасности и линукса в 11-й версии сделано много интересного и много будет ещё в 12-й в этом направлении.
Scorpey
11 версии Veeam ?
sadshade Автор
Полностью согласен, но согласитесь и вы, приятно иметь все нужное под рукой ;-)