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.
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.
Upozornění CodeQL
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 .
Konkrétnější dokumentaci o CodeQL najdete v dokumentaci CodeQL na GitHubu.
CodeQL podporuje kompilované i interpretované jazyky a může najít chyby zabezpečení a chyby v kódu napsaného v podporovaných jazycích.
- C/C++
- C#
- Přejít
- Java
- JavaScript/TypeScript
- Kotlin (beta verze)
- Python
- Ruby
- Swift
Další informace najdete v dokumentaci na webu CodeQL na podporovaných jazycích a architekturách.
Konkrétní dotazy a podrobnosti o úlohách, které CodeQL používá, si můžete prohlédnout v protokolu sestavení, podobně jako prohledávání závislostí.
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é.
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 žádné výsledky sestavení spuštěné s úlohou, zatímco rozšířené zabezpečení je zakázáno, 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.
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. |
Správa upozornění kontroly kódu
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:
- Přejděte na výstrahu, kterou chcete zavřít, a vyberte ji.
- Vyberte rozevírací seznam Zavřít upozornění.
- Pokud ještě není vybraná, vyberte jako důvod uzavření buď Riziko, nebo Falešně pozitivní .
- Do textového pole Komentář přidejte volitelný komentář.
- Výběrem možnosti Zavřít odešlete a zavřete výstrahu.
- Stav upozornění se změní z otevřít na Uzavřeno a zobrazí se důvod zamítnutí.
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ě.
Použití vlastních dotazů s CodeQL
Pokud ve výchozím nastavení nemáte zadaný vlastní konfigurační soubor, CodeQL spustí security-extended
balíček dotazů k analýze kódu. Vlastní dotazy CodeQL můžete využít k zápisu vlastních dotazů, abyste našli konkrétní chyby zabezpečení a chyby. Musíte také vytvořit vlastní konfigurační soubor pro úpravu výchozí analýzy CodeQL.
Pokud chcete najít existující vlastní dotazy nebo přispívat vlastním dotazem, přečtěte si téma Přispívání do CodeQL.
Analýza s využitím vlastních dotazů
Nejrychlejší způsob, jak začít s vlastním dotazem, je napsat dotaz a uložit ho do místního úložiště Azure DevOps. Podrobnosti vlastního dotazu můžete přizpůsobit podle potřeby, ale musí mít aspoň ID pravidla. Další informace o psaní vlastního dotazu CodeQL najdete v tématu Psaní dotazů CodeQL. Do sady dotazů můžete také seskupit několik dotazů nebo využít balíčky publikované jinými lidmi. Další informace najdete v tématu Publikování a používání balíčků CodeQL.
Použití vlastního konfiguračního souboru
Vlastní konfigurační soubor je způsob, jak spravovat dotazy, které se spouštějí během analýzy CodeQL s vaším kódem. Můžete zadat více dotazů nebo balíčků dotazů, které se mají spustit, a změnit nebo zakázat výchozí dotazy CodeQL.
Pokud chcete zahrnout konkrétní dotaz, který chcete zahrnout, zadejte dotaz s názvem a cestou k umístění souboru dotazu (.ql) v úložišti.
Pokud chcete zahrnout konkrétní balíček, který chcete zahrnout, zadejte název balíčku. Můžete zadat libovolný počet balíčků dotazů CodeQL, které se mají spustit v konfiguračním souboru.
Dalším krokem je vytvoření qlpack.yml
souboru. Tento soubor deklaruje balíček CodeQL a informace o něm. Všechny *.ql
soubory ve stejném adresáři (nebo podadresáři) jako součást qlpack.yml
balíčku.
Tip
Filtr packs
z konfiguračního souboru podporuje stahování balíčků z úložišť hostovaných na GitHubu, ačkoli filtr queries
ho nepodporuje.
Pokud je balíček privátní na GitHubu, musíte prostřednictvím úlohy zadat přístupový token AdvancedSecurity-Codeql-Init@1
GitHubu jako proměnnou prostředí a název proměnné jako GITHUB_TOKEN
s oborem tokenu read:packages
.
Tady je příklad konfiguračního souboru:
name: "Run custom queries"
# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
- name: Use security-extended query suite
uses: security-extended
- name: Use local custom query (single query)
uses: ./customQueries/javascript/FindTestFunctions.ql
- name: Use local custom query (directory of queries)
uses: ./customQueries/javascript/MemoryLeakQueries
packs:
- mygithuborg/mypackname
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
query-filters:
- include:
kind: problem
- include:
precision: medium
- exclude:
id:
- js/angular/disabling-sce
- js/angular/insecure-url-allowlist
Tip
Specifikace konfiguračního souboru ignorují a mají přednost před konfiguracemi na úrovni kanálu pro AdvancedSecurity-Codeql-Init@1
úlohu.
includepaths
/ ignorepaths
bude ignorována nebo , pokud paths
/paths-ignore
jsou přítomny, přepsány hodnotami z .paths
/paths-ignore
querysuite
bude přepsána hodnotami zadanými v queries
konfiguračním souboru nebo packs
v konfiguračním souboru.
Pokud používáte nějaký vlastní dotaz, tady je příklad qlpack.yml
umístěný v adresáři vlastních dotazů:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
Proměnná dependencies
obsahuje všechny závislosti tohoto balíčku a jejich kompatibilní rozsahy verzí. Každá závislost se odkazuje jako na scope/name
balíček knihovny CodeQL. Při definování dependencies
qlpack.yml
závisí na přesně jedné ze základních jazykových sad (například JavaScript, C#, Ruby atd.), která určuje jazyk, který může dotaz analyzovat.
Konkrétnější rady a možnosti konfigurace s konfiguračním souborem najdete v tématu Přizpůsobení pokročilého nastavení pro kontrolu kódu nebo nastavení qlpack.yml
, viz struktura balíčku CodeQL.
Jakmile budete mít konfigurační soubor, budete muset přizpůsobit svůj kanál se spuštěnou analýzou CodeQL tak, aby využíval váš nový soubor. Tady je ukázkový kanál odkazující na konfigurační soubor:
trigger: none
pool:
vmImage: windows-latest
# You can either specify your CodeQL variables in a variable block...
variables:
# `configfilepath` must be an absolute file path relative to the repository root
advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# Or you can specify variables as variables for the task. You do not need both definitions.
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
languages: 'javascript'
loglevel: '2'
configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
env:
GITHUB_TOKEN: $(githubtoken)
- task: AdvancedSecurity-Codeql-Autobuild@1
displayName: AutoBuild
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Řešení potíží s prohledáváním kódu
Obecně platí, že pokud dochází k chybám při provádění CodeQL, rozhraní příkazového řádku CodeQL hlásí stav každého příkazu, který spustí jako ukončovací kód. Ukončovací kód poskytuje informace pro následné příkazy nebo pro jiné nástroje, které spoléhají na rozhraní příkazového řádku CodeQL. Další informace o podrobnostech ukončovacího kódu naleznete v tématu Ukončovací kódy.
Chyba: Příkaz CodeQL finalize database (32)
Tato chyba značí problém s dokončením vytváření databáze CodeQL, potenciálně kvůli chybám extrakce nebo chybějícím krokům sestavení.
Postup při řešení potíží:
- Ověření existence kódu a jeho kompilace
- V kompilovaných jazycích ověřte, že proces sestavení kompiluje kód a že probíhá mezi úlohami
AdvancedSecurity-Codeql-Init
a úkolyAdvancedSecurity-Codeql-Analyze
. Běžné příkazy sestavení a požadované příznaky (například clean no-cache/no-daemon) najdete tady v tématu Určení příkazů sestavení. - U interpretovaných jazyků ověřte, že v projektu existuje nějaký zdrojový kód pro zadaný jazyk.
- V kompilovaných jazycích ověřte, že proces sestavení kompiluje kód a že probíhá mezi úlohami
- Kontrola chyb extrakce
- Ověřte, jestli chyby extrakce ovlivňují stav databáze CodeQL.
- Zkontrolujte v souboru protokolu chyby a upozornění pro extrahování a vyhodnoťte celkový stav databáze.
- Prozkoumání zahlcené chyby
- Pokud většina souborů narazí na chyby extraktoru, prozkoumejte podrobněji příčinu nesprávné extrakce.
Chyba: skript automatickéhobuildu (1)
Tato chyba popisuje selhání automatického sestavení a navrhuje problém s nastavením nebo konfigurací kontroly kódu.
Postup při řešení potíží:
- Konfigurace kroků sestavení
- Odeberte krok AutoBuild a místo toho nakonfigurujte konkrétní kroky sestavení pro zkompilované jazyky v kanálech.
- Pokyny k nastavení najdete v tématu Konfigurace GitHub Advanced Security pro Azure DevOps.
Chyba: Adresáře CodeQL se nenašly v mezipaměti nástrojů agenta
Tato chyba značí problém s instalací CodeQL pro agenty v místním prostředí.
Postup při řešení potíží:
- Přečtěte si pokyny k nastavení nebo konfigurační skripty uvedené v tématu Konfigurace pokročilého zabezpečení GitHubu pro Azure DevOps.
Chyba: Proměnná kanálu jazyka není nastavená
K této chybě dochází při pokusu o spuštění CodeQL bez nastavení proměnné kanálu určující jazyky ke kontrole.
Postup při řešení potíží:
- Nastavení proměnné kanálu jazyka
- Ujistěte se, že je proměnná kanálu jazyka správně nakonfigurovaná. Pokyny k nastavení najdete v tématu Konfigurace GitHub Advanced Security pro Azure DevOps.
- Mezi podporované jazyky patří
csharp
,cpp
,go
,java
,python
javascript
, ,ruby
, aswift
.
CodeQL vrací žádné výsledky
Tato část obsahuje pokyny pro situace, kdy analýza CodeQL neposkytuje žádné výsledky.
Postup při řešení potíží:
- Kontrola zjištěných ohrožení zabezpečení
- Zvažte možnost, že váš kód může skutečně obsahovat žádná ohrožení zabezpečení. Pokud se očekává ohrožení zabezpečení, ale nezjistí se, pokračujte dalším ověřením.
- Kontrola konfigurace sady dotazů
- Ověřte, že se sada dotazů používá, a v případě potřeby zvažte přechod na komplexnější sadu.
- Případně můžete vytvořit vlastní sady dotazů pro přizpůsobené analýzy.
- Úprava oprávnění pro zobrazení výsledků
- Zajištění správných oprávnění, alespoň na úrovni přispěvatele, jsou udělena pro přístup k výsledkům analýzy. Další informace najdete v tématu Rozšířená oprávnění zabezpečení.
Časový limit codeQL
Pokud se AdvancedSecurity-Codeql-Analyze@1
úloha zobrazuje This job was abandoned ... we lost contact with the agent
a používáte hostovaného agenta Microsoftu, úloha dosáhne časového limitu integrovaného šestihodinového časového limitu pro placené hostované agenty. Místo toho se můžete pokusit spustit analýzu agenta v místním prostředí.
Oprávnění k úkolům kontroly kódu
Úloha sestavení pro kontrolu kódu 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 nahrání souboru SARIF vygenerovaného spuštěním analýzy CodeQL. Pokud jsou tato oprávnění odebrána 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ě.
Postup při řešení potíží:
- Udělte
Advanced Security: View alerts
aAdvanced Security: Manage and dismiss 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í jeProject Collection Build Service ([Organization Name])
.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro