Всем известно, что Veeam – это довольно крутой и распространённый инструмент для бэкапа виртуальных машин. А знаете ли вы, что Veeam может пригодиться не только для создания резервных копий, но также может стать хорошим источником данных при проведении тестирования на проникновение. В этой статье я поделюсь своими наработками в части применения Veeam как инструментария для пентеста.

Итак, что, собственно, дает нам Veeam как инструментарий. Вы знаете, что Veeam имеет ролевую систему доступа, но обычно настройки по умолчанию остаются нетронутыми – в административную группу входят пользователи из локальной группы администраторов хоста. Таким образом доступ к консоли можно получить, заполучив сервисную учетную или пользовательскую учетную запись с правами администратора на ОС.

Роли/пользователи Veeam
Роли/пользователи Veeam

TL;DR

Из резервных копий можно восстановить отдельные файлы, например базу Active Directory, а также получить сохранённые учетные данные для подключения к гипервизорам, ВМ и т.д. двумя способами. Ссылка на скрипты в конце страницы.

Veeam позволяет делать резервные копии с ВМ на vSphere и Hyper-V и еще много чего. Эти резервные копии можно восстановить не только на гипервизор, но и на локальный диск. К тому же у него есть такая интересная возможность как восстановление отдельных файлов из ВМ. Уже поняли куда я клоню, да? Конечно, можно восстановить базу Active Directory.

Восстановление базы Active Directory

Для восстановления отдельных файлов необходимо выбрать нужную ВМ из списка задач из раздела Backups > Disk > ${JOB_NAME} и выбрать режим восстановления отдельных файлов из меню.

Список резервных копий Veeam
Список резервных копий Veeam

После выполнения мастера откроется окно выбора файлов. Для восстановления и расшифровки базы 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

Восстановив эти файлы получить хэши паролей не составит труда, для этого есть несколько утилит:  impacket-secretsdump, ntdsxtract

Пример работы утилиты secretsdump
Пример работы утилиты secretsdump

Если же подключиться к консоли Veeam не удалось, но есть доступ к файлам с резервными копиями, то для извлечения можно воспользоваться Veeam Backup Extract Utility.

Veeam Backup Extract Utility
Veeam Backup Extract Utility

Извлечение учетных данных из базы Veeam

Если в резервных копиях нет полезной информации, то можно обратить внимание на учетные данные, которые Veeam хранит для подключения к хостам при создании резервных копий. Чаще всего это привилегированные учетные записи для подключения к гипервизору либо к ВМ для выполнения административных задач перед созданием копии.

Менеджер учетных данных Veeam
Менеджер учетных данных Veeam

Разумеется, просто так взять и получить пароль через менеджер нельзя, но не огорчайтесь, у меня для вас есть целых два рабочих метода!

Заранее предупреждаю, методы проверялись на работоспособность на версии Veaam 9.5, для более новых версий, возможно, придется поработать напильником.

Метод первый - подключение к фейковому хосту vSphere

Этот метод подходит для тех случаев, в которых вы смогли подключиться к консоли Veeam и у вас есть право создавать новые подключения к гипервизору. При том не важно запущена ли консоль на том же хосте либо на другом.

Суть в том, что при подключении Veeam к хосту ESXi передача логина и пароля происходит простым POST-запросом, вроде такого:

Запрос авторизации vSphere
Запрос авторизации vSphere

Для получения пароля таким способом можно воспользоваться утилитами типа OWASP ZAP или Burp Suite, при условии наличия рабочего хоста vSphere, но такие условия есть не всегда. Для удобства был подготовлен небольшой скрипт на Python, эмулирующий ответы SOAP-интерфейса ESXi. Ссылка на репозиторий приведена в конце статьи.

Используя этот скрипт, можно получить пароль от нужной учетной записи из Veeam в несколько шагов:

  1. Клонировать репозиторий со скриптом:
    git clone <REPO>

  2. Запустить скрипт veeampot.py на подконтрольной машине:
    cd veeam-creds; python3 veeampot.py

  3. Создать в консоли Veeam новое подключение к серверу vSphere в разделе Inventory;

  4. Ввести адрес машины с запущенным скриптом указав порт подключения 8443;

  5. Выбрать нужную учетную запись и завершить мастер;

  6. Получить пароль в выводе скрипта;

  7. Рассмеяться в голос, если используется у/з с правами администратора домена.

В процессе Veeam пожалуется на доверенный сертификат и в конце выдаст ошибку подключения к нашему фейковому серверу vSphere, но дело будет сделано. В выводе скрипта будет виден логин и пароль открытым текстом.

Вывод скрипта veeampot.py
Вывод скрипта veeampot.py

Метод второй – получение паролей напрямую из БД

Первый способ безусловно подходит в большинстве случаев, когда вы находитесь в локальной сети заказчика с любимым ноутбуком и заряженным 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

Если вы хотите использовать скрипт в 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

Спасибо за внимание, надеюсь эта информация будет полезна.

Ссылка на репозиторий со всеми скриптами

P.S. Информация предоставлена в образовательных целях. Используйте только в том случае, если у вас есть разрешение владельца на раскрытие учетных данных.

Комментарии (11)


  1. KorP
    02.11.2021 17:42
    +3

    https://www.youtube.com/watch?v=4k6AVuOQqNk
    Вот ещё один способ :)


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


    1. Scorpey
      03.11.2021 11:08

      Это не странно, это нормально.


      1. KorP
        03.11.2021 13:32

        А я же так и написал? :)


        1. Scorpey
          03.11.2021 14:12

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


          1. KorP
            03.11.2021 14:58

            Значит я вас не так понял :)


            1. Scorpey
              03.11.2021 15:07

              И насколько мне известно под решение такой задачи максимально заточена ОС Astra Linux


              1. KorP
                03.11.2021 15:10

                Но Veeam пока Windows only (имеется ввиду консоль управления). Хотя в плане безопасности и линукса в 11-й версии сделано много интересного и много будет ещё в 12-й в этом направлении.


                1. Scorpey
                  03.11.2021 15:38

                  11 версии Veeam ?


    1. sadshade Автор
      03.11.2021 11:52

      Полностью согласен, но согласитесь и вы, приятно иметь все нужное под рукой ;-)


  1. evros
    03.11.2021 11:30
    +1

    "Рассмеяться в голос, если используется у/з с правами администратора домена." - ну это если одна учетка на всё...

    Для бэкапа контроллера домена требуется учетка с правами администратора домена.

    https://www.veeam.com/blog/ru/backing-up-domain-controller-best-practices-for-ad-protection.html


    1. sadshade Автор
      03.11.2021 11:51

      Сложно спорить с этим утверждением, когда есть эта сама резервная копия контроллера домена. Но если ее нет, а учетная запись с правами Администратора домена используется для вополнения задач на ВМ перед бэкапом, то это излишне.