Skip to main content

О предупреждениях о сканировании кода

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

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

О предупреждениях от code scanning

Вы можете настроить code scanning для проверки кода в репозитории с помощью анализа по умолчанию CodeQL, стороннего анализа или нескольких типов анализа. По завершении анализа полученные предупреждения отображаются рядом друг с другом в представлении безопасности репозитория. Результаты из сторонних инструментов или пользовательских запросов могут содержать не все свойства, которые отображаются для предупреждений, обнаруженных в ходе анализа CodeQL по умолчанию в GitHub. Дополнительные сведения см. в разделе Настройка code scanning для репозитория.

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

О деталях предупреждения

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

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

 Пример оповещения от code scanning

Если вы настроите code scanning с помощью CodeQL, вы также можете найти проблемы потока данных в коде. В ходе анализа потока данных обнаруживаются потенциальные проблемы безопасности в коде, такие как небезопасное использование данных, передача опасных аргументов функциям и утечка конфиденциальной информации.

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

Об уровнях серьезности

Возможные уровни серьезности предупреждения: Error, Warning или Note.

Если code scanning включен как проверка запроса на вытягивание, проверка завершится ошибкой, если обнаружатся какие-либо результаты с серьезностью уровня error. Вы можете указать, при каком уровне серьезности оповещений о проверке кода будет возникать сбой проверки. Дополнительные сведения см. в разделе Настройка code scanning.

Об уровнях серьезности в системе безопасности

Code scanning отображает уровни серьезности в системе безопасности для предупреждений, генерируемых запросами безопасности. Возможные уровни серьезности в системе безопасности: Critical, High, Medium или Low.

Чтобы рассчитать серьезность предупреждения для безопасности, мы используем данные системы оценки уязвимостей Common Vulnerability Scoring System (CVSS). CVSS — это открытая платформа для передачи характеристик и серьезности уязвимостей программного обеспечения, которая обычно используется другими продуктами безопасности для оценки предупреждений. Дополнительные сведения о том, как рассчитываются уровни серьезности, см. в этой записи блога.

По умолчанию любые результаты code scanning с уровнем серьезности безопасности Critical или High приведут к сбою проверки. Вы можете указать, какой уровень серьезности безопасности для результатов code scanning должен вызывать сбой проверки. Дополнительные сведения см. в разделе Настройка code scanning.

Сведения об источниках анализа

Вы можете выполнять несколько конфигураций анализа кода в репозитории, используя различные средства и ориентируясь на разные языки или области кода. Каждая конфигурация сканирования кода является источником анализа для всех генерируемых ею предупреждений. Например, предупреждение, созданное с использованием анализа CodeQL по умолчанию с GitHub Actions, будет иметь источник анализа, отличный от источника предупреждения, созданного с помощью внешних средств и переданного через API сканирования кода.

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

Предупреждение о сканировании кода с несколькими источниками анализа

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

О метках для предупреждений, которых нет в коде приложения

GitHub присваивает метку категории предупреждениям, которых нет в коде приложения. Метка относится к расположению предупреждения.

  • Сгенерировано: код, сгенерированный в процессе сборки.
  • Тестирование: тестовый код.
  • Библиотека: библиотека или сторонний код.
  • Документация: документация.

Code scanning классифицирует файлы по пути к файлу. Исходные файлы невозможно классифицировать вручную.

Вот пример из списка предупреждений 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

Дополнительные сведения см. в разделе Настройка code scanning.

Отключение экспериментальных предупреждений

Самый простой способ отключить запросы, использующие машинное обучение для создания экспериментальных предупреждений — прекратить выполнение набора запросов security-extended или security-and-quality. В приведенном выше примере вы закомментируете строку queries. Если вам необходимо продолжить работу с набором тестов security-extended или security-and-quality, а запросы машинного обучения вызывают проблемы, можно отправить запрос в службу поддержки GitHub с помощью следующих сведений.

  • Заголовок запроса: "code scanning: удаление из бета-версии экспериментальных предупреждений"
  • Укажите сведения о затронутых репозиториях или организациях
  • Запросить эскалацию в группу инженеров