Wazuh Azure - мониторинг Microsoft Azure

Wazuh обеспечивает мониторинг безопасности Microsoft Azure через модуль azure-logs, который собирает журналы активности, данные Log Analytics и события Microsoft Graph API. Модуль позволяет отслеживать действия пользователей в Azure-подписках, изменения ресурсов, события аутентификации Microsoft Entra ID и данные из Azure Blob Storage. Интеграция предоставляет единую точку анализа облачных угроз в гибридных средах.

Поддерживаемые источники данных

Модуль azure-logs собирает данные из трех основных источников:

ИсточникТип данныхНазначение
Activity LogsЖурналы подпискиДействия с ресурсами, операции управления, диагностика
Log AnalyticsАналитические запросыАгрегация событий из различных источников Azure
Microsoft Graph APIAPI Microsoft Entra IDАудит аутентификации, управление пользователями, политики

Дополнительно модуль поддерживает:

  • Azure Blob Storage - сбор журналов из контейнеров Blob Storage
  • Microsoft Intune - мониторинг управления устройствами и политик соответствия

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

Для работы модуля необходимо зарегистрировать приложение в Microsoft Entra ID (Azure Active Directory) и получить учетные данные для доступа к API.

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

  1. Перейдите в Microsoft Entra ID - App registrations - New registration
  2. Укажите имя приложения (например, Wazuh-Azure-Monitor)
  3. Выберите поддерживаемые типы аккаунтов (Single tenant для одного тенанта)
  4. Зафиксируйте значения:
    • Application (client) ID - идентификатор приложения
    • Directory (tenant) ID - идентификатор тенанта

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

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

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

Для Log Analytics и Activity Logs:

  • Назначьте роль Reader на уровне подписки Azure

Для Microsoft Graph API:

  • Перейдите в API permissions - Add a permission - Microsoft Graph
  • Добавьте разрешения AuditLog.Read.All и Directory.Read.All (Application)
  • Предоставьте согласие администратора (Grant admin consent)

Конфигурация модуля azure-logs

Модуль настраивается в ossec.conf на сервере Wazuh или агенте. Учетные данные хранятся в отдельных файлах.

Файл учетных данных

Создайте файл /var/ossec/wodles/credentials/azure_credentials:

application_id = YOUR_APPLICATION_ID
application_key = YOUR_CLIENT_SECRET

Для Azure Storage создайте отдельный файл /var/ossec/wodles/credentials/storage_credentials:

account_name = YOUR_STORAGE_ACCOUNT
account_key = YOUR_STORAGE_KEY

Установите разрешения:

sudo chown root:wazuh /var/ossec/wodles/credentials/azure_credentials
sudo chmod 640 /var/ossec/wodles/credentials/azure_credentials

Конфигурация Log Analytics

<wodle name="azure-logs">
  <disabled>no</disabled>
  <run_on_start>yes</run_on_start>

  <log_analytics>
    <auth_path>/var/ossec/wodles/credentials/azure_credentials</auth_path>
    <tenantdomain>mycompany.onmicrosoft.com</tenantdomain>
    <request>
      <query>AzureActivity</query>
      <workspace>12345678-90ab-cdef-1234-567890abcdef</workspace>
      <time_offset>1d</time_offset>
    </request>
  </log_analytics>
</wodle>

Конфигурация Microsoft Graph API

<wodle name="azure-logs">
  <disabled>no</disabled>
  <run_on_start>yes</run_on_start>

  <graph>
    <auth_path>/var/ossec/wodles/credentials/azure_credentials</auth_path>
    <tenantdomain>mycompany.onmicrosoft.com</tenantdomain>
    <request>
      <query>auditLogs/directoryAudits</query>
      <time_offset>1d</time_offset>
    </request>
    <request>
      <query>auditLogs/signIns</query>
      <time_offset>1d</time_offset>
    </request>
  </graph>
</wodle>

Конфигурация Azure Storage

<wodle name="azure-logs">
  <disabled>no</disabled>
  <run_on_start>yes</run_on_start>

  <storage>
    <auth_path>/var/ossec/wodles/credentials/storage_credentials</auth_path>
    <container name="insights-activity-logs">
      <blobs>.json</blobs>
      <content_type>json_inline</content_type>
      <time_offset>24h</time_offset>
    </container>
  </storage>
</wodle>

Комбинированная конфигурация

<wodle name="azure-logs">
  <disabled>no</disabled>
  <run_on_start>yes</run_on_start>

  <log_analytics>
    <auth_path>/var/ossec/wodles/credentials/azure_credentials</auth_path>
    <tenantdomain>mycompany.onmicrosoft.com</tenantdomain>
    <request>
      <query>AzureActivity | where Level == "Error"</query>
      <workspace>12345678-90ab-cdef-1234-567890abcdef</workspace>
      <time_offset>12h</time_offset>
    </request>
  </log_analytics>

  <graph>
    <auth_path>/var/ossec/wodles/credentials/azure_credentials</auth_path>
    <tenantdomain>mycompany.onmicrosoft.com</tenantdomain>
    <request>
      <query>auditLogs/signIns</query>
      <time_offset>1d</time_offset>
    </request>
  </graph>
</wodle>

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

ПараметрОписание
disabledВключение или отключение модуля (no/yes)
run_on_startЗапуск при старте сервиса (yes/no)
auth_pathПуть к файлу учетных данных
tenantdomainДоменное имя тенанта Azure AD
queryЗапрос Log Analytics (KQL) или ресурс Graph API
workspaceИдентификатор рабочей области Log Analytics
time_offsetВременное окно для запроса (1d, 12h, 1h)
content_typeФормат данных в Blob Storage (json_inline, json_file)

Интеграция с Log Analytics

Azure Log Analytics Workspace агрегирует данные из различных источников Azure. Модуль Wazuh выполняет запросы KQL (Kusto Query Language) к рабочей области для извлечения событий.

Получение идентификатора Workspace

  1. Перейдите в Log Analytics workspaces на портале Azure
  2. Выберите рабочую область
  3. Скопируйте Workspace ID из раздела Overview

Полезные запросы KQL

Запрос ошибок активности:

AzureActivity | where Level == "Error"

Запрос событий безопасности:

SecurityEvent | where EventID == 4625

Запрос изменений ресурсов:

AzureActivity | where OperationNameValue contains "write" or OperationNameValue contains "delete"

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

Подозрительный вход в Azure AD

{
  "rule": {
    "id": "62503",
    "level": 5,
    "description": "Azure AD: Sign-in from unusual location"
  },
  "data": {
    "azure": {
      "category": "SignInLogs",
      "operationName": "Sign-in activity",
      "properties": {
        "userPrincipalName": "user@company.com",
        "ipAddress": "198.51.100.42",
        "location": {
          "countryOrRegion": "CN"
        },
        "status": {
          "errorCode": 0,
          "additionalDetails": "MFA completed"
        }
      }
    }
  }
}

Изменение критического ресурса

{
  "rule": {
    "id": "62510",
    "level": 7,
    "description": "Azure: Critical resource modification detected"
  },
  "data": {
    "azure": {
      "operationName": "Microsoft.Network/networkSecurityGroups/write",
      "category": "Administrative",
      "caller": "admin@company.com",
      "properties": {
        "statusCode": "Created",
        "resource": "production-nsg"
      }
    }
  }
}

Нарушение политики соответствия

{
  "rule": {
    "id": "62520",
    "level": 6,
    "description": "Azure Policy: Non-compliant resource detected"
  },
  "data": {
    "azure": {
      "operationName": "Microsoft.Authorization/policyAssignments/write",
      "category": "Policy",
      "properties": {
        "complianceState": "NonCompliant",
        "policyDefinitionName": "require-tag-on-resources"
      }
    }
  }
}

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

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

  • Входы с нетипичных географических расположений
  • Множественные неудачные попытки аутентификации
  • Входы с анонимных IP-адресов (Tor, VPN)
  • Входы с устройств без MFA при активной политике MFA

Мониторинг изменений ресурсов

  • Создание или удаление виртуальных машин
  • Изменение правил Network Security Groups
  • Модификация политик доступа Key Vault
  • Изменение настроек подписки

Контроль соответствия требованиям

  • Отслеживание ресурсов без обязательных тегов
  • Мониторинг незашифрованных хранилищ данных
  • Контроль назначения привилегированных ролей Azure RBAC
  • Отслеживание отклонений от Azure Policy

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

Модуль не подключается к Azure

  • Проверьте корректность Application ID и Client Secret
  • Убедитесь, что срок действия секрета не истек
  • Проверьте, что приложению назначены необходимые разрешения
  • Убедитесь, что согласие администратора предоставлено

Пустые результаты Log Analytics

  • Проверьте правильность Workspace ID
  • Убедитесь, что рабочая область содержит данные за запрошенный период
  • Протестируйте KQL-запрос в Azure Portal (Log Analytics - Logs)
  • Проверьте значение time_offset - оно должно покрывать период с данными

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

  • Проверьте, что разрешения API назначены как Application, а не Delegated
  • Убедитесь, что предоставлено согласие администратора
  • Проверьте, что tenant domain указан корректно
  • Проверьте журнал /var/ossec/logs/ossec.log на предмет ошибок HTTP

Зависимости Python

Модуль требует Python 3.8-3.13 и дополнительные библиотеки:

/var/ossec/framework/python/bin/pip3 install azure-storage-blob azure-identity

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

Last updated on