Для начала
Любой наступательный оператор безопасности скажет вам, что угадывание учетных данных сотрудников является ключом к компрометации сети вашего клиента и последующему выявлению уязвимостей во время испытаний на проникновение. Дело в том, что это легче сказать, чем сделать, поскольку компании все чаще переходят на облачные сервисы, такие как Microsoft Office 365 (O365), которые обеспечивают многофакторную аутентификацию (MFA) и другие вспомогательные элементы управления безопасностью.
Раньше было легко скомпрометировать учетную запись пользователя, нацелившись на Microsoft Exchange. Все, что нужно было сделать оператору, — это обнаружить клиентский сервер Exchange, перечислить имена пользователей и распылить пароли до тех пор, пока его сердце не будет удовлетворено. Однако это уже не так просто, как раньше.
Всё новое - это хорошо забытое старое
Аутентификация New Technology LAN Manager (NTLM) через конечные точки HTTP лежит в основе атак с распылением паролей. Как тестировщики и специалисты по кибербезопасности, мы должны использовать новые и старые, но существующие способы компрометации сетей через этот канал. Мы собираемся разобрать, как именно это сделать. Во-первых, давайте удостоверимся, что мы на одной странице. NTLM через HTTP позволяет сотруднику проходить аутентификацию во внутренней инфраструктуре Active Directory. Эти конечные точки NTLM невидимы и часто забываются при анализе внешней поверхности атаки организации.
Многие продукты Microsoft непреднамеренно предоставляют конечные точки проверки подлинности NTLM в виде веб-служб. Мы найдем их, чтобы нам не приходилось распылять пароли на службы Microsoft (O365) и обходить элементы управления безопасностью.
В лучшем случае конечные точки аутентификации NTLM через HTTP позволяют пользователям и службам проходить аутентификацию во внутренней инфраструктуре Active Directory для доступа к ресурсам компании. Узлы, которые часто предоставляют конечные точки проверки подлинности NTLM через HTTP, включают службы электронной почты, веб-порталы с ограниченным доступом и многие другие приложения Microsoft.
Обычно конечные точки проверки подлинности NTLM через HTTP можно найти в следующих платформах веб-приложений:
У нас есть довольно много инструментов, которые позволяют нам обнаруживать конечные точки NTLM через HTTP. Я собираюсь сосредоточить внимание на одном, который был надежным на протяжении многих лет, ntlmrecon.
GitHub — pwnfoo/NTLMRecon: перечисление информации из веб-конечных точек с включенной проверкой подлинности NTLM.
Быстрый и гибкий инструмент разведки NTLM без внешних зависимостей. Полезен для получения информации о конечных точках NTLM при работе с большим набором потенциальных IP-адресов и доменов. NTLMRecon создан с учетом гибкости.
https://github.com/pwnfoo/NTLMRecon
Этот инструмент предоставляет нам, как операторам, простой способ сканирования нескольких веб-приложений, собранных во время разведки. Автор NTLMRecon собрал список общих конечных точек. Вот фрагмент этого списка:
Как операторe, все, что нам нужно сделать, это указать этому инструменту список URL-адресов и запустить его, используя команду, аналогичную приведенной ниже:
Полученный CSV-файл содержит не только обнаруженные конечные точки, но и вспомогательную информацию о внутренней инфраструктуре Active Directory, которая понадобится нам для атак с распылением паролей. Пример вывода, взятого из самого инструментария, приведен ниже:
После того, как вы определили восприимчивую конечную точку проверки подлинности NTLM, вы можете начать нацеливаться на нее и пытаться угадать действительные учетные данные пользователя. Обратите внимание, что современные элементы управления безопасностью проверки подлинности, такие как перечисленные ниже, не защищают проверку подлинности NTLM по протоколу HTTP полностью.
Прежде чем начать атаку с распылением паролей, вам необходимо собрать список имен пользователей, которые вы будете использовать. Прочтите « Надежное перечисление имен пользователей: пошаговое руководство», чтобы узнать больше.
Если вы найдете сервер Exchange, вы можете использовать конечные точки OWA, ActiveSync и Autodiscover для проверки собранных вами имен пользователей.
В нашем распоряжении есть несколько инструментов, которые можно использовать для атак с распылением паролей. Мой любимый spraycharles
GitHub — Tw1sm/spraycharles
Инструмент с низким и медленным распылением паролей, предназначенный для распыления с интервалом в течение длительного периода времени
https://github.com/Tw1sm/spraycharles
Spraycharles безумно мощный и очень хорошо написан. Это позволяет вам делать следующее:
Перейдя в папку target в проекте spraycharles, находим файл Ews.py. Файл содержит код, который мы будем использовать для распыления пароля на обнаруженную конечную точку аутентификации NTLM. Давайте посмотрим на первые 25 строк кода:
Седьмая строка кода содержит конечную точку, на которую мы нацелимся. По мере необходимости, не стесняйтесь изменять /ews каталог на все, что вы хотите.
Я работаю над флагом командной строки, который позволяет указать этот путь во время выполнения, но еще не полностью его реализовал.
Следуя спецификации URL-адреса, инструмент создает запрос, чтобы имитировать попытки входа в систему, сделанные приложением Apple Mail. Такие переменные, как хост, порт, имя пользователя и пароль, указываются в командной строке во время выполнения, так что не беспокойтесь об этом позже. Если мы перейдем дальше в файл, мы обнаружим, где происходит настоящее волшебство. В строке 51 мы видим следующий код:
Используя библиотеку, импортированную в начале скрипта (requests_ntlm), мы формируем POST-запрос аутентификации NTLM и отправляем его на указанный сервер. Шаблонный код позже в сценарии затем возвращает и анализирует ответ. Обратите внимание, что все неудачные попытки входа в систему приведут к коду ошибки 401 Unauthorized, а успешная аутентификация чаще всего будет сопровождаться кодом ошибки 500.
Прелесть Spraycharles в том, что нам не нужно беспокоиться о кодах ответов, которые мы получаем. Вместо этого инструмент после выполнения спрея по списку пользователей ищет статистические аномалии в выходных данных. Этот инструмент затем уведомляет вас о любых аномалиях, которые выделяются. Давайте посмотрим на этот инструмент в действии, чтобы лучше продемонстрировать его возможности.
После установки инструмента мне нравится создавать каталог с именем «клиент», где я могу хранить целевые имена пользователей и потенциальные пароли. Для демонстрации создадим клиент с именем ACME:
Скопируйте имена пользователей, которые вы собрали ранее, и поместите их в файл с именем «usernames.txt» в каталоге ACME. Кроме того, создайте файл с именем «passwords.txt» в том же каталоге, содержащий пароли, которые вы хотите использовать для своей атаки.
Получить список общих паролей может быть непросто. Обратитесь за помощью к файлам make_list.py и list_elements.json в проекте spraycharles.
После создания необходимых файлов и установки проекта необходимо собрать следующую информацию:
Я рекомендую вам установить интервал не менее 45 минут между распылением пароля, чтобы предотвратить блокировку учетной записи.
Ознакомьтесь с документацией по инструментам, чтобы узнать, что означает каждый используемый флаг командной строки. Как только вы убедитесь, что все выглядит правильно, запустите spraycharles, подтвердите вторичную подсказку, и вы отправитесь в гонки. То, что вы увидите дальше, должно выглядеть примерно так:
Если и когда произойдет успешный вход в систему, вы увидите что-то похожее на следующее:
Как указывалось ранее, если вы угадываете учетные данные с помощью конечной точки проверки подлинности NTLM, вы часто полностью игнорируете используемые решения MFA. Мой первый шаг после компрометации учетной записи — попытаться вывести глобальный список адресов (GAL) целевой организации. Мой инструмент для выполнения этой задачи — thumbscrew-ews:
https://github.com/sensepost/thumbscr-ews
Оболочка для удивительной библиотеки exchangelib для выполнения некоторых распространенных операций EWS. thumbscr-ews — небольшая утилита Python, используемая с веб-службами Exchange.
https://github.com/sensepost/thumbscr-ews
Этот инструмент является чрезвычайно мощным и позволяет нам ориентироваться как на локальные серверы Microsoft Exchange, так и на O365. Например, создайте команду, подобную приведенной ниже, для создания дампа глобального списка адресов с сервера Exchange организации:
Эта команда извлекает список всех пользователей. Затем вы можете использовать этих пользователей для продолжения распыления паролей. Это важно, так как чем больше учетных записей вы скомпрометируете, тем больше вероятность того, что вы найдете учетную запись с большими разрешениями или информацией, которая может привести к доступу к внутренней сети.
Допустим, однако, вы столкнулись с ошибкой:
Обработка ошибок в этом инструменте может быть немного громоздкой и запутанной. Но здесь мы получаем интересную информацию, которую вы можете увидеть в нижней части скриншота выше:
Это означает, что у учетной записи нет почтового ящика, хранящегося в Exchange, и, скорее всего, она использует Office 365 только для почтовых служб. К счастью, thumbscrew-ews вас прикрыл. Просто измените свою команду, чтобы она выглядела примерно так:
С помощью этой команды мы можем настроить таргетинг на O365 напрямую, а не на Exchange. Чаще всего это работает, даже если для O365 установлено решение MFA. Обратите внимание, что одно из любимых решений MFA на рынке уязвимо для этого обхода:
ОРИГИНАЛЬНАЯ СТАТЬЯ
Любой наступательный оператор безопасности скажет вам, что угадывание учетных данных сотрудников является ключом к компрометации сети вашего клиента и последующему выявлению уязвимостей во время испытаний на проникновение. Дело в том, что это легче сказать, чем сделать, поскольку компании все чаще переходят на облачные сервисы, такие как Microsoft Office 365 (O365), которые обеспечивают многофакторную аутентификацию (MFA) и другие вспомогательные элементы управления безопасностью.
Раньше было легко скомпрометировать учетную запись пользователя, нацелившись на Microsoft Exchange. Все, что нужно было сделать оператору, — это обнаружить клиентский сервер Exchange, перечислить имена пользователей и распылить пароли до тех пор, пока его сердце не будет удовлетворено. Однако это уже не так просто, как раньше.
Всё новое - это хорошо забытое старое
Аутентификация New Technology LAN Manager (NTLM) через конечные точки HTTP лежит в основе атак с распылением паролей. Как тестировщики и специалисты по кибербезопасности, мы должны использовать новые и старые, но существующие способы компрометации сетей через этот канал. Мы собираемся разобрать, как именно это сделать. Во-первых, давайте удостоверимся, что мы на одной странице. NTLM через HTTP позволяет сотруднику проходить аутентификацию во внутренней инфраструктуре Active Directory. Эти конечные точки NTLM невидимы и часто забываются при анализе внешней поверхности атаки организации.
Многие продукты Microsoft непреднамеренно предоставляют конечные точки проверки подлинности NTLM в виде веб-служб. Мы найдем их, чтобы нам не приходилось распылять пароли на службы Microsoft (O365) и обходить элементы управления безопасностью.
Почему NTLM через HTTP представляет собой риск
В лучшем случае конечные точки аутентификации NTLM через HTTP позволяют пользователям и службам проходить аутентификацию во внутренней инфраструктуре Active Directory для доступа к ресурсам компании. Узлы, которые часто предоставляют конечные точки проверки подлинности NTLM через HTTP, включают службы электронной почты, веб-порталы с ограниченным доступом и многие другие приложения Microsoft.
Обычно конечные точки проверки подлинности NTLM через HTTP можно найти в следующих платформах веб-приложений:
- Microsoft RDPWeb
- Microsoft Exchange
- Microsoft ADFS
- Microsoft Skype for Business
Как определить NTLM через HTTP
У нас есть довольно много инструментов, которые позволяют нам обнаруживать конечные точки NTLM через HTTP. Я собираюсь сосредоточить внимание на одном, который был надежным на протяжении многих лет, ntlmrecon.
GitHub — pwnfoo/NTLMRecon: перечисление информации из веб-конечных точек с включенной проверкой подлинности NTLM.
Быстрый и гибкий инструмент разведки NTLM без внешних зависимостей. Полезен для получения информации о конечных точках NTLM при работе с большим набором потенциальных IP-адресов и доменов. NTLMRecon создан с учетом гибкости.
Этот инструмент предоставляет нам, как операторам, простой способ сканирования нескольких веб-приложений, собранных во время разведки. Автор NTLMRecon собрал список общих конечных точек. Вот фрагмент этого списка:
Код:
/dialin
/ecp/
/Etc/
/EWS/
/Exchange/
/Exchweb/
/GroupExpansion/
/HybridConfig
/iwa/authenticated.aspx
/iwa/iwa_test.aspx
Как операторe, все, что нам нужно сделать, это указать этому инструменту список URL-адресов и запустить его, используя команду, аналогичную приведенной ниже:
Код:
ntlmrecon -I urls.txt --outfile ntlmrecon.csv
Полученный CSV-файл содержит не только обнаруженные конечные точки, но и вспомогательную информацию о внутренней инфраструктуре Active Directory, которая понадобится нам для атак с распылением паролей. Пример вывода, взятого из самого инструментария, приведен ниже:
Код:
https://contoso.com/EWS/,XCORP,EXCHANGE01,xcorp.contoso.net,EXCHANGE01.xcorp.contoso.net,contoso.net
Запуск вашей атаки
После того, как вы определили восприимчивую конечную точку проверки подлинности NTLM, вы можете начать нацеливаться на нее и пытаться угадать действительные учетные данные пользователя. Обратите внимание, что современные элементы управления безопасностью проверки подлинности, такие как перечисленные ниже, не защищают проверку подлинности NTLM по протоколу HTTP полностью.
- Многофакторная аутентификация
- Политики условного доступа
- Интеллектуальное управление блокировкой
Прежде чем начать атаку с распылением паролей, вам необходимо собрать список имен пользователей, которые вы будете использовать. Прочтите « Надежное перечисление имен пользователей: пошаговое руководство», чтобы узнать больше.
Позовем в гости дядюшку Spraycharles'а
В нашем распоряжении есть несколько инструментов, которые можно использовать для атак с распылением паролей. Мой любимый spraycharles
GitHub — Tw1sm/spraycharles
Инструмент с низким и медленным распылением паролей, предназначенный для распыления с интервалом в течение длительного периода времени
Spraycharles безумно мощный и очень хорошо написан. Это позволяет вам делать следующее:
- Настройте EWS и другие конечные точки проверки подлинности NTLM через HTTP с помощью простых изменений в файле Ews.py, включенном в проект.
- Гарантирует, что вы устанавливаете периоды задержки между спреями, которые блокируют учетные записи
- Ищет выбросы в ответах на попытки аутентификации, чтобы определить, произошел ли действительный вход в систему.
- Легко проксируйте свой трафик, чтобы обойти контроль безопасности на основе IP и ограничение скорости
Заглянем в гости к модулю EWS
Перейдя в папку target в проекте spraycharles, находим файл Ews.py. Файл содержит код, который мы будем использовать для распыления пароля на обнаруженную конечную точку аутентификации NTLM. Давайте посмотрим на первые 25 строк кода:
Код:
import requests
from requests_ntlm import HttpNtlmAuth
import csv
class Ews:
def __init__(self, host, port, timeout, fireprox):
self.timeout = timeout
self.url = f'https://{host}:{port}/ews'
if fireprox:
self.url = f'https://{fireprox}/fireprox/ews'
self.headers = {
'User-Agent': 'AppleExchangeWebServices/814.80.3 accountsd/113',
'Content-Type': 'text/xml; charset=utf-8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
}
self.data = {
'username': '',
'password': ''
}
Седьмая строка кода содержит конечную точку, на которую мы нацелимся. По мере необходимости, не стесняйтесь изменять /ews каталог на все, что вы хотите.
Следуя спецификации URL-адреса, инструмент создает запрос, чтобы имитировать попытки входа в систему, сделанные приложением Apple Mail. Такие переменные, как хост, порт, имя пользователя и пароль, указываются в командной строке во время выполнения, так что не беспокойтесь об этом позже. Если мы перейдем дальше в файл, мы обнаружим, где происходит настоящее волшебство. В строке 51 мы видим следующий код:
Код:
# post the request
response = requests.post(self.url, headers=self.headers, auth=ntlm_auth, timeout=self.timeout)#, verify=False, proxies=self.proxyDict)
return response
Используя библиотеку, импортированную в начале скрипта (requests_ntlm), мы формируем POST-запрос аутентификации NTLM и отправляем его на указанный сервер. Шаблонный код позже в сценарии затем возвращает и анализирует ответ. Обратите внимание, что все неудачные попытки входа в систему приведут к коду ошибки 401 Unauthorized, а успешная аутентификация чаще всего будет сопровождаться кодом ошибки 500.
Прелесть Spraycharles в том, что нам не нужно беспокоиться о кодах ответов, которые мы получаем. Вместо этого инструмент после выполнения спрея по списку пользователей ищет статистические аномалии в выходных данных. Этот инструмент затем уведомляет вас о любых аномалиях, которые выделяются. Давайте посмотрим на этот инструмент в действии, чтобы лучше продемонстрировать его возможности.
Spraycharles в действии
Давайте все настроим, прежде чем мы начнем нашу осаду NTLM. Сначала клонируйте проект и установите зависимости с помощью приведенной ниже команды. Обратите внимание, что для этого метода установки требуется pipenv.
Код:
git clone https://github.com/Tw1sm/spraycharles.git && cd spraycharles
pipenv --python 3 shell
pip3 install -r requirements.txt
После установки инструмента мне нравится создавать каталог с именем «клиент», где я могу хранить целевые имена пользователей и потенциальные пароли. Для демонстрации создадим клиент с именем ACME:
Код:
mkdir -p client/ACME
Скопируйте имена пользователей, которые вы собрали ранее, и поместите их в файл с именем «usernames.txt» в каталоге ACME. Кроме того, создайте файл с именем «passwords.txt» в том же каталоге, содержащий пароли, которые вы хотите использовать для своей атаки.
После создания необходимых файлов и установки проекта необходимо собрать следующую информацию:
- Ваше целевое имя хоста или IP-адрес
- Доменное имя Active Directory, полученное с помощью ntlmrecon ранее в этой статье.
Код:
python3 spraycharles.py -H mail.acme.com -d ACME -m ews \
-u ~/client/acme/usernames.txt -p ~/client/acme/passwords.txt \
-t 500 -a 1 -i 45 --analyze
Ознакомьтесь с документацией по инструментам, чтобы узнать, что означает каждый используемый флаг командной строки. Как только вы убедитесь, что все выглядит правильно, запустите spraycharles, подтвердите вторичную подсказку, и вы отправитесь в гонки. То, что вы увидите дальше, должно выглядеть примерно так:
Если и когда произойдет успешный вход в систему, вы увидите что-то похожее на следующее:
Использование вашего доступа: пример
Как указывалось ранее, если вы угадываете учетные данные с помощью конечной точки проверки подлинности NTLM, вы часто полностью игнорируете используемые решения MFA. Мой первый шаг после компрометации учетной записи — попытаться вывести глобальный список адресов (GAL) целевой организации. Мой инструмент для выполнения этой задачи — thumbscrew-ews:
https://github.com/sensepost/thumbscr-ews
Оболочка для удивительной библиотеки exchangelib для выполнения некоторых распространенных операций EWS. thumbscr-ews — небольшая утилита Python, используемая с веб-службами Exchange.
Как сбросить GAL
Этот инструмент является чрезвычайно мощным и позволяет нам ориентироваться как на локальные серверы Microsoft Exchange, так и на O365. Например, создайте команду, подобную приведенной ниже, для создания дампа глобального списка адресов с сервера Exchange организации:
Код:
thumbscr-ews -u sprocket@acme.com -p "Password1" -o --exch-host mail.acme.com gal -d
Допустим, однако, вы столкнулись с ошибкой:
Обработка ошибок в этом инструменте может быть немного громоздкой и запутанной. Но здесь мы получаем интересную информацию, которую вы можете увидеть в нижней части скриншота выше:
Код:
exchangelib.errors.ErrorNonExistentMailbox: No mailbox with such guide.
Это означает, что у учетной записи нет почтового ящика, хранящегося в Exchange, и, скорее всего, она использует Office 365 только для почтовых служб. К счастью, thumbscrew-ews вас прикрыл. Просто измените свою команду, чтобы она выглядела примерно так:
Код:
thumbscr-ews -u sprocket@acme.com -p "Password1" -o --exch-host outlook.office365.com gal -d
С помощью этой команды мы можем настроить таргетинг на O365 напрямую, а не на Exchange. Чаще всего это работает, даже если для O365 установлено решение MFA. Обратите внимание, что одно из любимых решений MFA на рынке уязвимо для этого обхода:
ОРИГИНАЛЬНАЯ СТАТЬЯ