Реализация оповещений GitHub Dependabot и обновлений системы безопасности
GitHub Dependabot предоставляет автоматизированное управление зависимостями, интегрированное непосредственно в репозитории GitHub. Dependabot отслеживает зависимости на предмет уязвимостей безопасности и устаревших версий, оповещая техподдержку репозитория и автоматически создавая пулл-реквесты для обновления уязвимых или устаревших зависимостей. Эта интеграция обеспечивает безопасность зависимостей для всех пользователей GitHub, не требуя отдельных инструментов.
Понимание GitHub Dependabot
GitHub Dependabot состоит из трех основных функций, которые работают совместно для защиты зависимостей:
Оповещения Dependabot
Оповещения Dependabot уведомляют поддержку репозитория при обнаружении уязвимых зависимостей. GitHub постоянно отслеживает базу данных рекомендаций GitHub и другие источники уязвимостей, сравнивая их с зависимостями, используемыми в репозиториях.
Триггеры оповещений:
- Новые раскрытия уязвимостей: Оповещения создаются при добавлении новых уязвимостей в базу данных рекомендаций GitHub.
- Обновления рекомендаций: Существующие оповещения обновляются при изменении сведений об уязвимостях (серьезности, затронутых версиях, исправлениях).
- Изменения графа зависимостей: Новые оповещения создаются при изменении кода, внося уязвимые зависимости.
- Данные об уязвимостях: Дополнительная информация об уязвимостях от Mend (ранее WhiteSource) дополняет базу данных рекомендаций GitHub.
Сведения об оповещении включают:
- Описание уязвимости: Подробное описание проблемы безопасности.
- Уровень серьезности: Классификация показателей и серьезности CVSS (критически важный, высокий, умеренный, низкий).
- Затронутые версии: Какие версии зависимостей содержат уязвимость.
- Исправленные версии: Какие версии исправляют уязвимость.
- Идентификатор CVE: Распространенные уязвимости и идентификатор уязвимостей (CVE) при наличии.
- Классификация CWE: Распространенный тип перечисления слабых мест (CWE), классифицируя уязвимость.
- Ссылка на советы по безопасности GitHub: Ссылка на полные рекомендации с дополнительными сведениями.
Обновления для системы безопасности Dependabot
Обновления безопасности Dependabot автоматически создают pull requests для обновления уязвимых зависимостей на безопасные версии. Когда оповещения Dependabot обнаруживают уязвимости с доступными исправлениями, обновления безопасности могут автоматически создавать пулл-реквесты для устранения уязвимостей.
Автоматическое создание запроса на вытягивание (pull request):
- Триггер уязвимостей безопасности: Обновления безопасности создают pull requests только при обнаружении уязвимостей безопасности, а не для каждого обновления зависимостей.
- Минимальные обновления версий: Пулл-реквесты обновляют зависимости до минимальной версии, которая устраняет уязвимости при сохранении совместимости.
- Оценки совместимости: GitHub вычисляет оценки совместимости, прогнозируя, будут ли обновления нарушать существующую функциональность.
- Заметки о выпуске: Пул-реквесты включают заметки о выпуске и сведения журнала изменений из обновленных зависимостей.
Функции пулл-реквеста:
- Автоматическое тестирование: Pull-запросы активируют существующие конвейеры CI/CD, чтобы убедиться, что обновления не нарушают функциональность.
- Разрешение уязвимостей: Описания pull-запросов объясняют, какие уязвимости исправляются обновлением.
- Команды обновления: Специальные комментарии позволяют поддерживающим управлять моментом слияния, выполнить перебазирование pull requests или игнорировать конкретные обновления.
- Сгруппированные обновления: При необходимости в одном pull request можно обновить несколько уязвимых зависимостей.
Обновления версий Dependabot
Обновления версий Dependabot сохраняют актуальность зависимостей даже при отсутствии уязвимостей. В отличие от обновлений системы безопасности, обновляющих только уязвимые зависимости, обновления версий заранее обновляют зависимости до последних версий на основе настроенных расписаний.
Запланированные обновления:
- Настраиваемая частота: Обновления могут быть запланированы ежедневно, еженедельно или ежемесячно.
- Стратегии обновления: Настройте, следует ли обновлять все зависимости, только прямые зависимости или определенные группы зависимостей.
- Ограничения версий: Соблюдайте ограничения семантического управления версиями, определенные в файлах манифеста.
- Ограничения pull request: Контролируйте количество открытых pull request, которые создаёт Dependabot, чтобы не перегружать сопровождающих.
Включение оповещений Dependabot
Оповещения Dependabot включены по умолчанию для общедоступных репозиториев, но их необходимо включить вручную для частных репозиториев.
Включение оповещений для репозитория
Навигация:
- Перейдите в репозиторий на GitHub.
- Щелкните "Параметры " в меню репозитория.
- Щелкните "Безопасность" и "Анализ " на левой боковой панели.
- Найдите раздел оповещений Dependabot .
- Нажмите кнопку "Включить" , чтобы активировать оповещения Dependabot.
Требование графа зависимостей: Оповещения dependabot требуют включения графа зависимостей. Граф зависимостей автоматически включен для общедоступных репозиториев, но может потребоваться ручная активация для частных репозиториев.
Включение графа зависимостей:
- В разделе "Параметры" → "Безопасность и анализ" найдите граф зависимостей.
- Нажмите кнопку "Включить" , если граф зависимостей еще не активен.
- GitHub начнет анализировать зависимости репозитория для создания графа зависимостей.
Активация на уровне организации
Администраторы организации могут включать оповещения Dependabot во всех репозиториях:
Параметры организации:
- Перейдите к параметрам организации.
- Щелкните "Безопасность" и "Анализ " на левой боковой панели.
- Нажмите кнопку "Включить все рядом с оповещениями Dependabot", чтобы активировать оповещения для всех текущих и будущих репозиториев.
- При необходимости выберите автоматическое включение для новых репозиториев , чтобы включить оповещения для вновь созданных репозиториев.
Поддерживаемые экосистемы пакетов
Оповещения Dependabot поддерживают многочисленные экосистемы пакетов, в том числе:
Поддерживаемые экосистемы:
- JavaScript: npm (package.json, package-lock.json), Yarn (yarn.lock).
- Python: pip (requirements.txt, Pipfile, Pipfile.lock), Poetry (poetry.lock).
- Ruby: Bundler (Gemfile, Gemfile.lock).
- Java: Maven (pom.xml), Gradle (build.gradle, build.gradle.kts).
- .NET: NuGet (*.csproj, packages.config, paket.dependencies).
- Go: Модули Go (go.mod, go.sum).
- PHP: Composer (composer.json, composer.lock).
- Rust: Cargo (Cargo.toml, Cargo.lock).
- Elixir: Mix (mix.exs, mix.lock).
- Dart/Flutter: pub (pubspec.yaml, pubspec.lock).
- Docker: Dockerfiles (ссылки на базовые образы).
- Действия GitHub: Файлы рабочего процесса (версии действий).
- Terraform: Конфигурация Terraform (версии модуля).
Настройка обновлений для системы безопасности Dependabot
Обновления системы безопасности Dependabot требуют явного включения даже при включении оповещений.
Включение обновлений системы безопасности
Конфигурация репозитория:
- Перейдите к разделу "Параметры" → "Безопасность и анализ".
- Найдите обновления безопасности Dependabot.
- Нажмите кнопку "Включить" , чтобы активировать запросы на автоматическое обновление системы безопасности.
- Dependabot начнет отслеживать уязвимые зависимости и будет создавать запросы на вытягивание, когда будут доступны исправления.
Конфигурация всей организации:
- Перейдите к параметрам организации → Безопасность и анализ.
- Нажмите кнопку "Включить все рядом с обновлениями безопасности Dependabot".
- Выберите автоматическое включение для новых репозиториев , чтобы включить для будущих репозиториев.
Поведение обновления системы безопасности
Автоматическое создание запроса на вытягивание (pull request):
- Обнаружение уязвимостей: Когда оповещения Dependabot обнаруживают уязвимую зависимость с доступным исправлением, обновления безопасности создают pull request.
- Минимальные обновления: Запросы на вытягивание обновляются только до минимальной версии, разрешающей уязвимость.
- Семантическое управление версиями: Обновления уважают семантический управление версиями, предпочитая обновления исправлений по сравнению с дополнительными или крупными обновлениями, когда это возможно.
- Тестирование интеграции: Пул-реквесты запускают существующие проверки CI/CD для подтверждения обновлений.
Оценки совместимости: GitHub вычисляет оценки совместимости, указывающие на вероятность того, что обновления будут нарушать существующие функциональные возможности:
- Высокая совместимость: Обновление, скорее всего, безопасно на основе анализа аналогичных репозиториев.
- Средняя совместимость: Обновление может привести к критическим изменениям, требующим проверки.
- Низкая совместимость: Обновление, вероятно, включает критические изменения, требующие изменения кода.
- Неизвестная совместимость: Недостаточно данных для оценки совместимости.
Управление запросами на вытягивание:
- Автоматическое перебазирование: Dependabot автоматически перебазирует пулл-реквесты при изменении базовой ветви.
- Разрешение конфликтов: Пулл-реквесты закрываются, если конфликты предотвращают автоматическую перебазировку.
- Заменяющие обновления: Новые запросы на вытягивание заменяют старые запросы на вытягивание при выпуске новых версий.
- Запланированные обновления: Запросы на вытягивание создаются в соответствии с настроенными расписаниями, чтобы не перегружать поддерживающих.
Настройка обновлений версий Dependabot
Для обновлений версий требуется файл конфигурации, определяющий расписания обновления и поведение.
Создайте конфигурацию dependabot.yml
Конфигурация обновлений версий осуществляется с помощью файла .github/dependabot.yml в репозитории.
Базовая конфигурация:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
Параметры конфигурации:
- Версия: Версия схемы файла конфигурации (всегда 2).
- Обновления: Массив конфигураций обновлений для различных экосистем пакетов.
- package-ecosystem: Диспетчер пакетов для мониторинга (npm, pip, bundler, maven, nuget и т. д.).
- каталог: Расположение файлов манифеста пакета (/для корневого или подкаталогового пути).
- schedule.interval: Частота обновления (ежедневно, еженедельно, ежемесячно).
- open-pull-requests-limit: Максимальное количество открытых pull-реквестов, создаваемых Dependabot (по умолчанию 5).
Пример расширенной конфигурации:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "08:00"
timezone: "America/New_York"
open-pull-requests-limit: 10
reviewers:
- "team/frontend-developers"
assignees:
- "dependency-manager"
labels:
- "dependencies"
- "npm"
commit-message:
prefix: "npm"
include: "scope"
ignore:
- dependency-name: "lodash"
versions: ["4.x"]
allow:
- dependency-type: "production"
Дополнительные параметры:
- schedule.day: День недели для еженедельных обновлений (понедельник по воскресенье).
- schedule.time: Время дня обновлений (24-часовой формат).
- schedule.timezone: Часовой пояс для расписания (идентификатор часового пояса IANA).
- Рецензенты: Пользователи или команды GitHub, которые автоматически запрашиваются для проверок запросов на вытягивание.
- Назначенные: Пользователи GitHub автоматически назначены пулл-реквестам.
- Метки: Метки автоматически применяются к пулреквестам.
- commit-message.prefix: Префикс для сообщений коммитов (полезно для обычных коммитов).
- игнорировать: Зависимости, которые следует игнорировать, опционально с указанными диапазонами версий.
- разрешать: Типы зависимостей для обновления (продакшн, разработка, все).
Несколько пакетных экосистем
Для репозиториев с использованием нескольких языковых экосистем требуются отдельные конфигурации обновлений:
Конфигурация с несколькими экосистемами:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/frontend"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/backend"
schedule:
interval: "weekly"
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
Эта конфигурация отслеживает зависимости npm в /frontend, зависимости Python в /backend, базовые образы Docker в репозитории и версии GitHub Actions в воркфлоу.
Управление запросами на вытягивание в Dependabot
Запросы на вытягивание от Dependabot поддерживают специальные команды для управления обновлениями.
Команды для запроса на вытягивание
Команды комментариев:
-
@dependabot rebase: Перебазировать пулл-реквест на текущую базовую ветку. -
@dependabot recreate: повторно создайте pull request, перезаписав любые ручные изменения. -
@dependabot merge: Выполните слияние пулл-реквеста после прохождения проверки CI. -
@dependabot squash and merge: Объедините коммиты и выполните слияние после прохождения проверок. -
@dependabot cancel merge: отмена ранее запрошенного слияния. -
@dependabot reopen: Повторно откройте закрытый pull request. -
@dependabot close: Закройте pull request и предотвратите его повторное создание Dependabot. -
@dependabot ignore this major version: закройте запрос на вытягивание и игнорируйте будущие обновления данной основной версии. -
@dependabot ignore this minor version: закройте пул-реквест и игнорируйте будущие обновления этой минорной версии. -
@dependabot ignore this dependency: Закрыть pull request и игнорировать все последующие обновления этой зависимости.
Проверка и объединение обновлений
Процесс проверки:
- Проверьте описание pull request: Определите, какая уязвимость устранена или какая версия обновлена.
- Проверьте оценку совместимости: Оцените вероятность критических изменений.
- Проверьте результаты CI/CD: Убедитесь, что автоматические тесты успешно проходят.
- Просмотрите заметки о выпуске: Поймите изменения, включенные в обновление зависимостей.
- При необходимости тестируйте локально: Для основных обновлений обязательно протестируйте функциональность локально перед слиянием.
- Объединение запроса на вытягивание: Утверждение и объединение запроса на вытягивание, чтобы обновить зависимость.
Автоматическое слияние: Для обновлений с низким риском с высоким уровнем совместимости и прохождением тестов рекомендуется настроить автоматическое объединение:
Автоматическое слияние GitHub Actions:
name: Auto-merge Dependabot PRs
on: pull_request
jobs:
auto-merge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Enable auto-merge
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Этот рабочий процесс автоматически включает автоматическое слияние для запросов на вытягивание Dependabot, которые проходят все необходимые проверки.
Оповещения и уведомления Dependabot
Dependabot предоставляет несколько механизмов уведомлений для оповещений об уязвимостях.
Каналы уведомлений
Веб-уведомления:
- Уведомления GitHub: Оповещения отображаются в папке "Входящие" в уведомлениях GitHub.
- Вкладка "Безопасность": Оповещения отображаются на вкладке "Безопасность репозитория" в разделе оповещений Dependabot.
- Аналитика репозитория: Граф зависимостей на вкладке "Аналитика" отображает уязвимые зависимости.
Уведомления по электронной почте:
- Дайджест-сообщения электронной почты: Еженедельные сводки сообщений электронной почты с описанием новых оповещений.
- Сообщения электронной почты в режиме реального времени: Немедленные сообщения электронной почты для критически важных уязвимостей.
- Уведомления организации: Администраторы организации получают уведомления обо всех репозиториях.
Пользовательские уведомления:
- Веб-перехватчики: Настройте веб-перехватчики для получения уведомлений оповещений во внешних системах.
- GitHub API: Запрос API предупреждений Dependabot для программного извлечения сведений о предупреждениях.
- Интеграция безопасности: Сторонние платформы безопасности могут интегрироваться с оповещениями Dependabot через API.
Настройка параметров уведомлений
Параметры уведомлений пользователя:
- Перейдите к параметрам GitHub → уведомлениям.
- Найдите раздел "Оповещения системы безопасности ".
- Настройка параметров уведомлений:
- Участие: Вы будете получать уведомления о репозиториях, за которыми вы следите или в которых участвуете.
- Отслеживание: Получайте уведомления для всех отслеживаемых репозиториев.
- Отправить по электронной почте: Включите уведомления по электронной почте для оповещений системы безопасности.
- Паутина: Включите веб-уведомления в пользовательском интерфейсе GitHub.
Параметры уведомлений организации:
- Перейдите к параметрам организации → Безопасность и анализ.
- Настройте пользователей, получающих уведомления об оповещении системы безопасности:
- Владельцы организации: Автоматическое получение всех оповещений системы безопасности.
- Руководители безопасности: Назначенная группа безопасности получает оповещения.
- Администраторы репозитория: Каждый администратор репозитория получает оповещения для своих репозиториев.
Просмотр оповещений Dependabot
Вкладка "Безопасность" предоставляет комплексное управление оповещениями.
Сведения об оповещении
Перейдите к оповещениям:
- Откройте репозиторий на GitHub.
- Перейдите на вкладку Безопасность .
- Нажмите уведомления Dependabot на левой боковой панели.
- Просмотрите список активных оповещений.
Сведения об оповещении:
- Суровость: Классификация критических, высоких, умеренных или низких уровней серьезности.
- Пакет: Затронутое имя и версия зависимостей.
- Уязвимость: Идентификатор и описание CVE.
- Исправленные версии: Версии, разрешающие уязвимость.
- Уязвимые пути кода: Используется ли уязвимый код (если доступен анализ доступности).
- Доступно автоматическое исправление: Может ли Dependabot автоматически создать pull request для устранения уязвимости.
Управление оповещениями
Действия при оповещениях:
- Проверьте pull request: Если существует автоматическое обновление безопасности, проверьте и объедините pull request.
- Закрыть оповещение: Отклонить ложные положительные или принятые риски с причиной увольнения.
- Отложить оповещение: Временно отключить оповещения, которые не могут быть сразу обработаны.
- Повторное открытие оповещения: Повторно откройте ранее отклоненные оповещения при изменении обстоятельств.
Причины увольнения:
- Исправление запущено: Команда активно работает над исправлением.
- Пропускная способность отсутствует: Проблема признается, но в настоящее время не может быть решена.
- Допустимый риск: Уязвимость не представляет значительный риск в этом контексте.
- Неточно: Предупреждение является ложным срабатыванием.
Интеграция расширенной безопасности GitHub
GitHub Dependabot — это основной компонент расширенной безопасности GitHub, комплексной платформы безопасности GitHub, которая предоставляет функции безопасности корпоративного уровня для защиты цепочки поставок программного обеспечения.
Расширенные функции безопасности
Интегрированные возможности безопасности:
- Проверка зависимостей: Dependabot автоматически проверяет зависимости на наличие известных уязвимостей с помощью базы данных рекомендаций GitHub и отраслевых баз данных уязвимостей.
- Сканирование секретов: Обнаруживает случайно добавленные секреты, токены и учетные данные в коде репозитория и его истории.
- Сканирование кода: Использует CodeQL и другие подсистемы анализа для поиска уязвимостей безопасности и ошибок написания кода в исходном коде.
- Общие сведения о безопасности: Обеспечивает видимость оповещений системы безопасности, уязвимостей и состояния исправления.
- Безопасность цепочки поставок: Граф зависимостей, проверка зависимостей и создание SBOM для комплексной видимости цепочки поставок.
Лицензирование и доступность
Расширенный доступ к безопасности:
- Общедоступные репозитории: Все функции расширенной безопасности GitHub доступны бесплатно в общедоступных репозиториях.
- Частные репозитории: Требуется лицензия GitHub Advanced Security (включена в GitHub Enterprise Cloud и GitHub Enterprise Server).
- GitHub Free/Team: Оповещения Dependabot и обновления безопасности доступны, но для сканирования кода и секретов требуется лицензирование Advanced Security.
Панель обзора безопасности
Обзор безопасности обеспечивает видимость на уровне организации:
Метрики безопасности организации:
- Тенденции генерации оповещений: Просмотр тенденций оповещений системы безопасности во всех репозиториях с течением времени.
- Оценка риска: Определите репозитории с высоким уровнем риска безопасности на основе критических и высокоуровневых оповещений.
- Охват команд: Контролируйте, в каких командах включены функции безопасности, и отслеживайте прогресс в исправлении.
- Отчеты о соответствии: Создание отчетов для требований к соответствию безопасности и аудиту.
Общие сведения о безопасности доступа:
- Перейдите в вашу организацию на GitHub.
- Перейдите на вкладку Безопасность .
- Просмотрите метрики безопасности всей организации, количество оповещений и тенденции.
- Проанализируйте конкретные репозитории или типы оповещений для проведения подробного исследования.
Включение расширенной безопасности
Для владельцев организации:
- Перейдите к параметрам организации.
- Щелкните "Безопасность кода" и "Анализ".
- Включите расширенную безопасность GitHub для частных репозиториев.
- Настройка параметров по умолчанию для:
- Граф зависимостей (автоматически включен).
- Оповещения Dependabot.
- Обновления безопасности Dependabot.
- Сканирование секретов.
- Сканирование кода (требуется настройка рабочего процесса).
Активация на уровне репозитория:
Отдельные репозитории могут включать или отключать функции расширенной безопасности:
- Перейдите к параметрам репозитория.
- Щелкните "Безопасность кода" и "Анализ".
- Включите необходимые функции безопасности:
- Граф зависимостей: Требуется для функциональных возможностей Dependabot.
- Оповещения Dependabot: Уведомления об уязвимостях.
- Обновления безопасности Dependabot: Автоматическое исправление уязвимостей для запросов на вытягивание.
- Сканирование секретов: Обнаружение утечки учетных данных.
- Сканирование кода: Тестирование безопасности статических приложений (SAST).
Интеграция с рабочими процессами разработки
Расширенная безопасность GitHub легко интегрируется с процессами разработки:
Интеграция запроса на вытягивание:
- Проверка зависимостей: Автоматически проверяет изменения зависимостей в пулл-реквестах, выделяя новые уязвимости, вызванные обновлениями зависимостей.
- Проверки безопасности: Автоматическое сканирование кода и секретов выполняется при запросах на вытягивание, блокируя слияния при обнаружении критических проблем.
- Обязательные проверки: Настройте правила защиты ветви, чтобы требовать одобрение команды безопасности для pull-запросов с уведомлениями о безопасности.
Политики безопасности:
- SECURITY.md: Определите политики раскрытия уязвимостей и контактные данные о безопасности.
- Владельцы кода: Назначьте участников группы безопасности владельцами кода для файлов зависимостей (package.json, requirements.txt, pom.xml).
- Защита ветви: Перед разрешением слияний требуются проверки состояния для проверки безопасности.
Аудит и соответствие требованиям:
- Журнал аудита: Отслеживайте все действия, связанные с безопасностью, включая увольнения оповещений, включение функций и изменения доступа.
- Политики безопасности: Применение стандартов безопасности всей организации во всех репозиториях.
- Интеграция соответствия требованиям: Экспортируйте данные безопасности для SOC 2, ISO 27001 и других платформ соответствия требованиям.
GitHub Advanced Security обеспечивает защиту корпоративного уровня для цепочки поставок программного обеспечения с помощью Dependabot, выступающей в качестве основы для управления безопасностью зависимостей. Интегрированный подход платформы обеспечивает комплексное обнаружение уязвимостей, автоматическое исправление и видимость безопасности на уровне организации.
GitHub Dependabot обеспечивает комплексное автоматизированное управление безопасностью зависимостей, встроенное непосредственно в рабочие процессы GitHub. Благодаря включению оповещений, обновлений безопасности и версий, команды разработки могут упреждающим образом устранять уязвимости и поддерживать актуальность зависимостей с минимальными усилиями вручную. В следующем модуле рассматривается интеграция проверок анализа состава программного обеспечения в конвейеры CI/CD, помимо возможностей, встроенных в GitHub.