Sdílet prostřednictvím


Kontrola kódu

Kontrola kódu v GitHubu Advanced Security pro Azure DevOps umožňuje analyzovat kód v úložišti Azure DevOps a najít chyby zabezpečení a chyby kódování. Veškeré problémy zjištěné analýzou se zobrazí jako upozornění. Kontrola kódu používá k identifikaci zranitelností jazyk CodeQL.

CodeQL je modul pro analýzu kódu vyvinutý GitHubem, který automatizuje kontroly zabezpečení. Kód můžete analyzovat pomocí CodeQL a zobrazit výsledky jako výstrahy kontroly kódu. Konkrétnější dokumentaci k CodeQL najdete v dokumentaci codeQL.

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.

Další konfigurace pro kontrolu kódu

Podpora jazyka a dotazů

Odborníci na GitHub, bezpečnostní pracovníci a přispěvatelé komunity zapisují a udržují výchozí dotazy CodeQL používané ke kontrole kódu. Dotazy se pravidelně aktualizují, aby se zlepšila analýza a snížila počet falešně pozitivních výsledků. Dotazy jsou opensourcové, takže můžete zobrazit a přispívat k dotazům v úložišti github/codeql .

CodeQL podporuje a používá následující identifikátory jazyka:

Jazyk Identifikátor Volitelné alternativní identifikátory (pokud existují)
C/C++ c-cpp c nebo cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Tip

  • Slouží c-cpp k analýze kódu napsaného v jazyce C, C++ nebo obojím.
  • Slouží java-kotlin k analýze kódu napsaného v Javě, Kotlinu nebo obojím.
  • Slouží javascript k analýze kódu napsaného v JavaScriptu, TypeScriptu nebo obojím.

Další informace naleznete v tématu Podporované jazyky a architektury.

V protokolu sestavení můžete zobrazit konkrétní dotazy a podrobnosti úlohy prováděné codeQL.

Snímek obrazovky s úlohou publikování výsledků prohledávání kódu

Přizpůsobení režimu sestavení kontroly kódu

Kontrola kódu podporuje dva režimy sestavení při nastavování kanálu pro kontrolu:

  • none – Databáze CodeQL se vytváří přímo ze základu kódu bez sestavení základu kódu (podporuje se pro všechny interpretované jazyky a navíc se podporuje pro C# a Javu).
  • manual – definujete kroky sestavení, které se mají použít pro základ kódu v pracovním postupu (podporováno pro všechny kompilované jazyky).

Další informace o různých režimech sestavení, včetně porovnání výhod jednotlivých režimů sestavení, najdete v tématu Kontrola kódu CodeQL pro kompilované jazyky.

Pro spuštění analýzy skenování kódu prostřednictvím GitHub Advanced Security pro Azure DevOps autobuild je režim sestavení místo samostatné úlohy AdvancedSecurity-CodeQL-Autobuild@1sestavení.

Tip

Režim none sestavení je použitelný ve spojení s jinými interpretovanými jazyky (např. JavaScript, Python, Ruby). Pokud je pro jazyk C# nebo Java zadán režim none sestavení ve spojení s jinými zkompilovanými jazyky, které nepodporují režim nonesestavení, úloha kanálu selže.

Tady je příklad platné konfigurace s více jazyky a none režimem sestavení:

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

Tady je příklad neplatné konfigurace s více jazyky a none režimem sestavení:

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

Upozornění kontroly kódu

Upozornění kontroly kódu GitHub Advanced Security pro Azure DevOps zahrnují příznaky kontroly kódu podle úložiště, které upozorňují na ohrožení zabezpečení aplikací na úrovni kódu.

Pokud chcete použít kontrolu kódu, musíte nejprve nakonfigurovat GitHub Advanced Security pro Azure DevOps.

Karta Rozšířené zabezpečení v Azure DevOps je centrum pro zobrazení upozornění kontroly kódu. Výběrem karty Kontrola kódu zobrazíte výstrahy kontroly. Můžete filtrovat podle větve, stavu, kanálu, typu pravidla a závažnosti. 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.

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.

Pokud se rozhodnete spouštět vlastní dotazy CodeQL, ve výchozím nastavení neexistuje samostatný filtr pro výstrahy vygenerované z různých balíčků dotazů. Můžete filtrovat podle pravidla, které je pro každý dotaz odlišné.

Snímek obrazovky s upozorněními kontroly kódu pro úložiště

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

Podrobnosti výstrahy

Výběrem výstrahy zobrazíte další podrobnosti, včetně pokynů k nápravě. Každá výstraha obsahuje umístění, popis, příklad a závažnost.

Snímek obrazovky s podrobnostmi výstrahy prohledávání kódu

Sekce Vysvětlení
Umístění Část Umístění podrobně popisuje konkrétní instanci, ve které CodeQL zjistil chybu zabezpečení. Pokud existuje více instancí vašeho kódu, které porušují stejné pravidlo, vygeneruje se nová výstraha pro každé jedinečné umístění. Karta Umístění obsahuje přímý odkaz na ovlivněný fragment kódu, abyste mohli vybrat fragment kódu, který se má nasměrovat do webového uživatelského rozhraní Azure DevOps pro úpravy.
Popis Popis poskytuje nástroj CodeQL založený na problému.
Doporučení Doporučením je navrhovaná oprava pro danou výstrahu kontroly kódu.
Příklad Část příkladu ukazuje zjednodušený příklad zjištěné slabosti v kódu.
Závažnost Úrovně závažnosti můžou být nízké, střední, vysoké nebo kritické. Skóre závažnosti vychází z daného skóre CWE (Common Vulnerability Scoring System) pro identifikovaný společný výčet slabosti (CWE). Další informace o skóre závažnosti najdete v tomto blogovém příspěvku na GitHubu.

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ě na kartě Upřesnit zabezpečení v části Úložiště. Výběrem karty Kontrola kódu zobrazíte všechna upozornění kontroly tajných kódů.

Aby se zobrazily výsledky, musí se nejprve spustit úlohy kontroly kódu. Po dokončení první kontroly se všechna zjištěná ohrožení zabezpečení zobrazí na kartě Rozšířené zabezpečení.

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 dané výstrahy odráží stav výchozí větve a nejnovějšího kanálu spuštění, i když výstraha existuje v jiných větvích a kanálech.

Zavření upozornění kontroly kódu

Pokud chcete výstrahy zavřít, potřebujete příslušná oprávnění. Ve výchozím nastavení můžou výstrahy Advanced Security zavřít jenom správci projektu.

Zavření výstrahy:

  1. Přejděte na výstrahu, kterou chcete zavřít, a vyberte ji.
  2. Vyberte rozevírací seznam Zavřít upozornění.
  3. Pokud ještě není vybraná, vyberte jako důvod uzavření buď Riziko, nebo Falešně pozitivní .
  4. Do textového pole Komentář přidejte volitelný 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řít na Uzavřeno a zobrazí se důvod zamítnutí.

Snímek obrazovky znázorňuje, jak zavřít výstrahu kontroly kódu

Tato akce zavře pouze výstrahu pro vybranou větev. Ostatní větve, které obsahují stejnou chybu zabezpečení, zůstanou aktivní, dokud ji nespustíte. Jakékoli upozornění, které jste dříve zavřeli, je možné znovu otevřít ručně.

Správa upozornění kontroly kódu na žádosti o přijetí změn

Pokud se v žádosti o přijetí změn vytvoří upozornění pro nové změny kódu, zobrazí se upozornění jako poznámka v části komentáře karty Přehled žádosti o přijetí změn a jako výstraha na kartě Úložiště advanced Security. Pro větev žádosti o přijetí změn existuje nová položka pro výběr větví.

Můžete zkontrolovat ovlivněné řádky kódu, zobrazit souhrn hledání a vyřešit poznámku v části Přehled.

Snímek obrazovky s aktivní poznámkou žádosti o přijetí změn kódu

Pokud chcete zavřít výstrahy žádostí o přijetí změn, musíte přejít do zobrazení podrobností výstrahy a zavřít výstrahu a vyřešit poznámku. V opačném případě jednoduše změna stavu komentáře (1) vyřeší poznámku, ale nezavře nebo neopraví podkladovou výstrahu.

Snímek obrazovky s poznámkou žádosti o přijetí změn uzavřeného kódu

Pokud chcete zobrazit celou sadu výsledků pro větev žádosti o přijetí změn, přejděte na Rozšířené zabezpečení úložišť>a vyberte větev žádosti o přijetí změn. Výběrem možnosti Zobrazit další podrobnosti (2) v poznámce vás přesměruje na zobrazení podrobností výstrahy na kartě Upřesnit zabezpečení.

Tip

Poznámky budou vytvořeny pouze v případě, že ovlivněné řádky kódu jsou zcela jedinečné pro rozdíl žádosti o přijetí změn v porovnání s cílovou větví žádosti o přijetí změn.