В Office 365 Outlook нашли недокументированные API c подробными логами активности пользователя

ss4n1hztnfofodcmqntzih5xmee.png

Детальные логи Office 365 Outlook, извлечённые программой Magic-Unicorn-Tool: злоумышленник ищет счёт на оплату (payment invoice). Первая буква поискового запроса введена в 10:42:44.548, последняя в 10:43:07.214. Информация об активности хранится в логах шесть месяцев

Долгое время ходили слухи, что в Office 365 есть встроенный секретный инструмент для записи активности пользователей. В июне 2018 года эти слухи подтвердились в полной мере. Всё началось с видеоролика, опубликованного Anonymous, а потом уже специалисты CrowdSrtike выложили подробный отчёт.

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

Взлом корпоративных почтовых аккаунтов по всему миру приобрёл настолько массовый характер, что некоторые специалисты называют это эпидемией. Злоумышленники получают доступ к электронным таблицам с номерами социального страхования, подробной информации о финансовых накладных и торговым секретам. Они ищут сведения о банковских переводах и воруют деньги, пользуясь отсутствием цифровой подписи на документах. Различные виды мошенничества через компрометацию бизнес-почты описаны в брошюре CrowdStrike.

Например, в начале июня ФБР провело международную операцию и задержало 74 человека в нескольких странах, которые занимались этим бизнесом.

Когда факт взлома становится известен, важно понять: к каким данным получил доступ взломщик, что он видел и какую информацию скопировал. Произошла ли утечка конфиденциальных данных? Расследование инцидентов затрудняется тем, что журналирование в Office 365 выключено по умолчанию. В отсутствие каких-либо реальных сведений компания по закону вынуждена публично объявлять об утечке данных со всеми вытекающими последствиями — репутационными издержками, штрафами и т. д.

Но сейчас стало известно, что в Office 365 существуют Activities API с подробным журналированием, и многих таких скандалов можно было избежать, если бы компании знали об этом API. Возможно, доступ к этим секретным логам получали лишь некие привилегированные клиенты. Есть информация, что некоторые компании, которые специализируются на цифровой криминалистике, знали о секретном инструменте аудита Office 365 в прошлом году, а то и раньше. Кто-то считал их заявления маркетинговой бравадой, но это оказалось правдой. Удивительно, но Activities API существуют, и Microsoft действительно скрывала наличие такого важного и полезного инструмента, названного в профессиональных кругах «Волшебным Единорогом» (Magic Unicorn), отсюда и название программы для самостоятельного разбора логов, которая упомянута ниже.

ji-fe0abu-a7c-v-x6xnh6cbogc.png

Злоумышленник просматривает сообщения, содержащие счёт на оплату и форму W-9. Детальные логи извлечены программой Magic-Unicorn-Tool

Компания CrowdStrike подробно описала, как работает журналирование Office 365 у всех пользователей по умолчанию. Функция состоит из веб API, получающего информацию об активности Office 365 Outlook через Exchange Web Services (EWS). Доступ к API открыт для любого, кто знает конечную точку и специфический HTTP-заголовок.

Недокументированные Activities API являются подмножеством всех трёх версий Outlook REST API (1.0, 2.0 и бета). Как и с остальными подмножествами, вызов к API должен быть аутентифицирован по OAuth 2.0 или по базовой аутентификации.

Конечная точка следующая:

https://outlook.office.com/api/v2.0/{user_context}/Activities

Все запросы отправляются как пакеты HTTP GET, которые должны обязательно включать следующий HTTP-заголовок:

Prefer: exchange.behavior="ActivityAccess"

Запросы без этого заголовка вернут HTTP 400 Bad Request.

Обязателен также заголовок Authorization:

Authorization: Bearer 

Запросы без этого заголовка вернут ответ HTTP 403 Unauthorized.

Для целей тестирования токен доступа OAuth 2.0 можно сгенерировать в песочнице Oauth. Он действует 60 минут.

Простейший вызов к API — запрос десяти последних своих активностей.

GET https://outlook.office.com/api/v2.0/me/Activities

Пример ответа от API в формате JSON показывает стандартные свойства активностей:

{

"value": [

{

"Id":"WOGVSAiPKrfJ4apAPcBksT2en7whzDz4NIbUs3==",

"ActivityCreationTime":"2010-04-01T12:34:56.789Z",

"ActivityIdType":"ReadingPaneDisplayStart",

"AppIdType":"Outlook",

"ClientVersion":"15.00.0000.000",

"ClientSessionId":"679126f3-02de-3513-e336-0eac1294b120",

"ActivityItemId":"NjKG5m6OmaCjGKq6WlbjIzvp94czUDg30qGopD==",

"TimeStamp":"2010-04-01T12:34:56.789Z",

"TenantId":"679126f3-02de-3513-e336-0eac1294b120",

}

]

}

Через API можно запрашивать активности не только для себя, но и для других пользователей, если получено разрешение через Shared Mailbox или Application Permission:

GET https://outlook.office.com/api/v2.0/Users('victim@contoso.com')/Activities

Activities API поддерживают несколько параметров запроса:

  • $orderby: сортировка результатов по заданному выражению
  • $filter: фильтрация результатов по дате и/или типу активности
  • $select: выбор возвращаемых свойств
  • $top: максимальное количество возвращаемых активностей
  • $skip: количество пропускаемых активностей в результатах

На данный момент CrowdStrike идентифицировала 30 видов активностей, но в реальности их может быть и больше. Вот самые полезные:

  • Delete: удаление письма
  • Forward: перенаправление письма
  • LinkClicked: нажатие на ссылку в письме
  • MarkAsRead: сообщение помечено как прочтённое
  • MarkAsUnread: сообщение помечено как непрочтённое
  • MessageDelivered: письмо доставлено в почтовый ящик
  • MessageSent: письмо отправлено из почтового ящика
  • Move: письмо перенесено
  • OpenedAnAttachment: открыто приложение
  • ReadingPaneDisplayEnd: отмена выделения для письма в панели просмотра
  • ReadingPaneDisplayStart: выбор выделения для письма в панели просмотра
  • Reply: ответ на письмо
  • SearchResult: генерация результатов поиска
  • ServerLogon: событие авторизации

Есть и другие интересные типы активностей, полезные при расследовании инцидентов: SenderSmtpAddress, Recipients, Subject, SentTime, InternetMessageId, ClientIP, UserAgent и др.

Специалисты CrowdStrike опубликовали модуль Python, который извлекает информацию по Office 365 Outlook Activities API и записывает полученные данные в файл CSV.

Программа Magic-Unicorn-Tool парсит логи Activities API, добытые вышеупомянутым питоновским модулем. В данный момент она способна разбирать и отображать следующую информацию:

  • Поисковые запросы в почтовом ящике, время просмотра сообщений и/или авторизованных сессий.
  • События авторизации (Logon и ServerLogon), дата, время, IP-адрес и тип браузера.
  • Вся почтовая активность по доставленным и помеченным как прочтённые письмам.
  • События поиска, записанные с ID сессии со ссылкой на последнее событие авторизации.
  • Чтение панели.
  • Просмотр аттачментов.

fjxwn9xwhiceprwy0hk8whevtu4.png

Вход в аккаунт с разных IP-адресов

Magic-Unicorn-Tool распространяется без подписи кода, но с открытыми исходниками.

Внедрение инструментов вроде Activities API без ведома пользователей поднимает ряд практических и этических вопросов для всей индустрии цифровой криминалистики. По умолчанию журналирование отключено на аккаунтах Office 365. Оно не входит в стандартные планы ProPlus и E1. За аудит аккаунтов компании вынуждены платить дополнительные деньги, а из-за отсутствия логов (как они думали) многие компании понесли убытки. В то же время степень детализации логов Activities API намного превышает детализацию документированных способов журналирования, таких как Unified Audit Log.

Специалисты по цифровой криминалистике из компании LMG Security призывают принять стандарты по журналированию активности и возложить его как обязательную нагрузку на облачных провайдеров, как сейчас обязательной нагрузкой является система пожарной сигнализации в дата-центрах.

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

© Habrahabr.ru