Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сканирование кода в GitHub Advanced Security для Azure DevOps позволяет анализировать код в репозитории Azure DevOps, чтобы найти уязвимости безопасности и ошибки кода. Вам потребуется GitHub Advanced Security для Azure DevOps или, если вы используете автономную версию, GitHub Code Security для Azure DevOps включить. Все проблемы, выявленные в процессе анализа, регистрируются как оповещения. Сканирование кода использует CodeQL для выявления уязвимостей.
CodeQL — это подсистема анализа кода, разработанная GitHub для автоматизации проверок безопасности. Вы можете анализировать код с помощью CodeQL и отображать результаты в виде оповещений проверки кода. Дополнительные сведения о CodeQL см. в документации CodeQL.
GitHub Advanced Security for Azure DevOps работает с Azure Repos. Чтобы использовать GitHub Advanced Security с репозиториями GitHub, см. GitHub Advanced Security.
Предпосылки
| Категория | Требования |
|---|---|
| Разрешения | — Чтобы просмотреть сводку всех оповещений для репозитория, нужны разрешения участника для репозитория. — Чтобы закрыть оповещения в расширенной безопасности: Администратор проекта разрешения. — Управление разрешениями в дополнительной безопасности: член группы Администраторы собраний проектов или Дополнительная безопасность: управление параметрами при наличии набора разрешений, установленного на Разрешить. |
Дополнительные сведения о разрешениях расширенной безопасности см. в разделе Управление разрешениями расширенной безопасности.
Расширенная настройка для сканирования кода
CodeQL — это средство на основе конвейера, в котором результаты агрегируются в каждом репозитории.
Совет
Сканирование кода может быть более интенсивной задачей сборки, поэтому рекомендуется добавить задачу сканирования кода в отдельный клонированный конвейер основного производственного конвейера или создать новый конвейер.
Добавьте задачи в следующем порядке:
- Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
- Шаги сборки на заказ
- Расширенный анализ безопасности CodeQL (AdvancedSecurity-Codeql-Analyze@1)
Кроме того, укажите язык Initialize CodeQL, который вы анализируете в задаче. Вы можете использовать разделенный запятыми список для анализа нескольких языков одновременно. Поддерживаемые языки.csharp, cpp, go, java, javascript, python, ruby, swift Если вы используете локальные агенты, вы также можете добавить enableAutomaticCodeQLInstall: true переменную, чтобы автоматически установить последние биты CodeQL для агента.
Ниже приведен пример начального конвейера:
trigger:
- main
pool:
# Additional hosted image options are available: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted#software
vmImage: ubuntu-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
inputs:
languages: "java"
# Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
# You can customize the initialize task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
# If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
enableAutomaticCodeQLInstall: true
# Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.
# If you had a Maven app:
# - task: Maven@4
# inputs:
# mavenPomFile: 'pom.xml'
# goals: 'clean package'
# publishJUnitResults: true
# testResultsFiles: '**/TEST-*.xml'
# javaHomeOption: 'JDKVersion'
# jdkVersionOption: '1.17'
# mavenVersionOption: 'Default'
# Or a general script:
# - script: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines
- task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines
Кроме того, укажите язык Initialize CodeQL, который вы анализируете в задаче. Если указан язык swift, необходимо выполнить пользовательские действия сборки.
Совет
- Используйте
javaдля анализа кода, написанного Java, Kotlin или обоих. - Используется
javascriptдля анализа кода, написанного в JavaScript, TypeScript или обоих.
Если вы работаете на локальном агенте, выберите Enable automatic CodeQL detection and installation, чтобы автоматически использовать самую последнюю версию CodeQL на вашем агенте, если вы не установили последний пакет CodeQL в кэш инструментов агента.
Чтобы создать оповещения, выполните первую проверку конвейера, включающую задачи сканирования кода.
Дополнительные конфигурации для сканирования кода
Поддержка языка и запросов
GitHub эксперты, исследователи безопасности и участники сообщества записывают и поддерживают запросы CodeQL по умолчанию, используемые для сканирования кода. Запросы регулярно обновляются для улучшения анализа и уменьшения количества ложноположительных результатов. Запросы открытый код, поэтому вы можете просматривать и вносить вклад в запросы в репозитории github/codeql.
CodeQL поддерживает и использует следующие идентификаторы языка:
| Язык | Идентификатор |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| Поехали | go |
| Java/Котлин | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Руби | ruby |
| Свифт | swift |
Совет
- Используется
cppдля анализа кода, написанного на языке C, C++ или обоих. - Используйте
javaдля анализа кода, написанного Java, Kotlin или обоих. - Используется
javascriptдля анализа кода, написанного на JavaScript, TypeScript или обоих.
Дополнительные сведения см. в разделе "Поддерживаемые языки и платформы".
В журнале сборки можно просмотреть определенные запросы и сведения о задаче, выполняемые CodeQL.
Настройка режима сборки сканирования кода
Сканирование кода поддерживает два режима сборки при настройке конвейера для сканирования:
-
none— база данных CodeQL создается непосредственно из базы кода, не создавая базу кода (поддерживается для всех интерпретированных языков и дополнительно поддерживается дляcpp,javaиcsharp). -
manual— вы определяете шаги сборки, используемые для базы кода в рабочем процессе (поддерживается для всех скомпилированных языков).
Дополнительные сведения о различных режимах сборки, включая сравнение преимуществ каждого режима сборки, см. в разделе "Сканирование кода CodeQL для скомпилированных языков".
Совет
Режим сборки none можно использовать с другими интерпретируемыми языками, например JavaScript, Python, Ruby.
Если для C# или Java задан режим сборки none в сочетании с другими скомпилированными языками, которые не поддерживают режим сборки 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 расширенную безопасность для Azure DevOps.
Вкладка "Расширенная безопасность" в Repos в Azure DevOps — это концентратор для просмотра оповещений сканирования кода. Выберите вкладку "Сканирование кода" для просмотра оповещений сканирования. Вы можете фильтровать по ветви, состоянию, конвейеру, типу правила и степени серьезности. В настоящее время центр оповещений не отображает оповещения о сканировании, завершенном в ветвях PR.
Если конвейеры или ветви переименовываются, это не влияет на результаты — отображение нового имени может занять до 24 часов.
Если вы решили запустить пользовательские запросы CodeQL, по умолчанию нет отдельного фильтра для оповещений, созданных из разных пакетов запросов. Вы можете фильтровать по правилу, которое отличается для каждого запроса.
Если отключить расширенную безопасность для репозитория, вы потеряете доступ к результатам на вкладке "Расширенная безопасность" и задаче сборки. Задача сборки не проваливается, но любые результаты сборок, выполненных с задачей, пока расширенная безопасность отключена, скрыты и не сохраняются.
Сведения об оповещении
Выберите оповещение для получения дополнительных сведений, включая руководство по исправлению. Каждое оповещение содержит расположение, описание, пример и серьезность.
| Раздел | Описание |
|---|---|
| Расположение | В разделе "Расположения" подробно описан конкретный экземпляр, в котором CodeQL обнаружил уязвимость. Если в вашем коде несколько случаев нарушения одного и того же правила, создается новое оповещение для каждого отдельного местоположения. Карточка "Расположения" содержит прямую ссылку на затронутый фрагмент кода, чтобы можно было выбрать фрагмент кода, который будет направлен на веб-интерфейс Azure DevOps для редактирования. |
| Описание | Описание предоставляется средством CodeQL, основанным на проблеме. |
| Рекомендация | Рекомендация — это предлагаемое исправление для заданного оповещения проверки кода. |
| Пример | В разделе примера показан упрощенный пример обнаруженной слабости в коде. |
| Тяжесть | Уровни серьезности могут быть низкими, средними, высокими или критическими. Оценка серьезности основана на заданной оценке распространенных уязвимостей (CVSS) для идентифицированного перечня распространенных уязвимостей (CWE). Узнайте больше о том, как серьезность оценивается в этом посте блога GitHub. |
Просмотр оповещений для репозитория
Любой пользователь с разрешениями участника для репозитория может просмотреть сводку всех оповещений для репозитория на вкладке "Расширенная безопасность" в Repos. Перейдите на вкладку "Сканирование кода", чтобы просмотреть все оповещения о сканировании секретов.
Чтобы отобразить результаты, сначала необходимо выполнить задачи сканирования кода. После завершения первой проверки все обнаруженные уязвимости отображаются на вкладке "Расширенная безопасность".
По умолчанию на странице оповещений отображаются результаты сканирования кода для ветви репозитория по умолчанию.
Статус заданного оповещения отражает состояние для ветви по умолчанию и последнего выполнения в конвейере, даже если оповещение существует в других ветвях и конвейерах.
Закрытие оповещений сканирования кода
Чтобы закрыть оповещения, вам нужны соответствующие разрешения. По умолчанию только администраторы проектов могут закрыть оповещения расширенной безопасности.
Чтобы закрыть оповещение:
- Перейдите к оповещению, которое вы хотите закрыть, и нажмите на него.
- Выберите раскрывающийся список "Закрыть оповещение".
- Если этот параметр еще не выбран, выберите "Риск принят " или "Ложный положительный результат " в качестве причины закрытия.
- Добавьте необязательный комментарий в текстовое поле "Комментарий ".
- Нажмите кнопку "Закрыть", чтобы отправить и закрыть оповещение.
- Состояние оповещения изменяется с открыто на закрыто, и отображается причина отклонения.
Это действие закрывает оповещение во всех ветвях. Другие ветви, содержащие ту же уязвимость, также будут отклонены. Любое оповещение, ранее отклоненное, можно повторно открыть вручную.
Управление оповещениями сканирования кода в пулреквестах
Если оповещения создаются для изменения нового кода в запросе на вытягивание, оповещение сообщается как заметка в разделе комментариев вкладки "Обзор" запроса на вытягивание и в качестве оповещения на вкладке "Расширенный репозиторий безопасности". Существует новая запись средства выбора ветви для ветви запроса на вытягивание.
Вы можете просмотреть затронутые строки кода, увидеть сводку по обнаружению и разрешить аннотацию в разделе "Обзор".
Чтобы закрыть оповещения о pull request'ах, необходимо перейти к представлению сведений об оповещении, чтобы закрыть оповещение и разрешить аннотацию. В противном случае простое изменение состояния комментария (1) решает вопрос комментария, но ни закрывает, ни исправляет основное предупреждение.
Чтобы просмотреть весь набор результатов для ветви запроса на вытягивание, перейдите к Repos>Advanced Security и выберите ветвь запроса на вытягивание. При нажатии кнопки "Показать дополнительные сведения " (2) на заметке отображается представление сведений об оповещении на вкладке "Расширенная безопасность".
Совет
Заметки создаются только в том случае, если затронутые строки кода полностью уникальны для разницы в запросе на вытягивание по сравнению с целевой ветвью запроса на вытягивание.