Сведения о безопасности цепочки поставок на GitHub
При разработке проекта программного обеспечения, скорее всего, вы используете другое программное обеспечение для создания и запуска приложения, таких как библиотеки с открытым кодом, платформы или другие средства. Эти ресурсы совместно называются "зависимостями", так как проект зависит от них для правильной работы. Проект может полагаться на сотни этих зависимостей, формируя то, что называется вашей "цепочкой поставок".
Цепочка поставок может представлять проблему безопасности. Если у одной из зависимостей есть известная слабость системы безопасности или ошибка, злоумышленники могут использовать эту уязвимость, например вставлять вредоносный код ("вредоносные программы"), украсть конфиденциальные данные или вызвать другой тип нарушений в проекте. Этот тип угрозы называется "атакой цепочки поставок". Наличие уязвимых зависимостей в цепочке поставок компрометирует безопасность собственного проекта, и вы также рискуете у пользователей.
Одной из наиболее важных вещей, которые можно сделать для защиты цепочки поставок, заключается в исправлении уязвимых зависимостей и замене любых вредоносных программ.
Вы добавляете зависимости непосредственно в цепочку поставок, когда указываете их в файле манифеста или файле блокировки. Зависимости также могут быть включены транзитивно, то есть, даже если вы не указываете конкретную зависимость, но ваша зависимость использует ее, вы также зависите от этой зависимости.
GitHub предоставляет ряд функций, которые помогут вам понять зависимости в вашей среде, узнать об уязвимостях в этих зависимостях и исправить их.
Функции цепочки поставок на GitHub являются следующими: * Граф зависимостей * Проверка зависимостей * Dependabot alerts * Dependabot updates * Dependabot security updates * Dependabot version updates * Неизменные релизы * Аттестации артефактов
Граф зависимостей занимает центральное место в обеспечении безопасности цепочки поставок. Граф зависимостей определяет все вышестоящие зависимости и общедоступные нижестоящие зависимости репозитория или пакета. Граф зависимостей репозитория отслеживает и отображает свои зависимости и некоторые их свойства, такие как сведения об уязвимостях.
Следующие характеристики цепочки поставок на GitHub основаны на информации, предоставляемой графом зависимостей.
- Проверка зависимостей использует граф зависимостей для определения изменений зависимостей и помогает понять влияние этих изменений на безопасность при проверке запросов на вытягивание.
- Dependabot перекрестно ссылается на данные зависимостей, предоставляемые граф зависимостей со списком рекомендаций, опубликованных в GitHub Advisory Database, сканирует зависимости и создает Dependabot alerts при обнаружении потенциальной уязвимости.
- Dependabot security updates используют граф зависимостей и Dependabot alerts для обновления зависимостей с известными уязвимостями в репозитории.
Dependabot version updates не используют граф зависимостей и вместо него полагаются на семантическое управление версиями зависимостей. Dependabot version updates помогают поддерживать ваши зависимости в актуальном состоянии, даже если в них нет уязвимостей.
Рекомендации по обеспечению безопасности сквозной цепочки поставок, включая защиту личная учетная запись, кода и процессов сборки, см. в разделе Защита сквозной цепочки поставок.
Обзор возможностей
Что такое схема зависимостей?
Чтобы создать граф зависимостей, GitHub просматривает явные зависимости репозитория, объявленные в файлах манифеста и блокировки. Если этот параметр включен, граф зависимостей автоматически анализирует все известные файлы манифеста пакетов в репозитории и использует их для построения графа с известными именами и версиями зависимостей.
- Граф зависимостей содержит сведения о ваших прямых и транзитивных зависимостях.
- Граф зависимостей автоматически обновляется, когда вы отправляете в GitHub фиксацию, которая изменяет или добавляет поддерживаемый файл манифеста или блокировки в ветвь по умолчанию, а также когда кто-либо отправляет в репозиторий изменение одной из ваших зависимостей.
- Граф зависимостей также могут содержать сведения, предоставляемые в проекте, с помощью GitHub Actions. Некоторые экосистемы пакетов извлекают большую часть их транзитивных зависимостей во время сборки, поэтому отправка сведений о зависимостях, так как сборка происходит, обеспечивает более полное представление цепочки поставок.
- Вы можете увидеть граф зависимостей, открыв главную страницу репозитория на GitHub, и перейдя на вкладку "Аналитика".
- Если у вас есть по крайней мере доступ на чтение к репозиторию, вы можете экспортировать граф зависимостей для репозитория в качестве совместимого с SPDX программного обеспечения, счета за материалы (SBOM) с помощью пользовательского интерфейса GitHub или GitHub REST API. Дополнительные сведения см. в разделе Экспорт программного счета за материалы для репозитория.
Вы можете использовать API отправки зависимостей для отправки зависимостей из выбранного менеджера пакетов или экосистемы, даже если экосистема не поддерживается графом зависимостей для анализа манифеста или блокировки файлов. Зависимости, отправленные в проект с помощью API отправки зависимостей показывают, какой детектор использовался для их отправки и когда они были отправлены. Дополнительные сведения о API отправки зависимостейсм. в разделе Использование API отправки зависимостей.
Дополнительные сведения о граф зависимостей см. в разделе Сведения о графе зависимостей.
Что такое проверка зависимостей?
Проверка зависимостей помогает рецензентам и участникам разобраться в изменениях зависимостей и понять их влияние на безопасность в каждом запросе на вытягивание.
- Проверка зависимостей сообщает, какие зависимости были добавлены, удалены или обновлены в запросе на вытягивание. Вы можете использовать даты выпуска, популярность зависимостей и сведения об уязвимостях, чтобы решить, следует ли принять изменение.
- Чтобы просмотреть проверку зависимостей для запроса на вытягивание, откройте расширенный инструмент сравнения на вкладке Измененные файлы.
Дополнительные сведения о проверке зависимостей см. в разделе Сведения о проверке зависимостей.
Что такое Dependabot?
Dependabot обеспечивает актуальность зависимостей, уведомляя вас об уязвимостях системы безопасности в зависимостях и автоматически открывая запросы на вытягивание для обновления зависимостей. Запросы на вытягивание Dependabot будут нацелены на следующую доступную безопасную версию, когда активируется оповещение Dependabot или последнюю версию при публикации выпуска.
Термин "Dependabot" включает следующие функции:
- Dependabot alerts: отображаемое уведомление на вкладке "Безопасность" для репозитория и в граф зависимостей репозитория. Оповещение содержит ссылку на затронутый файл в проекте, а также сведения об исправленной версии.
- Dependabot updates:
- Dependabot security updates: активировали обновления для обновления зависимостей до безопасной версии при активации оповещения.
- Dependabot version updates: запланированные обновления для актуальности зависимостей с последней версией.
Запросы на вытягивание, открытые Dependabot, могут активировать рабочие процессы, выполняющие действия. Дополнительные сведения см. в разделе Автоматизация Dependabot с помощью GitHub Actions.
По умолчанию:
-
Если для репозитория включен параметр GitHub Actions, GitHub запускает Dependabot updates на GitHub Actions.
-
Если GitHub Actions не включен для репозитория, GitHub создает Dependabot alerts с помощью встроенного приложения Dependabot .
Дополнительные сведения см. в разделе Сведения о зависимостях на GitHub Actions runners.
Dependabot security updates может исправить уязвимые зависимости в GitHub Actions. При включении обновлений системы безопасности Dependabot автоматически создает запрос на вытягивание для обновления уязвимых данных GitHub Actions, используемых в рабочих процессах до минимальной исправленной версии. Дополнительные сведения см. в разделе Сведения об обновлениях для системы безопасности Dependabot.
Что такое оповещения Dependabot?
Dependabot alerts выделите репозитории, затронутые недавно обнаруженной уязвимостью на основе граф зависимостей и GitHub Advisory Database, которая содержит рекомендации по известным уязвимостям.
- Dependabot выполняет сканирование для обнаружения небезопасных зависимостей и отправляет Dependabot alerts, когда происходит следующее.
- В GitHub Advisory Database добавляется новая рекомендация.
- Изменяется граф зависимостей для репозитория.
- Dependabot alerts отображаются на вкладке "Безопасность" для репозитория и в граф зависимостей репозитория. Оповещение содержит ссылку на затронутый файл в проекте, а также сведения об исправленной версии.
Дополнительные сведения см. в разделе Сведения об оповещениях Dependabot.
Что такое обновления Dependabot?
Существует два типа Dependabot updates: обновления системы безопасности и обновления версий Dependabot. Dependabot создает автоматические запросы на вытягивание для обновления ваших зависимостей в обоих случаях, но есть несколько различий.
Dependabot security updates:
- активируются оповещением Dependabot;
- обновляют зависимости до минимальной версии, которая устраняет известную уязвимость;
- поддерживаются для экосистем, поддерживаемых графом зависимостей.
- файл конфигурации не является обязательным, но его можно использовать для переопределения поведения по умолчанию.
Dependabot version updates:
- файл конфигурации является обязательным;
- запускаются по настроенному вами расписанию;
- обновляют зависимости до последней версии, которая соответствует конфигурации;
- поддерживаются для другой группы экосистем.
Дополнительные сведения о Dependabot updatesсм. в разделе [AUTOTITLE и Сведения об обновлениях для системы безопасности Dependabot](/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates).
Что такое неизменяемые релизы?
Репозитории могут включать неизменяемые релизы, чтобы предотвратить изменение ассетов и связанного с ним тега Git релиза после публикации. Это снижает риск атак на цепочку поставок, предотвращая внедрение уязвимостей злоумышленниками в используемые вами релизы. Это также означает, что проекты, зависящие от конкретных релизов, реже ломаются.
Создание неизменяемого релиза автоматически генерирует аттестацию для этого релиза. Вы можете использовать это подтверждение, чтобы убедиться, что релиз и его артефакты совпадают с опубликованной информацией.
Что такое аттестации артефактов?
Поставщики программного обеспечения могут генерировать аттестации для программного обеспечения, построенного на GitHub Actions. Аттестации — это криптографически подписанные утверждения, которые устанавливают происхождение сборки (исходный код и рабочий процесс, использованный для её создания) или соответствующий программный список материалов (SBOM).
Вы можете повысить безопасность цепочки поставок, проверяя подтверждения ваших зависимости. Хотя аттестации не гарантируют безопасность, они дают информацию о том, где и как было создано программное обеспечение, чтобы вы могли быть уверены, что ваши зависимости не были изменены. Вы можете ограничить развертывания с помощью такого инструмента, как Kubernetes Admissions Controller, чтобы предотвратить развертывание незаверённых сборок.
Когда вы используете GitHub Actions для генерации аттестаций для собственных сборок вашей организации, созданные артефакты автоматически загружаются в linked artifacts page. Эта платформа позволяет просматривать записи хранения и развертывания всех связанных артефактов, чтобы найти исходный код и рабочий процесс, запущенный для создания артефакта, или фильтровать оповещения безопасности по контексту развертывания.
Доступность функций
Общедоступные репозитории: * Граф зависимостей: включен по умолчанию и не может быть отключен. * Проверка зависимостей: включена по умолчанию и не может быть отключена. * Dependabot alerts: не включен по умолчанию. GitHub обнаруживает небезопасные зависимости и отображает сведения в графе зависимостей, но не создает Dependabot alerts по умолчанию. Владельцы репозитория или пользователи с правами администратора могут включить Dependabot alerts. Вы также можете включить или отключить оповещения Dependabot для всех репозиториев, принадлежащих вашей учетной записи пользователя или организации. Дополнительные сведения см. в разделе [AUTOTITLE или Управление функциями безопасности и анализа](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization). * Свидетельства об артефактах: Доступны во всех публичных репозиториях, но при этом нужно специально генерировать аттестации в рабочих процессах сборки. См . раздел AUTOTITLE.
Частные репозитории * Граф зависимостей: по умолчанию не включен. Эту возможность могут включать администраторы репозитория. Дополнительные сведения см. в разделе Изучение зависимостей репозитория. * Проверка зависимостей: доступна в частных репозиториях, принадлежащих организациям, которые используют GitHub Team или GitHub Enterprise Cloud и имеют лицензию на GitHub Code Security or GitHub Advanced Security. Дополнительные сведения см. в разделе [AUTOTITLE и О GitHub Advanced Security](/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository#enabling-and-disabling-the-dependency-graph). * Dependabot alerts: не включен по умолчанию. Владельцы частных репозиториев или пользователи с правами администратора могут включить Dependabot alerts путем включения графа зависимостей и Dependabot alerts для своих репозиториев. Вы также можете включить или отключить оповещения Dependabot для всех репозиториев, принадлежащих вашей учетной записи пользователя или организации. Дополнительные сведения см. в разделе [AUTOTITLE или Управление функциями безопасности и анализа](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization). * Свидетельства об артефактах: Доступно только в частных репозиториях на GitHub Enterprise Cloud.
Репозиторий любого типа * Dependabot security updates: не включено по умолчанию. Вы можете включить Dependabot security updates для любого репозитория, использующего Dependabot alerts и граф зависимостей. Сведения о включении обновлений системы безопасности см. в разделе Настройка обновлений для системы безопасности Dependabot. * Dependabot version updates: не включено по умолчанию. Включать Dependabot version updates могут пользователи с разрешениями на запись в репозитории. Сведения о включении обновлений версий см. в разделе Настройка обновлений версий Dependabot. * Неизменные релизы:* По умолчанию не включено. Вы можете включить неизменяемость выпуска для репозитория или организации. См . раздел AUTOTITLE.