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. Mer specifik dokumentation om CodeQL finns i CodeQL-dokumentationen.

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.

Ytterligare 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 öppen källkod, så du kan visa och bidra till frågorna på github/codeql-lagringsplatsen.

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

Språk Identifierare Valfria alternativa identifierare (om några)
C/C++ c-cpp c eller cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Dricks

  • Använd c-cpp för att analysera kod som skrivits i C, C++ eller båda.
  • Använd java-kotlin 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 körs av CodeQL i byggloggen.

Skärmbild av publiceringsresultataktivitet för kodgenomsökning.

Anpassning av kodgenomsökningslä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 skapa kodbasen (stöds för alla tolkade språk och stöds dessutom för C# och Java).
  • 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.

För att köra kodgenomsökningsanalys via GitHub Advanced Security för Azure DevOps autobuild är byggläget i stället en separat bygguppgift, AdvancedSecurity-CodeQL-Autobuild@1.

Dricks

Byggläget none kan användas tillsammans med andra tolkade språk (t.ex. JavaScript, Python och Ruby). Om byggläget none har angetts för C# eller Java tillsammans med andra kompilerade språk som inte stöder byggläge nonemisslyckas pipelineaktiviteten.

Här är 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

Här är 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 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 om kodgenomsökning.

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

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.

Den här åtgärden 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 avvisats kan öppnas manuellt.

Hantera kodgenomsökningsaviseringar vid pull-begäranden

Om aviseringar skapas för nya kodändringar i en pull-begäran rapporteras aviseringen som en kommentar i avsnittet Översiktsflikens kommentar i pull-begäran och som en avisering på fliken Advanced Security-lagringsplats, med ett nytt grenväljareresultat för pull-begärandegrenen.

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.

Om du vill avvisa pull-begärandeaviseringar måste du gå till aviseringsvyn 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>Advanced Security och väljer grenen för pull-begäran. Om du väljer Visa mer information (2) i anteckningen dirigeras du till aviseringsinformationsvyn på fliken Avancerad säkerhet.

Dricks

Anteckningar skapas endast när de berörda kodraderna är helt unika för skillnaden i pull-begäran.