• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Перебор пользователей-сотрудников компаний через OneDrive

bratva

TPU unit
Пользователь
Регистрация
26.01.2022
Сообщения
2 127
Реакции
4 582
Здарова, товарищи гражданские хэккеры!

Сегодня мы углубимся в тему перебора пользователей-сотрудников компаний через сервис OneDrive. Несколько лет назад я написал первый пост в блоге на эту тему, когда впервые узнал об этой технике. С тех пор я узнал намного больше, а код моего onedrive_enum.py был обновлен и стал более мощным, чем когда-либо!

OneDrive может быть лучшим способом для перебора пользователей-сотрудников компаний, потому что:
  • Для перебора не требуется аутентификация
  • Метод абсолютно тихий, т.к. компании-жертвы не видят ваши запросы
  • Нет ограничений по скорости
Короче говоря, это идеальный метод перебора пользователей, ЕСЛИ они используют OneDrive.

Описание метода

OneDrive является частью SharePoint. Он предназначен для хранения личных файлов и напрямую связан с учетной записью Azure/M365. Всякий раз, когда пользователь входит в различные службы Microsoft, такие как Excel или Word, OneDrive активируется и создается личный URL-адрес, содержащий адрес электронной почты пользователя. Этот личный URL-адрес на самом деле является UPN учетной записи пользователя или основным именем пользователя (User Principal Name).

onedrive1.png

Рис. 1. Пример URL-адреса OneDrive, содержащего учетную запись

Поскольку личный URL-адрес напрямую связан с учетной записью пользователя, с помощью него возможно перебрать пользователей через перебор директорий в ссылке в определенном формате (метод сходен с использованием DirBuster/dirb).

onedrive2.png

Рис. 2. Службы M365 с активацией через OneDrive

В действительности, из-за большого количества триггеров URL-адреса OneDrive создаются хотя бы раз практически для каждого пользователя, кто хотя бы раз использовал учетную запись Azure/M365.

После активации OneDrive создается уникальный URL-адрес, связанный с этим пользователем. URL-адрес имеет следующий формат:
Код:
https://<tenant>-my.sharepoint.com/personal/<UserPrincipalName>/_layouts/15/onedrive.aspx

Это показано на скриншоте ниже, где вы можете увидеть, что имя tenant — «acmecomputercompany», а основное имя пользователя (UserPrincipalName) — это преобразованный электронный адрес «lightmand@acmecomputercompany.com», когда UPN становится URL-адресом OneDrive, где точки и символы емейла удаляются и заменяются символами подчеркивания («_»).

onedrive3.png

Рис. 3. Пример URL-адреса OneDrive с Tenant и учетной записью UPN

Таким образом, легко выполнить веб-запрос и проверить, существует ли имя пользователя (или, скорее, существует ли пользователь, который хотя бы один раз вошел в свою учетную запись).

Этот вид перебора пользователей невозможно обнаружить, так как это простой HTTP-запрос HEAD к серверу Microsoft. Аутентификация при этом не осуществляется.

Примечание. Перебор пользователей OneDrive может определять только учетные записи с активными лицензиями, поэтому результаты для некоторых типов организаций могут быть неудовлетворительными. Например в случае, если они ограничивают использование лицензий Microsoft 365 только на определенные отделы или вовсе не предоставляют их, все это существленно повлияет на результаты атаки перебора. В качестве примера - мы не сможем получить имена сотрудников торгового зала универмага, кассиров или нетехнических специалистов, кто не использует компьютеры организации. Однако это также означает, что при использовании методики OneDrive Enum вы идентифицируете реальных пользователей, которые имеют реальный доступ к ресурсам Azure.

Идентификация имен клиентов Azure

Чтобы начать перебор пользователей OneDrive, нам необходимо знать имя клиента Azure (tenant). Имя клиента Azure — это короткое имя, используемое пользователем Azure.

Во многих случаях имя tenant для организации совпадает с доменным именем. Например, у «microsoft.com» есть связанный tenant «microsoft». Но иногда это не так. Это может быть также альтернативное название или аббревиатура полного юридического названия организации.

Долгое время я искал рабочий метод определения tenant имен пользователей Azure. Не зная имени или не имея возможностей для его поиска, вы можете легко зайти в тупик с перебором сотрудников через OneDrive.

В конце концов, я узнал, что Док Нестори Сюйнимаа (@DrAzureAD) обнаружил рабочий метод, используемый через скрипт AADInternals (PowerShell). Спасибо @thetechr0mancer за то, что привлек мое внимание к этому методу, с выпуском своего инструмента TREVORspray.

onedrive4.png

Рис. 4 – Поиск клиентов (tenant) Azure через TREVORspray

И это был недостающий кусок головоломки! Теперь с помощью новой техники мы можем успешно перебирать пользователей OneDrive!

Обновленный инструмент OneDrive_Enum v2.0

Я выпустил обновленную версию скрипта ondrive_enum.py, которую можно найти по адресу:

Новые возможности:
  • Локальная БД (Local DB) — ведение логов действительных учетных записей, предыдущие попытки перебора
  • Автоматический поиск (Auto-lookup) — автоматический поиск tenant благодаря методу дока Нестори (@DrAzureAD) и инструменту TREVORspray (@thetechr0mancer).
  • Чтение каталога (Read directory) — чтение всех файлов в каталоге; полезно для нескольких похожих файлов (например для списков пользователей в формате «john.smith» или «jsmith»).
  • Возможность Добавить (Append) — теперь можно легко добавлять цифры или слова к именам пользователей («jsmith1», «jsmith2» и т. д.).
  • Skip-Tried — Dedupe: проверяет логи прошлых попыток перебора и гарантирует, что вы перебираете только НОВЫЕ имена пользователей для определенной комбинации домена/tenant.
  • Kill-After — очищает список пользователей для которых не было действительных имен клиентов, идентифицированных с «x» количеством попыток.
onedrive5.png

Рис. 5 – OneDrive_Enum_v2.py

Перебор пользователей через OneDrive

onedrive6.png

Рис. 6. Перебор пользователей OneDrive

Помните, что для создания URL-адреса OneDrive нам нужно знать имя клиента tenant И доменное имя. Если инструменту предоставлен только домен, он попытается автоматически найти связанного tenant, используя метод поиска из AADInternals/TREVORspray.

Вот пример поиска по Microsoft.com:
onedrive7.png

Рис. 7 – Пример c microsoft

Инструмент ищет любые записи синхронизации почты (mail sync records), которые могут указывать на основного клиента tenant. Обратите внимание, что это не 100% метод. Если он не может определить корректного tenant, он покажет вам список возможных, и вам придется самостоятельно выбрать его.

Ниже приведен пример вывода инструмента onedrive_enum.py:
onedrive8.png

Рис. 8. Перебор пользователей (tenant) для microsoft через OneDrive

Здесь мы видим, что код состояния HTTP «403» (или «401») — это то, что отличает ДЕЙСТВИТЕЛЬНУЮ учетную запись от недействительной.

В обновленном скрипте OneDrive_Enum регистрируются все сеансы перебора пользователей в таблице onedrive_log в локальной базе данных SQLite. Это позволяет OneDrive_Enum определить, какие списки пользователей (и имена пользователей) были опробованы. Это также полезно для статистики, так как наглядно показывает количество «найденных» имен пользователей для используемых словарей, позволяя тем самым определить самые эффективные словари для перебора с течением времени.

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

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

Секреты и уловки

Большинство организаций имеет как правило одного (1) tenant, и у инструмента не возникнет проблем с его определением. Однако в случае настроек с несколькими tenant вам нужно будет сделать выбор (выбрать одну или все комбинации tenant/домена).

При переборе через OneDrive важно знать точные сочетание имени клиента tenant и домена. Если «AcmeComputerCompany.com» имеет 3 tenant: «acmecomputercompany», «acmeEurope» и «acmeAPC», то пользователи могут существовать в любом из этих tenant.

Это означает, что возможные комбинации URL-адресов OneDrive будут включать в себя:
acmecomputercompany — user@acmecomputercompany.com
acmeEurope — user@acmecomputercompany.com
acmeAPC —
user@acmecomputercompany.com

Все становится еще сложнее, если организация использует различные домены для различных стран своей электронной почты. У вас не возникнет сложности их определить, но об этом не следует забывать. Несмотря на то, что такое разделение пользователей может увеличить ваши временные затраты на подготовку к работе по перебору пользователей, это также позволит вас сделать таргет на пользователей в определенном регионе. Поэтому я рекомендую вам заранее подготовить словари для всех комбинаций доменов и tenant. И вы будете удивлены итоговыми результатами!

onedrive9.png

Рис. 9 – Выбор домена для определенного пользователя

Наконец, я хочу поделиться еще одним важным моментом, который нужно знать до работы с перебором пользователей через OneDrive. При попытке подключиться к узлу OneDrive или SharePoint (например, «acmecomputercompany-my.sharepoint.com») вы можете получить сообщение об ошибке «403» или «401».

Когда имя пользователя возвращает «401», это означает, что для SharePoint требуется Modern Auth (и это относится конкретно к SharePoint, а не к организации в целом).

onedrive10.png

Рис. 10. Пример tenant без Modern Auth

onedrive11.png

Рис. 11. Пример tenant с требованием Modern Auth


Опцию включения Modern Auth в SharePoint можно найти здесь:
onedrive12.png

Рисунок 12 – Modern Auth для управления аутентификацией

Если для этого параметра установлено значение «Блокировать доступ» (Block Access), перебор пользователей OneDrive (и любой запрос к этому узлу OneDrive/SharePoint) приведет к ошибке «401». По умолчанию параметр установлен на «Разрешить доступ» (Allow Access), и он вернет ошибку «403».

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

Такие выборки как «Самые распространенные имена пользователей» (’Statistically-Likely-Usernames - SLU’) будут являться хорошей отправной точкой для начала вашей работы. Однако это не должно быть вашим ЕДИНСТВЕННЫМ источником для рабочего словаря имен пользователей.

Проблема в том, что списки имен пользователей, включенные в такие словари, как правило, невелики. Например, общее количество строк в SLU около 1,2 миллиона. Это может показаться большим объемом, но в реальности его будет недостаточно. Поэтому вместо того, чтобы использовать готовые словари, вы должны составить свой собственный.

Если ваши цели базируются в Америке, я рекомендую использовать данные переписи населения США. Здесь вы можете найти данные переписи 1990 года, включая имена и фамилии:

Конкретные списки имен с переписи 1990 года можно найти здесь: https://www.census.gov/topics/population/genealogy/data/1990_census/1990_census_namefiles.html

Я включил их как «firstnames1990.txt» и «lastnames1990.txt» в свой GitHub: https://github.com/nyxgeek/onedrive_user_enum

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

Я включил шелл-скрипт, который вы можете использовать, под названием «generate_usernames_f17.sh». Он создаст папку «USERNAMES» в папке проекта, а затем продолжит создание подпапок для различных форматов имен пользователей.
Код:
./generate_usernames_f17.sh firstnames.c2010.txt lastnames.c2010.txt

Для облегчения обработки все файлы разбиты на куски по 175 тысяч строк. Размер обоснован удобством работы на машинах с небольшим объемом памяти. OnedDrive_Enum может взять каталог в качестве источника и затем переберет все файлы внутри.

Файл будет записан в следующем формате:
Код:
USERNAMES/john.smith_1kx10k_c2010/xaa
USERNAMES/john.smith_1kx10k_c2010/xab
USERNAMES/john.smith_1kx10k_c2010/xac
USERNAMES/john.smith_500x20k_c2010/xaa
USERNAMES/john.smith_500x20k_c2010/xab
USERNAMES/john.smith_500x20k_c2010/xac
USERNAMES/jsmith_c2010/xaa
USERNAMES/jsmith_c2010/xab
USERNAMES/jsmith_c2010/xac

Примечание. Сгенерированные файлы займут примерно 8 ГБ.

Замечания для специалистов по безопасности

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

Единственный вариант — отключить личные url-адреса (personal sites) OneDrive.

onedrive13.png

Рис. 13. Отключение личного URL-адреса OneDrive

При отключении данной опции все существующие пользователи будут по-прежнему иметь URL-адреса OneDrive, которые можно будет перебрать и которые по этой причине необходимо почистить. Это не идеальное решение, но это максимум, что вы можете сделать, пока Microsoft не станет более серьезно относиться к методам перебора своих пользователей. Даже если вы отключите OneDrive, существуют иные способы перебора ваших пользователей через Microsoft Graph и Microsoft Teams.

Для серьезной борьбы с атаками перебора пользователей, нам нужно перестать использовать имена пользователей совпадающими с адресами электронной почты. Адреса электронной почты по определению являются общедоступной информацией, которую всегда можно найти. Имена ваших пользователей не должны быть общедоступными.

Формат имени пользователя также существенно влияет на устойчивость к перебору. Числовые имена пользователей являются худшим выбором, так как они требуют минимальных ресурсов для перебора. Простые комбинации, такие как «jsmith» или «smithj», тоже легко определяются. Несмотря на то, что форматы «john.smith» и «john.j.smith» являются более удачными, они также легко определяются через поиск общедоступных личных данных.

Я считаю, что такой формат имени пользователя, как «jsmith192837», где числовая часть является случайной, будет более приемлемым и устойчивым к атакам перебора. Добавляя шесть (6) цифр в конец обычного имени пользователя «jsmith», вы увеличиваете сложность перебора на миллион. Злоумышленнику нужно будет повторить МИЛЛИОН попыток только для того, чтобы получить какие-либо совпадения «jsmith». И далее с «jsmith», «ssmith», «rssmith» и т.д. Тем самым массовый перебор таких пользователей становится невозможным (ресурсоемким). Для внешних контактов сотрудников всегда можно использовать почтовые псевдонимы для упрощения контактов с внешним миром.

Заключение

Интеграция корпоративных решений с использованием OneDrive находится на рекордно высоком уровне. Множество действий с приложениями непреднамеренно создают URL-адрес OneDrive, независимо от того, используют ли его реально пользователи или нет. Прибавьте к этому относительную неосведомленность большинства компаний об варианте подобной атаки и неспособности ее обнаружить, и мы получим идеальный метод инфильтрации сотрудников компании!

Удачного хеккинга!

Ссылки

Спасибо доку Нестори Сюйнимаа (@DrAzureAD — AADInternals), @thetechr0mancer и Black Lantern Security с TREVORspray, SkullSecurity (за статистически вероятные имена пользователей), @rootsecdev (поскольку ОН, в свою очередь, показал мне TREVORspray) и @HackingLZ.

Источник

P. S. Очередная вариация на тему работы с корпоративными таргетами :)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
OneDrive является частью SharePoint
SharePoint - точка эскалации в домене. Снятый там лсасс в 90% содержит привелигерованый учетки.
+ с SharePoint связан очередной Microsoft Wont-Fix баг связаный с релеем нтлм - майки отказались патчить это.
Подробнее у MDsec в рисерче, а может и не у MDsec. Worked as a designed - говорили они, ну штош...
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх