Konfigurera kodgenomsökning

Med kodgenomsökning i GitHub Advanced Security efter Azure DevOps kan du analysera koden på en Azure DevOps lagringsplats för att hitta säkerhetsrisker och kodfel. Du behöver antingen GitHub Advanced Security för Azure DevOps eller, om du använder den fristående upplevelsen, GitHub Code Security för Azure DevOps aktiverat. 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 varningar för kodgranskning. Mer specifik dokumentation om CodeQL finns i CodeQL-dokumentationen.

Note

Du kan använda CodeQL CLI för att analysera databaser som för närvarande omfattas av en betald GitHub Advanced Security för Azure DevOps licens. Om du använder CodeQL CLI som ett fristående verktyg följer du GitHub dokumentationen för genomsökning från kommandoraden för att installera och använda CLI. Om du vill publicera den resulterande SARIF-filen till Azure DevOps använder du Advanced Security Publish task.

GitHub Advanced Security för Azure DevOps fungerar med Azure-lagringsplatser. Information om hur du använder GitHub Avancerad säkerhet med GitHub lagringsplatser finns i GitHub Advanced Security.

Förutsättningar

Kategori Krav
behörigheter - Så här visar du en sammanfattning av alla aviseringar för en lagringsplats: Deltagare behörigheter för lagringsplatsen.
– Så här stänger du aviseringar i Avancerad säkerhet: Projektadministratör behörigheter.
– Hantera behörigheter i Avancerad säkerhet: Medlem i gruppen Project collection administrators eller behörigheten Avancerad säkerhet: hantera inställningar inställd på Tillåt.
Pipelineaktiviteter – I Organisationsinställningar>>> säkerställer du att Inaktivera Marketplace-aktiviteter är avstängt. Kodgenomsökning och beroendegenomsökning förlitar sig på Azure-pipelines uppgifter som distribueras via Visual Studio Marketplace. Om du inaktiverar Marketplace-aktiviteter kan standardkonfiguration inte köra skanningar, och pipelines för avancerad konfiguration kan rapportera att en aktivitet saknas. Mer information finns i Uppgiftshantering.

Mer information om avancerade säkerhetsbehörigheter finns i Hantera avancerade säkerhetsbehörigheter.

Om konfigurationstyper för kodgenomsökning

Det finns två huvudsakliga sätt att konfigurera kodgenomsökning för din lagringsplats: standardkonfiguration och avancerad konfiguration.

Standardkonfiguration Avancerad installation
Konfiguration Automatisk, ingen pipelinekonfiguration krävs Manuell kräver att CodeQL-uppgifter läggs till i en pipeline
Språkdetektion Identifierar och söker automatiskt igenom de språk som stöds Du anger språk i pipelineaktiviteten
Grentäckning Söker endast igenom standardgrenen Söker igenom alla grener som utlöser pipelinen
Skapa anpassning Inga anpassade byggsteg – använder none byggläge Fullständig kontroll över byggsteg för kompilerade språk
Bäst för Snabbenablering, standardbehov för genomsökning Genomsökning med flera grener, anpassad agentpool eller genomsökningsfrekvens

Standardkonfigurationen är det snabbaste sättet att aktivera kodgenomsökning. Den skapar en hanterad genomsökningskonfiguration i bakgrunden och kräver inga pipelineändringar. Vi rekommenderar att du börjar med standardinställningen för de flesta lagringsplatser.

Standardkonfigurationen söker igenom följande språk: C#, C/C++, Java, JavaScript/TypeScript, Python, Ruby och Rust. Go och Swift stöds för närvarande inte som standardkonfiguration. Om du vill söka igenom dessa språk använder du avancerad konfiguration.

När du aktiverar standardkonfigurationen på en lagringsplats som innehåller C/C++, visas C/C++ som ett språk som stöds i den ytterligare informationspanelen och genomsöks som en del av dina konfigurerade standardkonfigurationskörningar.

Avancerad installation ger dig fullständig kontroll genom att lägga till CodeQL-uppgifter direkt i Azure-pipelines. Använd avancerad konfiguration när du behöver:

  • Hantera specifika agentpooler för olika språk eller beräkningsbehov
  • Anpassa byggsteg för kompilerade språk
  • Skanna grenar utöver standardgrenen
  • Integrera kodgenomsökning i en befintlig CI/CD-pipeline
  • Använda en specifik CodeQL-frågesvit eller anpassade frågor

Tips

Du kan börja med standardkonfigurationen och växla till avancerad installation senare om du behöver mer kontroll eller använda båda. Information om hur du konfigurerar standardkonfiguration finns i Konfigurera GitHub avancerade säkerhetsfunktioner.

Note

När du aktiverar standardkonfigurationen för CodeQL på organisations- eller projektnivå, körs en första genomsökning automatiskt i köer för alla berörda lagringsplatser. Resultaten börjar visas gradvis när varje databasgenomsökning slutförs, utan att vänta på nästa schemalagda körning.

Konfigurera standardinställningar

När du har aktiverat standardkonfigurationen för CodeQL kan du konfigurera agentpoolen och genomsöka schemat från organisationens inställningar. De här alternativen gäller för alla lagringsplatser i organisationen som använder standardkonfigurationen.

Om du vill komma åt de konfigurerbara alternativen går du till Organisationsinställningar>Arkiv och utökar listrutan Konfigurationsbara alternativ för CodeQL.

Skärmbild av utökade konfigurerbara alternativ för konfiguration av CodeQL-standardinställningar som visar inställningar för agentpool och genomsökningsschema.

Agentpool

Välj den agentpool som används för att köra CodeQL-standardinstallationsgenomsökningar över alla lagringsplatser i organisationen. Du kan välja mellan:

  • Azure-pipelines – använder Microsoft värdbaserade agenter. Med hjälp av Azure-pipelines-agentpoolen används samtidighet i pipelinen.
  • Agentpooler med egen värd – använder dina egna agenter. Välj en lokalt installerad pool om dina lagringsplatser kräver åtkomst till privata nätverk, specifika byggverktyg eller andra resurser som inte är tillgängliga på värdbaserade agenter.
  • Hanterade DevOps-pooler – använder Azure hanterade pooler med anpassade VM-avbildningar.

Genomsökningsschema

Välj när standardinställningen för CodeQL-skanningarna körs för alla lagringsplatser i organisationen. Du kan välja en specifik veckodag för veckogenomsökningar. Nästa schemalagda körningsdatum visas under rullgardinsmenyn.

Note

När du aktiverar standardkonfigurationen på organisations- eller projektnivå placeras en första körning i kö automatiskt så att du inte behöver vänta tills den schemalagda veckokörningen har körts för att få dina första resultat.

Avbryt pågående eller köade genomsökningar

Om du behöver stoppa några aktivt körande eller köade standardinställningssökningar, kan du avbryta dem manuellt via Organisationsinställningar>Förvar. Användare med behörigheten Avancerad säkerhet: Hantera inställningar på lagringsplatsen kan avbryta körande eller köade standardinställningskörningar.

Övervaka standardkonfigurationskörningar

Du kan övervaka och hitta standardkonfigurationen för CodeQL som körs från jobbloggvyn för agentpoolen.

  • Utökat loggvisningsprogram – när en standardkonfigurationskörning misslyckas visas felet överst i loggvisningsprogrammet. Du kan snabbt undersöka vad som gick fel utan att genomsöka hela loggen.

    Skärmbild av loggvisningsprogrammet för en Standardkonfigurationskörning för CodeQL, där felet visas överst i loggen.

  • Kör namngivning – standardkonfigurationskörningar följer en namngivningskonvention som gör dem enkla att snabbt identifiera i jobbloggvyn för agentpoolen.

  • Tillstånds- och lagringsplatsfilter – filtrera jobb efter delstat och lagringsplats för bättre insyn i vad som hände med ett jobb i agentpoolen. Dessa filter gäller för alla jobb i vyn, inte bara standardkonfigurationskörningar.

    Skärmbild av vyn för jobbloggen i agentpoolen med filtren Status och lagringsplats.

Avancerad installation för kodgenomsökning

CodeQL är ett pipelinebaserat verktyg där resultaten aggregeras per lagringsplats.

Tips

Kodgenomsökning kan vara en mer tidsintensiv bygguppgift, så vi rekommenderar att du lägger till kodgenomsökningsaktiviteten i en separat klonad pipeline för huvudproduktionspipelinen eller skapar en ny pipeline.

Lägg till aktiviteterna i följande ordning:

  1. Avancerad säkerhet Initiera CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Dina anpassade byggsteg
  3. Advanced Security Utför CodeQL-analys (AdvancedSecurity-Codeql-Analyze@1)

Skärmbild av konfiguration av pipeline för kodgenomsökning för YAML.

Ange också vilket språk du analyserar i Initialize CodeQL uppgiften. Du kan använda en kommaavgränsad lista för att analysera flera språk samtidigt. De språk som stöds är csharp, cpp, go, java, javascript, python, ruby, swift. Om du använder lokalt installerade agenter kan du också lägga till variabeln enableAutomaticCodeQLInstall: true för att automatiskt installera de senaste CodeQL-bitarna för din agent.

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

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

Ange också vilket språk du analyserar i Initialize CodeQL uppgiften. Om det angivna språket är swiftkrävs anpassade byggsteg.

Tips

  • Använd java för att analysera kod som skrivits i Java, Kotlin eller båda.
  • Använd javascript för att analysera kod som skrivits i JavaScript, TypeScript eller båda.

Om du kör på en lokalt installerad agent väljer du Enable automatic CodeQL detection and installation att automatiskt använda de senaste CodeQL-bitarna på din agent om du inte installerade det senaste CodeQL-paketet manuellt i agentverktygets cacheminne.

Om du vill generera aviseringar, kör din första genomsökning med en pipeline som inkluderar kodgenomsökningsuppgifter.

Fler konfigurationer för kodgenomsökning

Stöd för språk och frågor

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 open-source, så du kan visa och bidra till frågorna på lagringsplatsen github/codeql.

CodeQL stöder och använder följande språkidentifierare:

Språk Identifikator
C/C++ cpp
C# csharp
Gå go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Rubin ruby
Rust rust
Snabb swift

Tips

  • Använd cpp för att analysera kod som skrivits i C, C++ eller båda.
  • Använd java för att analysera kod som skrivits i Java, Kotlin eller båda.
  • Använd javascript för att analysera kod som skrivits i JavaScript, TypeScript eller båda.

Mer information finns i Språk och ramverk som stöds.

Du kan visa specifika frågor och uppgiftsinformation som CodeQL kör i byggloggen. När du använder standardkonfigurationen ger det förbättrade loggvisningsprogrammet tydligare körningsnamngivning och nya tillstånds- och lagringsplatsfilter som hjälper dig att hitta och granska specifika genomsökningskörningar i jobbloggvyn för Azure DevOps agentpool.

Skärmbild av kodsöknings aktivitet för publiceringsresultat.

Anpassning av kodgenomsökningsbyggläge

Kodgenomsökning stöder två bygglägen när du konfigurerar en pipeline för genomsökning:

  • none – CodeQL-databasen skapas direkt från kodbasen utan att kodbasen skapas (stöds för alla tolkade språk och stöds dessutom för cpp, javaoch csharp).
  • manual – du definierar de byggsteg som ska användas för kodbasen i arbetsflödet (stöds för alla kompilerade språk).

Mer information om de olika bygglägena, inklusive en jämförelse av fördelarna med varje byggläge, finns i CodeQL-kodgenomsökning för kompilerade språk.

Tips

Byggläge none kan användas med andra tolkade språk, till exempel JavaScript, Python, Ruby. Om versionsläget none har angetts för C# eller Java med andra kompilerade språk som inte stöder byggläge none misslyckas pipelineaktiviteten.

Följande kod visar ett exempel på en giltig konfiguration med flera språk och none byggläge:

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

Följande kod visar ett exempel på en ogiltig konfiguration med flera språk och none byggläge:

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

Aviseringar för kodgenomsökning

GitHub Advanced Security för Azure DevOps kodgenomsökningsaviseringar innehåller kodgenomsökningsflaggor efter lagringsplats som varnar om programrisker 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 Repos 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 visas inte aviseringar för slutförd genomsökning på PR-avdelningar i varningscentralen.

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. Byggaktiviteter misslyckas inte, men resultaten från de byggen som körs med uppgiften medan Avancerad säkerhet är inaktiverad, är dolda och sparas 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 varningsdetaljer för kodskanning.

Avsnitt Förklaring
Plats Avsnittet Platser beskriver en specifik instans där CodeQL identifierade 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änssnitt för redigering.
beskrivning Beskrivningen tillhandahålls av CodeQL-verktyget baserat på problemet.
Rekommendation Rekommendationen är den föreslagna lösningen för en viss kodgranskningsvarning.
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 allvarlighetsgraden poängsätts i det här blogginlägget GitHub.

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 Repos. Välj fliken Kodgenomsökning för att visa alla aviseringar för hemlig genomsökning.

För att visa resultat måste kodsökningar 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 kodgenomsökningsresultat för lagringsplatsens standardgren.

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

Automatisk rensning av varningar från inaktuella pipeline-konfigurationer

Automatisk rensning döljer gamla genomsökningsresultat när deras pipelinekonfigurationer slutar köras. Den döljer inte en avisering bara för att aviseringen eller dess gren är mer än 90 dagar gammal. Det här beteendet gäller för aviseringar om kodgenomsökning och beroendegenomsökning.

Vad gör en konfiguration inaktuell?

Rensningen använder den senaste slutförandetiden för pipelinefasen som är associerad med en genomsökningskonfiguration. En fas blir inaktuell när slutförandetidpunkten är mer än 90 dagar sedan, som standard.

Advanced Security markerar pipelinefasposten som inaktiv men behåller sina resultat. Sedan döljer aviseringsvyn endast en avisering när alla senaste resultat som är associerade med aviseringen kommer från inaktuella konfigurationer. Om något av dessa resultat kommer från en aktiv konfiguration kan aviseringen fortfarande visas.

Datum eller aktivitet Används för 90-dagarsrensningen?
När aviseringen först upptäcktes No
När varningen senast upptäcktes No
När grenen senast genomsökdes Inte självständigt. Rensning spårar den associerade pipelinefasen, som kan delas mellan grenar.
Den associerade pipelinefasens senaste slutförandetid Yes

Varför kan en gammal grendetektering förbli synlig eller visas igen?

Olika grenar kan dela samma pipelinefasaktivitetspost. När den fasen körs igen på en annan gren uppdaterar Advanced Security sin slutförandetid och återaktiverar de associerade konfigurationerna. Därför kan äldre detekteringar på en gren som inte har körts nyligen förbli synliga eller visas igen.

Tänk till exempel på den här sekvensen:

  1. En fas i en pipeline identifierar en sårbarhet på develop.
  2. Den fasen körs inte på någon gren som är äldre än 90 dagar. När rensningen markerar den som inaktiv döljer Advanced Security aviseringen om den inte har några senaste resultat från andra aktiva konfigurationer.
  3. Samma fas körs på feature/update-build. Advanced Security återaktiverar sina associerade konfigurationer så att den äldre develop identifieringen kan visas igen.

Körningen på feature/update-build skannar inte develop. Den ändrar aktivitetsstatusen för den delade pipelinefasen, som styr om Advanced Security visar det äldre resultatet.

Därför kan en avisering visas med ett gammalt datum för första eller senaste förekomst. Dessa datum beskriver identifieringen på grenen, inte pipelinefasens aktivitetsstatus. Att återaktivera konfigurationen gör inte det äldre resultatet till en ny identifiering och kräver inte att dess ursprungliga datum för första visning ändras.

Vad ska du kontrollera?

När en gammal detektering förblir synlig granskar du körningar av samma pipelinefas i olika grenar, inte bara grenen som visas i aviseringen. Om du vill kontrollera om sårbarheten fortfarande finns på den grenen kör du en genomsökning på den grenen.

Important

Automatisk rensning döljer resultat. Den åtgärdar inte säkerhetsrisken eller avfärdar inte varningen. Om den associerade konfigurationen blir aktiv igen kan tidigare dolda öppna varningar returneras som öppna varningar.

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

Den här åtgärden avvisar aviseringen för alla filialer. Andra grenar som innehåller samma säkerhetsrisk kommer också att stängas. Alla aviseringar som tidigare avvisats kan öppnas manuellt.

Hantera kodgenomsökningsaviseringar vid pull-begäranden

Om notiser skapas för nya kodändringar i en pull request rapporteras notisen som en kommentar i kommentaravsnittet på fliken Översikt i pull request och som en notis på fliken Advanced Security-repository. Det finns en ny post för grenväljaren i pull request-grenen.

Du kan granska de berörda kodraderna, se en sammanfattning av sökningen och lösa anteckningen i avsnittet Översikt.

Skärmbild av kommentar om aktiv kodhämtningsbegäran.

För att avfärda aviseringar om pull-begäranden måste du navigera till aviseringsdetaljvyn för att stänga både aviseringen och lösa anteckningen. Annars löser bara ändring av kommentarsstatus (1) anteckningen men stänger eller åtgärdar inte den underliggande aviseringen.

Skärmbild av kommentar om pull-begäran om stängd kod.

Om du vill se hela resultatuppsättningen för din pull-begärandegren går du till Repos>Avancerad säkerhet och väljer grenen för pull-begäran. Om du väljer Visa mer information (2) i kommentaren dirigeras du till aviseringsinformationsvyn på fliken Avancerad säkerhet.

Tips

Anteckningar skapas bara när de berörda kodraderna är helt unika för skillnaden i pull-begäran i jämförelse med målgrenen för pull-begäran.