Всем привет. Я чуть больше полутора лет занимаюсь внутренним пентестом. И вроде бы уже многое знаю, но всегда кажется, что этого недостаточно и хочется знать больше. Когда часто делаешь похожую работу, привыкаешь к одним и тем же действиям, инструментам, и нет идей, что бы еще попробовать. Иногда я черпаю вдохновение в отчетах своих коллег, но всегда интересно почитать о том, как работают и что используют другие команды. А раз это интересно мне, может, это интересно кому-то еще. Мы c командой решили тоже поделиться несколькими интересными киллчейнами. В этой статье я расскажу о последовательности шагов, которая привела к получению привилегий администратора домена в компании, в которой «почти все безопасно».

Краткое описание — на схеме.

Подробнее — под катом.

Схема атаки
Источник: пресс-служба «Инфосистемы Джет»
Схема атаки Источник: пресс-служба «Инфосистемы Джет»

Внимание! Данная статья носит исключительно информационный характер и предназначена для образовательных целей.

После подключения к локальной сети первым делом я смотрю сетевой трафик. В этот раз моих любимых LLMNR и NBNS нет (о LLMNR и NBNS Spoofing можно почитать здесь: https://habr.com/ru/company/jetinfosystems/blog/449278/), зато есть сообщения DHCPv6 Solicit, значит, можно притвориться DHCPv6-сервером (главное — делать это аккуратно, а то заказчик может расстроиться). Для этого я использую инструмент mitm6.py (https://github.com/dirkjanm/mitm6). Я люблю сочетать его с атакой NTLM Relay.

Почему аккуратно и что может пойти не так

Если кратко, то по умолчанию DNS-сервер с адресом IPv6 является более приоритетным, чем сервер с адресом IPv4. Когда хост получит по протоколу DHCPv6 адрес DNS-сервера (IP-адрес атакующего), все запросы пойдут к этому DNS-серверу. И если он на любой запрос будет отвечать своим IP-адресом, то может сломаться взаимодействие между различными сервисами. Например, если какой-то сервис ходит к базе данных по имени, а не по IP-адресу, он уйдет не туда. Я рекомендую указывать, на какие запросы будет отвечать DNS-сервер. Для этого задаю параметр -d в утилите mitm6.py.

Схема атаки:

1. Жертва по умолчанию периодически рассылает сообщения с запросом DHCPv6 настроек.

2. Атакующий отвечает жертве: назначает IPv6-адрес и указывает в качестве DNS-сервера свой IPv6-адрес.

3. Жертва хочет обратиться к какому-то хосту по DNS-имени, обращается к поддельному DNS-серверу. Например, жертва ищет wpad.doman.local.

4. Атакующий отвечает на DNS-запрос своим IPv4-адресом.

5. Жертва обращается к хосту атакующего (это может быть http, smb, ldap и др.).

6. Атакующий проводит атаку NTLM Relay на цель.

В качестве целей атаки я использовала хосты, на которых нет подписи на SMB. Список таких хостов можно составить с помощью команды crackmapexec smb 192.168.0.0/24 --gen-relay-list relaylist.txt. Запустила ntlmrelayx.py с параметром --socks., затем запустила mitm6.py. Как результат — множество запросов на получение DHCPv6-адреса, DNS-запросов и затем обращений к моему хосту. И — ура, мне повезло! В результате атаки я получила SMB-сессии пользователя DOMAIN\DIM, который является локальным администратором на нескольких хостах. (SMB-сессия — это всплывающее окно: Socks-сервер в ntlmrelayx.py умеет удерживать соединения. Затем можно подключаться к этому соединению, не имея пароля пользователя. Пока соединение удерживается, вы можете использовать различные утилиты для конкретного протокола. Но как только соединение оборвется, доступ будет потерян.) Конечно, еще были перехвачены NTLMv2-хэши паролей многих пользователей, их я поставила на перебор. К сожалению, пароль DIM не удалось получить, но сбрутился пароль другой учетной записи. Ее я использовала для запуска bloodhound.py.

Что такое Bloodhound

Если совсем просто: коллекторы bloodhound собирают информацию о доменах — домены, пользователи, группы, компьютеры, права доступа. Потом результаты можно изучить в графическом интерфейсе Bloodhound: посмотреть членов групп, кто где локальный администратор, построить путь до администратора домена. Подробнее можно почитать в документации https://bloodhound.readthedocs.io/en/latest/index.html.

Полученные SMB-сессии
Источник: пресс-служба «Инфосистемы Джет»
Полученные SMB-сессии Источник: пресс-служба «Инфосистемы Джет»

Для того, чтобы использовать полученные SMB-сессии, необходимо отредактировать конфигурацию утилиты proxychains4, которая позволяет запускать различные утилиты через прокси. В файл /etc/proxychains необходимо добавить строку socks4 127.0.0.1 1080, чтобы использовать sokcs-прокси, поднятый ntlmrelay.py.

Чаще всего я использую полученную сессию для выгрузки учетных данных из реестра (из базы SAM и LSA). Для этого использую secretsdump.py. Таким образом можно получить NTLM-хеши локальных пользователей, в том числе локального администратора, которые затем можно использовать для атак Pass-The-Hash или побрутить их. Из LSA можно получить DCC2-хеши пользователей, которые ранее заходили на устройство. Брутятся эти хэши долго, но когда ничего другого нет, это тоже неплохо. А если повезет, то из LSA можно достать пароли учетных записей, от имени которых запускаются сервисы (однажды так я получила пароль администратора домена).

И в этот раз, используя proxychains4 и secretsdump.py, я получила учетные данные из реестра на хосте с именем SERVER1. С использованием NTLM-хеша локального администратора аутентифицироваться не удалось, так как ему запрещено аутентифицироваться по сети. Но был получен NTLM-хеш учетки компьютера SERVER1. С использованием этого хеша можно провести атаку Silver Ticket.

Получение учетных данных из реестра хоста SERVER1
Источник: пресс-служба «Инфосистемы Джет»
Получение учетных данных из реестра хоста SERVER1 Источник: пресс-служба «Инфосистемы Джет»

В Bloodhound я посмотрела, кто же является локальным администратором на SERVER1, и выбрала пользователя docsvision.

Список администраторов хоста SERVER1
Источник: пресс-служба «Инфосистемы Джет»
Список администраторов хоста SERVER1 Источник: пресс-служба «Инфосистемы Джет»

После этого, используя ticketer.py и NTLM-хэш учетной записи компьютера SERVER1, я создала TGS для пользователя docvision. Далее использовала crackmapexec с модулем lsassy: с полученным билетом я прошла аутентификацию на хосте SERVER1 и получила учетные данные из оперативной памяти процесса LSASS.EXE. Был получен NTLM-хэш УЗ docvision. Можно использовать его для Pass-the-hash и попробовать продвинуться дальше.

Получение хешей паролей из памяти процесса lsass хоста SERVER1
Источник: пресс-служба «Инфосистемы Джет»
Получение хешей паролей из памяти процесса lsass хоста SERVER1 Источник: пресс-служба «Инфосистемы Джет»

Следующий шаг — определить, на каких хостах пользователь docvision является локальным администратором. В этом опять поможет Bloodhound. Нашла четыре хоста — есть шансы на продвижение.

Список хостов, на которых docsvision является администратором
Источник: пресс-служба «Инфосистемы Джет»
Список хостов, на которых docsvision является администратором Источник: пресс-служба «Инфосистемы Джет»

Я провела атаку Pass-the-hash на эти хосты и снова получила учетные данные из оперативной памяти процесса LSASS.EXE. На хосте SERVER2 обнаружила в открытом виде пароли пользователей SERVER2\user2 и DOMAIN\adm. Пользователь DOMAIN\adm является администратором домена. С помощью crackmapexec проверила его учетные данные и получила Logon failed. Выяснила, что он изменил пароль несколько часов назад. Как же это обидно!

Получение паролей из памяти процесса LSASS на хосте SERVER2
Источник: пресс-служба «Инфосистемы Джет»
Получение паролей из памяти процесса LSASS на хосте SERVER2 Источник: пресс-служба «Инфосистемы Джет»

Я предположила, что на хосте SERVER2 осталась сессия пользователя adm, подключилась к хосту по протоколу RDP. Для подключения использовала УЗ SERVER2\user2 — он оказался локальным администратором. С помощью PsExec.exe я открыла cmd от имени NT AUTHORYTY\Система. Это нужно для корректной работы mimikatz.exe. Затем с помощью модуля token-утилиты mimikatz посмотрела список токенов. Ура, повезло! Есть токен adm! С помощью команды token::elevate /domainadmin я выполнила имперсонацию токена доступа пользователя adm.

Token impersonation
Источник: пресс-служба «Инфосистемы Джет»
Token impersonation Источник: пресс-служба «Инфосистемы Джет»

После этого я провела атаку dcsync и получила NTLM-хэш пароля пользователя adm.

Атака DCSYNC
Источник: пресс-служба «Инфосистемы Джет»
Атака DCSYNC Источник: пресс-служба «Инфосистемы Джет»

Используя полученный NTLM-хэш пароля пользователя adm, я провела атаку Pass-the-hash на хост dc-office.domain.ru и с помощью crackmapexec с модулем lsassy получила в открытом виде пароль пользователя DOMAIN\infosec_domain, который тоже является администратором домена. Так как по условиям проведения работ я не скрывалась, то для своего удобства после подключения по протоколу RDP к контроллеру домена я создала и добавила в группы «Администраторы домена» и «Администраторы предприятия» УЗ пользователя Jet1. Почему-то заходить на контроллер домена по RDP — мое любимое действие. В этот момент я чувствую себя крутой :)

Получение паролей из памяти процесса LSASS на контроллере домена
Источник: пресс-служба «Инфосистемы Джет»
Получение паролей из памяти процесса LSASS на контроллере домена Источник: пресс-служба «Инфосистемы Джет»
Подключение по RDP к контроллеру домена
Источник: пресс-служба «Инфосистемы Джет»
Подключение по RDP к контроллеру домена Источник: пресс-служба «Инфосистемы Джет»

Как вы могли заметить, для получения привилегий администратора домена не были использованы какие-то уязвимости в ОС Windows или другом ПО. Я использовала некорректные конфигурации и особенности протоколов. Конечно, и отсутствие антивируса на нужном мне хосте помогло. Какой вывод можно сделать? «Не обновлениями едиными»: важно не только обновлять ПО, но и использовать best practices в настройках используемого ПО.

Для устранения недостатков, которые привели к получению привилегий администратора домена, необходимо:

  • Отключить IPv6 на всех интерфейсах всех устройств (так как в этой компании протокол IPv6 не используется). Это поможет защититься от атаки с подменой DNS-сервера.

  • Включить обязательную подпись SMB. Это поможет защититься от атаки NTLM Relay.

  • Установить антивирусное ПО на все хосты. Это поможет защититься от запуска вредоносных утилит вроде mimikatz.exe.

  • Также можно добавить администраторов домена в группу Protected Users («Защищенные пользователи»). Но стоит протестировать эту функцию перед применением. Или можно запретить администраторам домена заходить на хосты, не являющиеся контроллерами домена (использовать типовую архитектуру).

В своей работе я осуществляю взломы ради того, чтобы компании стали еще более защищенными: мои атаки — во благо. А еще в нашей команде есть те, кто занимается отлавливанием «дыр» и недопущением подобных ситуаций. Нам нравится делиться тем, что мы знаем. Если хотите узнать, как защититься от хакеров, приходите на большой кибертренинг CyberCamp в сентябре. Будут практикумы для команд численностью от трех до пяти человек. А если хотите просто послушать обучающие доклады — регистрируйтесь как зритель. Участие бесплатное.

Ирина Беляева

старший консультант по информационной безопасности Центра информационной безопасности «Инфосистемы Джет»

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


  1. valkumei
    16.08.2022 12:42
    -1

    Ну все - следующий уровень это удаленный доступ в письменный стол).


  1. MechanicusJr
    16.08.2022 20:08
    +1

    Также можно добавить администраторов домена в группу Protected Users («Защищенные пользователи»).

    Вроде 2012R2 вышел с десять лет назад

    С тех пор добавилось мягко говоря много всего - начиная с

    Best Practices for Securing Active Directory

    https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/best-practices-for-securing-active-directory

    и заканчивая

    Planning a bastion environment

    https://docs.microsoft.com/en-us/microsoft-identity-manager/pam/planning-bastion-environment

    Отключить IPv6 на всех интерфейсах всех устройств (так как в этой компании протокол IPv6 не используется). Это поможет защититься от атаки с подменой DNS-сервера.

    Совет из 2006 года ?

    Windows Vista, Windows Server 2008, and later versions of Windows implement RFC 3484 and use a prefix table to determine which address to use when multiple addresses are available for a Domain Name System (DNS) name.

    Internet Protocol version 6 (IPv6) is a mandatory part of Windows Vista and Windows Server 2008 and newer versions. We do not recommend that you disable IPv6 or its components. If you do, some Windows components may not function.

    We recommend using Prefer IPv4 over IPv6 in prefix policies instead of disabling IPV6.

    https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/configure-ipv6-in-windows


    1. B0D0B0P0T
      16.08.2022 20:28

      Так в чем, говорите, преимущество смены политики перед отключением протокола, если он не используется?))


      1. MechanicusJr
        17.08.2022 06:53

        "Q. What are Microsoft's recommendations about disabling IPv6?

        A.

        It is unfortunate that some organizations disable IPv6 on their computers running Windows 7, Windows Vista, Windows Server 2008 R2, or Windows Server 2008, where it is installed and enabled by default. Many disable IPv6-based on the assumption that they are not running any applications or services that use it. Others might disable it because of a misperception that having both IPv4 and IPv6 enabled effectively doubles their DNS and Web traffic. This is not true.

        From Microsoft's perspective, IPv6 is a mandatory part of the Windows operating system and it is enabled and included in standard Windows service and application testing during the operating system development process. Because Windows was designed specifically with IPv6 present, Microsoft does not perform any testing to determine the effects of disabling IPv6. If IPv6 is disabled on Windows 7, Windows Vista, Windows Server 2008 R2, or Windows Server 2008, or later versions, some components will not function. Moreover, applications that you might not think are using IPv6—such as Remote Assistance, HomeGroup, DirectAccess, and Windows Mail—could be.

        Therefore, Microsoft recommends that you leave IPv6 enabled, even if you do not have an IPv6-enabled network, either native or tunneled. By leaving IPv6 enabled, you do not disable IPv6-only applications and services (for example, HomeGroup in Windows 7 and DirectAccess in Windows 7 and Windows Server 2008 R2 are IPv6-only) and your hosts can take advantage of IPv6-enhanced connectivity."

        https://technet.microsoft.com/en-us/network/cc987595.aspx

        детальнее все описано в 2016 году:

        https://docs.microsoft.com/en-us/previous-versions/technet-magazine/dd822905(v=msdn.10)


        1. irabva
          19.08.2022 10:18

          Спасибо за ваши комментарии! Прочитала материалы по ссылкам про отключение IPv6. Из этих статей поняла, что Microsoft не рекомендует отключать IPv6, потому что не проводились тесты для определения последствий этого действия. Встречали ли вы какие-то статьи, исследования на эту тему? Или может быть встречали на практике, что после отключения IPv6 какие-то компоненты перестают работать? Было бы интересно почитать.