Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kontrola kódu v GitHub 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í. Budete potřebovat GitHub Advanced Security pro Azure DevOps, nebo pokud používáte samostatné prostředí, mít povolenou GitHub Code Security pro Azure DevOps. 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ý GitHub pro automatizaci kontrol 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.
GitHub Advanced Security for 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.
Požadavky
| Kategorie | Požadavky |
|---|---|
| Oprávnění | – Zobrazení souhrnu všech výstrah pro úložiště: Přispěvatel oprávnění k úložišti. – Zavření výstrah v rozšířeném zabezpečení: oprávnění správce Project. – Správa oprávnění v rozšířeném zabezpečení: Člen skupiny Projektová kolekce Správci nebo oprávnění Rozšířené zabezpečení: správa nastavení nastavené na Povolit. |
Další informace o pokročilých oprávněních zabezpečení naleznete v tématu Správa oprávnění Advanced Security.
Informace o typech nastavení kontroly kódu
Vyhledávání kódu pro úložiště můžete nastavit dvěma hlavními způsoby: výchozí nastavení a pokročilé nastavení.
| Výchozí nastavení | Upřesňující nastavení | |
|---|---|---|
| Configuration | Automatická, nevyžaduje se žádná konfigurace kanálu. | Manuální, vyžaduje přidání úloh CodeQL do potrubí. |
| Detekce jazyka | Automaticky rozpozná a prohledá podporované jazyky. | V úloze pipeline zadáte jazyky. |
| Pokrytí větví | Prohledává pouze výchozí větev. | Prohledá jakoukoli větev, která spustí potrubí. |
| Customizace sestavení | Žádné vlastní kroky sestavení – používá none režim sestavení. |
Úplná kontrola nad kroky sestavení pro kompilované jazyky |
| Nejvhodnější pro | Rychlá aktivace, standardní potřeby kontroly | Skenování více větví, vlastní fond pro agenty nebo frekvence skenování |
Výchozí nastavení je nejrychlejší způsob, jak povolit kontrolu kódu. Vytvoří spravovanou konfiguraci prohledávání na pozadí a nevyžaduje žádné změny v pipeline. Doporučujeme začít s výchozím nastavením pro většinu úložišť.
Výchozí instalační program prohledá následující jazyky: C#, C/C++, Java, JavaScript/TypeScript, Python, Ruby a Rust. Go a Swift nejsou v současné době ve výchozím nastavení podporované. Pokud chcete tyto jazyky zkontrolovat, použijte rozšířené nastavení.
Když povolíte výchozí nastavení v úložišti, které obsahuje C/C++, zobrazí se jazyk C/C++ jako podporovaný jazyk na panelu dalších podrobností a prohledá se jako součást nakonfigurovaných výchozích spuštění instalace.
nastavení Advanced umožňuje úplné řízení přidáním úkolů CodeQL přímo do Azure Pipelines. Pokud potřebujete, použijte upřesňující nastavení:
- Správa konkrétních fondů agentů pro různé jazyky nebo výpočetní potřeby
- Přizpůsobení kroků sestavení pro kompilované jazyky
- Skenovat větve mimo výchozí větev
- Integrace skenování kódu do existujícího kanálu CI/CD
- Použití konkrétní sady dotazů CodeQL nebo vlastních dotazů
Návod
Můžete začít s výchozím nastavením a později přepnout na upřesňující nastavení, pokud potřebujete větší kontrolu nebo použít obojí. Informace o konfiguraci výchozího nastavení najdete v tématu Konfigurování GitHub pokročilých funkcí zabezpečení.
Note
Když povolíte výchozí nastavení CodeQL na úrovni organizace nebo projektu, spustí se počáteční kontrola automaticky fronty pro všechna ovlivněná úložiště. Výsledky se začnou objevovat postupně, jakmile se dokončí prohledávání jednotlivých úložišť, aniž byste čekali na další naplánované spuštění.
Konfigurace výchozích možností nastavení
Po povolení výchozího nastavení CodeQL můžete nakonfigurovat fond agentů a plán kontroly z nastavení organizace. Tyto možnosti platí pro všechna úložiště v organizaci, která používají výchozí nastavení.
Pokud chcete získat přístup k konfigurovatelným možnostem, přejděte doúložišť> organizace a rozbalte rozevírací seznam konfigurovatelných možností výchozího nastavení CodeQL.
Fond agentů
Vyberte fond agentů, který se používá ke spouštění výchozích kontrol nastavení CodeQL ve všech úložištích v organizaci. Můžete si vybrat z:
- Azure Pipelines – používá agenty hostované Microsoft. Použití fondu agentů Azure Pipelines využívá souběžnost kanálů.
- Fondy agentů v místním prostředí – používají vlastní agenty. Vyberte samostatně hostovaný fond, pokud vaše úložiště vyžadují přístup k soukromým sítím, konkrétním nástrojům sestavení nebo jiným prostředkům, které nejsou dostupné u hostovaných agentů.
- Spravované fondy DevOps — používá fondy spravované Azure s vlastními obrazy virtuálních počítačů.
Plán skenování
Vyberte, kdy má výchozí skenování CodeQL běžet pro všechna úložiště v organizaci. Pro týdenní kontroly můžete zvolit konkrétní den v týdnu. Pod rozevíracím seznamem se zobrazí další plánované datum spuštění.
Note
Když povolíte výchozí nastavení na úrovni organizace nebo projektu, počáteční spuštění se automaticky zařadí do fronty, takže nemusíte čekat na naplánované týdenní spuštění, abyste získali první výsledky.
Zrušit spuštěné nebo zařazené kontroly
Pokud potřebujete zastavit aktivně spuštěné nebo na řadě výchozí skeny nastavení, můžete je ručně zrušit prostřednictvím nastavení>úložišť organizace. Uživatelé s oprávněním Pokročilé zabezpečení: správa nastavení v úložišti mohou zrušit spuštění výchozího nastavení, které běží nebo je ve frontě.
Monitorování výchozích spuštění instalace
Výchozí nastavení CodeQL můžete monitorovat a najít ze zobrazení protokolu úloh fondu agentů.
Vylepšený prohlížeč protokolů – když se nezdaří výchozí instalační program, zobrazí se v horní části prohlížeče protokolů chyba. Můžete rychle prozkoumat, co se nepovedlo, aniž byste museli procházet celý protokol.
Spuštění pojmenování – výchozí spuštění instalace se řídí konvencí pojmenování, která usnadňuje jejich přehlednou identifikaci v zobrazení protokolu úloh fondu agentů.
Filtry stavu a úložiště – filtrují úlohy podle stavu a úložiště , abyste měli lepší přehled o tom, co se stalo s úlohou ve vašem fondu agentů. Tyto filtry platí pro všechny úlohy v zobrazení, nejen pro výchozí spuštění instalace.
Pokročilé nastavení pro kontrolu kódu
CodeQL je nástroj založený na zpracovatelském potrubí, kde jsou výsledky agregovány na úložišti.
Návod
Skenování kódu může být časově náročnější úlohou sestavení, proto doporučujeme přidat úlohu kontroly kódu do samostatného naklonovaného kanálu hlavního produkčního kanálu nebo vytvořit nový kanál.
- YAML
- Classic
Přidejte úkoly v následujícím pořadí:
- Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
- Vlastní kroky sestavení
- Pokročilá bezpečnost: Proveďte analýzu CodeQL (AdvancedSecurity-Codeql-Analyze@1)
Určete také jazyk, který v Initialize CodeQL úkolu analyzujete. K analýze více jazyků najednou můžete použít čárkami oddělený seznam. Podporované jazyky jsou csharp, cpp, go, java, javascript, python, ruby, swift. Pokud používáte agenty v místním prostředí, můžete také přidat enableAutomaticCodeQLInstall: true proměnnou, která automaticky nainstaluje nejnovější bity CodeQL pro vašeho agenta.
Tady je příklad úvodního kanálu:
trigger:
- main
pool:
# Additional hosted image options are available: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted#software
vmImage: ubuntu-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
inputs:
languages: "java"
# Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
# You can customize the initialize task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
# If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
enableAutomaticCodeQLInstall: true
# Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.
# If you had a Maven app:
# - task: Maven@4
# inputs:
# mavenPomFile: 'pom.xml'
# goals: 'clean package'
# publishJUnitResults: true
# testResultsFiles: '**/TEST-*.xml'
# javaHomeOption: 'JDKVersion'
# jdkVersionOption: '1.17'
# mavenVersionOption: 'Default'
# Or a general script:
# - script: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines
- task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines
Určete také jazyk, který v Initialize CodeQL úkolu analyzujete. Pokud je zadaný jazyk swift, je nutné provést vlastní kroky sestavení.
Návod
- Pomocí
javamůžete analyzovat kód napsaný v Java, Kotlin nebo obojím. - Slouží
javascriptk analýze kódu napsaného v JavaScriptu, TypeScriptu nebo obojím.
Pokud používáte agenta v místním prostředí, vyberte Enable automatic CodeQL detection and installation možnost automatického použití nejnovějších bitů CodeQL ve vašem agentovi, pokud jste ručně nenainstalovali nejnovější sadu CodeQL do mezipaměti nástrojů agenta.
Pokud chcete generovat upozornění, spusťte první kontrolu s potrubím, které zahrnuje úlohy kontroly kódu.
Další konfigurace pro kontrolu kódu
Podpora jazyka a dotazů
Experti z GitHubu, bezpečnostní výzkumníci a přispěvatelé z komunity píší a udržují výchozí dotazy CodeQL, které se používají pro skenování 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 open source, 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 |
|---|---|
| C/C++ | cpp |
| jazyk C# | csharp |
| Go | go |
| Java/Kotlin | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Ruby | ruby |
| Rust | rust |
| Swift | swift |
Návod
- Slouží
cppk analýze kódu napsaného v jazyce C, C++ nebo obojím. - Pomocí
javamůžete analyzovat kód napsaný v Java, Kotlin nebo obojím. - Slouží
javascriptk analýze kódu napsaného v JavaScriptu, TypeScriptu nebo obojím.
Další informace naleznete v tématu Podporované jazyky a architektury.
Můžete zobrazit konkrétní dotazy a podrobnosti úlohy, které CodeQL spouští v protokolu sestavení. Když použijete výchozí nastavení, vylepšený prohlížeč protokolů nabízí přehlednější pojmenování spuštění a nové filtry podle stavu a úložiště, které vám pomůžou najít a zkontrolovat konkrétní spuštění kontroly v zobrazení protokolu úloh fondu agentů Azure DevOps.
Přizpůsobení konfigurace sestavení pro kontrolu kódu
Kontrola kódu podporuje dva režimy sestavení při nastavování kanálu pro kontrolu:
-
none- Databáze CodeQL je vytvořena přímo ze základu kódu bez sestavení základu kódu (podporována pro všechny interpretované jazyky a dále podporována procpp,javaacsharp). -
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.
Návod
Režim sestavení none se dá použít v jiných interpretovaných jazycích, jako je JavaScript, Python, Ruby.
Pokud je režim sestavení none zadaný pro jazyk C# nebo Java s jinými kompilovanými jazyky, které nepodporují režim sestavení none, úloha kanálu selže.
Následující kód ukazuje příklad platné konfigurace s více jazyky a none režimu 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
Následující kód ukazuje příklad neplatné konfigurace s více jazyky a none režim 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í skenování kódu
GitHub Advanced Security for Azure DevOps výstrahy kontroly kódu zahrnují označení kontroly kódu podle úložiště, které upozorňují na zranitelnosti aplikací na úrovni kódu.
Pokud chcete použít kontrolu kódu, musíte nejprve nakonfigurovat GitHub Advanced Security pro Azure DevOps.
Karta Pokročilé zabezpečení pod položkou Repos v Azure DevOps je centrem pro zobrazení výstrah ze skenování kódu. Vyberte kartu Skenování kódu pro zobrazení výstrah skenování. Můžete filtrovat podle větve, stavu, kanálu, typu pravidla a závažnosti. Momentálně centrum upozornění nezobrazuje výstrahy pro dokončené skenování na větvích pull requestů.
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 pokročilé zabezpečení, ztratíte přístup k výsledkům na kartě Pokročilé zabezpečení a v úloze sestavení. Úloha sestavení neselže, ale jakékoli výsledky ze sestavení provedených s úlohou, zatímco je rozšířené zabezpečení zakázáno, jsou skryté a nejsou uchovány.
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 určité upozornění na kontrolu 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 CVSS (Common Vulnerability Scoring System) pro identifikovaný seznam obecných slabin (CWE). Další informace o skóre závažnosti najdete v tomto blogovém příspěvku GitHub. |
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 úložiště na kartě Pokročilé zabezpečení v části Repos. Vyberte kartu Skenování kódu pro zobrazení všech upozornění tajného skenování.
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 kódu 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.
Zrušení upozornění skenování 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.
Odstranění 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ě nejsou vybrány, vyberte jako důvod uzavření buď Přijaté 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 odstraní výstrahu ve všech větvích. Ostatní větve, které obsahují stejnou chybu zabezpečení, budou také zamítnuty. 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 pull requesty
Pokud se v žádosti o přijetí změn vytvoří upozornění na nové změny kódu, zobrazí se upozornění jako poznámka v sekci komentářů na kartě 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ětve.
Můžete zkontrolovat ovlivněné řádky kódu, zobrazit souhrn hledání a vyřešit poznámku v části Přehled.
Pokud chcete zavřít výstrahy pull requestů, musíte přejít do zobrazení detailů výstrahy, kde zavřete výstrahu a vyřešíte 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.
Pokud chcete zobrazit celou sadu výsledků pro větev žádosti o přijetí změn, přejděte na Repos>Advanced Security a vyberte větev žádosti o přijetí změn. Výběrem možnosti Zobrazit další podrobnosti (2) v poznámce se dostanete na zobrazení podrobností výstrahy na kartě Pokročilé zabezpečení.
Návod
Poznámky se vytvoří jen v případě, že ovlivněné řádky kódu jsou zcela jedinečné pro rozdíly v pull requestu ve srovnání s cílovou větví pull requestu.