Wazuh GitHub - мониторинг аудита организаций
Wazuh обеспечивает мониторинг безопасности организаций GitHub через модуль github, который собирает события аудита через GitHub Audit Log API. Модуль отслеживает действия с репозиториями, управление участниками и командами, изменения настроек организации и git-операции. Интеграция позволяет обнаруживать изменения видимости репозиториев, добавление внешних коллабораторов, события secret scanning и другие критичные действия в рамках организации.
GitHub Audit Log API
GitHub Audit Log API предоставляет доступ к журналу аудита организации GitHub Enterprise Cloud. API фиксирует все действия, выполненные участниками организации, включая административные операции и git-события.
Для использования API требуется:
- Подписка GitHub Enterprise Cloud
- Статус Owner в организации GitHub
- Персональный токен доступа с соответствующими scopes
Персональный токен доступа
Создание токена
- Перейдите в Settings - Developer settings - Personal access tokens - Tokens (classic)
- Нажмите Generate new token (classic)
- Укажите описательное имя (например,
Wazuh Audit Log Reader) - Установите срок действия
- Выберите необходимые scopes
Необходимые scopes
| Scope | Описание |
|---|---|
admin:org | Полный доступ к управлению организацией (включает чтение audit log) |
audit_log | Чтение журнала аудита организации |
repo | Доступ к событиям репозиториев (для частных репозиториев) |
Минимально необходимый scope - audit_log. Scope admin:org предоставляет расширенный доступ к событиям управления участниками и командами.
- Нажмите Generate token
- Скопируйте токен (отображается только один раз)
Конфигурация модуля github
Модуль настраивается в ossec.conf на сервере Wazuh.
Базовая конфигурация
<github>
<enabled>yes</enabled>
<interval>1m</interval>
<time_delay>1m</time_delay>
<curl_max_size>1M</curl_max_size>
<only_future_events>yes</only_future_events>
<api_auth>
<org_name>my-organization</org_name>
<api_token>ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</api_token>
</api_auth>
<api_parameters>
<event_type>all</event_type>
</api_parameters>
</github>Мониторинг только web-событий
<github>
<enabled>yes</enabled>
<interval>5m</interval>
<time_delay>1m</time_delay>
<curl_max_size>1M</curl_max_size>
<only_future_events>yes</only_future_events>
<api_auth>
<org_name>my-organization</org_name>
<api_token>ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</api_token>
</api_auth>
<api_parameters>
<event_type>web</event_type>
</api_parameters>
</github>Мониторинг нескольких организаций
<github>
<enabled>yes</enabled>
<interval>1m</interval>
<time_delay>1m</time_delay>
<curl_max_size>1M</curl_max_size>
<only_future_events>yes</only_future_events>
<api_auth>
<org_name>production-org</org_name>
<api_token>ghp_production_token_xxxxxxxxxxxxx</api_token>
</api_auth>
<api_auth>
<org_name>development-org</org_name>
<api_token>ghp_development_token_xxxxxxxxxxxxx</api_token>
</api_auth>
<api_parameters>
<event_type>all</event_type>
</api_parameters>
</github>Параметры модуля
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
enabled | yes | Включение или отключение модуля |
interval | 10m | Интервал опроса API (s/m/h/d) |
time_delay | 30s | Задержка сканирования для учета лага API |
curl_max_size | 1M | Максимальный размер ответа API |
only_future_events | yes | Сбор только новых событий после первого запуска |
org_name | - | Имя организации GitHub |
api_token | - | Персональный токен доступа |
event_type | all | Тип событий для мониторинга (all, web, git) |
Типы отслеживаемых событий
Категория web
Web-события охватывают административные действия в организации:
| Категория | Примеры событий |
|---|---|
| Репозитории | Создание, удаление, изменение видимости, архивация, fork |
| Организация | Изменение настроек, обновление политик, переименование |
| Команды | Создание, удаление, добавление и удаление участников |
| Участники | Приглашение, удаление, изменение ролей |
| Webhooks | Создание, удаление, изменение конфигурации |
| Приложения | Установка, удаление, изменение разрешений GitHub Apps |
| Secret scanning | Обнаружение секретов в коде, оповещения |
| Dependabot | Оповещения об уязвимостях зависимостей |
Категория git
Git-события фиксируют операции с кодом:
| Событие | Описание |
|---|---|
git.clone | Клонирование репозитория |
git.fetch | Получение изменений из удаленного репозитория |
git.push | Отправка изменений в удаленный репозиторий |
Примеры алертов
Изменение видимости репозитория
{
"rule": {
"id": "91400",
"level": 9,
"description": "GitHub: Repository visibility changed to public"
},
"data": {
"github": {
"action": "repo.access",
"actor": "admin-user",
"org": "my-organization",
"repo": "my-organization/internal-tools",
"visibility": "public",
"created_at": "2025-01-15T10:30:00Z"
}
}
}Добавление внешнего коллаборатора
{
"rule": {
"id": "91410",
"level": 6,
"description": "GitHub: External collaborator added to repository"
},
"data": {
"github": {
"action": "repo.add_member",
"actor": "repo-admin",
"org": "my-organization",
"repo": "my-organization/production-app",
"user": "external-developer",
"created_at": "2025-01-15T11:00:00Z"
}
}
}Оповещение secret scanning
{
"rule": {
"id": "91420",
"level": 12,
"description": "GitHub: Secret detected in repository code"
},
"data": {
"github": {
"action": "secret_scanning_alert.created",
"actor": "github-bot",
"org": "my-organization",
"repo": "my-organization/api-service",
"data": {
"alert_number": 42,
"secret_type": "aws_access_key_id",
"resolution": null
}
}
}
}Удаление команды
{
"rule": {
"id": "91430",
"level": 7,
"description": "GitHub: Team deleted from organization"
},
"data": {
"github": {
"action": "team.destroy",
"actor": "org-owner",
"org": "my-organization",
"team": "security-team",
"created_at": "2025-01-15T14:00:00Z"
}
}
}Сценарии использования
Обнаружение изменений видимости репозиториев
- Изменение приватного репозитория на публичный
- Изменение настроек fork для приватных репозиториев
- Архивация активных репозиториев
- Удаление репозиториев с production-кодом
Мониторинг новых коллабораторов
- Добавление внешних коллабораторов к репозиториям с критическим кодом
- Приглашение пользователей в организацию с ролью Owner
- Добавление участников в команды с доступом к production-репозиториям
- Изменение разрешений существующих участников
Мониторинг secret scanning
- Обнаружение API-ключей AWS, GCP, Azure в коде
- Обнаружение токенов баз данных и сервисных аккаунтов
- Обнаружение приватных ключей SSH и TLS-сертификатов
- Отслеживание статуса разрешения обнаруженных секретов
Контроль административных действий
- Изменение политик организации (требование 2FA, ограничение fork)
- Установка и удаление GitHub Apps с расширенными разрешениями
- Создание и изменение webhook-конфигураций
- Изменение настроек защиты веток (branch protection rules)
Устранение неполадок
Модуль не получает события
- Проверьте, что организация имеет подписку GitHub Enterprise Cloud
- Убедитесь, что токен создан владельцем организации (Owner)
- Проверьте, что токен содержит scope
audit_logилиadmin:org - Убедитесь, что имя организации указано корректно в
org_name - Просмотрите журнал:
/var/ossec/logs/ossec.log
Ошибка 401 Unauthorized
- Проверьте, что токен не отозван и не истек
- Убедитесь, что токен является классическим (Personal access tokens classic), а не fine-grained
- Проверьте, что SSO авторизован для токена (если организация использует SAML SSO)
Неполные данные аудита
- Git-события доступны только с подпиской GitHub Enterprise Cloud
- Некоторые события могут задерживаться до 30 минут
- Увеличьте
time_delayдля учета задержки API - При первом запуске установите
only_future_eventsвno
Ошибка Rate Limit
- GitHub API ограничивает количество запросов до 1750 в час для Enterprise
- Увеличьте значение
interval(например, до 5m или 10m) - Для организаций с высокой активностью рассмотрите фильтрацию по
event_type
Связанные разделы
- Мониторинг облачной безопасности - обзор облачных интеграций
- Мониторинг Office 365 - интеграция с Microsoft 365
- Возможности Wazuh - модули безопасности платформы