LIVE

Безопасность личного кабинета: правила защиты данных при подключении внешних сервисов

В январе 2025 года Google Workspace тихо отрезал поддержку менее защищённых сторонних приложений. Для миллионов аккаунтов это прошло незаметно — десятки интеграций с почтой, диском и календарём в одночасье обязали переехать на OAuth.

Обновлено15 июля 2026 г.
Чтение9 мин
Безопасность личного кабинета: правила защиты данных при подключении внешних сервисов

Корпоративный маркетинг тут же объявил отсечку LSA «очередной победой безопасности». На практике убрали один риск и оставили десяток других — куда более интересных и гораздо менее обсуждаемых. Речь о токенах доступа, которые теперь циркулируют между вашим аккаунтом и сотнями сервисов. Их никто не видит, их никто не аудирует, они живут месяцами — и именно через них злоумышленник обходит многофакторную аутентификацию, не зная вашего пароля.

Токен OAuth — это копия вашего ключа, которую вы отдали незнакомцу и забыли об этом.

Анатомия OAuth-ловушки: почему токен опаснее украденного пароля

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

Главное свойство, которое делает токены козырной картой атакующего: они существуют вне контура парольной защиты. Когда вы включаете MFA на аккаунте Google, вы защищаете этап логина. Когда ставите аппаратный ключ FIDO2 — то же самое. Токен, однажды выданный стороннему приложению, работает независимо. Злоумышленник, укравший его, обращается к API напрямую: в логе провайдера это штатный запрос от легитимной интеграции. Никакого push на телефон, никакого TOTP-кода, никакого «подтвердите вход из Москвы».

Длительность жизни токенов регулируется параметром expires_in — типичные провайдеры выдают access token на 3600 секунд (один час), но рядом всегда идёт refresh token. Это долгоживущий маркер, действующий месяцами и годами, если его не отозвать. Refresh token используется для автоматического обновления access token без участия пользователя. После однократного согласия на интеграцию сервис получает фактически постоянный канал к вашим данным.

Механика компрометации раскладывается на четыре этапа:

ЭтапЧто происходитПочему это критично
СогласиеПользователь нажимает «Разрешить» на легитимной странице Google или MicrosoftАтакующий получает официальный токен
ХранениеТокен сохраняется в БД стороннего сервисаУтечка базы = утечка токенов
ИспользованиеAPI-запросы с токеномНе требуют повторного MFA
ОбновлениеRefresh token продлевает сессию автоматическиПострадавший не получает уведомлений

Мы в лаборатории регулярно вытаскиваем из публичных отчётов об утечках refresh token-ы, валидные спустя месяцы после инцидента. Разработчики уведомляют пользователей о скомпрометированных паролях и упорно молчат о токенах. Для них это «не критичные данные аккаунта» — формально OAuth-токен не равен паролю, но в плане доступа к почте, диску и календарю он даёт сопоставимые возможности.

Фишинг согласия: легитимная страница как оружие

Consent phishing — атака, в которой жертве показывают настоящий экран авторизации Google, Microsoft или Яндекса, но от имени вредоносного приложения. Это не подделка формы ввода пароля. Это подделка окна согласия. URL настоящий, сертификат настоящий, OAuth-провайдер настоящий. Разница одна: жертва выдаёт права приложению, которое написал злоумышленник.

Сценарий по шагам:

1. Злоумышленник регистрирует OAuth-приложение в Google Cloud или Azure AD под названием вроде «Календарь бронирования переговорок» или «Автоматизация отчётов отдела продаж». Техническая регистрация занимает минуты.

2. Жертве приходит письмо со ссылкой — например, «Подключите удобный планировщик встреч». Ссылка ведёт на легитимный адрес accounts.google.com/o/oauth2/v2/auth с подставленным client_id вредоносного приложения и списком запрашиваемых scopes.

3. Пользователь видит экран Google с белым списком приложения, перечнем прав и кнопкой «Разрешить». Это настоящий экран провайдера — он ничем не отличается от того, через который подключаются тысячи нормальных сервисов.

4. После клика злоумышленник получает код авторизации, обменивает его на access token и refresh token. MFA не сработала — пользователь не входил в аккаунт, он уже был в нём.

5. Дальше — чтение почты, выгрузка контактов, просмотр календаря. Злоумышленник ищет платёжные документы, переписку с бухгалтерией, маркеры для следующих атак.

Особенно мерзкая деталь: жертва не меняет пароль, потому что пароль не утекал. В логах Google видно, что вход был штатным, с того же IP, с того же устройства. Срабатывание защиты от подозрительных логинов минимально — пользователь только что сам зашёл на страницу Google.

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

  • client_id — уникальный идентификатор приложения. По нему через публичные базы или собственный поиск по GitHub-репозиториям вендора можно установить, кто зарегистрировал приложение.
  • Название и логотип приложения — спамеры часто используют имена, отличающиеся от легитимных сервисов одной буквой или символом.
  • Список запрашиваемых scopes. Если «Календарю переговорок» вдруг нужны права на чтение почты и управление файлами на диске — это красный флаг размером с пожарную машину.

Эволюция стандарта: почему PKCE решает половину проблем, а вторую половину — нет

Протокол OAuth 1.0 умер тихо. OAuth 2.0 появился в 2012 году и принёс с собой Implicit Flow — сценарий, в котором токен возвращался прямо в URL-адресе после редиректа. Удобно для JavaScript-приложений, катастрофически небезопасно: токен оказывался в истории браузера, в логах сервера, в referer-заголовке при переходе на сторонние ресурсы. Перехватить мог любой скрипт на странице, любой прокси между пользователем и провайдером.

Сейчас Implicit Flow считается устаревшим и запрещён в большинстве серьёзных спецификаций. На смену пришёл Authorization Code Flow с расширением PKCE (Proof Key for Code Exchange). Схема работы:

  • Клиент генерирует случайную строку code_verifier и её хэш code_challenge.
  • При запросе авторизации клиент отправляет code_challenge провайдеру.
  • Провайдер выдаёт код авторизации, но не токен.
  • Клиент обменивает код на токен, передавая исходный code_verifier. Провайдер сверяет хэш — если совпадает, выдаёт токен.

PKCE закрывает атаку перехвата кода авторизации: даже если злоумышленник украл код из логов или истории, без code_verifier он не обменяет его на токен. Это серьёзный шаг вперёд, и OAuth 2.1 закрепляет PKCE как обязательный для всех типов клиентов, включая серверные приложения.

Стандарт описывает правильную реализацию. Реальный код — это то, что разработчик написал во вторник вечером, после третьего кофе.

Однако PKCE не спасает от второй большой проблемы — недостаточной валидации redirect_uri. Это адрес, на который провайдер перенаправляет пользователя после авторизации (с кодом в URL). Если сервер авторизации проверяет redirect_uri не строго (по подстроке, а не по точному совпадению), злоумышленник может подменить путь и перехватить код. Регистрация открытого редиректа на клиентском приложении, ошибки в regex на стороне провайдера, подмена через open redirect на собственном домене легитимного сервиса — реальные векторы, встречающиеся в баг-баунти отчётах ежегодно.

Инциденты с некорректной валидацией redirect_uri — одна из причин, почему мы в лаборатории относимся к «безопасности по стандарту» с тем же скепсисом, что и к «военному уровню шифрования». Стандарт описывает правильную реализацию. Реальный код — это то, что разработчик написал во вторник вечером, после третьего кофе.

Январь 2025-го, когда Google отрезал LSA, был важной вехой, но не финалом. Менее защищённые приложения, которые использовали связку «только логин-пароль» для доступа к Workspace API, ушли в прошлое. Все оставшиеся интеграции теперь работают через OAuth. Это правильный шаг, но он переводит атакующих из одной экосистемы в другую — и пользователь остаётся один на один с токенами, о существовании которых он не подозревает.

Аудит разрешений: где прячутся забытые интеграции

Главная проблема OAuth — не в технической сложности протокола, а в привычке пользователя кликать «Разрешить» и забывать. Через год в личном кабинете Google тихо живут 30–40 подключённых приложений: тестовые интеграции, которые разработчик когда-то показал, сервисы для загрузки фотографий, плагины для Notion, генераторы отчётов, парсеры резюме. Большинство заброшены, но их токены продолжают действовать.

Алгоритм аудита, который мы рекомендуем проводить минимум раз в квартал:

1. Открыть страницу управления разрешениями в аккаунте Google или раздел app-access в Microsoft. Это единая точка входа, где перечислены все сторонние приложения с доступом к аккаунту.

2. Для каждого приложения проверить дату последнего использования и список scopes. Если сервис не использовался 90+ дней — кандидат на отзыв.

3. Сверить название приложения с фактическим разработчиком. Если в поле значится приложение «Telegram Backup Pro», а вы им не пользуетесь — отзывать без сожалений.

4. Отозвать доступ через интерфейс. После отзыва refresh token аннулируется немедленно, активные access token перестают обновляться в течение часа.

5. Проверить подозрительную активность в журнале действий аккаунта — там видны последние запросы к API от вашего имени.

Для корпоративных пользователей Google Workspace и Microsoft 365 у администраторов расширенные инструменты: Google Admin Console → Security → API Controls, Microsoft Entra ID → Enterprise Applications. Они позволяют централизованно отзывать токены, видеть consent grants от всех сотрудников и применять политики Conditional Access к OAuth-приложениям.

Распространённый симптом компрометации через OAuth — резкий рост числа отправленных писем, доступов к файлам или операций с календарём, при том что владелец аккаунта не совершал этих действий. Если в почтовом ящике появились сообщения от «автоматизатора», которого вы не подключали, — повод немедленно проверить список разрешений и отозвать всё подозрительное.

Наименьшие привилегии в быту: как читать scopes до нажатия «Разрешить»

Принцип наименьших привилегий звучит как корпоративная мантра, но применим к любому личному кабинету. OAuth-scope — декларация того, что именно приложение хочет делать с аккаунтом. Google, Microsoft и Яндекс разделяют scopes по функциям и уровню доступа: чтение почты, отправка почты, чтение календаря, изменение календаря, доступ к файлам на диске, управление контактами.

ScopeЧто даёт приложениюКогда оправдано
gmail.readonlyЧтение писемПочтовый клиент, агрегатор вложений
gmail.sendОтправка писем от вашего имениПланировщики рассылок
calendar.readonlyЧтение событийИнтеграции с CRM
calendarЧтение и изменение событийБронирование переговорок
drive.readonlyЧтение файловПросмотрщики документов
drive.fileДоступ к конкретным файламСторонние редакторы
contactsЧтение и запись контактовМенеджеры контактов

Здравый смысл подсказывает: если приложение запрашивает gmail.readonly для функции «уведомления о новых письмах в Slack» — это адекватный scope. Если тот же плагин запрашивает ещё и drive (полный доступ ко всем файлам) — перебор. Запросите объяснение у разработчика, а лучше найдите альтернативу с минимальными правами.

Ещё один полезный приём — разделять приложения по категориям доступа. Рабочий почтовый ящик не должен иметь те же интеграции, что личный. Если у вас один аккаунт на все случаи жизни, как минимум проведите жёсткую ревизию: для каждого сервиса определите критичность доступа, откажитесь от тех, что запрашивают избыточные права.

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

Жёсткие правила гигиены OAuth

Подытожим тем, что я обычно говорю коллегам после очередного разбора инцидента. Никаких компромиссов:

  • Аудит разрешений раз в квартал — без исключений. Тридцать минут в кабинете сэкономят недели расследования после утечки.
  • Разрешение только по явной необходимости. Не «пусть будет на всякий случай», а «вот конкретная задача, для которой мне нужны именно эти права».
  • Отзыв сразу после использования. Если сервис выполнил разовую задачу — отзывайте токен, не дожидаясь, пока он станет чьим-то инструментом.
  • Чтение scopes перед кликом. Две секунды на список прав экономят месяцы на разбор последствий.
  • Отдельный аккаунт для экспериментов. Любые непроверенные интеграции, бета-сервисы, приложения с однозвёздочными отзывами — через отдельную учётную запись без доступа к рабочей почте и платёжным инструментам.
  • Мониторинг активности аккаунта. Журнал действий, оповещения о новых устройствах — всё это должно быть включено и регулярно проверяться.
  • Аппаратный ключ для основного аккаунта. Да, он не защитит от компрометации через OAuth, но сильно сужает вектор первичной компрометации.
  • Отказ от Implicit Flow и любых приложений, которые возвращают токен через URL. Если видите такое — закрывайте вкладку и пишите разработчику гневное письмо.

OAuth — не враг. Это удобный стандарт, без которого современная интеграция сервисов невозможна. Но стандарт без дисциплины — это дверь с хорошим замком, ключ от которой разбросан по карманам сотен незнакомцев. Дисциплина — единственное, что отличает безопасный аккаунт от аккаунта, через который утечёт ваша переписка, контакты и платёжные документы.

Частые вопросы

Анатомия OAuth-ловушки: почему токен опаснее украденного пароля?
Пользователь авторизуется у провайдера — Google, Microsoft, Яндекс, — стороннее приложение получает токен доступа и дальше работает с API от имени пользователя.
Фишинг согласия: легитимная страница как оружие?
Consent phishing — атака, в которой жертве показывают настоящий экран авторизации Google, Microsoft или Яндекса, но от имени вредоносного приложения.