Wazuh Office 365 - мониторинг аудита Microsoft 365

Wazuh обеспечивает мониторинг безопасности Microsoft 365 через модуль office365, который собирает журналы аудита из Office 365 Management Activity API. Модуль отслеживает действия пользователей в Exchange Online, SharePoint Online, Microsoft Teams, Azure Active Directory и событиях DLP. Интеграция позволяет обнаруживать подозрительные входы, несанкционированный доступ к почтовым ящикам, нарушения политик DLP и административные действия в рамках тенанта Microsoft 365.

Office 365 Management Activity API

Office 365 Management Activity API - это REST API, предоставляющий доступ к журналам аудита и активности из различных сервисов Microsoft 365. API использует модель подписок: клиент подписывается на определенные типы контента и периодически запрашивает новые события.

Типы контента

Тип контентаОписание
Audit.AzureActiveDirectoryСобытия аутентификации, управления пользователями и группами в Microsoft Entra ID
Audit.ExchangeДействия с почтовыми ящиками, правилами транспорта, антиспамом
Audit.SharePointОперации с файлами, сайтами, разрешениями в SharePoint и OneDrive
Audit.GeneralСобытия рабочих нагрузок, не вошедших в другие категории (Teams, Power BI)
DLP.AllСрабатывания политик Data Loss Prevention для Exchange, SharePoint и OneDrive

Регистрация приложения Azure AD

Для работы модуля необходимо зарегистрировать приложение в Microsoft Entra ID и предоставить разрешения для доступа к Management Activity API.

Процедура регистрации

  1. Перейдите на portal.azure.com в раздел Microsoft Entra ID - App registrations
  2. Нажмите New registration
  3. Укажите имя (например, Wazuh-Office365-Monitor)
  4. Выберите Accounts in this organizational directory only (Single tenant)
  5. Зафиксируйте значения из раздела Overview:
    • Application (client) ID
    • Directory (tenant) ID

Создание секрета клиента

  1. Перейдите в Certificates & Secrets
  2. Нажмите New client secret
  3. Укажите описание и срок действия (рекомендуется 12-24 месяца)
  4. Скопируйте значение секрета (отображается только один раз)

Назначение разрешений API

  1. Перейдите в API permissions - Add a permission
  2. Выберите Office 365 Management APIs
  3. Выберите Application permissions
  4. Добавьте следующие разрешения:
РазрешениеОписание
ActivityFeed.ReadЧтение данных активности организации
ActivityFeed.ReadDlpЧтение событий DLP, включая обнаруженные конфиденциальные данные
  1. Нажмите Grant admin consent for [Your Organization]

Конфигурация модуля office365

Модуль настраивается в ossec.conf на сервере Wazuh.

Базовая конфигурация

<office365>
  <enabled>yes</enabled>
  <interval>1m</interval>
  <curl_max_size>1M</curl_max_size>
  <only_future_events>yes</only_future_events>
  <api_auth>
    <tenant_id>YOUR_TENANT_ID</tenant_id>
    <client_id>YOUR_CLIENT_ID</client_id>
    <client_secret>YOUR_CLIENT_SECRET</client_secret>
    <api_type>commercial</api_type>
  </api_auth>
  <subscriptions>
    <subscription>Audit.AzureActiveDirectory</subscription>
    <subscription>Audit.Exchange</subscription>
    <subscription>Audit.SharePoint</subscription>
    <subscription>Audit.General</subscription>
    <subscription>DLP.All</subscription>
  </subscriptions>
</office365>

Конфигурация для государственных организаций (GCC)

<office365>
  <enabled>yes</enabled>
  <interval>5m</interval>
  <curl_max_size>1M</curl_max_size>
  <only_future_events>yes</only_future_events>
  <api_auth>
    <tenant_id>YOUR_TENANT_ID</tenant_id>
    <client_id>YOUR_CLIENT_ID</client_id>
    <client_secret>YOUR_CLIENT_SECRET</client_secret>
    <api_type>gcc-high</api_type>
  </api_auth>
  <subscriptions>
    <subscription>Audit.AzureActiveDirectory</subscription>
    <subscription>Audit.Exchange</subscription>
  </subscriptions>
</office365>

Мультитенантная конфигурация

При мониторинге нескольких тенантов Microsoft 365 добавьте несколько блоков api_auth:

<office365>
  <enabled>yes</enabled>
  <interval>1m</interval>
  <curl_max_size>1M</curl_max_size>
  <only_future_events>yes</only_future_events>
  <api_auth>
    <tenant_id>TENANT_ID_1</tenant_id>
    <client_id>CLIENT_ID_1</client_id>
    <client_secret>CLIENT_SECRET_1</client_secret>
    <api_type>commercial</api_type>
  </api_auth>
  <api_auth>
    <tenant_id>TENANT_ID_2</tenant_id>
    <client_id>CLIENT_ID_2</client_id>
    <client_secret>CLIENT_SECRET_2</client_secret>
    <api_type>commercial</api_type>
  </api_auth>
  <subscriptions>
    <subscription>Audit.AzureActiveDirectory</subscription>
    <subscription>Audit.General</subscription>
  </subscriptions>
</office365>

Параметры модуля

ПараметрЗначение по умолчаниюОписание
enabledyesВключение или отключение модуля
interval10mИнтервал опроса API (s/m/h/d)
curl_max_size1MМаксимальный размер ответа API
only_future_eventsyesСбор только новых событий после первого запуска
tenant_id-Идентификатор тенанта Azure AD
client_id-Идентификатор приложения (Application ID)
client_secret-Секрет клиента
api_typecommercialТип подписки (commercial, gcc, gcc-high)

API-точки доступа по типу подписки

ТипURL
Enterprisehttps://manage.office.com/api/v1.0/{tenant_id}/activity/feed/{operation}
GCChttps://manage-gcc.office.com/api/v1.0/{tenant_id}/activity/feed/{operation}
GCC Highhttps://manage.office365.us/api/v1.0/{tenant_id}/activity/feed/{operation}
DoDhttps://manage.protection.apps.mil/api/v1.0/{tenant_id}/activity/feed/{operation}

Примеры алертов

Подозрительный вход в учетную запись

{
  "rule": {
    "id": "91545",
    "level": 6,
    "description": "Office 365: Suspicious sign-in activity detected"
  },
  "data": {
    "office365": {
      "Workload": "AzureActiveDirectory",
      "Operation": "UserLoginFailed",
      "UserId": "user@company.com",
      "ClientIP": "198.51.100.42",
      "ResultStatus": "Failed",
      "LogonError": "InvalidUserNameOrPassword",
      "DeviceProperties": {
        "OS": "Windows 10",
        "BrowserType": "Chrome"
      }
    }
  }
}

Доступ к почтовому ящику другого пользователя

{
  "rule": {
    "id": "91550",
    "level": 7,
    "description": "Office 365: Mailbox accessed by non-owner"
  },
  "data": {
    "office365": {
      "Workload": "Exchange",
      "Operation": "MailboxLogin",
      "UserId": "admin@company.com",
      "MailboxOwnerUPN": "ceo@company.com",
      "ClientIP": "10.0.1.50",
      "LogonType": 1,
      "ResultStatus": "Succeeded"
    }
  }
}

Срабатывание политики DLP

{
  "rule": {
    "id": "91560",
    "level": 10,
    "description": "Office 365: DLP policy violation detected"
  },
  "data": {
    "office365": {
      "Workload": "Exchange",
      "Operation": "DlpRuleMatch",
      "UserId": "user@company.com",
      "PolicyDetails": [{
        "PolicyName": "Credit Card Number Detection",
        "Rules": [{
          "RuleName": "Block external sharing of credit cards",
          "Severity": "High",
          "ConditionsMatched": {
            "SensitiveInformation": [{
              "SensitiveInformationTypeName": "Credit Card Number",
              "Count": 3
            }]
          }
        }]
      }]
    }
  }
}

Административное действие

{
  "rule": {
    "id": "91570",
    "level": 8,
    "description": "Office 365: Admin role assigned to user"
  },
  "data": {
    "office365": {
      "Workload": "AzureActiveDirectory",
      "Operation": "Add member to role",
      "UserId": "globaladmin@company.com",
      "ObjectId": "user@company.com",
      "ModifiedProperties": [{
        "Name": "Role.DisplayName",
        "NewValue": "Global Administrator"
      }]
    }
  }
}

Сценарии использования

Обнаружение подозрительных входов

  • Множественные неудачные попытки входа (brute force)
  • Входы с географически удаленных локаций в короткий промежуток (impossible travel)
  • Входы с анонимных IP-адресов
  • Успешный вход после серии отказов (password spraying)

Мониторинг доступа к почтовым ящикам

  • Доступ к чужому почтовому ящику делегированным пользователем
  • Создание правил пересылки почты на внешние адреса
  • Массовое удаление сообщений
  • Изменение прав доступа к календарю

Обнаружение нарушений DLP

  • Отправка документов с номерами кредитных карт
  • Пересылка файлов с персональными данными на внешние адреса
  • Загрузка конфиденциальных документов в SharePoint с открытым доступом
  • Обнаружение паттернов конфиденциальных данных в Teams

Мониторинг административных действий

  • Назначение привилегированных ролей (Global Admin, Exchange Admin)
  • Изменение политик условного доступа
  • Создание или модификация правил транспорта Exchange
  • Отключение аудита или многофакторной аутентификации

Устранение неполадок

Модуль не получает события

  • Проверьте корректность tenant_id, client_id и client_secret
  • Убедитесь, что разрешения ActivityFeed.Read и ActivityFeed.ReadDlp назначены
  • Проверьте, что предоставлено согласие администратора (Admin Consent)
  • Подождите до 24 часов после первой активации - API может требовать время на подготовку подписок

Ошибка аутентификации

  • Проверьте, что секрет клиента не истек
  • Убедитесь, что api_type соответствует вашей подписке (commercial, gcc, gcc-high)
  • Проверьте, что приложение не заблокировано в Azure AD
  • Просмотрите журнал /var/ossec/logs/ossec.log на наличие HTTP 401/403

Пустые ответы API

  • Убедитесь, что аудит включен в центре администрирования Microsoft 365
  • Проверьте, что подписки на нужные типы контента активны
  • При первом запуске установите only_future_events в no для получения исторических данных
  • Проверьте, что в тенанте есть активность за запрошенный период

Высокий объем событий

  • Ограничьте подписки только необходимыми типами контента
  • Увеличьте значение interval для снижения частоты опроса
  • Создайте правила Wazuh для фильтрации шумных событий
  • Используйте curl_max_size для ограничения объема данных за один запрос

Связанные разделы

Last updated on