Исследователи безопасности из ZeroBEC изучили фишинговую кампанию, которая принципиально отличается от традиционных атак. Злоумышленники не пытались похитить пароль Microsoft, не размещали поддельную страницу входа и не применяли прокси-сервер для перехвата данных. Вместо этого жертву направляли на настоящую страницу аутентификации Microsoft с запросом кода устройства, где она одобряла приложение "Microsoft Authentication Broker". В результате атакующий получал токен обновления, не требующий дальнейшего взаимодействия. Набор вредоносного инструментария, инфраструктура и шаблоны API совпадают с набором EvilTokens, впервые описанным компанией Sekoia в 2024 году. С тех пор этот инструмент фиксировали специалисты Huntress и Elastic Security Labs в аутентификационных потоках Microsoft и Google.
Описание
Главная особенность этой атаки не в самом наборе, а в способе доставки. Кампания достигла активного почтового ящика через легаси-алиас, который организация-получатель унаследовала после предыдущего поглощения. Старое пространство имён было настроено на пересылку писем на текущий адрес пользователя. Письмо прошло проверки подлинности без ошибок. Шаг пересылки добавлял достаточно шума в заголовки, чтобы замедлить анализ на стороне почтового шлюза. Цепочка URL-адресов проводила пользователя через трекер Mailjet, скомпрометированный сайт на WordPress и CAPTCHA-шлюз, после чего он оказывался на странице EvilTokens, размещённой на workers.dev.
Эта атака имеет принципиальное значение для руководителей служб безопасности. Это не фишинг с кражей учётных данных. Нет пароля, который нужно сменить, нет многофакторной аутентификации (MFA), которую требуется обойти, нет прокси-сервера для перехвата данных. Жертва выполняет легитимную авторизацию через код устройства на реальном сайте Microsoft. Атакующий получает токен обновления, привязанный к клиенту Microsoft Authentication Broker, входящему в семейство FOCI (Family of Client IDs - группа связанных идентификаторов клиентов Microsoft). Этот токен можно обменивать на токены других приложений Microsoft 365 в течение 90 дней. Зона поражения охватывает весь набор сервисов Microsoft 365 пользователя, а не одно приложение. При этом пользователь не вводил пароль, чтобы предоставить доступ.
Предыдущие публикации Sekoia, Huntress и Elastic уже описывали отпечатки набора EvilTokens и схему злоупотребления кодом устройства. Это исследование добавляет две новые детали. Во-первых, многоэтапная цепочка перехода: до страницы набора использовалась ссылка отслеживания Mailjet, затем скомпрометированный сайт WordPress, потом CAPTCHA-шлюз и только потом хост на workers.dev. Три живых инфраструктурных узла между телом письма и самим набором, ни один из которых не является самим набором. Во-вторых, доставка через легаси-алиас от предыдущего слияния и поглощения (M&A). Организация-получатель унаследовала конфигурацию пересылки, оставшуюся от предыдущей поглощённой компании. Фишинговое сообщение было отправлено на старый псевдоним, который всё ещё перенаправлялся на активный почтовый ящик. Атака не была случайной: злоумышленник использовал всё ещё разрешимую историческую учётную запись, чтобы добраться до пользователя, который на бумаге уже не был связан с этим пространством имён.
Многоэтапная цепочка редиректов - причина, по которой страница на workers.dev обходит проверки репутации URL. Репутация конечного адреса отмывается через три легитимных родительских узла. Доставка через легаси-алиас - причина, по которой кампания вообще попала в активный почтовый ящик, и по которой расследованию пришлось охватить два пространства имён учётных записей, чтобы проследить сообщение до источника.
Целевой пользователь получил письмо с темой "eDocument Confirmation Accounted", отправленное через Mailjet с отправителем speedcrane[.]fr. Путь через Mailjet прошёл проверки SPF, DKIM и DMARC. Подделки в протокольном смысле не было - отправляющий арендатор был аутентифицирован. Заголовки не позволяют определить, был ли скомпрометирован аккаунт Mailjet speedcrane[.]fr, утёк ли API-ключ Mailjet, была ли использована уже авторизованная конфигурация отправки или был скомпрометирован нижестоящий пользователь с правами отправки. Телеметрия получателя не позволяет различить эти варианты. Исследователи сообщили о злоупотреблении в Mailjet с указанием идентификаторов для расследования.
Сообщение достигло жертвы через правило пересылки. Исходным получателем был легаси-алиас из пространства имён до поглощения; этот псевдоним всё ещё был настроен на пересылку в текущий почтовый ящик пользователя. С точки зрения почтового шлюза, входящее письмо было аутентифицированным сообщением Mailjet, пересланным внутри организации. Со стороны пользователя оно попало в рабочий ящик без видимых указателей на то, что прошло непрямой путь. Шаг пересылки нарушал SPF в строгом смысле, но ARC-запечатывание сохранило достаточный контекст аутентификации, чтобы нижестоящие фильтры не повысили уровень риска сообщения.
Пересылка с легаси-алиасов или псевдонимов эпохи поглощений в активные почтовые ящики представляет собой ценный вектор атаки, который сохраняется после слияний, интеграций и консолидации доменов. Такие маршруты необходимо инвентаризировать так же, как активные почтовые ящики. Любое входящее пересланное сообщение, пришедшее через легаси-алиас, должно рассматриваться как отдельный класс риска.
Видимая ссылка в теле письма вела на хост отслеживания кликов Mailjet. Один клик по кнопке "View Document" запускал четырёхэтапную цепочку, которая заканчивалась на странице EvilTokens. Первый этап - редирект отслеживания Mailjet на sqhxp.mjt[.]lu. Токен в пути уникален для каждого получателя. Второй этап - скомпрометированный сайт WordPress на lojrafalasonline[.]com/wp-admin/paint, который кратко показывал фальшивую страницу загрузки "Adobe Document", а затем перенаправлял дальше. Административные пути WordPress являются распространёнными точками для операторов наборов, потому что они долго остаются незамеченными владельцами. Третий этап - CAPTCHA-шлюз на promos.com.hr/white с брендированием Microsoft и надписью "Let us know you are human". Шлюз существует не для проверки пользователя, а для обхода песочниц, которые не могут решить капчу. Четвёртый этап - финальная страница на сгенерированном поддомене workers.dev, имитирующая портал общего доступа OneDrive и отображающая значение кода устройства Microsoft.
Четырёхэтапная цепочка имеет цель. Первый этап отмывает конечный адрес через респектабельного ESP-провайдера. Второй и третий этапы отмывают его через легитимную скомпрометированную инфраструктуру, которую сервисы репутации URL считают низкорисковыми родительскими доменами. Только четвёртый этап полностью контролируется атакующим, и имя хоста генерируется для каждого развёртывания, поэтому оно никогда не накапливает негативную репутацию.
Фишинг с кодом устройства опаснее традиционного фишинга учётных данных. Когда защитник слышит "фишинг Microsoft", стандартная ментальная модель - это страница, использующая прокси для перехвата пароля и MFA. Эта модель здесь не работает. EvilTokens использует другой поток OAuth - предоставление авторизации устройства. Это тот же механизм, которым легитимно пользуются устройства без клавиатуры (HoloLens, Teams Rooms, Azure CLI на серверах без ввода вручную).
Поток выглядит так: набор вызывает конечную точку авторизации устройства OAuth Microsoft от имени сеанса атакующего. Microsoft возвращает код пользователя и URL для ввода кода. Набор отображает код жертве и просит "Continue to Microsoft". Жертва вводит код на реальной странице Microsoft, подтверждает свою учётную запись и одобряет приложение. Microsoft выдаёт токен доступа и токен обновления, которые возвращаются атакующему, а не пользователю.
Приложение, которое одобряет пользователь в этой кампании - Microsoft Authentication Broker с client_id 29d9ed98-a469-4536-ade2-f981bc1d605e. Этот брокер входит в семейство FOCI. Токен обновления, выданный для Broker, можно обменять на токен доступа другого FOCI-приложения (Outlook, OneDrive, Teams, Azure CLI, Microsoft Graph PowerShell) без повторного прохождения кода устройства. Одно одобрение эквивалентно авторизации атакующего против всего набора приложений Microsoft 365 пользователя.
Практические последствия для организации: пароль не был захвачен, принудительная смена пароля не поможет. MFA была пройдена легитимно, усиление MFA задним числом не закроет сеанс. Время жизни токена обновления - до 90 дней по умолчанию с скользящим обновлением. Пока токен не будет явно отозван в Entra, атакующий сохраняет доступ. Для устранения последствий требуется отзыв токенов, выход из всех сеансов, аудит OAuth-грантов, аудит изменений методов MFA, ручная проверка правил почтового ящика, общих ресурсов OneDrive и активности Teams за время присутствия атакующего.
Страница EvilTokens представляет собой один HTML-документ с закодированным в base64 полезным грузом, упакованным в AES-GCM, антиотладочной обёрткой и клиентом, взаимодействующим с серверным API. Два значения позволяют идентифицировать именно этот набор: заголовок x-antibot-token в запросе /api/session/init (64-символьная шестнадцатеричная строка, константное имя заголовка) и формат идентификаторов сессии dev_<13-значная метка времени unix>_<8 шестнадцатеричных символов>. Эти индикаторы стабильнее имени хоста workers.dev (меняется при каждом развёртывании), Cloudflare Ray ID или текста приманки.
Встроенный загрузчик не доставляет настоящую разметку сразу. Начальный HTML содержит три значения в base64 (зашифрованный текст, вектор инициализации, ключ AES) и блок кода crypto.subtle, который дешифрует их на стороне клиента при загрузке. Это не настоящее шифрование, поскольку ключ, IV и шифротекст передаются вместе. Цель - защита от статического анализа: инструменты, которые извлекают страницу и просматривают сырой ответ, видят только crypto.subtle и блоки base64, а не приманку OneDrive или вызов кода устройства. Это также обходит многие песочницы, которые не выполняют JavaScript.
Антиотладочный слой включает блокировку контекстного меню, клавиш F12 и Ctrl+Shift+I/J/C/U, таймер setInterval с проверкой performance.now(), который перезагружает страницу при паузе дольше 100 мс, и обнуление методов console. Все эти меры легко обходятся, но их совокупность служит отпечатком набора.
Переход от набора к Microsoft - часть, которая обманывает большинство эвристик. После нажатия кнопки "Continue to Microsoft" все последующие запросы идут на login.microsoftonline.com или microsoft.com. Сертификаты валидны, домен правильный. Страна, указанная в запросе Microsoft, отражает местоположение сеанса атакующего, а не пользователя.
Кампания достигла почтового ящика потому, что организация всё ещё поддерживала активную пересылку из пространства имён до поглощения. Это не было ошибкой конфигурации. Это было осознанное решение, принятое при интеграции, чтобы внешняя корреспонденция продолжала доходить до пользователей. Решение просто пережило свою полезность.
Для руководителя безопасности практические выводы: относиться к легаси-алиасам, доменам до поглощения и правилам пересылки как к активной поверхности атаки. Они живут дольше, чем кто-либо планирует, и видны в публичной истории M&A. Провести инвентаризацию таких маршрутов. При расследовании расширять запрос на исторические учётные записи пользователя и полную историю почты легаси-домена. Деактивировать легаси-алиасы, которые больше не соответствуют действующим сотрудникам, или оформлять исключение с ограничением по времени.
Обнаружение и охота должны строиться на трёх независимых слоях: почтовый шлюз, уровень идентификации Microsoft Entra и исходящий веб-трафик. По отдельности каждый слой недостаточен, вместе они дают чистую детекцию. Основные рекомендации: блокировать предоставление кода устройства (device-code grant) для обычных пользователей, исключая только служебные учётные записи и устройства, которым он нужен легитимно. Эта единственная настройка политики условного доступа закрывает класс атак для защищаемых групп пользователей.
Индикаторы компрометации
IPv4
- 185.189.236.26
URL
- lojrafalasonline.com/wp-admin/paint/
- promos.com.hr/white/
Domain
- mailjet.com
- sqhxp.mjt.lu
- w9kp-znuq-it53.lillian-prsroof-com-s-account.workers.dev
- t.tenailleau@speedcrane.fr