Атака Pass-the-Hash и получение системного доступа в Windows
В этом руководстве мы научились использовать хэши для аутентификации в системе на базе Windows и реализовали атаку pass-the-hash.
Пароли в Windows хранятся в виде хэшей и иногда могут быть устойчивы к взлому. Однако в некоторых ситуациях мы можем обойтись без пароля в чистом виде и использовать только хэш. Особенно интересны случаи, когда доступен хэш административной учетной записи, поскольку затем можно получить более высокие привилегии, реализовав атаку под названием pass-the-hash.
Вначале мы будем извлекать хэш в системе Windows 7 и далее перейдем к серверу Windows Server 2016. Пользователь, чей хэш мы будем получать, должен иметь административные привилегии и быть авторизованным на обеих машинах. В качестве рабочей среды будет использоваться Kali Linux.
Для понимания техники pass-the-hash вначале следует разобраться, как устроен хэш. В Windows типичный хэш выглядит примерно так:
Строка выше состоит из четырех секций, разделенных двоеточиями. Первая часть – имя пользователя, вторая – относительный числовой идентификатор.
Третья часть представляет собой LM хэш, прекративший использоваться, начиная с Windows Vista/Server 2008. На данный момент вы навряд ли встретите где-либо подобный тип, если только в старых системах. В случае если вы столкнетесь с подобными ситуациями, считайте, что вам повезло, поскольку эти хэши легко взламываются.
Четвертая часть представляет собой NTLM хэш (иногда называемый NTHash). С обновленной версией, используемой в современных системах Windows и более устойчивой ко взломам, мы и будем работать во время реализации атаки pass-the-hash.
Наш сценарий основан на эксплуатации схемы хранения / передачи паролей и механизма аутентификации. Пароли не передаются по сети в открытом виде, а шифруются в момент создания.
Во время аутентификации пароль шифруется сразу же после ввода. Учитывая вышесказанное, можно заключить, что компьютер не видит разницы между паролем и хэшем, и мы можем во время аутентификации воспользоваться хэшем, вместо пароля в чистом виде.
Ситуация становится еще более интересной, когда мы знаем имя пользователя с административными правами и хэш.
Шаг 1: Получение хэша в целевой системе
Вначале нужно скомпрометировать первую цель. При реализации этого сценария мы имеем дело с обычной рабочей станцией на базе Windows 7. Метод можно использовать любой, но мы предполагаем, что система уязвима к эксплоиту EternalBlue.
Эксплуатацию уязвимости будем выполнять при помощи Metasploit. Приступаем:
Запускаем модуль «eternalblue». Для более подробного ознакомления с этим модулем, рекомендуют ознакомиться с руководством по эксплуатации EternalBlue на Windows-сервере.
В Meterpreter есть полезная команда hashdump, позволяющая выгрузить любые LM или NTLM хэши в целевой системе:
По результатам выгрузки отмечаем, что у пользователя «admin2» скорее всего административные привилегии. Этот хэш мы будем использовать для подключения к другой машине.
Предположим, что другой компьютер также находится в сети, например, в роли сервера и, возможно, в качестве контроллера домена на базе Windows Server 2016. Если мы получим доступ к этой машине, то сможем получить контроль над всей сетью и любым компьютером домена.
Шаг 2: Реализация атаки Pass-the-Hash при помощи модуля PsExec
Полученный хэш привилегированного пользователя можно использовать для аутентификации на сервере Windows Server 2016 без знания пароля. Будем использовать модуль psexec (там же в Metasploit).
PsExec представляет собой утилиту, позволяющую работать из командной строки, для запуска программ и команд в удаленных системах. Этот инструмент полезен для администраторов, поскольку интегрирован с консольными приложениями и утилитами с целью удобного перенаправления входных и выходных данных. Однако здесь мы опять сталкиваемся с компромиссом между удобством и безопасность, поскольку PsExec может использоваться злоумышленниками для выполнения вредоносных команд или выступать в качестве бэкдора.
В Metasploit есть модифицированная версия PsExec, позволяющая легко подключаться к удаленным целям. Для поиска местонахождения этого модуля воспользуемся командой search:
Psexec зарекомендовал себя неоднократно. Загружаем этот модуль при помощи команды use.
Смотрим текущие настройки, используя команду options:
Вначале нужно установить IP-адрес цели (то есть сервера, к которому мы хотим подключиться):
Затем мы можем указать имя пользователя и пароль, используя полученный ранее хэш вместо обычного пароля.
Теперь указываем полезную нагрузку. Будем использоваться классический Reverse TCP из Meterpreter: Также указываем IP-адрес локальной машины и желаемый порт:
Остальные опции оставляем по умолчанию. Запускаем команду run:
У нас появилась meterpreter-сессия. Для подтверждения вводим команды getuid / sysinfo и получаем информацию о целевой системе.
Прекрасно. Без знания пароля нам удалось получить доступ к серверу. По сути, у нас полный контроль над системой.
В целом, довольно сложно защититься от подобного рода атак, поскольку мы используем стандартные механизмы аутентификации. Единственный надежный вариант – реализовать комплекс мероприятий для заблаговременного предотвращения неприятных последствий.
Также следование принципу минимальных привилегий сократит или даже исключит вероятный ущерб в случае, если злоумышленник получит хоть какой-то доступ к сети. Кроме того, нужно предпринимать и другие стандартные меры, как, например, фаервол и системы IDS/IPS для мониторинга и предотвращения любой вредоносной активности.
В Windows можно отключить кэширование учетных записей, чтобы злоумышленник не смог добраться до хэшей в памяти. Не лишним будет и изолировать важные системы в сети.
В этом руководстве мы научились использовать хэши для аутентификации в системе на базе Windows и реализовали атаку pass-the-hash. После компрометирования первоначальной цели, не очень высокого уровня, был получен список хэшей, среди которых оказалась учетная запись с административными правами. Далее при помощи Metasploit был получен системный доступ к серверу.
Источник
Hack The Box — прохождение Forest. AS-REP Roasting, атаки DCSync и Pass-The-Hash
Продолжаю публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье разберемся с AS-REP Roasting в схеме аутентификации Kerberos, используем BloodHound для разведки в домене, выполняем атаку DCSync PrivExchange и атаку Pass-The-Hash.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ 🙂
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.161, который я добавляю в /etc/hosts.
10.10.10.161 forest.htb
Первым делом сканируем открытые порты. Так как сканировать все порты nmap’ом долго, то я сначала сделаю это с помощью masscan. Мы сканируем все TCP и UDP порты с интерфейса tun0 со скоростью 1000 пакетов в секунду.
На хосте оказалось очень много открытых портов, и я решил удостовериться правильности результатов, предоставленных masscan. Для этого просто просканировал состояние портов в nmap.
Но nmap все подтвердил. Далее нужно собрать больше информации об известных nmap’у портах.
Далее необходимо получить как можно больше информации из системы. Для этого я использовал enum4linux. Но он нам выдал мало информации. Группы, требование к паролям, отсутствие SMBv1 и расшаренных ресурсов и т.п. Однако мы получили список пользователей.
Так как на хосте работает керберос, необходим проверить, есть ли такая учетная запись пользователя, у которой в UAC установлен флаг DONT_REQ_PREAUTH. Про флаги UAC и что они означают, можно подробно узнать здесь. Флаг DONT_REQ_PREAUTH означает, что для данной учетной записи не требуется предварительная проверка подлинности Kerberos.
Для начала следует узнать, какие из учетных записей пользователей активны. Это поможет сделать скрипт samrdump входящий в состав пакета impacket.
Скрипт выводит сначала всех пользователей, а затем подробную информацию о каждом из них. Так можно наблюдать, что учетная запись Administrator активна, а Guest — нет. Теперь мы можем составить список активных пользователей.
Когда у нас есть список активных пользователей, мы можем проверить наличие нужного нам флага. Это мы можем сделать с помощью скрипта GetNPUsers, также входящего в состав пакета impacket. Мы указываем домен htb.local, контроллер домена 10.10.10.161, способ аутентификации керберос(-k), опция без пароля и список пользователей.
Нам говорят, что данный флаг у всех пользователей, кроме svc-alfresco не установлен. В моей версии impacket (21-dev) хеш запрашивается автоматически.
Entry Point — AS-REP Roasting
Пару слов о том, что за хеш нам вернули. Внизу представлена схема аутентификации Керберос.
Как можно видеть, на первом этапе: клиент посылает сообщение c идентификатором пользователя на сервер аутентификации AS с запросом услуги от имени пользователя. AS генерирует секретный ключ путем хэширования пароля пользователя, найденного в базе данных.
Таким образом мы можем пробрутить хеш и узнать пароль. Данный вид атаки называется AS-REP Roasting. Сохраним хеш в файл и найдем прообраз.
И мы находим пароль пользователя.
Если вернуться к открытым портам, можно обнаружить работающую службу WinRM (или Windows Remote Management), предназначенную для удаленного управления. У нас есть логин и пароль пользователя, поэтому мы можем спокойно подключиться к ней. Для этого я использую evil-winrm.
Таким образом мы берем юзера.
Разведка с BloodHound
Теперь нам нужно повысить себе привилегии. Для того, чтобы наметить пути LPE в домене, можно использовать программу BloodHound.
Evil-winrm позволяет загружать файлы как на хост, так и с него. Я загрузил на хост SharpHound — модуль для сбора информации.
Также evil-winrm позволяет выполнять powershell скрипты. Укажем пользователя, пароль, а также то, что мы хотим узнать все, что можно.
После выполнения скрипта, в текущей директории появится zip-архив. Его мы загружаем с хоста.
Далее запустим графовую СУБД neo4j, с которой работает BloodHound.
Теперь запустим BloodHound. Нас встретит пустой экран.
Теперь просто перетаскиваем в него скачанный архив. И переходим на вкладку Queries.
И говорим, что хотим найти кратчайшие пути к Админам домена. BloodHound построит граф — путь нашего последовательного продвижения. Нажимая на каждый узел сети, будем получать о нем информацию.
Таким образом, нам говорят, что мы должны стать членом группы Exchange Windows Permissions, так как относимся с привилегированной группе Service Accounts, а только потом мы можем повышать привилегии.
Сейчас пользователь не входит в данную группу. Давайте добавим его, а потом проверим группы пользователя.
Пользователь успешно добавлен в группу. Теперь разберемся, что это нам дает. Группа Exchange Windows Permissions обладает правом WriteDACL (право на выдачу прав) на объект Domain в Active Directory, что позволяет любому участнику группы изменять привилегии домена, в том числе на выполнение DCSync операций.
DCSync
Немного об атаке DCSync. Репликация Active Directory — это процесс, посредством которого изменения, внесенные на одном из контроллеров домена, синхронизируются с остальными контроллерами в домене. При получении необходимых разрешений мы можем инициировать запрос репликации, что позволит нам получить данные, хранящиеся в Active Directory, в том числе хэши паролей.
То есть мы можем синхронизировать хеши паролей пользователей Active Directory и под их именем авторизоваться в любом сервисе, использующем протоколы NTLM (разработанный Microsoft протокол сетевой аутентификации) или Kerberos. Атака предусматривает использование двух инструментов privexchange.py и ntlmrelayx.py из пакета impacket.
Первым делом запустим ntlmrelayx в режиме ретрансляции LDAP на контроллер домена с учетной записью svc-alfresco.
Все сервисы запущены и ожидают подключения. Теперь используем privex.
И тут у меня полетела куча ошибок, покопавшись пару минут, было принято решение их не устранять. Можно перейти по ссылке выше в браузере и с учетными данными svc-alfresco пройти HTTP аутентификацию. В окне с ntlmrelayx увидим информацию о подключении.
Теперь выполним Атаку DCSync с помощью secretsdump.
Отлично. Мы смогли выполнить репликацию всех учетных записей.
Атака Pass-the-hash
Данная атака позволяет атакующему авторизоваться на удалённом сервере, аутентификация на котором осуществляется с использованием протокола NTLM или LM.
В системах, использующих протокол аутентификации NTLM, пароли никогда не передаются по каналу связи в открытом виде. Вместо этого они передаются соответствующей системе (такой, как контроллер домена) в виде хешей на этапе ответа в схеме аутентификации вопрос-ответ.
Приложения Windows запрашивают у пользователя пароль в открытом виде, а затем вызывают API (например, LsaLogonUser), которые преобразуют пароль в LM хеш и NTLM хеш и передают их в процессе аутентификации. Анализ протоколов показал, что для успешной аутентификации не обязательно знать пароль в открытом виде, вместо этого может использоваться только его хеш.
В основе атаки лежит слабость в реализации протокола сетевой аутентификации. Она заключается в том, что хеши паролей передаются без использования соли, а потому остаются неизменными от сессии к сессии (до тех пор, пока не изменяется пароль пользователя). Другими словами, для атакующего хеши паролей эквивалентны самим паролям.
Выполним атаку с помощью psexec.
Мы в системы с полными правами.
Вы можете присоединиться к нам в Telegram. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
Источник