У мошенников нет ничего святого! Хакеры взялись за Google: подделка подписей теперь не обязательна, ведь можно заставить Google подписывать фишинговые письма валидным DKIM самостоятельно. Если раньше опытный ИБ-специалист мог сходу разобраться, где фишинговое письмо, а где — нет, сейчас это сделать в разы сложнее. И дело вовсе не в популярных нейронках, изощренном социальном инжиниринге или слитых базах.

Несем вам горячий кейс о том, как мошенники научились злоупотреблять настройкой OAuth-приложений, используя официальные инструменты Google для отправки поддельных писем от no-reply@accounts.google.com.

Спойлер: хотя Google уже устранил возможность вставлять произвольный текст в название OAuth-приложений, сама техника повторного использования легитимной DKIM-подписи никуда не делась. На её основе по-прежнему можно реализовать сценарии, позволяющие обходить DKIM-аутентификацию.

Изучаем матчасть

Протоколы аутентификации электронной почты — SPF, DKIM и DMARC — были разработаны, чтобы предотвратить спуфинг (подделку имени отправителя) и защитить пользователей от фишинга. В совокупности они позволяют удостовериться, что письмо пришло от разрешенного сервера (SPF), что его содержимое не было подменено (DKIM) и что оно соответствует заявленной политике домена (DMARC). Однако, как показывает DKIM replay-атака, о которой стало известно в апреле 2025 года, даже эти технологии могут быть использованы против самих пользователей, если архитектура реализована с допущениями.

SPF (Sender Policy Framework) — это специальная TXT-запись в DNS, которая перечисляет серверы, имеющие право отправлять письма от имени домена. Когда приходит письмо, почтовый сервер получателя обращается к этой записи и сравнивает IP-адрес отправителя с разрешенными в списке. При этом SPF проверяет не поле From, которое видит пользователь, а технический адрес (envelope MAIL FROM). Поэтому SPF сам по себе не защищает от подмены отправителя.

yourdomain.com. TXT "v=spf1 ip4:1.2.3.4 include:_spf.google.com -all"

DKIM (DomainKeys Identified Mail) использует криптографическую подпись письма. Отправитель подписывает тело и определенные заголовки (From, To, Subject) приватным ключом, а получатель проверяет подлинность по публичному ключу из DNS.

Это надежный способ защитить письмо от изменения, но есть нюанс: если злоумышленник перехватит оригинальное подписанное письмо — например, уведомление Google об OAuth-доступе — он может переслать его кому угодно. Подпись при этом всё ещё будет считаться действительной, ведь содержимое и заголовок не менялись. Запомните этот момент. 

mail._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=<публичный_ключ>"

DMARC (Domain-based Message Authentication, Reporting and Conformance) проверяет, совпадает ли домен в поле From c доменом, который прошел проверку SPF или DKIM. Если ни один из механизмов не подтвердил подлинность письма, DMARC определяет, что с ним делать: пропустить, пометить как подозрительное или отклонить.

DMARC эффективен, но не защищает от ситуаций, когда письмо прошло DKIM (пусть и с фальшивой подписью), как в случае с replay-атакой. Если оригинальная подпись Google действительна — DMARC спокойно пропустит такое письмо.

dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc@yourdomain.com"

В нормальных условиях эти протоколы помогают фильтрам Gmail отличать легитимные письма от поддельных и снижают риск фишинга. Но в апреле что-то пошло не так.

Что случилось в апреле

Прежде чем приступить к разбору атаки, кратко пройдемся по инфоповоду. Всё началось с записи Ника Джонсона, ведущего разработчика Ethereum Name Service (ENS). Ник получил письмо от no-reply@accounts.google.com с валидной DKIM-подписью, которое Gmail воспринял как легитимное.

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

Когда Ник начал разбираться в сути происходящего, выяснилось, что механика атаки достаточно проста, но именно в этой простоте и кроется её изощренность. Сценарий выстроен так, что на каждом этапе используется легитимный функционал Google, а итоговое письмо выглядит абсолютно подлинным — вплоть до криптографической подписи.

Механика атаки

Злоумышленники опирались на две ключевые уязвимости в инфраструктуре Google, комбинируя их с техникой DKIM replay attack — приемом, когда легитимное, корректно подписанное письмо повторно отправляется новым адресатам без изменения содержимого, с сохранением валидной DKIM-подписи.

Схема DKIM-replay атаки. Источник изображения
Схема DKIM-replay атаки. Источник изображения

Размещение фишинговой страницы входа на Google Sites

Атакующие задействовали платформу Google Sites — бесплатный конструктор сайтов. На ней они разместили поддельный интерфейс входа, тщательно имитирующий оригинальный дизайн Google. 

Если проанализировать URL, с которым столкнулся Ник, мы увидим, что зашито в ссылке:

https://sites.google.com/[u/17918456/d/1W4M_jFajsC8YKeRJn6tt_b1Ja9Puh6_v/edit 

• u/17918456 — уникальный идентификатор пользователя или аккаунта;
• /edit — действие: открыть файл для редактирования (перед ним идентификатор документа);
• /d/ — указание, что это документ.

Даже опытному пользователю сложно заметить подмену: на странице можно «загрузить дополнительные документы» или ознакомиться с материалами «дела». Нет никаких очевидных грамматических ошибок или подозрительных вложений.

Переход по любой из ссылок приводит к перезагрузке страницы и вызову формы с повторным запросом авторизации — даже если пользователь уже вошел в свой аккаунт Google ранее:

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

Если ввести учетные данные, жертва будет переадресована на страницу сервисной «ошибки»: 

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

Генерация и пересылка легитимного письма с валидной DKIM-подписью

Разберем сценарий пошагово.

1. Регистрация фейковых доменов

Злоумышленник регистрирует домен и Google-аккаунт вида me@domain.com. Анализ фишинговых писем показал, что для атаки использовались домены, специально зарегистрированные через Namecheap. Доменные имена маскировались под элементы инфраструктуры Google, например:

  • googl-mail-smtp-out-198-142-125-38-prod.net

  • wd-00000000000097d33d0631f6fe58-goog-ssl.com

Атакующие создали бесплатные аккаунты PrivateEmail через Namecheap, используя адреса типа:

mailto:me@googl-mail-smtp-out-198-142-125-38-prod.net

Это позволило злоумышленникам получать уведомления OAuth с валидными DKIM-подписями от Google, при этом используя MX-записи Namecheap вместо оригинальных гугловских MX-записей. 

Чем ещё хорош Namecheap? Например, вы можете указать no-reply@accounts.google.com в качестве отправителя:

А дальше всё зависит только от фантазии атакующего:

Настройка пересылки в аккаунте Namecheap
Настройка пересылки в аккаунте Namecheap

Вот как выглядят заголовки в таком случае:

   for <__________________>; Thu/ 10 Apr 2025 00:27:41 -0400 (EDT)
Resent-From: me@e-fwd-00000000000027d33d0631f6fe59-goog-ssl.com
X-Sieve-Redirected-From: me@e-fwd-00000000000027d33d0631f6fe59-goog-ssl.com
Delivered-To: me@e-fwd--00000000000027d33d0631f6fe59-goog-ssl.com 
Received: from DIR-08 (_____________)
           by localhost with LMTP

… и результат:

2. Подготовка OAuth-приложения с фишинговым текстом в App Name

Создается OAuth-приложение, где в поле App Name сначала вводится текст фишингового сообщения, затем длинный блок пробелов и фраза «Google Legal Support».

Пример настройки OAuth от Google и блока с пробелами:

Ещё один пример того, что в поле App Name можно внести все, что угодно:

Таким образом, когда Google генерировал уведомление об OAuth-доступе, в теле письма появлялся весь этот текст как часть официального сообщения от системы. Домен при этом был корректно верифицирован в Google Workspace через TXT-запись в DNS, что давало злоумышленникам возможность создавать OAuth-приложения и получать легитимные уведомления.

3. Генерация подписанного уведомления Google

Google автоматически отправляет уведомление безопасности владельцу аккаунта (me@domain.com) о том, что OAuth-приложению предоставлен доступ. Это письмо генерируется системой Google и автоматически подписывается валидным DKIM-ключом. В теле письма отображается содержимое поля App Name, включая весь подготовленный злоумышленником фишинговый текст.

4. Пересылка подписанного письма жертве

Злоумышленник сохраняет полученное уведомление без изменений (включая заголовки, тело письма и DKIM-подпись), а затем пересылает его жертве с другого почтового аккаунта (например, через Outlook или с помощью SMTP-ретранслятора). При этом DKIM-подпись остается неизменной, и письмо успешно проходит проверку как легитимное, поскольку криптографическая подпись Google действительна.

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

Использование DKIM replay attack

Атакующий пересылает это письмо жертве — напрямую или через цепочку почтовых сервисов (Outlook-аккаунт → SMTP → почтовый провайдер → жертва). 

Как на примере выглядит распределение переадресаций через SMTP
Как на примере выглядит распределение переадресаций через SMTP

Слабость механизма проверки в том, что DKIM-валидация охватывает лишь содержимое письма и его заголовок, но не содержимое. В результате «чистая» DKIM-подпись останется неизменной и сообщение пройдет все SPF/DKIM/DMARC-проверки.

Почему это сработало?

Создание приложения, в котором в качестве имени используется полный текст фишингового сообщения, а также подготовка фишинговой страницы и поддельного окна входа на первый взгляд кажутся трудоемкой задачей. Однако после первоначальной настройки эту процедуру можно повторять сколько угодно раз, даже если исходная страница будет удалена — особенно учитывая, что найти и удалить страницы на sites.google.com непросто.

Ник отправил об этом отчет в Google. Изначально компания закрыла тикет с пометкой «работает как задумано», но позднее в Google пересмотрели позицию и сообщили, что признают проблему с OAuth и исправят её.

Письмо от Google с первоначальным отказом исправлять уязвимость. Источник изображения
Письмо от Google с первоначальным отказом исправлять уязвимость. Источник изображения

По состоянию на ноябрь 2025 года Google закрыл ключевой вектор атаки, запретив вставку произвольного текста в поле App Name для OAuth-приложений. Но расслабляться пока рано: идея повторного использования легитимной DKIM-подписи остается, а публичные конструкторы типа Google Sites всё ещё могут быть использованы в альтернативных схемах фишинга.

Вместо вывода

Главная сложность обнаружения этой атаки заключается в том, что злоумышленники не просто подделывали письма — они использовали легитимную инфраструктуру для рассылки вредоносного контента. Поскольку письма подписывались валидными DKIM-заголовками от доверенных доменов, они успешно проходили все проверки аутентификации. В результате традиционные инструменты безопасности, которые полагаются на белые списки доменов или ошибки аутентификации, оказывались неэффективны.

Дополнительную сложность создавал тот факт, что Google — одна из самых узнаваемых и доверенных компаний в мире. Когда письмо выглядит как официальное уведомление от Google и при этом проходит аутентификацию, вероятность успеха атаки значительно возрастает.

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

И главный вывод, который остается в силе: никогда не доверяйте содержимому письма слепо, даже если это письмо имеет валидную DKIM-подпись ?

Материал основан на кейсе исследователя Nick Johnson в X и техническом разборе атаки в блоге EasyDMARC.


Бастион — защищаем бизнес от киберугроз

t.me/bastiontech — делимся собственным опытом, экспертизой, результатами исследований и прогнозами

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