О предупреждениях от code scanning
Вы можете настроить code scanning для проверки кода в репозитории с помощью анализа по умолчанию CodeQL, стороннего анализа или нескольких типов анализа. По завершении анализа полученные предупреждения отображаются рядом друг с другом в представлении безопасности репозитория. Результаты из сторонних инструментов или пользовательских запросов могут содержать не все свойства, которые отображаются для предупреждений, обнаруженных в ходе анализа CodeQL по умолчанию в GitHub. Дополнительные сведения см. в разделе Настройка проверки кода для репозитория.
По умолчанию code scanning периодически анализирует ваш код в ветке по умолчанию и во время запросов на вытягивание. Сведения об управлении оповещениями в запросе на вытягивание см. в разделе Рассмотрение оповещений проверки кода в запросах на вытягивание.
You can audit the actions taken in response to code scanning alerts using GitHub tools. For more information, see "Аудит оповещений системы безопасности."
О деталях предупреждения
Каждое предупреждение указывает на проблему с кодом и названием инструмента, который ее выявил. Вы можете просмотреть строку кода, вызвавшую оповещение, а также свойства оповещения, такие как серьезность, уровень серьезности в системе безопасности и характер проблемы. В предупреждениях также сообщается, когда впервые появилась проблема. В предупреждениях, выявленных с помощью анализа CodeQL, также отображаются сведения о том, как устранить проблему.
Состояние и сведения на странице оповещений отражают состояние оповещения только в ветви репозитория по умолчанию, даже если это оповещение существует в других ветвях. Состояние оповещения в ветвях, не являющихся ветвью по умолчанию, отображается в разделе Затронутые ветви в правой части страницы оповещений. Если оповещение не существует в ветви по умолчанию, его состояние оповещения отображается как "в запросе на вытягивание" или "в ветки" и выделяется серым цветом.
Если вы настроите code scanning с помощью CodeQL, вы также можете найти проблемы потока данных в коде. В ходе анализа потока данных обнаруживаются потенциальные проблемы безопасности в коде, такие как небезопасное использование данных, передача опасных аргументов функциям и утечка конфиденциальной информации.
Когда code scanning сообщает о предупреждениях потока данных, GitHub показывает, как данные перемещаются по коду. позволяет определить области вашего кода, в которых происходит утечка конфиденциальной информации и которые могут быть точкой входа для атак злоумышленников.
Об уровнях серьезности
Возможные уровни серьезности предупреждения: Error
, Warning
или Note
.
Если code scanning включен как проверка запроса на вытягивание, проверка завершится ошибкой, если обнаружатся какие-либо результаты с серьезностью уровня error
. Вы можете указать, при каком уровне серьезности оповещений о проверке кода будет возникать сбой проверки. Дополнительные сведения см. в разделе Настройка сканирования кода.
Об уровнях серьезности в системе безопасности
отображает уровни серьезности в системе безопасности для предупреждений, генерируемых запросами безопасности. Возможные уровни серьезности в системе безопасности: Critical
, High
, Medium
или Low
.
Чтобы рассчитать серьезность предупреждения для безопасности, мы используем данные системы оценки уязвимостей Common Vulnerability Scoring System (CVSS). CVSS — это открытая платформа для передачи характеристик и серьезности уязвимостей программного обеспечения, которая обычно используется другими продуктами безопасности для оценки предупреждений. Дополнительные сведения о том, как рассчитываются уровни серьезности, см. в этой записи блога.
По умолчанию любые результаты code scanning с уровнем серьезности безопасности Critical
или High
приведут к сбою проверки. Вы можете указать, какой уровень серьезности безопасности для результатов code scanning должен вызывать сбой проверки. Дополнительные сведения см. в разделе Настройка сканирования кода.
Сведения о оповещения из нескольких конфигураций
Вы можете выполнять несколько конфигураций анализа кода в репозитории, используя различные средства и ориентируясь на разные языки или области кода. Каждая конфигурация code scanning создает уникальный набор оповещений. Например, оповещение, созданное с помощью анализа по умолчанию CodeQL с GitHub Actions происходит из конфигурации, отличной от конфигурации оповещения, созданного извне и отправленного через API code scanning.
Если вы используете несколько конфигураций для анализа файла, все проблемы, обнаруженные в одном запросе, будут сообщаться как оповещения, созданные несколькими конфигурациями. Если оповещение существует в нескольких конфигурациях, число конфигураций отображается рядом с именем ветви в разделе "Затронутые ветви" в правой части страницы оповещения. Чтобы просмотреть конфигурации оповещения, в разделе "Затронутые ветви" щелкните ветвь. Появится модальное "Анализ конфигураций" с именами каждой конфигурации, создающей оповещение для этой ветви. Под каждой конфигурацией можно увидеть, когда оповещение этой конфигурации было обновлено в последний раз.
В оповещении могут отображаться разные состояния из разных конфигураций. Чтобы обновить состояния оповещений, повторно запустите каждую устаревшую конфигурацию. Кроме того, можно удалить устаревшие конфигурации из ветви, чтобы удалить устаревшие оповещения. Дополнительные сведения об удалении устаревших конфигураций и оповещений см. в разделе Управление оповещениями проверки кода для репозитория.
О метках для предупреждений, которых нет в коде приложения
GitHub Enterprise Cloud присваивает метку категории предупреждениям, которых нет в коде приложения. Метка относится к расположению предупреждения.
-
Сгенерировано: код, сгенерированный в процессе сборки.
-
Тестирование: тестовый код.
-
Библиотека: библиотека или сторонний код.
-
Документация: документация.
классифицирует файлы по пути к файлу. Исходные файлы невозможно классифицировать вручную.
Вот пример из списка предупреждений code scanning предупреждения, помеченного как возникающее в коде библиотеки.
На странице предупреждения видно, что путь к файлу помечен как код библиотеки (метка Library
).
Об экспериментальных предупреждениях
Примечание. Экспериментальные оповещения для code scanning создаются с помощью экспериментальной технологии в действии CodeQL. Эта функция в настоящее время доступна как бета-версия для кода JavaScript и может быть изменена.
В репозиториях, запускающих code scanning с помощью действия CodeQL, вы можете увидеть некоторые предупреждения, помеченные как экспериментальные. Это предупреждения, обнаруженные с помощью модели машинного обучения для расширения возможностей имеющегося запроса CodeQL.
Преимущества использования моделей машинного обучения для расширения запросов
Запросы, использующие модели машинного обучения, способны находить уязвимости в коде, написанном с использованием платформ и библиотек, которые не добавил первоначальный разработчик запросов.
Каждый из запросов безопасности для CodeQL идентифицирует код, уязвимый для определенного типа атаки. Исследователи безопасности пишут запросы и включают наиболее распространенные платформы и библиотеки. Таким образом, каждый имеющийся запрос находит уязвимые варианты использования стандартных платформ и библиотек. Однако разработчики используют множество различных платформ и библиотек, и поддерживаемый вручную запрос не может включать их всех. Следовательно, поддерживаемые вручную запросы не охватывают все платформы и библиотеки.
CodeQL использует модель машинного обучения, чтобы расширить имеющийся запрос безопасности, чтобы охватить более широкий спектр платформ и библиотек. Модель машинного обучения обучена обнаруживать проблемы в коде, которых раньше не было. Запросы, использующие модель, найдут результаты для платформ и библиотек, не описанные в исходном запросе.
Предупреждения, определенные с помощью машинного обучения
Предупреждения, обнаруженные с помощью модели машинного обучения, помечаются как "Экспериментальные предупреждения", чтобы показать, что технология находится в фазе активной разработки. Эти предупреждения имеют более высокий уровень ложноположительных результатов, чем запросы, на которых они основаны. Модель машинного обучения будет улучшаться на основе действий пользователя, таких как пометка результата низкого качества как ложноположительного или исправление результата высокого качества.
Включение экспериментальных предупреждений
Наборы запросов CodeQL по умолчанию не включают запросы, использующие машинное обучение для создания экспериментальных предупреждений. Чтобы выполнять запросы машинного обучения во время code scanning, вам необходимо выполнить дополнительные запросы, содержащиеся в одном из следующих наборов запросов.
Набор запросов | Описание |
---|---|
security-extended | Запросы из набора по умолчанию, а также запросы с более низкой степенью серьезности и точности |
security-and-quality | Запросы из security-extended , а также запросы касательно удобства обслуживания и надежности |
Когда вы обновляете свой рабочий процесс для запуска дополнительного набора запросов, это увеличивает время анализа.
- uses: github/codeql-action/init@v2
with:
# Run extended queries including queries using machine learning
queries: security-extended
Дополнительные сведения см. в разделе Настройка сканирования кода.
Отключение экспериментальных предупреждений
Самый простой способ отключить запросы, использующие машинное обучение для создания экспериментальных предупреждений — прекратить выполнение набора запросов security-extended
или security-and-quality
. В приведенном выше примере вы закомментируете строку queries
. Если вам необходимо продолжить работу с набором тестов security-extended
или security-and-quality
, а запросы машинного обучения вызывают проблемы, можно отправить запрос в службу поддержки GitHub с помощью следующих сведений.
- Заголовок запроса: "code scanning: удаление из бета-версии экспериментальных предупреждений"
- Укажите сведения о затронутых репозиториях или организациях
- Запросить эскалацию в группу инженеров