Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Рекомендации по защите кода в цепочке поставок

Руководство по защите основного элемента цепочки поставок, то есть вашего кода и кода зависимостей.

Об этом руководстве

В этом руководстве описываются самые важные изменения, которые можно внести для улучшения защиты вашего кода. В каждом разделе описаны изменения, которые можно внести в процессы для повышения безопасности. Сначала указаны изменения с самым высоким влиянием.

В чем заключаются риски?

Приведем некоторые ключевые риски в процессе развертывания.

  • Использование зависимостей с уязвимостями системы безопасности, которыми может воспользоваться злоумышленник.
  • Утечка учетных данных или маркера проверки подлинности, которыми может воспользоваться злоумышленник для доступа к ресурсам.
  • Внесение уязвимости в собственный код, который злоумышленник может использовать.

Эти риски открывают возможности для атаки на ваши ресурсы и проекты. Кроме того, эти риски напрямую передаются всем, кто использует созданный вами пакет. В следующих разделах объясняется, как защитить себя и пользователей от этих рисков.

Создание программы управление уязвимостями для зависимостей

Вы можете защитить код, от которого зависите, создав программу управления уязвимостями для зависимостей. На высоком уровне она должна включать процессы, позволяющие убедиться, что вы:

  1. создали инвентаризацию зависимостей;

  2. знаете, когда в зависимости присутствует уязвимость системы безопасности;

  3. Принудительное применение проверок зависимостей в запросах на вытягивание.

  4. оценили влияние этой уязвимости на код и приняли решение, какие действия следует предпринять.

Автоматическое создание инвентаризации

В качестве первого шага необходимо выполнить полную инвентаризацию зависимостей. Граф зависимостей для репозитория показывает зависимости для поддерживаемых экосистем. Если вы синхронизируете свои зависимости или используете другие экосистемы, вам нужно будет дополнить его данными из сторонних инструментов или перечислить зависимости вручную. Дополнительные сведения см. в разделе Сведения о графе зависимостей.

Автоматическое обнаружение уязвимостей в зависимостях

Dependabot помогает отслеживать зависимости и уведомляет вас об обнаружении в них известной уязвимости. Вы даже можете включить Dependabot для автоматического создания запросов на вытягивание, которые обновляют зависимость до безопасной версии. Дополнительные сведения см. в разделах Сведения об оповещениях Dependabot и Сведения об обновлениях для системы безопасности Dependabot.

Автоматическое обнаружение уязвимостей в запросах на вытягивание

Действие проверки зависимостей обеспечивает проверку зависимостей для ваших запросов на вытягивание, позволяя легко определить, будет ли запрос на вытягивание представлять уязвимую версию зависимости в репозитории. При обнаружении уязвимости Действие проверки зависимостей может заблокировать слияние запроса на вытягивание. Дополнительные сведения см. в разделе Сведения о проверке зависимостей.

Оценка подверженности риску от уязвимой зависимости

Обнаружив использование уязвимой зависимости, например, библиотеки или платформы, вы должны оценить уровень подверженности риску вашего проекта и определить, какие действия следует предпринять. Сообщения об уязвимостях обычно содержат оценку серьезности уязвимости, показывающую уровень ее влияния. Оценка серьезности — полезный ориентир, но она не может показать полное влияние уязвимости на код.

Чтобы оценить влияние уязвимости на код, необходимо также изучить, как вы используете библиотеку, и определить, насколько серьезному риску эта уязвимость подвергает вашу систему. Возможно, уязвимость является частью функции, которую вы не используете, так что можно просто обновить затронутую библиотеку и продолжить обычный цикл выпуска. Или, возможно, ваш код мало подвержен риску, и вам нужно просто обновить затронутую библиотеку и сразу отправить обновленную сборку. Это решение зависит от того, как вы используете библиотеку в вашей системе, и его должны принимать только вы.

Защита маркеров взаимодействия

Код часто должен взаимодействовать с другими системами по сети, поэтому необходимо использовать секреты (такие как пароль или ключ API) для проверки подлинности. Чтобы ваша система могла работать, ей нужен доступ к этим секретам, но рекомендуется не включать их в исходный код. Это особенно важно для репозиториев, к которым могут иметь доступ многие пользователи и критически важно для общедоступных репозиториев.

Автоматическое обнаружение секретов, зафиксированных в репозитории

Примечание. Оповещения о проверке секретов для партнеров автоматически запускается в общедоступных репозиториях для уведомления поставщиков служб об утечке секретов в GitHub.com.

Оповещения о проверке секретов для пользователей доступны бесплатно во всех общедоступных репозиториях. Организации, использующие GitHub Enterprise Cloud с лицензией на GitHub Advanced Security, также могут включить Оповещения проверки секретов для пользователей в своих частных и внутренних репозиториях. Дополнительные сведения см. в разделах "Сведения о проверке секретов" и "Сведения о GitHub Advanced Security".

GitHub сотрудничает со многими поставщиками, чтобы автоматически определять, когда секреты фиксируются или сохраняются в ваших общедоступных репозиториях, и уведомляет поставщика, чтобы он мог предпринять соответствующие действия для обеспечения безопасности вашей учетной записи. Дополнительные сведения см. в разделе Сведения о проверке секретов.

Кроме того, если ваша организация использует GitHub Advanced Security, вы можете включить Оповещения проверки секретов для пользователей в любом репозитории, принадлежащей организации, включая частные репозитории. Вы также можете определить пользовательские шаблоны для обнаружения дополнительных секретов на уровне репозитория, организации или предприятия. Дополнительные сведения см. в разделе Сведения о проверке секретов.

Безопасное хранение секретов, используемых в GitHub Enterprise Cloud

Помимо кода, вам, вероятно, потребуется использовать секреты и в других местах. Например, чтобы разрешить рабочим процессам GitHub Actions, Dependabot или среде разработки GitHub Codespaces взаимодействовать с другими системами. Дополнительные сведения о безопасном хранении и использовании секретов см. в разделах Зашифрованные секреты, Настройка доступа к частным реестрам для Dependabot и Управление зашифрованными секретами для codespace.

Хранение уязвимых шаблонов кода вне вашего репозитория

Примечание. Code scanning доступен для всех общедоступных репозиториев в GitHub.com. Чтобы использовать code scanning в частном репозитории, принадлежащем организации, необходима лицензия на GitHub Advanced Security. Дополнительные сведения см. в разделе Сведения о GitHub Advanced Security.

Создание процесса проверки запроса на вытягивание

Вы можете повысить качество и безопасность кода, обеспечив проверку и тестирование всех запросов на вытягивание перед их слиянием. В GitHub имеется множество функций, которые можно использовать для управления процессом проверки и слияния. Чтобы приступить к работе, см. раздел Сведения о защищенных ветвях.

Сканирование кода на наличие уязвимых шаблонов

Рецензентам часто бывает трудно обнаружить небезопасные шаблоны кода без посторонней помощи. Помимо сканирования кода на наличие секретов, вы также можете проверить его на наличие шаблонов, связанных с уязвимостями системы безопасности. Например, таких, как функция, которая не является безопасной для памяти, или неспособность экранировать введенные пользователем данные, что может привести к уязвимости к внедрению вредоносных программ. GitHub предлагает несколько разных подходов к тому, как и когда вы сканируете свой код. Чтобы приступить к работе, см. раздел Сведения о проверке кода.

Дальнейшие действия