Всем известно, что Veeam – это довольно крутой и распространённый инструмент для бэкапа виртуальных машин. А знаете ли вы, что Veeam может пригодиться не только для создания резервных копий, но также может стать хорошим источником данных при проведении тестирования на проникновение. В этой статье я поделюсь своими наработками в части применения Veeam как инструментария для пентеста.
Итак, что, собственно, дает нам Veeam как инструментарий. Вы знаете, что Veeam имеет ролевую систему доступа, но обычно настройки по умолчанию остаются нетронутыми – в административную группу входят пользователи из локальной группы администраторов хоста. Таким образом доступ к консоли можно получить, заполучив сервисную учетную или пользовательскую учетную запись с правами администратора на ОС.
![Роли/пользователи Veeam Роли/пользователи Veeam](https://habrastorage.org/getpro/habr/upload_files/303/7e0/e4f/3037e0e4feaeb31279b0e450e3ff1005.png)
TL;DR
Из резервных копий можно восстановить отдельные файлы, например базу Active Directory, а также получить сохранённые учетные данные для подключения к гипервизорам, ВМ и т.д. двумя способами. Ссылка на скрипты в конце страницы.
Veeam позволяет делать резервные копии с ВМ на vSphere и Hyper-V и еще много чего. Эти резервные копии можно восстановить не только на гипервизор, но и на локальный диск. К тому же у него есть такая интересная возможность как восстановление отдельных файлов из ВМ. Уже поняли куда я клоню, да? Конечно, можно восстановить базу Active Directory.
Восстановление базы Active Directory
Для восстановления отдельных файлов необходимо выбрать нужную ВМ из списка задач из раздела Backups > Disk > ${JOB_NAME} и выбрать режим восстановления отдельных файлов из меню.
![Список резервных копий Veeam Список резервных копий Veeam](https://habrastorage.org/getpro/habr/upload_files/da4/01d/18f/da401d18fd78226379508ae7a8906b42.png)
После выполнения мастера откроется окно выбора файлов. Для восстановления и расшифровки базы 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\.
![Мастер восстановления отдельных файлов Veeam Мастер восстановления отдельных файлов Veeam](https://habrastorage.org/getpro/habr/upload_files/f30/da8/246/f30da82464b49b4fce80ef1a943e713a.png)
Восстановив эти файлы получить хэши паролей не составит труда, для этого есть несколько утилит: impacket-secretsdump, ntdsxtract
![Пример работы утилиты secretsdump Пример работы утилиты secretsdump](https://habrastorage.org/getpro/habr/upload_files/aec/170/0ad/aec1700ad26db80ebbae96ad7480c8ef.png)
Если же подключиться к консоли Veeam не удалось, но есть доступ к файлам с резервными копиями, то для извлечения можно воспользоваться Veeam Backup Extract Utility.
![Veeam Backup Extract Utility Veeam Backup Extract Utility](https://habrastorage.org/getpro/habr/upload_files/7d2/3b4/37d/7d23b437d57b4522ad6e02c954f01ae7.png)
Извлечение учетных данных из базы Veeam
Если в резервных копиях нет полезной информации, то можно обратить внимание на учетные данные, которые Veeam хранит для подключения к хостам при создании резервных копий. Чаще всего это привилегированные учетные записи для подключения к гипервизору либо к ВМ для выполнения административных задач перед созданием копии.
![Менеджер учетных данных Veeam Менеджер учетных данных Veeam](https://habrastorage.org/getpro/habr/upload_files/66e/3c3/cfa/66e3c3cfa568a529606b53f21c3f5363.png)
Разумеется, просто так взять и получить пароль через менеджер нельзя, но не огорчайтесь, у меня для вас есть целых два рабочих метода!
Заранее предупреждаю, методы проверялись на работоспособность на версии Veaam 9.5, для более новых версий, возможно, придется поработать напильником.
Метод первый - подключение к фейковому хосту vSphere
Этот метод подходит для тех случаев, в которых вы смогли подключиться к консоли Veeam и у вас есть право создавать новые подключения к гипервизору. При том не важно запущена ли консоль на том же хосте либо на другом.
Суть в том, что при подключении Veeam к хосту ESXi передача логина и пароля происходит простым POST-запросом, вроде такого:
![Запрос авторизации vSphere Запрос авторизации vSphere](https://habrastorage.org/getpro/habr/upload_files/0c6/da6/00f/0c6da600fd4edb2ae5d80b6cd659165d.png)
Для получения пароля таким способом можно воспользоваться утилитами типа 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, но дело будет сделано. В выводе скрипта будет виден логин и пароль открытым текстом.
![Вывод скрипта veeampot.py Вывод скрипта veeampot.py](https://habrastorage.org/getpro/habr/upload_files/2df/829/2f6/2df8292f6cd33b2e354fac2b2ee87733.png)
Метод второй – получение паролей напрямую из БД
Первый способ безусловно подходит в большинстве случаев, когда вы находитесь в локальной сети заказчика с любимым ноутбуком и заряженным Kali Linux. А что делать, если машины с питоном рядом нет или RDP использовать нет возможности, но зато есть эскалированная сессия с Empire/Meterpreter ну или просто лень собирать пароли по одному?
Перед тем как продолжить, немного технических деталей. Veeam хранит пароли менеджера учетных данных в своей БД вместе с остальными настройками. Эти пароли зашифрованы при помощи Data Protection API (DPAPI), ключом локальной машины. Данные для подключения к БД хранятся в ветке реестра HKLM и для доступа к нему необходимо повышение прав (UAC).
Таким образом, для получения паролей открытым текстом необходимо сделать следующие действия:
Получить данные для подключения к БД Veeam;
Подключиться к БД и получить записи логин/шифрованный пароль;
Расшифровать пароли при помощи DPAPI.
Для удобства был подготовлен PowerShell скрипт Veeam-Get-Creds.ps1, при запуске которого будет автоматически выведен список учетных записей менеджера Veeam с паролем открытым текстом.
![Вывод скрипта Veeam-Get-Creds.ps1 Вывод скрипта Veeam-Get-Creds.ps1](https://habrastorage.org/getpro/habr/upload_files/43f/04f/6fa/43f04f6fae8a982c12c3ead0e7c9bef6.png)
Если вы хотите использовать скрипт в 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, после чего запустить сервер и клиент. Затем модуль можно использовать обычным образом.
![Вывод модуля VeeamGetCreds в Empire Вывод модуля VeeamGetCreds в Empire](https://habrastorage.org/getpro/habr/upload_files/093/8e1/d4c/0938e1d4c5e47abfefc87d5835b01aaf.png)
Спасибо за внимание, надеюсь эта информация будет полезна.
Ссылка на репозиторий со всеми скриптами
P.S. Информация предоставлена в образовательных целях. Используйте только в том случае, если у вас есть разрешение владельца на раскрытие учетных данных.