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

Персональный токен доступа

Создание токена

  1. Перейдите в Settings - Developer settings - Personal access tokens - Tokens (classic)
  2. Нажмите Generate new token (classic)
  3. Укажите описательное имя (например, Wazuh Audit Log Reader)
  4. Установите срок действия
  5. Выберите необходимые scopes

Необходимые scopes

ScopeОписание
admin:orgПолный доступ к управлению организацией (включает чтение audit log)
audit_logЧтение журнала аудита организации
repoДоступ к событиям репозиториев (для частных репозиториев)

Минимально необходимый scope - audit_log. Scope admin:org предоставляет расширенный доступ к событиям управления участниками и командами.

  1. Нажмите Generate token
  2. Скопируйте токен (отображается только один раз)

Конфигурация модуля 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>

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

ПараметрЗначение по умолчаниюОписание
enabledyesВключение или отключение модуля
interval10mИнтервал опроса API (s/m/h/d)
time_delay30sЗадержка сканирования для учета лага API
curl_max_size1MМаксимальный размер ответа API
only_future_eventsyesСбор только новых событий после первого запуска
org_name-Имя организации GitHub
api_token-Персональный токен доступа
event_typeallТип событий для мониторинга (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

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

Last updated on