Проверка зависимостей
Проверка зависимостей в GitHub Advanced Security для Azure DevOps обнаруживает компоненты открытый код, используемые в исходном коде, и обнаруживает наличие связанных уязвимостей. Все обнаруженные уязвимости из компонентов открытый код помечаются как оповещение.
GitHub Advanced Security для Azure DevOps работает с Azure Repos. Если вы хотите использовать GitHub Advanced Security с репозиториями GitHub, см. статью GitHub Advanced Security.
Сведения о проверке зависимостей
Сканирование зависимостей создает оповещение для любого компонента с открытым исходным кодом, прямого или транзитивного, который может быть уязвимым, от которых зависит ваш код. Прямые уязвимости — это библиотеки, которые напрямую использует ваш код. Транзитивные зависимости — это библиотеки или другое программное обеспечение, которое напрямую использует зависимости.
Сведения об обнаружении проверки зависимостей
Новый моментальный снимок компонентов сохраняется всякий раз, когда граф зависимостей для репозитория изменяется, и после конвейера, содержащего конвейер проверки зависимостей, создающий новый код задачи (другими словами, новая фиксация).
Для каждого уязвимого компонента, обнаруженного в использовании, компонент и уязвимость перечислены в журнале сборки и отображаются как оповещение на вкладке "Расширенная безопасность". Только помощники, которые проверяются GitHub и добавляются в базу данных рекомендаций GitHub, создают оповещение проверки зависимостей. Журнал сборки содержит ссылку на отдельное оповещение для дальнейшего изучения. Дополнительные сведения об оповещении см. в разделе "Исправление оповещений о зависимостях".
Журнал сборки также содержит основные сведения о каждой обнаруженной уязвимости. Эти сведения включают серьезность, затронутый компонент, название уязвимости и связанный CVE.
Поддерживаемые экосистемы пакетов
Сканирование зависимостей поддерживает как прямые, так и транзитивные зависимости для всех поддерживаемых экосистем пакетов.
Диспетчер пакетов | Языки | Поддерживаемые форматы |
---|---|---|
Груз | Rust | Cargo.toml , Cargo.lock |
CocoaPods | Swift | Podfile.lock |
Модули Go | Go | go.mod , go.sum |
Gradle | Java | *.lockfile |
Maven | Java | pom.xml |
npm | JavaScript | package-lock.json , , package.json npm-shrinkwrap.json lerna.json |
NuGet | C# | *.packages.config , , *.project.assets *.csproj |
pip | Python | setup.py , requirements.txt |
pnpm | JavaScript | package.json |
RubyGems | Ruby | Gemfile.lock |
Yarn | JavaScript | package.json |
Сведения о оповещении проверки зависимостей
Вкладка "Расширенная безопасность" в Repos в Azure DevOps — это центр для просмотра оповещений системы безопасности, которые по умолчанию отображают оповещения проверки зависимостей. Вы можете фильтровать по ветви, конвейеру, пакету и серьезности. Вы можете выбрать оповещение для получения дополнительных сведений, включая рекомендации по исправлению. В настоящее время центр оповещений не отображает оповещения для сканирования, завершенного в ветвях PR.
При обнаружении уязвимого пакета в репозитории исправление оповещений проверки зависимостей обычно включает обновление до более высокой версии пакета или удаление обижающего пакета. Этот совет относится как к прямым, так и к транзитивным (или косвенным) зависимостям. Представление по умолчанию на вкладке "Расширенная безопасность" — это активные оповещения для ветвь по умолчанию репозитория.
Если конвейеры или ветви переименовываются, результаты не влияют, может потребоваться до 24 часов до отображения нового имени.
Состояние оповещения автоматически обновляется до Closed
тех случаев, когда уязвимый компонент больше не обнаруживается в последней сборке для любых конвейеров, где установлена задача проверки зависимостей. Чтобы просмотреть разрешенные оповещения, используйте State
фильтр на главной панели инструментов и выберите Closed
.
Если отключить расширенную безопасность для репозитория, вы потеряете доступ к результатам на вкладке "Расширенная безопасность" и задаче сборки. Задача сборки не завершится ошибкой, но любые результаты выполнения сборки с задачей, пока расширенная безопасность отключена, скрыты и не сохраняются.
Сведения об оповещении
Вы также можете подробно ознакомиться с подробными сведениями об оповещении, щелкнув определенное оповещение и руководство по исправлению.
Section | Описание |
---|---|
Рекомендация | Текст рекомендации поступает непосредственно из нашего поставщика данных об уязвимостях, базы данных рекомендаций GitHub. Как правило, в руководстве предлагается обновить идентифицированный компонент до неуязвимой версии. |
Расположение | В разделе "Расположения " описаны пути, в которых задача проверки зависимостей обнаружила уязвимый компонент. Если файл можно разрешить из базовой проверки сборки в зафиксированный файл в источнике, карточка "Расположения" отображается как щелкнувая ссылка. Если файл был создан как часть сборки (например, артефакт сборки), ссылка недоступна. Просмотрите журналы сборки, чтобы лучше понять, как компонент был доставлен в сборку. |
Description | Описание представлено описанием GitHub Advisory. |
Обнаружения
Конвейеры, перечисленные на вкладке "Обнаружения" , являются конвейерами, в которых найден уязвимый компонент. Каждая строка содержит последнюю сборку затронутого конвейера и дату первого внедрения пакета. Если уязвимый пакет был исправлен в некоторых конвейерах, но не все, вы увидите частично фиксированные строки.
После разрешения оповещения оповещение автоматически перемещается в Closed
состояние, а последняя конвейер выполнения на вкладке "Обнаружения" отображает зеленую галочку, то есть код, содержащий обновленный компонент, запущенный в этом конвейере:
Важность
База данных рекомендаций GitHub предоставляет оценку CVSS, которая затем преобразуется в низкий, средний, высокий или критически важный уровень серьезности для оповещения с помощью следующих рекомендаций:
Оценка CVSS | Важность |
---|---|
1.0 < Оценка < 4.0 | Низкая |
4.0 < Оценка < 7.0 | Средняя |
7.0 < Оценка < 9.0 | Высокая |
Score >= 9.0 | Критически важно |
Поиск сведений
В разделе "Поиск сведений" обычно находятся два раздела: уязвимый пакет и корневая зависимость. Уязвимый пакет является потенциально уязвимым компонентом. Корневой раздел зависимостей содержит компоненты верхнего уровня, отвечающие за цепочку зависимостей, которая приводит к уязвимости.
Если уязвимый пакет ссылается только как прямая зависимость, вы увидите только раздел "уязвимый пакет".
Если уязвимый пакет ссылается как на прямую, так и транзитивную зависимость, пакет отображается как в разделе "уязвимый пакет" и "корневая зависимость".
Если уязвимый пакет ссылается только как транзитивная зависимость, пакет отображается в разделе "уязвимый пакет", а корневые зависимости, ссылающиеся на уязвимый пакет, отображаются в разделе "Корневая зависимость".
Управление оповещениями проверки зависимостей
Просмотр оповещений для репозитория
Любой пользователь с разрешениями участника для репозитория может просмотреть сводку всех оповещений для репозитория в Repos>Advanced Security.
По умолчанию на странице оповещений отображаются результаты проверки зависимостей для ветвь по умолчанию репозитория.
Состояние оповещения отражает состояние ветвь по умолчанию и последнего конвейера выполнения, даже если оповещение существует в других ветвях и конвейерах.
Исправление оповещений проверки зависимостей
Прямая зависимость — это компонент, который у вас есть в репозитории. Транзитивная или непрямая зависимость — это компонент, который используется прямой зависимостью. Ваш проект по-прежнему уязвим независимо от того, найдена ли уязвимость в прямой или транзитной зависимости.
Исправление уязвимой транзитной зависимости обычно принимает форму явного переопределения версии уязвимого компонента, используемого для каждой определенной прямой зависимости. После обновления корневой зависимости уязвимого компонента до безопасной версии можно обновить каждую корневую зависимость, а не несколько отдельных переопределений.
Обновление зависимостей для Yarn/Npm
Предположим, что этот пакет имеет две уязвимости. Для этого используется axios
прямая зависимость, а для нее — acorn
транзитивная зависимость (также называемая косвенной зависимостью или зависимостью зависимости).
{
"name": "my-package",
"version": "1.0.0",
"dependencies": {
"axios": "0.18.0",
"eslint": "5.16.0",
}
}
Текущая версия axios
имеет уязвимость типа "отказ в обслуживании" (DoS) с рекомендацией по обновлению до версии 0.18.1 или более поздней. Так как это прямая зависимость, у вас есть контроль над используемой версией axios
. Все, что необходимо сделать, — обновить версию axios
, которую вы извлекли. Обновленный вид package.json
выглядит примерно так:
{
"name": "my-package",
"version": "1.0.0",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0",
}
}
Теперь версия показанной eslint
версии зависит от версииacorn
, которая является уязвимостью типа "отказ в package.json
обслуживании" (ReDoS) регулярного выражения с рекомендацией по обновлению до версии 5.7.4, 6.4.1, 7.1.1
или выше. Если вы получите оповещение от средства проверки зависимостей, оно должно сообщить о корневой зависимости, требующей уязвимой зависимости.
Yarn
Если вы используете Yarn, вы можете использовать yarn, почему найти полную цепочку зависимостей.
> $ yarn why acorn
yarn why v1.22.4
[1/4] Why do we have the module "acorn"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "acorn@6.4.0"
info Reasons this module exists
- "eslint#espree" depends on it
- Hoisted from "eslint#espree#acorn"
info Disk size without dependencies: "1.09MB"
info Disk size with unique dependencies: "1.09MB"
info Disk size with transitive dependencies: "1.09MB"
info Number of shared dependencies: 0
Done in 0.30s.
Полная цепочка eslint
>>espree
acorn
зависимостей . После того как вы знаете цепочку зависимостей, вы можете использовать другую функцию Yarn, выборочные разрешения зависимостей, чтобы переопределить версию акорна, которая используется.
Используйте поле "Разрешения" для package.json
определения переопределения версии. Показаны три различных метода переопределения пакета в порядке лучшего:
{
"name": "yarn-resolutions",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0"
},
"resolutions": {
// DO NOT USE!
"**/acorn": "6.4.1",
// BETTER
"eslint/**/acorn": "6.4.1",
// BEST
"eslint/espree/acorn": "6.4.1"
}
}
**/acorn
Использование шаблона переопределяет все использование пакета коря во всех зависимостях. Это опасно, и перерыв во время выполнения. В результате он был удален в Yarn версии 2.
eslint/**/acorn
Использование шаблона переопределяет все виды использования пакета коря под пакетом eslint и в любых пакетах, от которые он зависит. Это безопаснее, чем переопределение пакета для всех зависимостей, но он по-прежнему имеет некоторые риски, если граф зависимостей для пакета большой. Этот шаблон рекомендуется использовать, если существует множество подпакетов, использующих уязвимый пакет, и определение переопределений для отдельных подпакетов будет непрактичным.
Использование шаблона eslint/espree/acorn
переопределяет только использование acorn
пакета espree
в пакете eslint
. Он специально предназначен для уязвимой цепочки зависимостей и рекомендуется переопределить версии пакетов.
npm
Если вы используете npm 8.3 или более поздней версии, можно использовать поле переопределения в package.json
Добавьте переопределение, если необходимо внести определенные изменения в транзитивные зависимости. Например, может потребоваться добавить переопределение, чтобы заменить версию зависимости известной проблемой безопасности, заменить существующую зависимость вилкой или убедиться, что одна и та же версия пакета используется везде.
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2",
"eslint": "5.16.0"
},
"overrides":{
"eslint": {
"espree": {
"acorn": "6.4.1"
}
}
}
}
В приведенном примере переопределения демонстрируется способ npm сказать: "переопределить использование пакета acorn
espree
в пакете eslint
". Он специально предназначен для уязвимой цепочки зависимостей и рекомендуется переопределить версии пакетов. Переопределения — это собственная функция npm. Он предоставляет способ заменить пакет в дереве зависимостей другой версией или другим пакетом полностью.
После настройки переопределения необходимо удалить package-lock.json
и node_modules
снова запустить npm install
.
Вы не можете задать переопределение для пакета, от который вы напрямую зависите, если только зависимость и переопределение не используют ту же спецификацию. Например, предположим axios: "0.18.0"
, что это уязвимо, и мы хотим обновить до axios: "0.19.2"
. Напрямую измените версию зависимостей вместо использования переопределения.
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.18.0"
},
"overrides": {
// BAD, will throw an EOVERRIDE error
// "axios": "0.19.2",
}
}
Обновите версию зависимости без задания переопределения:
{
"name": "npm-overrides",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "0.19.2"
}
}
Обновление зависимостей для Maven
Механизм разрешения зависимостей не столь сложный, как используемый в Yarn. В результате в проекте может быть только одна версия зависимости. Чтобы устранить эту проблему, Maven использует алгоритм "ближайшие победы". То есть он использует версию ближайшей зависимости к проекту в дереве зависимостей.
Например, у вас есть следующие граф зависимостей:
your-project --- A:1.0.0 --- B:2.0.0
\
\__ B:1.0.0
your-project
A:1.0.0
зависит от того, от чего, в свою очередь, зависитB:2.0.0
, но проект также имеет прямую зависимостьB:1.0.0
. Таким образом, у вас есть две разные версии зависимостей B в граф зависимостей, но версия 1.0.0 зависимостей B выигрывает, так как она является "ближайшей" к проекту.
В некоторых случаях этот сценарий может работать, если версии совместимы. Тем не менее, если A:1.0.0
зависит от некоторых функций B, доступных только в версии 2.0.0
, это поведение не работает. В худшем случае этот проект по-прежнему может компилироваться, но завершается сбоем во время выполнения.
Рассмотрим реальный пример.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.customer360</groupId>
<artifactId>maven-dependencies</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-dependencies</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.10.3</version>
</dependency>
</project>
Предположим, что версия com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
зависит от версии com.fasterxml.jackson.core:jackson-databind
, которая имеет десериализацию уязвимости ненадежных данных.
Эту зависимость можно проверить с помощью подключаемого модуля зависимостей Maven. В этом случае вы запустите mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
и получите следующие выходные данные:
> $ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.10.3:compile
[INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.10.3:compile
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.928 s
[INFO] Finished at: 2020-04-27T14:30:55+02:00
[INFO] ------------------------------------------------------------------------
Во-первых com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
, проверьте, есть ли новая версия, которая не зависит от уязвимой версии com.fasterxml.jackson.core:jackson-databind
. В этом случае можно обновить com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
и остановить его. В противном случае переопределите версию com.fasterxml.jackson.core:jackson-databind
.
Как показано в фрагменте кода, при использовании Maven "ближайшие победы", поэтому разрешение заключается в добавлении прямой зависимости к com.fasterxml.jackson.core:jackson-databind
этой уязвимости.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.customer360</groupId>
<artifactId>maven-dependencies</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-dependencies</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.10.3</version>
</dependency>
<!-- Dependency resolutions -->
<!-- jackson-jaxrs-json-provider -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.4</version>
</dependency>
</dependencies>
</project>
Вы можете проверить, работает mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
ли разрешение снова.
$ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.10.4:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.827 s
[INFO] Finished at: 2020-04-27T14:32:42+02:00
[INFO] ------------------------------------------------------------------------
Рекомендуется добавить комментарий рядом с разрешением зависимостей, чтобы любой, кто приходит позже знает, почему зависимость существует. Его можно удалить после того, как корневая зависимость использует новую версию; в противном случае вы накапливаете зависимости.
В реальном проекте добавьте зависимость как можно более высокую цепочку. Например, можно добавить разрешение в родительский POM-файл, а не отдельно в каждом файле POM проекта.
Обновление зависимостей для NuGet
Алгоритм разрешения зависимостей, используемый в NuGet, аналогичен Maven, в том, что можно использовать только одну версию зависимости. Однако NuGet не закрепляет версии зависимостей.
Например, если у вас есть зависимость <PackageReference Include="A" Version="1.2.3" />
, может потребоваться, чтобы этот пакет был эквивалентен = 1.2.3
, но фактически означает >= 1.2.3
. Чтобы закрепить точную версию, следует использовать Version="[1.2.3]"
. Дополнительные сведения см. в документации по диапазонам версий NuGet.
Помимо поведения диапазона по умолчанию NuGet восстанавливает самую низкую применимую версию для удовлетворения диапазона. Это означает, что во многих случаях необходимо определить диапазон.
Рассмотрим этот пример проекта, который имеет зависимость от Microsoft.AspNetCore.App
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>NuGet.Dependencies</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.14" />
</ItemGroup>
</Project>
Она зависит от версии, уязвимой для уязвимости удаленного Microsoft.AspNetCore.Http.Connections
выполнения кода (RCE).
Сначала необходимо проверить наличие обновленной версии Microsoft.AspNetCore.App
, зависящую от более новой версии Microsoft.AspNetCore.Http.Connections
. В этом случае вы можете обновить Microsoft.AspNetCore.App
и остановиться здесь. Если нет, необходимо переопределить версию Microsoft.AspNetCore.Http.Connections
, от которой она зависит.
NuGet не имеет эквивалента yarn, почему или mvn dependency:tree встроенный, поэтому самый простой способ увидеть дерево зависимостей часто является посещение nuget.org. Если вы посещаете страницу NuGet,Microsoft.AspNetCore.App
вы увидите, что это зависит от Microsoft.AspNetCore.Http.Connections
version >= 1.0.4 && < 1.1.0
. Кроме того, в диапазоне версий NuGet используется [1.0.4,1.1.0)
репрезентативный синтаксис.
Уязвимость RCE была Microsoft.AspNetCore.Http.Connections
исправлена в версии1.0.15
, поэтому необходимо переопределить диапазон версий.[1.0.15, 1.1.0)
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>NuGet.Dependencies</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" />
</ItemGroup>
<ItemGroup Label="Dependency Resolutions">
<!-- Microsoft.AspNetCore.App -->
<PackageReference Include="Microsoft.AspNetCore.Http.Connections" Version="[1.0.15,1.1.0)" />
</ItemGroup>
</Project>
Рекомендуется добавить комментарий рядом с разрешением зависимостей, чтобы любой, кто приходит позже знает, почему зависимость существует. Его можно удалить после использования новой версии корневой зависимости. В противном случае вы накапливаете зависимости.
Что делать, если нет доступных исправлений?
Если известное исправление недоступно, следующие параметры доступны как другие методы исправления до тех пор, пока обновленный компонент не будет доступен:
- Остановите использование компонента и удалите его из кода. Это удаление будет обнаружено после следующей сборки с установленной задачей проверки зависимостей.
- Вносите исправление в сам компонент. Если у вашей организации есть конкретные рекомендации по вкладу с открытым кодом, следуйте этим рекомендациям.
- Отмена оповещения. Однако оповещения без известных исправлений по-прежнему могут представлять угрозу безопасности для вашей организации. Рекомендуется не закрывать оповещение только потому, что известного исправления нет.
Отключение оповещений проверки зависимостей
Чтобы закрыть оповещения в расширенной безопасности, вам потребуются соответствующие разрешения. По умолчанию только администраторы проектов предоставляют возможность закрыть оповещения расширенной безопасности.
Чтобы закрыть оповещение:
- Перейдите к оповещению, которое вы хотите закрыть и выбрать в оповещении
- Выберите раскрывающийся список "Закрыть оповещение"
- Если этот параметр еще не выбран, выберите "Риск принят " или "Ложный положительный результат " в качестве причины закрытия
- Добавление необязательного комментария в текстовое поле "Комментарий "
- Нажмите кнопку "Закрыть", чтобы отправить и закрыть оповещение
- Состояние генерации оповещений изменяется с открытого на закрытое и отображает причину увольнения
Это действие закрывает оповещение только для выбранной ветви. Другие ветви, которые могут содержать ту же уязвимость, остаются активными до тех пор, пока в противном случае не действовали. Любое оповещение, которое ранее было отклонено, можно повторно открыть вручную.
Управление оповещениями проверки зависимостей при запросах на вытягивание
Если оповещения создаются для новых изменений зависимостей в запросе на вытягивание, оповещение будет отображаться в виде заметки в разделе комментариев вкладки "Обзор" запроса на вытягивание и в качестве оповещения на вкладке репозитория расширенной безопасности с новым результатом выбора ветви для запроса на вытягивание.
Вы можете просмотреть манифест затронутого пакета, просмотреть сводку по поиску и устранить заметку в разделе "Обзор".
Чтобы закрыть оповещения запроса на вытягивание, необходимо перейти к представлению сведений об оповещении, чтобы закрыть оповещение и устранить заметку. В противном случае простое изменение состояния комментария (1) разрешает заметку, но не закрывает или не исправляет базовое оповещение.
Чтобы просмотреть весь набор результатов для ветви запроса на вытягивание, перейдите к Repos>Advanced Security и выберите ветвь запроса на вытягивание. При выборе дополнительных сведений (2) в заметке вы будете направлять вас в представление сведений об оповещении на вкладке "Расширенная безопасность".
Совет
Заметки будут созданы только в том случае, если затронутые строки кода полностью уникальны для разницы в запросе на вытягивание.
Устранение неполадок проверки зависимостей
Проверка зависимостей без идентификации компонентов
Если задача проверки зависимостей завершается без перетаскивания компонентов и не создает оповещений для компонентов с известными уязвимостями, убедитесь, что перед задачей выполняется шаг AdvancedSecurity-Dependency-Scanning@1
восстановления пакета.
Например, для проекта C# (.NET Core) ниже приведен пример фрагмента кода YAML:
- task: DotNetCoreCLI@2
displayName: 'Restore NuGet packages'
inputs:
command: 'restore'
projects: '**/*.csproj'
# If you are using a private package feed such as Azure Artifacts, you will need additional variables.
# For more information, see https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/dotnet-core-cli-v2?view=azure-pipelines
feedsToUse: 'select'
...
- task: AdvancedSecurity-Dependency-Scanning@1
Для проекта JavaScript ниже приведен пример фрагмента кода YAML:
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
workingDir: '$(System.DefaultWorkingDirectory)'
- task: AdvancedSecurity-Dependency-Scanning@1
Проверка зависимостей без получения новых уязвимостей
Если вы запускаете новую сборку, но не видите новые уязвимости должным образом, убедитесь, что сборка выполняется с новой фиксацией.
Время ожидания проверки зависимостей
Время проверки зависимостей по умолчанию до истечения времени ожидания составляет 300 секунд или 5 минут. Если задача истекает до завершения, можно задать переменную DependencyScanning.Timeout
конвейера, которая ожидает целое число, представляющее секунды, например DependencyScanning.Timeout: 600
. Все, что не влияет на время ожидания по умолчанию в 300 секунд.
Чтобы использовать эту переменную, добавьте DependencyScanning.Timeout
в качестве переменной конвейера:
- task: AdvancedSecurity-Dependency-Scanning@1
- env:
DependencyScanning.Timeout: 600
Сценарий разбиения для задачи сборки
Если задача проверки зависимостей блокирует успешное выполнение конвейера и необходимо срочно пропустить задачу сборки, можно задать переменную DependencyScanning.Skip: true
конвейера.
Разрешения на сканирование зависимостей
Задача проверки зависимостей использует удостоверение конвейера для вызова REST API расширенной безопасности. По умолчанию конвейеры в одном проекте имеют доступ к получение оповещений. Если удалить эти разрешения из учетной записи службы сборки или настроить пользовательскую настройку (например, конвейер, размещенный в проекте, отличном от репозитория), необходимо предоставить эти разрешения вручную.
Предоставьте Advanced Security: View Alerts
разрешение учетной записи службы сборки, используемой в конвейере, которая используется [Project Name] Build Service ([Organization Name])
для конвейеров с областью проекта, и для конвейеров Project Collection Build Service ([Organization Name])
с областью сбора.