Поделиться через


Проверка кода

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

CodeQL — это подсистема анализа кода, разработанная GitHub для автоматизации проверок безопасности. Вы можете анализировать код с помощью CodeQL и отображать результаты в виде оповещений проверки кода. Дополнительные сведения о CodeQL см . в документации По CodeQL.

GitHub Advanced Security для Azure DevOps работает с Azure Repos. Если вы хотите использовать GitHub Advanced Security с репозиториями GitHub, см. статью GitHub Advanced Security.

Дополнительные конфигурации для сканирования кода

Поддержка языка и запросов

Эксперты GitHub, исследователи безопасности и участники сообщества записывают и поддерживают запросы CodeQL по умолчанию, используемые для сканирования кода. Запросы регулярно обновляются для улучшения анализа и уменьшения количества ложноположительных результатов. Запросы открытый код, поэтому вы можете просматривать и вносить вклад в запросы в репозитории github/codeql.

CodeQL поддерживает и использует следующие идентификаторы языка:

Язык Идентификатор Необязательные альтернативные идентификаторы (если таковые есть)
C/C++ c-cpp c или cpp
C# csharp
Go go
Java и Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Совет

  • Используется c-cpp для анализа кода, написанного на языке C, C++ или обоих.
  • Используется java-kotlin для анализа кода, написанного на Java, Kotlin или обоих.
  • Используется javascript для анализа кода, написанного на JavaScript, TypeScript или обоих.

Дополнительные сведения см. в разделе "Поддерживаемые языки и платформы".

В журнале сборки можно просмотреть определенные запросы и сведения о задаче, выполняемые CodeQL.

Снимок экрана: задача проверки результатов публикации кода.

Настройка режима сборки сканирования кода

Сканирование кода поддерживает два режима сборки при настройке конвейера для сканирования:

  • none — база данных CodeQL создается непосредственно из базы кода без создания базы кода (поддерживается для всех интерпретированных языков и дополнительно поддерживается для C# и Java).
  • manual — вы определяете шаги сборки, используемые для базы кода в рабочем процессе (поддерживается для всех скомпилированных языков).

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

Для выполнения анализа кода с помощью GitHub Advanced Security для Azure DevOps autobuild режим сборки является отдельной задачей AdvancedSecurity-CodeQL-Autobuild@1сборки.

Совет

Режим none сборки можно использовать вместе с другими интерпретируемыми языками (например, JavaScript, Python, Ruby). Если режим none сборки указан для C# или Java в сочетании с другими скомпилированных языков, которые не поддерживают режим noneсборки, задача конвейера завершится ошибкой.

Ниже приведен пример допустимой конфигурации с несколькими языками и none режимом сборки:

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
    languages: 'csharp, java, javascript' 
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Ниже приведен пример недопустимой конфигурации с несколькими языками и none режимом сборки:

trigger: none
 
pool:
  vmImage: windows-latest

steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
    languages: 'csharp, swift'
    buildtype: 'none'

- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Оповещения о проверке кода

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

Чтобы использовать сканирование кода, необходимо сначала настроить GitHub Advanced Security для Azure DevOps.

Вкладка "Расширенная безопасность" в Repos в Azure DevOps — это концентратор для просмотра оповещений сканирования кода. Выберите вкладку "Сканирование кода" для просмотра оповещений сканирования. Вы можете фильтровать по ветви, состоянию, конвейеру, типу правила и серьезности. В настоящее время центр оповещений не отображает оповещения о сканировании, завершенном в ветвях PR.

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

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

Снимок экрана: проверка кода оповещений для репозитория.

Если отключить расширенную безопасность для репозитория, вы потеряете доступ к результатам на вкладке "Расширенная безопасность" и задаче сборки. Задача сборки не завершается ошибкой, но любые результаты выполнения сборки с задачей, пока расширенная безопасность отключена, скрыты и не сохраняются.

Сведения об оповещении

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

Снимок экрана: сведения о сканировании кода оповещений.

Section Описание
Расположение В разделе "Расположения" подробно описан конкретный экземпляр, в котором CodeQL обнаружил уязвимость. Если в коде несколько экземпляров нарушает одно правило, создается новое оповещение для каждого отдельного расположения. Карточка "Расположения" содержит прямую ссылку на затронутый фрагмент кода, чтобы можно было выбрать фрагмент кода, который будет направлен в веб-интерфейс Azure DevOps для редактирования.
Description Описание предоставляется средством CodeQL, основанным на проблеме.
Рекомендация Рекомендация — это предлагаемое исправление для заданного оповещения проверки кода.
Пример В разделе примера показан упрощенный пример обнаруженной слабости в коде.
Важность Уровни серьезности могут быть низкими, средними, высокими или критическими. Оценка серьезности основана на заданной оценке распространенных уязвимостей (CVSS) для идентифицированного перечисления распространенных слабых мест (CWE). Узнайте больше о том, как серьезность оценивается в этой записи блога GitHub.

Просмотр оповещений для репозитория

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

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

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

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

Закрытие оповещений сканирования кода

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

Чтобы закрыть оповещение:

  1. Перейдите к оповещению, которое вы хотите закрыть, и выберите оповещение.
  2. Выберите раскрывающийся список "Закрыть оповещение".
  3. Если этот параметр еще не выбран, выберите "Риск принят " или "Ложный положительный результат " в качестве причины закрытия.
  4. Добавьте необязательный комментарий в текстовое поле "Комментарий ".
  5. Нажмите кнопку "Закрыть", чтобы отправить и закрыть оповещение.
  6. Состояние генерации оповещений изменяется с open to Closed и отображается причина увольнения.

Снимок экрана: как закрыть оповещение сканирования кода.

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

Управление оповещениями сканирования кода при запросах на вытягивание

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

Вы можете просмотреть затронутые строки кода, просмотреть сводку по поиску и устранить заметку в разделе "Обзор".

Снимок экрана: заметка о активном запросе на вытягивание кода.

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

Снимок экрана: заметка запроса на вытягивание закрытого кода.

Чтобы просмотреть весь набор результатов для ветви запроса на вытягивание, перейдите к Repos>Advanced Security и выберите ветвь запроса на вытягивание. При нажатии кнопки "Показать дополнительные сведения " (2) на заметке отображается представление сведений об оповещении на вкладке "Расширенная безопасность".

Совет

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