Dela via


Kodgenomsökning

Med kodgenomsökning i GitHub Advanced Security för Azure DevOps kan du analysera koden på en Azure DevOps-lagringsplats för att hitta säkerhetsrisker och kodfel. Eventuella problem som identifieras av analysen tas upp som en varning. Kodskanning använder CodeQL för att identifiera sårbarheter.

CodeQL är kodanalysmotorn som utvecklats av GitHub för att automatisera säkerhetskontroller. Du kan analysera koden med Hjälp av CodeQL och visa resultatet som aviseringar om kodgenomsökning.

GitHub Advanced Security för Azure DevOps fungerar med Azure Repos. Om du vill använda GitHub Advanced Security med GitHub-lagringsplatser läser du GitHub Advanced Security.

CodeQL-aviseringar

GitHub-experter, säkerhetsforskare och communitydeltagare skriver och underhåller standardfrågorna för CodeQL som används för kodgenomsökning. Frågorna uppdateras regelbundet för att förbättra analysen och minska eventuella falska positiva resultat. Frågorna är öppen källkod, så du kan visa och bidra till frågorna på github/codeql-lagringsplatsen.

Mer specifik dokumentation om CodeQL finns i CodeQL-dokumentationen på GitHub.

CodeQL stöder både kompilerade och tolkade språk och kan hitta sårbarheter och fel i kod som skrivs på de språk som stöds.

  • C/C++
  • C#
  • Kör
  • Java
  • JavaScript/TypeScript
  • Kotlin (beta)
  • Python
  • Ruby
  • Swift

Mer information finns i dokumentationen på CodeQL-webbplatsen om språk och ramverk som stöds.

Du kan visa specifika frågor och uppgiftsinformation som används av CodeQL genom att titta igenom byggloggen, ungefär som beroendegenomsökning.

Skärmbild av publiceringsresultataktivitet för kodgenomsökning

Aviseringar för kodgenomsökning

GitHub Advanced Security för Azure DevOps-kodgenomsökningsaviseringar innehåller kodgenomsökningsflaggor efter lagringsplats som varnar för programsårbarheter på kodnivå.

Om du vill använda kodgenomsökning måste du först konfigurera GitHub Advanced Security för Azure DevOps.

Fliken Avancerad säkerhet under Lagringsplatser i Azure DevOps är hubben för att visa dina kodgenomsökningsaviseringar. Välj fliken Kodgenomsökning för att visa genomsökningsaviseringar. Du kan filtrera efter gren, tillstånd, pipeline, regeltyp och allvarlighetsgrad. För närvarande visar inte aviseringshubben aviseringar för genomsökning som slutförts på PR-grenar.

Resultatet påverkas inte om pipelines eller grenar byts namn – det kan ta upp till 24 timmar innan det nya namnet visas.

Om du väljer att köra anpassade CodeQL-frågor finns det som standard inte ett separat filter för aviseringar som genererats från olika frågepaket. Du kan filtrera efter regel, vilket är distinkt för varje fråga.

Skärmbild av kodgenomsökningsaviseringar för en lagringsplats

Om du inaktiverar Avancerad säkerhet för lagringsplatsen förlorar du åtkomsten till resultaten på fliken Avancerad säkerhet och byggaktiviteten. Byggaktiviteten misslyckas inte, men eventuella resultat från byggen körs med uppgiften medan Avancerad säkerhet är inaktiverad och behålls inte.

Aviseringsinformation

Välj en avisering för mer information, inklusive reparationsvägledning. Varje avisering innehåller en plats, en beskrivning, ett exempel och en allvarlighetsgrad.

Skärmbild av aviseringsinformation för kodgenomsökning

Avsnitt Förklaring
Plats Avsnittet Platser beskriver en specifik instans där CodeQL har identifierat en säkerhetsrisk. Om det finns flera instanser av koden som bryter mot samma regel genereras en ny avisering för varje distinkt plats. Kortet Platser innehåller en direktlänk till det berörda kodfragmentet så att du kan välja det kodfragment som ska dirigeras till Azure DevOps-webbgränssnittet för redigering.
beskrivning Beskrivningen tillhandahålls av CodeQL-verktyget baserat på problemet.
Rekommendation Rekommendationen är den föreslagna korrigeringen för en viss kodgenomsökningsavisering.
Exempel Exempelavsnittet visar ett förenklat exempel på den identifierade svagheten i koden.
Allvarlighet Allvarlighetsgraderna kan vara låga, medelhöga, höga eller kritiska. Allvarlighetsgradspoängen baseras på den angivna CVSS-poängen (Common Vulnerability Scoring System) för den identifierade Common Weakness Enumeration (CWE). Läs mer om hur allvarlighetsgrad poängsätts i det här GitHub-blogginlägget.

Hantera kodgenomsökningsaviseringar

Visa aviseringar för en lagringsplats

Alla med deltagarbehörigheter för en lagringsplats kan visa en sammanfattning av alla aviseringar för en lagringsplats på fliken Avancerad säkerhet under Lagringsplatser. Välj fliken Kodgenomsökning för att visa alla aviseringar för hemlig genomsökning.

För att visa resultat måste kodgenomsökningsuppgifterna köras först. När den första genomsökningen är klar visas eventuella identifierade säkerhetsrisker på fliken Avancerad säkerhet.

Som standard visar aviseringssidan resultat av beroendegenomsökning för lagringsplatsens standardgren.

Statusen för en viss avisering återspeglar tillståndet för standardgrenen och den senaste körningspipelinen, även om aviseringen finns på andra grenar och pipelines.

Stänga aviseringar för kodgenomsökning

Om du vill stänga aviseringar behöver du lämpliga behörigheter. Som standard kan endast projektadministratörer stänga av avancerade säkerhetsaviseringar.

Så här stänger du en avisering:

  1. Gå till den avisering som du vill stänga och välj i aviseringen.
  2. Välj listrutan Stäng avisering.
  3. Om du inte redan har valt väljer du antingen Risk accepterad eller Falsk positiv som stängningsorsak.
  4. Lägg till en valfri kommentar i textrutan Kommentar .
  5. Välj Stäng för att skicka och stänga aviseringen.
  6. Aviseringstillståndet ändras från Öppna till Stängd och orsaken till uppsägningen visas.

Skärmbild av hur du stänger en kodgenomsökningsavisering

Detta stänger bara aviseringen för den valda grenen. Andra grenar som innehåller samma säkerhetsrisk förblir aktiva tills de stängs. Alla aviseringar som tidigare har stängts kan öppnas manuellt.

Använda anpassade frågor med CodeQL

Om du inte har angett någon anpassad konfigurationsfil i pipelinekonfigurationen security-extended kör CodeQL som standard frågepaketet för att analysera koden. Du kan använda anpassade CodeQL-frågor för att skriva egna frågor för att hitta specifika säkerhetsrisker och fel. Du måste också skapa en anpassad konfigurationsfil för att ändra CodeQL:s standardanalys.

Information om hur du hittar befintliga anpassade frågor eller bidrar med din egen anpassade fråga finns i Bidra till CodeQL.

Analys med anpassade frågor

Det snabbaste sättet att börja med en anpassad fråga är att skriva en fråga och spara den på din lokala Azure DevOps-lagringsplats. Du kan anpassa information om en anpassad fråga efter behov, men den måste ha minst ett regel-ID. Mer information om hur du skriver en egen CodeQL-fråga finns i Skriva CodeQL-frågor. Du kan också paketera flera frågor i en frågesvit eller använda paket som publicerats av andra personer. Mer information finns i Publicera och använda CodeQL-paket.

Använda en anpassad konfigurationsfil

En anpassad konfigurationsfil är ett sätt att hantera vilka frågor som körs under CodeQL:s analys mot din kod. Du kan ange ytterligare frågor eller frågepaket som ska köras och ändra eller inaktivera standardfrågorna för CodeQL.

Om du vill inkludera en specifik fråga som du vill inkludera anger du frågan med ett namn och en sökväg till platsen för frågefilen (.ql) på lagringsplatsen.

Om du vill inkludera ett specifikt paket som du vill inkludera anger du paketnamnet. Du kan ange valfritt antal CodeQL-frågepaket som ska köras i konfigurationsfilen.

Dricks

packs Filtret från konfigurationsfilen stöder nedladdning av paket från lagringsplatser som finns i GitHub, även om queries filtret inte gör det. Om paketet är privat i GitHub måste du ange en GitHub-åtkomsttoken via AdvancedSecurity-Codeql-Init@1 uppgiften som en miljövariabel och variabelnamn som GITHUB_TOKEN, med tokenomfånget read:packagessom .

Här är ett exempel på en konfigurationsfil:

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

Dricks

Konfigurationsfilspecifikationer ignorerar och har företräde framför konfigurationer på pipelinenivå för AdvancedSecurity-Codeql-Init@1 uppgiften. includepaths / ignorepathsignoreras eller, om paths/paths-ignore det finns, skrivs över med värden från .paths/paths-ignore querysuite skrivs över med värden som anges i queries eller packs i konfigurationsfilen.

Mer specifika råd och konfigurationsalternativ med konfigurationsfilen finns i Anpassa den avancerade konfigurationen för kodgenomsökning.

När du har din konfigurationsfil måste du sedan anpassa pipelinen som kör CodeQL-analys för att använda den nya filen. Här är en exempelpipeline som pekar på en konfigurationsfil:

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

Felsöka kodgenomsökning

Om du stöter på fel med CodeQL-körning rapporterar CodeQL CLI statusen för varje kommando som körs som en slutkod. Slutkoden innehåller information för efterföljande kommandon eller för andra verktyg som förlitar sig på CodeQL CLI. Mer information om slutkodsinformation finns i Slutkoder.

Fel: "databas slutför" CodeQL-kommando (32)

Det här felet anger ett problem med att slutföra skapandet av CodeQL-databasen, eventuellt på grund av extraheringsfel eller saknade byggsteg.

Felsökningssteg:

  1. Kontrollera att koden finns och kompileras
    • För kompilerade språk kontrollerar du att byggprocessen kompilerar kod och sker mellan aktiviteterna AdvancedSecurity-Codeql-InitAdvancedSecurity-Codeql-Analyze och . Vanliga build-kommandon och obligatoriska flaggor (till exempel rensa no-cache/no-daemon) finns här i Ange byggkommandon.
    • För tolkade språk kontrollerar du att det finns viss källkod för det angivna språket i projektet.
  2. Kontrollera extraheringsfel
    • Kontrollera om extraheringsfel påverkar CodeQL-databasens hälsa.
    • Granska loggfilen för extraheringsfel och varningar för att utvärdera övergripande databashälsa.
  3. Undersöka överväldigande fel
    • Om de flesta filer stöter på extraheringsfel kan du undersöka ytterligare för att förstå rotorsaken till felaktig extrahering.

Fel: autobuild script (1)

Det här felet beskriver ett automatiskt byggfel, vilket tyder på ett problem med konfiguration eller konfiguration av kodgenomsökning.

Felsökningssteg:

  1. Konfigurera byggsteg

Fel: CodeQL-kataloger hittades inte i agentverktygets cacheminne

Det här felet anger ett problem med att installera CodeQL för lokalt installerade agenter.

Felsökningssteg:

  1. Se konfigurationsriktlinjer eller konfigurationsskript som tillhandahålls i Konfigurera GitHub Advanced Security för Azure DevOps.

Fel: Språkpipelinevariabeln har inte angetts

Det här felet uppstår när du försöker köra CodeQL utan att ange pipelinevariabeln som anger vilka språk som ska genomsökas.

Felsökningssteg:

  1. Ange språkpipelinevariabel

CodeQL returnerar inga resultat

Det här avsnittet innehåller vägledning för situationer där CodeQL-analys inte ger några resultat.

Felsökningssteg:

  1. Sök efter identifierade sårbarheter
    • Tänk på möjligheten att koden verkligen inte har några säkerhetsrisker. Om sårbarheter förväntas men inte identifieras fortsätter du att verifiera ytterligare.
  2. Granska konfigurationen av frågepaket
  3. Justera behörigheter för att visa resultat

Behörigheter för kodgenomsökningsaktivitet

Versionsuppgiften för kodgenomsökning använder pipelineidentiteten för att anropa REST API:er för avancerad säkerhet. Som standard har pipelines i samma projekt åtkomst till att ladda upp SARIF-filen som genereras genom att köra CodeQL-analys. Om du tar bort dessa behörigheter från byggtjänstkontot eller om du har en anpassad konfiguration (till exempel en pipeline som finns i ett annat projekt än lagringsplatsen) måste du bevilja dessa behörigheter manuellt.

Felsökningssteg:

  • Bevilja Advanced Security: View alerts och Advanced Security: Manage and dismiss alerts behörighet till det byggtjänstkonto som används i din pipeline, som för pipelines med projektomfattning är [Project Name] Build Service ([Organization Name]), och för pipelines med samlingsomfång är Project Collection Build Service ([Organization Name]).