Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сканирование кода в 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 для Azure DevOps работает с Azure Repos. Чтобы использовать GitHub Advanced Security с репозиториями GitHub, см. GitHub Advanced Security.
Предпосылки
Категория | Требования |
---|---|
Разрешения | — Чтобы просмотреть сводку всех оповещений для репозитория, нужны разрешения участника для репозитория. — Чтобы отклонить оповещения в Advanced Security: администратор проекта разрешения. — Для управления разрешениями в Расширенной безопасности: быть членом группы Администраторов коллекции проектов или иметь разрешение Расширенная безопасность: управление параметрами установлено на Разрешить. |
Дополнительные сведения о разрешениях расширенной безопасности см. в разделе Управление разрешениями расширенной безопасности.
Дополнительные конфигурации для сканирования кода
Поддержка языка и запросов
Эксперты GitHub, исследователи безопасности и участники сообщества записывают и поддерживают запросы CodeQL по умолчанию, используемые для сканирования кода. Запросы регулярно обновляются для улучшения анализа и уменьшения количества ложноположительных результатов. Запросы открытый код, поэтому вы можете просматривать и вносить вклад в запросы в репозитории github/codeql.
CodeQL поддерживает и использует следующие идентификаторы языка:
Язык | Идентификатор | Необязательные альтернативные идентификаторы (если таковые есть) |
---|---|---|
C/C++ | c-cpp |
c или cpp |
C# | csharp |
|
Поехали | go |
|
Java и Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Питон | python |
|
Руби | ruby |
|
Свифт | swift |
Совет
- Используется
c-cpp
для анализа кода, написанного на языке C, C++ или обоих. - Используется
java-kotlin
для анализа кода, написанного на Java, Kotlin или обоих. - Используется
javascript
для анализа кода, написанного на JavaScript, TypeScript или обоих.
Дополнительные сведения см. в разделе "Поддерживаемые языки и платформы".
В журнале сборки можно просмотреть определенные запросы и сведения о задаче, выполняемые CodeQL.
Настройка режима сборки сканирования кода
Сканирование кода поддерживает два режима сборки при настройке конвейера для сканирования:
-
none
— база данных CodeQL создается непосредственно из базы кода без создания базы кода (поддерживается для всех интерпретированных языков и дополнительно поддерживается для C# и Java). -
manual
— вы определяете шаги сборки, используемые для базы кода в рабочем процессе (поддерживается для всех скомпилированных языков).
Дополнительные сведения о различных режимах сборки, включая сравнение преимуществ каждого режима сборки, см. в разделе "Сканирование кода CodeQL для скомпилированных языков".
Совет
Режим сборки 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, по умолчанию нет отдельного фильтра для оповещений, созданных из разных пакетов запросов. Вы можете фильтровать по правилу, которое отличается для каждого запроса.
Если отключить расширенную безопасность для репозитория, вы потеряете доступ к результатам на вкладке "Расширенная безопасность" и задаче сборки. Задача сборки не проваливается, но любые результаты сборок, выполненных с задачей, пока расширенная безопасность отключена, скрыты и не сохраняются.
Сведения об оповещении
Выберите оповещение для получения дополнительных сведений, включая руководство по исправлению. Каждое оповещение содержит расположение, описание, пример и серьезность.
Раздел | Описание |
---|---|
Расположение | В разделе "Расположения" подробно описан конкретный экземпляр, в котором CodeQL обнаружил уязвимость. Если в вашем коде несколько случаев нарушения одного и того же правила, создается новое оповещение для каждого отдельного местоположения. Карточка "Расположения" содержит прямую ссылку на затронутый фрагмент кода, чтобы можно было выбрать фрагмент кода, который будет направлен в веб-интерфейс Azure DevOps для редактирования. |
Описание | Описание предоставляется средством CodeQL, основанным на проблеме. |
Рекомендация | Рекомендация — это предлагаемое исправление для заданного оповещения проверки кода. |
Пример | В разделе примера показан упрощенный пример обнаруженной слабости в коде. |
Тяжесть | Уровни серьезности могут быть низкими, средними, высокими или критическими. Оценка серьезности основана на заданной оценке распространенных уязвимостей (CVSS) для идентифицированного перечня распространенных уязвимостей (CWE). Узнайте больше о том, как серьезность оценивается в этой записи блога GitHub. |
Просмотр оповещений для репозитория
Любой пользователь с разрешениями участника для репозитория может просмотреть сводку всех оповещений для репозитория на вкладке "Расширенная безопасность" в репозитории. Перейдите на вкладку "Сканирование кода", чтобы просмотреть все оповещения о сканировании секретов.
Чтобы отобразить результаты, сначала необходимо выполнить задачи сканирования кода. После завершения первой проверки все обнаруженные уязвимости отображаются на вкладке "Расширенная безопасность".
По умолчанию на странице оповещений отображаются результаты проверки зависимостей для ветвь по умолчанию репозитория.
Статус заданного оповещения отражает состояние для ветви по умолчанию и последнего выполнения в конвейере, даже если оповещение существует в других ветвях и конвейерах.
Закрытие оповещений сканирования кода
Чтобы закрыть оповещения, вам нужны соответствующие разрешения. По умолчанию только администраторы проектов могут закрыть оповещения расширенной безопасности.
Чтобы закрыть оповещение:
- Перейдите к оповещению, которое вы хотите закрыть, и нажмите на него.
- Выберите раскрывающийся список "Закрыть оповещение".
- Если этот параметр еще не выбран, выберите "Риск принят " или "Ложный положительный результат " в качестве причины закрытия.
- Добавьте необязательный комментарий в текстовое поле "Комментарий ".
- Нажмите кнопку "Закрыть", чтобы отправить и закрыть оповещение.
- Состояние оповещения изменяется с открыто на закрыто, и отображается причина отклонения.
Это действие закрывает оповещение во всех ветвях. Другие ветви, содержащие ту же уязвимость, также будут отклонены. Любое оповещение, ранее отклоненное, можно повторно открыть вручную.
Управление оповещениями сканирования кода в пулреквестах
Если оповещения создаются для изменения нового кода в запросе на вытягивание, оповещение сообщается как заметка в разделе комментариев вкладки "Обзор" запроса на вытягивание и в качестве оповещения на вкладке "Расширенный репозиторий безопасности". Существует новая запись средства выбора ветви для ветви запроса на вытягивание.
Вы можете просмотреть затронутые строки кода, увидеть сводку по обнаружению и разрешить аннотацию в разделе "Обзор".
Чтобы закрыть оповещения о pull request'ах, необходимо перейти к представлению сведений об оповещении, чтобы закрыть оповещение и разрешить аннотацию. В противном случае простое изменение состояния комментария (1) решает вопрос комментария, но ни закрывает, ни исправляет основное предупреждение.
Чтобы просмотреть весь набор результатов для ветви запроса на вытягивание, перейдите к Repos>Advanced Security и выберите ветвь запроса на вытягивание. При нажатии кнопки "Показать дополнительные сведения " (2) на заметке отображается представление сведений об оповещении на вкладке "Расширенная безопасность".
Совет
Заметки создаются только в том случае, если затронутые строки кода полностью уникальны для разницы в запросе на вытягивание по сравнению с целевой ветвью запроса на вытягивание.