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 API | API Microsoft Entra ID | Аудит аутентификации, управление пользователями, политики |
Дополнительно модуль поддерживает:
- Azure Blob Storage - сбор журналов из контейнеров Blob Storage
- Microsoft Intune - мониторинг управления устройствами и политик соответствия
Регистрация приложения Azure AD
Для работы модуля необходимо зарегистрировать приложение в Microsoft Entra ID (Azure Active Directory) и получить учетные данные для доступа к API.
Процедура регистрации
- Перейдите в Microsoft Entra ID - App registrations - New registration
- Укажите имя приложения (например,
Wazuh-Azure-Monitor) - Выберите поддерживаемые типы аккаунтов (Single tenant для одного тенанта)
- Зафиксируйте значения:
- Application (client) ID - идентификатор приложения
- Directory (tenant) ID - идентификатор тенанта
Создание секрета клиента
- Перейдите в Certificates & Secrets - New client secret
- Укажите описание и срок действия
- Скопируйте значение секрета (отображается только один раз)
Назначение разрешений
Для 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
- Перейдите в Log Analytics workspaces на портале Azure
- Выберите рабочую область
- Скопируйте 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Связанные разделы
- Мониторинг облачной безопасности - обзор облачных интеграций
- Office 365 - мониторинг Microsoft 365 (использует Azure AD)
- Возможности Wazuh - модули безопасности платформы