Sdílet prostřednictvím


Kontrola závislostí

Kontrola závislostí v GitHub Advanced Security pro Azure DevOps detekuje opensourcové komponenty používané ve zdrojovém kódu a zjistí, jestli existují nějaká související ohrožení zabezpečení. Všechna zjištěná ohrožení zabezpečení z opensourcových komponent se označí příznakem jako výstraha.

Pokročilé zabezpečení GitHubu pro Azure DevOps funguje s Azure Repos. Pokud chcete používat GitHub Advanced Security s úložišti GitHub, přečtěte si téma GitHub Advanced Security.

O kontrole závislostí

Kontrola závislostí vygeneruje výstrahu pro libovolnou opensourcovou komponentu, přímou nebo přenosnou, která je ohrožená tím, že váš kód závisí. Přímá ohrožení zabezpečení jsou knihovny, které váš kód přímo používá. Přechodné závislosti jsou knihovny nebo jiný software, který přímé závislosti používá.

Informace o detekci vyhledávání závislostí

Nový snímek komponent se uloží vždy, když se graf závislostí pro úložiště změní, a po spuštění kanálu, který obsahuje úlohu kontroly závislostí, která vytváří nový kód (jinými slovy, nové potvrzení).

Pro každou zranitelnou komponentu zjištěnou při použití se tato komponenta a ohrožení zabezpečení zobrazí v protokolu sestavení a zobrazí se jako výstraha na kartě Upřesnit zabezpečení. Výstrahy kontroly závislostí vytvářejí pouze poradce, které gitHub zkontroloval a přidaly se do databáze poradce GitHubu. Protokol sestavení obsahuje odkaz na jednotlivá upozornění pro další šetření. Další informace o podrobnostech výstrah najdete v tématu Oprava výstrah kontroly závislostí.

Protokol sestavení obsahuje také základní informace o každé zjištěné chybě zabezpečení. Mezi tyto podrobnosti patří závažnost, ovlivněná komponenta, název chyby zabezpečení a související CVE.

Snímek obrazovky s výstupem sestavení kontroly závislostí

Podporované ekosystémy balíčků

Kontrola závislostí podporuje přímé i tranzitivní závislosti pro všechny podporované ekosystémy balíčků.

Správce balíčků Jazyky Podporované formáty
Náklad Rust Cargo.toml, Cargo.lock
CocoaPods Swift Podfile.lock
Moduly Go Go go.mod, go.sum
Gradle Java *.lockfile
Maven Java pom.xml
npm JavaScript package-lock.json, package.json, , npm-shrinkwrap.jsonlerna.json
NuGet C# *.packages.config, , *.project.assets*.csproj
jádro Python setup.py, requirements.txt
pnpm JavaScript package.json
RubyGems Ruby Gemfile.lock
Příze JavaScript package.json

Informace o výstrahách kontroly závislostí

Karta Rozšířené zabezpečení v Azure DevOps je centrum pro zobrazení výstrah zabezpečení, které ve výchozím nastavení zobrazuje výstrahy kontroly závislostí. Můžete filtrovat podle větve, kanálu, balíčku a závažnosti. Můžete si vybrat upozornění, kde najdete další podrobnosti, včetně pokynů k nápravě. V tuto chvíli centrum upozornění nezobrazuje výstrahy pro kontrolu dokončených ve větvích žádosti o přijetí změn.

Když ve vašem úložišti zjistíte ohrožený balíček, oprava výstrah kontroly závislostí obvykle zahrnuje upgrade na vyšší verzi balíčku nebo odebrání balíčku, který se odsudí. Toto doporučení platí pro přímé i přechodné (nebo nepřímé) závislosti. Výchozí zobrazení na kartě Rozšířené zabezpečení je aktivní upozornění pro výchozí větev úložiště.

Pokud se přejmenují kanály nebo větve, žádné výsledky se neprojeví – může to trvat až 24 hodin, než se zobrazí nový název.

Snímek obrazovky se zobrazením upozornění kontroly závislostí pro úložiště

Stav výstrahy se automaticky aktualizuje, když Closed se ohrožená komponenta už nezjistí v nejnovějším buildu pro všechny kanály, ve kterých je nainstalována úloha kontroly závislostí. Pokud chcete zobrazit vyřešená upozornění, použijte State filtr na hlavním panelu nástrojů a vyberte Closed.

Snímek obrazovky se zobrazením výstrah kontroly uzavřených závislostí

Pokud pro úložiště vypnete Rozšířené zabezpečení, ztratíte přístup k výsledkům na kartě Rozšířené zabezpečení a úloze sestavení. Úloha sestavení se nezdaří, ale žádné výsledky sestavení se s úlohou spustí, zatímco rozšířené zabezpečení je zakázané, a nezachovají se.

Podrobnosti výstrahy

Můžete také přejít k podrobnostem o upozornění kliknutím na konkrétní výstrahu a pokyny k nápravě.

Snímek obrazovky zobrazující podrobnosti pro upozornění kontroly závislostí

Sekce Vysvětlení
Doporučení Text doporučení pochází přímo od našeho poskytovatele dat ohrožení zabezpečení, databáze Poradce GitHubu. Pokyny obvykle navrhují upgrade identifikované komponenty na neschválitelnou verzi.
Umístění Část Umístění podrobně popisuje cesty, ve kterých úloha kontroly závislostí zjistila, že se používá zranitelná komponenta. Pokud lze soubor přeložit z podkladové kontroly sestavení na potvrzený soubor ve zdroji, zobrazí se karta Umístění jako odkaz umožňující kliknutí. Pokud byl soubor vytvořen jako součást sestavení (například artefakt sestavení), odkaz se nedá kliknout. Projděte si protokoly sestavení, abyste lépe pochopili, jak byla komponenta přenesena do sestavení.
Popis Popis je poskytován popisem poradce GitHubu.

Detekcí

Kanály uvedené na kartě Detekce jsou kanály , ve kterých byla nalezena ohrožená komponenta. Každý řádek podrobně popisuje nejnovější build ovlivněného kanálu a datum prvního zavedení balíčku. Pokud byl ohrožený balíček opravený v některých kanálech, ale ne všechny, zobrazí se částečně pevné řádky.

Snímek obrazovky zobrazení zjišťování závislostí pro upozornění bez opravy

Po vyřešení výstrahy se výstraha automaticky přesune do Closed stavu a na kartě Detekce se na kartě Detekce zobrazí zelený symbol zaškrtnutí, což znamená, že kód obsahující aktualizovanou komponentu se spustil v daném kanálu:

Snímek obrazovky se zobrazením zjišťování závislostí pro výstrahu

Závažnost

Poradní databáze GitHubu poskytuje skóre CVSS, které se pak přeloží na nízkou, střední, vysokou nebo kritickou závažnost výstrahy pomocí následujících pokynů:

CVSS Score Závažnost
1,0 < Podle < 4,0 Nízká
4,0 < Podle < 7,0 Střední
7,0 < Podle < 9,0 Vysoká
Skóre >= 9,0 Kritické

Vyhledání podrobností

V části Hledání podrobností se běžně nacházejí dvě části: ohrožený balíček a kořenová závislost. Ohrožený balíček je potenciálně zranitelná komponenta. Oddíl kořenové závislosti obsahuje komponenty nejvyšší úrovně, které zodpovídají za řetěz závislostí, který vede k ohrožení zabezpečení.

Pokud se na ohrožený balíček odkazuje jenom jako na přímou závislost, zobrazí se jenom část "ohrožený balíček".

Pokud se na ohrožený balíček odkazuje jako na přímou i tranzitivní závislost, balíček se zobrazí v části "ohrožený balíček" i "kořenová závislost".

Pokud se na ohrožený balíček odkazuje pouze jako tranzitivní závislost, balíček se zobrazí v části "ohrožený balíček" a kořenové závislosti odkazující na ohrožený balíček se zobrazí v části "Kořenová závislost".

Správa výstrah kontroly závislostí

Zobrazení upozornění pro úložiště

Každý, kdo má oprávnění přispěvatele pro úložiště, může zobrazit souhrn všech výstrah pro úložiště v rozšířeném zabezpečení repos>.

Ve výchozím nastavení se na stránce upozornění zobrazují výsledky kontroly závislostí pro výchozí větev úložiště.

Stav výstrahy odráží stav výchozí větve a nejnovějšího kanálu spuštění, a to i v případě, že výstraha existuje v jiných větvích a kanálech.

Oprava výstrah kontroly závislostí

Přímá závislost je komponenta, kterou máte ve svém úložišti. Tranzitivní nebo nepřímá závislost je komponenta, která se používá přímou závislostí. Váš projekt je stále zranitelný bez ohledu na to, jestli se ohrožení zabezpečení nachází v přímé nebo přechodné závislosti.

Oprava zranitelné přechodné závislosti má obvykle formu explicitního přepsání verze zranitelné komponenty používané pro každou identifikovanou přímou závislost. Jakmile kořenové závislosti upgradují jejich použití zranitelné komponenty na bezpečnou verzi, můžete upgradovat každou kořenovou závislost místo více jednotlivých přepsání.

Aktualizace závislostí pro Yarn/Npm

Hypoteticky řekněme, že tento balíček má dvě ohrožení zabezpečení. Jedním z nich je axios, přímá závislost a jedna je pro acorn, tranzitivní závislost (označovaná také jako nepřímá závislost nebo závislost závislost).

{
 "name": "my-package",
 "version": "1.0.0",
 "dependencies": {
   "axios": "0.18.0",
   "eslint": "5.16.0",
 }
}

Aktuální verze axiosohrožení zabezpečení typu DoS (DoS) s doporučením k aktualizaci na verzi v0.18.1 nebo vyšší. Vzhledem k tomu, že se jedná o přímou závislost, máte kontrolu nad verzí axios , kterou používáte. Stačí jen aktualizovat verzi axios , kterou načítáte. package.json Aktualizace vypadá nějak takto:

{
  "name": "my-package",
  "version": "1.0.0",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0",
  }
}

Teď verze zobrazené package.json verze eslint závisí na verziacorn, která je ohrožením zabezpečení reDoS (Regular Expression Denial of Service) regulárního výrazu s doporučením k aktualizaci na verzi 5.7.4, 6.4.1, 7.1.1 nebo vyšší. Pokud z nástroje pro kontrolu závislostí obdržíte upozornění, měli byste zjistit kořenovou závislost, která vyžaduje zranitelnou závislost.

Příze

Pokud používáte Yarn, můžete použít yarn, proč najít kompletní řetěz závislostí.

> $ 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.

Úplný řetěz závislostí je eslint>>espreeacorn. Jakmile znáte řetězec závislostí, můžete k přepsání používané verzecornu použít jinou funkci Yarn, selektivní rozlišení závislostí.

K definování přepsání verze použijte pole package.json rozlišení. Zobrazí se tři různé metody přepsání balíčku v pořadí od nejhoršího k nejlepšímu:

{
  "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 Použití vzoru přepíše všechna použití balíčku acorn napříč všemi závislostmi. Je to nebezpečné a za běhu to přerušíte. V důsledku toho se odebral v Yarn v2.

eslint/**/acorn Použití vzoru přepíše všechna použití balíčku acorn pod balíčkem eslint a v jakýchkoli balíčcích, na jakých balíčcích závisí. Je bezpečnější než přepsání balíčku pro všechny závislosti, ale přesto má určitá rizika, pokud je graf závislostí pro balíček velký. Tento model se doporučuje, pokud existuje mnoho dílčích balíčků, které používají ohrožený balíček a definují přepsání jednotlivých dílčích balíčků, by bylo nepraktické.

Použití vzoru eslint/espree/acorn přepíše pouze použití acorn balíčku v espree eslint balíčku. Zaměřuje se konkrétně na ohrožený řetěz závislostí a doporučuje se přepsat verze balíčků.

npm

Pokud používáte npm 8.3 nebo vyšší, můžete v package.json použít pole přepsání .

Pokud potřebujete provést konkrétní změny přechodných závislostí, přidejte přepsání. Můžete například potřebovat přidat přepsání, které nahradí verzi závislosti známým problémem se zabezpečením, nahradí existující závislost forkem nebo zajistí, aby se stejná verze balíčku používala všude.

{
  "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"
        }
    }
   }
}

Zobrazený příklad přepsání ukazuje způsob, jak npm říct "přepsat pouze použití acorn v espree balíčku v eslint balíčku". Zaměřuje se konkrétně na ohrožený řetěz závislostí a doporučuje se přepsat verze balíčků. Přepsání jsou nativní funkcí npm. Poskytuje způsob, jak nahradit balíček ve stromu závislostí jinou verzí nebo zcela jiným balíčkem.

Po nastavení přepsání musíte odstranit package-lock.json a node_modules spustit npm install znovu.

Pro balíček, na který přímo závisíte, není možné nastavit přepsání, pokud závislost i samotné přepsání nesdílejí přesně stejnou specifikaci. Řekněme axios: "0.18.0" například, že je zranitelná a hledáme upgrade na axios: "0.19.2". Přímo změňte verzi závislosti místo použití přepsání.

{
  "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",
  }
}

Aktualizujte verzi závislosti bez nastavení přepsání:

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2"
  }
}

Aktualizace závislostí pro Maven

Mechanismus řešení závislostí není tak sofistikovaný jako ten, který se používá v Yarnu. V důsledku toho můžete mít v projektu jenom jednu verzi závislosti. K vyřešení tohoto problému používá Maven algoritmus "nejbližší wins". To znamená, že používá verzi nejbližší závislosti k vašemu projektu ve stromu závislostí.

Máte například následující graf závislostí:

your-project --- A:1.0.0 --- B:2.0.0
      \
       \__ B:1.0.0

your-project závisí na A:1.0.0tom , na kterém zase závisí B:2.0.0 , ale váš projekt má také přímou závislost na B:1.0.0. Proto máte v grafu závislostí B dvě různé verze závislostí B, ale verze 1.0.0 závislosti B vyhraje, protože je "nejbližší" k vašemu projektu.

V některých případech může tento scénář fungovat, pokud jsou verze kompatibilní. Pokud A:1.0.0 ale závisí na některé funkci B, která je k dispozici pouze ve verzi 2.0.0 , toto chování nefunguje. V nejhorším případě se tento projekt může stále kompilovat, ale za běhu selže.

Podívejme se na skutečný příklad.

<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>

Řekněme, že verze com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider , na které závisí, závisí na verzi com.fasterxml.jackson.core:jackson-databind , která má deserializaci nedůvěryhodné chyby zabezpečení dat.

Tuto závislost můžete ověřit pomocí modulu plug-in závislostí Maven. V takovém případě byste spustili mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind a získali následující výstup:

> $ 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] ------------------------------------------------------------------------

Nejprve zkontrolujte, jestli existuje nová verze com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider , která nezávisí na ohrožené verzi com.fasterxml.jackson.core:jackson-databind. Pokud ano, můžete upgradovat com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider a zastavit. Pokud ne, přepište verzi souboru com.fasterxml.jackson.core:jackson-databind.

Jak je znázorněno v fragmentu kódu, při použití Mavenu "nejbližší wins", takže řešením je přidat přímou závislost, com.fasterxml.jackson.core:jackson-databind která opraví ohrožení zabezpečení.

<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>

Opětovným spuštěním mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind příkazu můžete ověřit, že řešení funguje.

$ 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] ------------------------------------------------------------------------

Doporučuje se přidat komentář blízko řešení závislostí, aby každý, kdo přijde později, věděl, proč závislost existuje. Je možné ji odebrat, jakmile kořenová závislost použije novou verzi; jinak se hromadí závislosti.

V reálném projektu přidejte závislost co nejvíce nahoru řetězu. Můžete například přidat rozlišení do nadřazeného souboru POM místo jednotlivě v každém souboru POM projektu.

Aktualizace závislostí pro NuGet

Algoritmus řešení závislostí použitý v NuGetu je podobný Mavenu, protože lze použít pouze jednu verzi závislosti. NuGet ale nepřipne verze závislostí.

Pokud máte například závislost <PackageReference Include="A" Version="1.2.3" />, můžete očekávat, že tento balíček bude ekvivalentní = 1.2.3, ale ve skutečnosti to znamená >= 1.2.3. Pokud chcete připnout přesnou verzi, měli byste použít Version="[1.2.3]". Další informace najdete v dokumentaci k rozsahu verzí NuGet.

Kromě výchozího chování rozsahu NuGet obnoví nejnižší platnou verzi, aby vyhovovala rozsahu. Toto chování znamená, že v mnoha případech musíte definovat rozsah.

Pojďme se podívat na tento ukázkový projekt, který má závislost na 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>

Závisí na verziMicrosoft.AspNetCore.Http.Connections, která je zranitelná vůči ohrožení zabezpečení vzdáleného spuštění kódu (RCE).

Nejprve byste měli zkontrolovat, jestli existuje aktualizovaná verze Microsoft.AspNetCore.App , která závisí na novější verzi Microsoft.AspNetCore.Http.Connections. Pokud ano, můžete upgradovat Microsoft.AspNetCore.App a zastavit tady. Pokud ne, musíte přepsat verzi Microsoft.AspNetCore.Http.Connections , na které závisí.

NuGet nemá ekvivalent yarn proč nebo mvn dependency:tree integrovaný, takže nejjednodušší způsob, jak zobrazit strom závislostí, je často navštívit nuget.org. Pokud navštívíte stránku NuGet ,Microsoft.AspNetCore.App uvidíte, že závisí na Microsoft.AspNetCore.Http.Connections version >= 1.0.4 && < 1.1.0. Nebo v rozsahu verzí NuGet je reprezentativní syntaxe [1.0.4,1.1.0).

Ohrožení zabezpečení RCE bylo Microsoft.AspNetCore.Http.Connections opraveno ve verzi 1.0.15, takže je potřeba přepsat rozsah verzí, který má být[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>

Doporučuje se přidat komentář blízko řešení závislostí, aby každý, kdo přijde později, věděl, proč závislost existuje. Jakmile kořenová závislost použije novou verzi, je možné ji odebrat. Jinak se hromadí závislosti.

Co když není k dispozici žádná oprava?

Pokud není k dispozici žádná známá oprava, jsou k dispozici následující možnosti jako jiné metody nápravy, dokud nebude k dispozici upgradovaná komponenta:

  • Přestaňte komponentu používat a odeberte ji z kódu – toto odebrání se zjistí při příštím sestavení s nainstalovanou úlohou kontroly závislostí.
  • Přispějte opravu samotné součásti. Pokud má vaše organizace specifické pokyny týkající se opensourcových příspěvků, postupujte podle těchto pokynů.
  • Zavření výstrahy Výstrahy bez známé opravy ale stále můžou představovat bezpečnostní hrozbu pro vaši organizaci. Doporučujeme, abyste upozornění nezavřeli, protože neexistuje žádná známá oprava.

Zavření výstrah kontroly závislostí

Pokud chcete zavřít výstrahy v rozšířeném zabezpečení, potřebujete příslušná oprávnění. Ve výchozím nastavení jsou k dispozici pouze správci projektu s možností zavřít výstrahy rozšířeného zabezpečení.

Zavření výstrahy:

  1. Přejděte na výstrahu, kterou chcete zavřít, a vyberte ji.
  2. Výběr rozevíracího seznamu Zavřít upozornění
  3. Pokud ještě není vybraná, vyberte jako důvod uzavření možnost Riziko přijato nebo Falešně pozitivní .
  4. Přidání volitelného komentáře do textového pole Komentář
  5. Výběrem možnosti Zavřít odešlete a zavřete výstrahu.
  6. Stav upozornění se změní z otevření na uzavřeno a zobrazí váš důvod pro zavření.

Snímek obrazovky znázorňující, jak zavřít upozornění kontroly závislostí

Tato akce zavře pouze výstrahu pro vybranou větev. Ostatní větve, které můžou obsahovat stejnou chybu zabezpečení, zůstanou aktivní, dokud se neaktivuje jinak. Všechna upozornění, která byla dříve zamítnuta, lze ručně znovu otevřít.

Řešení potíží s prohledáváním závislostí

Kontrola závislostí neidentifikuje žádné komponenty

Pokud se úloha kontroly závislostí dokončí bez označení jakýchkoli součástí a nedaří se vygenerovat výstrahy pro komponenty se známými ohroženími zabezpečení, ujistěte se, že máte před AdvancedSecurity-Dependency-Scanning@1 úlohou krok obnovení balíčku.

Například pro projekt C# (.NET Core) je zde ukázkový fragment kódu 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

Tady je ukázkový fragment kódu YAML pro javascriptový projekt:

- task: Npm@1
  displayName: 'npm install'
  inputs:
    command: 'install'
    workingDir: '$(System.DefaultWorkingDirectory)'

- task: AdvancedSecurity-Dependency-Scanning@1

Kontrola závislostí nevybírá nová ohrožení zabezpečení

Pokud spouštíte nové sestavení, ale nevidíte nová ohrožení zabezpečení podle očekávání, ujistěte se, že se sestavení spustí s novým potvrzením.

Vypršení časového limitu úlohy kontroly závislostí

Výchozí čas spuštění úlohy kontroly závislostí před vypršením časového limitu je 300 sekund nebo 5 minut. Pokud úloha vyprší před dokončením, můžete nastavit proměnnou DependencyScanning.Timeoutkanálu, která očekává celé číslo představující sekundy, například DependencyScanning.Timeout: 600. Cokoli pod výchozím časovým limitem 300 sekund nemá žádný vliv.

Pokud chcete použít tuto proměnnou, přidejte DependencyScanning.Timeout ji jako proměnnou kanálu:

- task: AdvancedSecurity-Dependency-Scanning@1
- env:
    DependencyScanning.Timeout: 600

Scénář rozbitého skla pro úlohu sestavení

Pokud úloha sestavení kontroly závislostí blokuje úspěšné spuštění kanálu a potřebujete naléhavě přeskočit úlohu sestavení, můžete nastavit proměnnou DependencyScanning.Skip: truekanálu .

Oprávnění úlohy kontroly závislostí

Úloha sestavení pro kontrolu závislostí používá identitu kanálu k volání rozhraní REST API advanced security. Ve výchozím nastavení mají kanály ve stejném projektu přístup k načtení výstrah. Pokud tato oprávnění odeberete z účtu služby sestavení nebo pokud máte vlastní nastavení (například kanál hostovaný v jiném projektu než v úložišti), musíte tato oprávnění udělit ručně.

Udělte Advanced Security: View Alerts oprávnění k účtu služby sestavení používanému ve vašem kanálu, který je [Project Name] Build Service ([Organization Name])pro kanály v oboru projektu , a pro kanály s vymezeným kolekcí je Project Collection Build Service ([Organization Name]).