Статья Утечка данных через Zendesk: kill chain, detection gap и чеклист для SOC

Распечатанный журнал аудита на плотной бумаге, освещённый мягким дневным светом. Строки API-запросов выделены синим маркером, рядом лежит перьевая ручка.


Два крупных инцидента за полгода - Crunchyroll и Discord - и один вектор: Zendesk. Не zero-day в коде, не RCE, не что-то красивое. Обычная компрометация агентского аккаунта через аутсорсера.

В марте 2026 года Crunchyroll подтвердила утечку. По данным Have I Been Pwned - 1 195 684 email-адреса. Заявления атакующего о более широком наборе PII пока не подтверждены. Полугодом ранее тот же трюк сработал на Discord: группировка, идентифицированная в отчётах Rescana и BleepingComputer как Scattered Lapsus$ Hunters, предположительно удерживала доступ к Zendesk-инстансу около 58 часов. По заявлению атакующих - 1.6 ТБ данных, 8.4 миллиона тикетов, 5.5 миллионов затронутых пользователей. Цифры не подтверждены независимыми источниками; Discord признала инцидент, но оспорила масштаб.

Одна слепая зона мониторинга. Ниже - полный разбор kill chain утечки данных через Zendesk, конкретные detection-правила для SIEM и чеклист, который можно передать команде прямо сейчас.

Бизнес-логика атаки: зачем ломать систему поддержки​

Zendesk - не "просто тикет-система". Это хранилище с прямым доступом к PII: имена, email, телефоны, платёжные данные, IP-адреса. В случае Discord - ещё и сканы паспортов и водительских удостоверений, загруженных для верификации возраста. Zendesk при этом интегрируется с Okta, Slack, внутренними API компании-клиента. По данным Rescana, интеграция с внутренними системами Discord позволяла делать миллионы API-запросов к внутренней базе через платформу поддержки. Zendesk работал как прокси к данным, которые сама Discord никогда не экспонировала наружу. Подробнее - в нашем руководстве по расследование кибератаки.

Финансовая мотивация прямолинейна: по данным Rescana (требует независимой верификации), группа SLH предположительно потребовала от Discord $5 млн, позже снизив до $3.5 млн. Переговоры, по тем же данным, шли с 25 сентября по 2 октября 2025 года. Discord отказалась платить. Для атакующего helpdesk - одновременно точка сбора данных и рычаг давления: угроза публикации тикетов с паспортами создаёт давление, которого нет при обычной краже хешей паролей.

Регуляторный контекст: утечка сканов государственных удостоверений и платёжных данных попадает под GDPR (штраф до 4% глобального оборота), CCPA и 152-ФЗ. Для компании, чья служба поддержки обрабатывает документы пользователей, компрометация helpdesk - инцидент категории "критический" по любому стандарту классификации.

Kill chain взлома системы поддержки: от агента до эксфильтрации​

1783320034416.webp

Компрометация агентского аккаунта через BPO-провайдера​

Ключевой момент обоих инцидентов: атака не эксплуатировала уязвимость в коде Zendesk. По данным BleepingComputer и Rescana, в случае Discord злоумышленники скомпрометировали учётную запись сотрудника аутсорсингового провайдера (BPO). Supply Chain Compromise (T1195) + Valid Accounts (T1078) - классика.

Атакующие получили доступ к Zenbar - внутреннему инструменту Zendesk, через который агенты выполняют административные операции: поиск по пользователям, отключение MFA, просмотр телефонов и email. По данным Rescana, злоумышленники предоставили скриншоты доступа к панелям Kolide (device trust) и Okta (IAM) - это указывает на захват активной сессии или кражу учётных данных агента.

Параллельно, по данным вендорских отчётов threat intelligence (требует независимой верификации), финансово мотивированные группы используют аналогичную тактику: направляют сотрудников BPO на фишинговые страницы, имитирующие Okta и Zendesk, крадут содержимое буфера обмена для обхода MFA и регистрируют собственные устройства для persistent access. Домены следуют паттерну <org>.zendesk-support<##>.com.

Отдельная история - архитектурная уязвимость, описанная исследователями безопасности: при отсутствии SPF/DKIM/DMARC на почтовом домене компании-клиента Zendesk позволял получить доступ к тикетам через spoofed email. Zendesk закрыла дыру, но инцидент показал: вектор компрометации helpdesk шире, чем только фишинг на BPO.

Контекст для пентестера: если на проекте вы тестируете организацию с Zendesk и BPO-поддержкой - точка входа не в самом Zendesk, а в процессе аутентификации аутсорсера. Проверяйте: есть ли у BPO-агентов FIDO2/WebAuthn или только стандартный OTP, перехватываемый фишинг-китом.

Массовый сбор данных из тикетов (T1213)​

После получения агентского доступа начинается Data from Information Repositories (T1213, Collection). В случае Discord атакующие собрали:
  • ~1.5 ТБ вложений к тикетам (сканы документов, скриншоты)
  • ~100 ГБ расшифровок тикетов - порядка 8.4 млн записей
  • Данные ~580 000 пользователей с платёжной информацией (тип оплаты, последние четыре цифры карты, история покупок)
  • Порядка 70 000 изображений государственных удостоверений (по заявлению атакующих; Discord подтвердила значительно меньшее число, точная цифра не раскрыта)
Механика сбора: Zendesk API позволяет авторизованному агенту выполнять запросы к эндпоинтам /api/v2/tickets, /api/v2/search, /api/v2/ticket_audits. При наличии API-токена или OAuth-сессии агента нет архитектурного ограничения на объём выгрузки. Rate limits Zendesk (по документации - до 700 запросов/мин для Core API на Enterprise-плане, но Search API и Incremental Exports - всего 10 запросов/мин, при этом каждый запрос Incremental Export возвращает большой объём данных) рассчитаны на защиту от перегрузки, а не от авторизованной эксфильтрации.

Вот в чём слепое пятно: разница между "агент видит один тикет" и "агент выгружает миллионы записей" на уровне API не контролируется по умолчанию.

Эксфильтрация через HTTPS (T1567)​

Exfiltration Over Web Service (T1567): данные уходят через стандартный HTTPS - тот же канал, через который Zendesk API работает в штатном режиме. Для сетевого мониторинга это выглядит как легитимный трафик агента поддержки. По данным FireCompass, атакующие использовали автоматизированные скрипты с API-токенами из скомпрометированных аккаунтов.

ЭтапТехникаMITRE ATT&CKОписание в контексте инцидента
Initial AccessSupply Chain CompromiseT1195Компрометация BPO-провайдера
Initial Access / PersistenceValid AccountsT1078Использование легитимных кредов агента
CollectionData from Information RepositoriesT1213Массовая выгрузка тикетов и вложений
ExfiltrationExfiltration Over Web ServiceT1567Вывод данных через Zendesk API по HTTPS
ImpactFinancial TheftT1657Вымогательство с угрозой публикации

Detection gap: почему dwell time превышает сутки​

1783320078021.webp

Dwell time в кейсе Discord - около 58 часов (по данным Rescana). Утечка данных Crunchyroll тоже обнаружена не мгновенно. Почему SOC не видит компрометацию helpdesk?

Zendesk Audit Trail не интегрирован в SIEM. Большинство организаций не отправляют логи Zendesk в Splunk, Elastic или MaxPatrol SIEM. Zendesk ведёт собственный Audit Log (Settings -> Account -> Audit Log), но он фиксирует только административные изменения, а не read-запросы к тикетам. Массовая выгрузка данных туда просто не попадает. Для детекции bulk read нужен Access Log (Enterprise) или сетевой мониторинг. Если ваш SOC не получает и эти события - вы слепы к этому вектору.

Нет baseline API-активности. Типичная нагрузка агента зависит от компании - baseline строится индивидуально. Когда аккаунт начинает делать тысячи API-запросов в час - это аномалия. Но без baseline у SOC нет порога для алерта. При допустимых сотнях запросов в минуту через один аккаунт можно выгрузить миллионы тикетов за двое суток - именно это и произошло в кейсе Discord.

Легитимный user-agent и канал. Запросы через Zendesk API с валидным токеном идут с предсказуемым user-agent по HTTPS. Для proxy или WAF это нормальная работа. Аномалию можно поймать только по объёму, геолокации или паттерну - а для этого нужна корреляция, которой нет.

BPO = неконтролируемый endpoint. Аутсорсинговый сотрудник работает со своего устройства, возможно из другой страны. Device trust (Kolide) и IAM (Okta) должны были остановить атаку - но в кейсе Discord атакующие получили доступ и к этим панелям. Либо полный захват сессии, либо компрометация устройства.

Обнаружение вторжения в SIEM: правила корреляции для Zendesk​

Практические detection-правила, закрывающие описанные слепые зоны. Примеры для Splunk SPL - адаптируйте под ваш стек (Elastic KQL, MaxPatrol SIEM, KUMA, RuSIEM).

Детекция аномального объёма API-запросов. Требуется предварительная интеграция Zendesk Audit Log в SIEM через API polling эндпоинта /api/v2/audit_logs или webhook:
Код:
index=zendesk sourcetype=zendesk:audit source_type="ticket" action IN ("exported","update","destroy")
| bucket _time span=1h
| stats count as api_calls by actor_id, src_ip, _time
| where api_calls > 500
| eval severity=if(api_calls>5000,"critical","high")
Порог 500 запросов в час - отправная точка. Скорректируйте под ваш baseline после 30 дней сбора данных. Для Elastic - аналогичная логика через zendesk.audit.action с агрегацией по user.id и source.ip.

Детекция геолокационных аномалий. Второй критичный сигнал - логин агента из нетипичной геолокации. В терминах D3FEND - User Geolocation Logon Pattern Analysis (D3-UGLPA). По данным Google Threat Intelligence Group, UNC6783 использовал анонимизирующие сервисы, создавая характерный паттерн смены геолокации:
Код:
index=zendesk sourcetype=zendesk:audit event_type="login"
| iplocation src_ip
| stats dc(Country) as country_count values(Country) as countries by actor_id
| where country_count > 1
Агент BPO обычно работает из одной страны. Логин из VPN-выхода в другом регионе - алерт.

Детекция нетипичных административных действий. Мониторинг операций, которые обычный агент не делает: отключение MFA, массовый поиск по пользователям, доступ к эндпоинтам bulk export. В кейсе Discord атакующие через Zenbar отключали MFA и искали пользователей по телефонам. Корреляционное правило: если один аккаунт за короткий период выполняет и массовый экспорт тикетов, и административные действия - severity critical, немедленная блокировка сессии.

Детекция аномального upload/download ratio. D3FEND Per Host Download-Upload Ratio Analysis (D3-PHDURA). Агент, который загружает гигабайты вложений, но не отдаёт ничего в ответ - паттерн эксфильтрации. Мониторьте объём исходящего трафика на хосты Zendesk CDN (*.zendesk.com) в привязке к конкретному пользователю.

Привязка к Sigma: для T1078 (Valid Accounts) в SigmaHQ - 114 правил, включая azure_ad_auth_sucess_increase.yml для детекции аномального роста успешных аутентификаций. Адаптируйте логику под Zendesk SSO через ваш IdP (Okta, Azure AD, Keycloak). Для T1213 (Data from Information Repositories) - 12 правил, включая opencanary_git_clone_request.yml. Но правила T1213 в SigmaHQ ориентированы на honeypot-события (OpenCanary) и GitHub audit. Для Zendesk придётся писать собственное detection-правило на основе объёмных метрик API.

Hardening-чеклист: реагирование на инциденты ИБ с SaaS-платформами​

Нумерованный список - можно передать инженеру или включить в отчёт по аудиту.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Два инцидента за полгода показали одну архитектурную проблему: Zendesk воспринимается как "просто тикет-система", а не как критический узел с доступом к PII миллионов пользователей. SOC-команды вкладывают тысячи человеко-часов в мониторинг endpoint'ов и сетевого периметра, а SaaS-платформы третьих сторон остаются в мёртвой зоне.

По опыту расследований подобных инцидентов: проблема не в том, что Zendesk плохо защищён. Проблема в том, что организации не мониторят его вообще. Audit Log существует, API для его сбора существует - но логи Zendesk в SIEM попадают редко. Проверьте прямо сейчас: ваш SOC получает события из Zendesk? Если нет - у вас та же дыра, что была у Discord и Crunchyroll. Если у вас другой стек детекции - на codeby.net коллеги обсуждают адаптацию detection-правил под конкретные SaaS-платформы, включая Zendesk и Freshdesk.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab