Delen via


Code scannen instellen

Met codescans in GitHub Geavanceerde beveiliging voor Azure DevOps kunt u de code in een Azure DevOps opslagplaats analyseren om beveiligingsproblemen en coderingsfouten te vinden. U hebt GitHub Geavanceerde beveiliging nodig voor Azure DevOps of als u de zelfstandige ervaring gebruikt, GitHub Codebeveiliging voor Azure DevOps ingeschakeld. Eventuele problemen die door de analyse worden geïdentificeerd, worden als waarschuwing gegenereerd. Codescans maken gebruik van CodeQL om beveiligingsproblemen op te sporen.

CodeQL is de codeanalyse-engine die is ontwikkeld door GitHub om beveiligingscontroles te automatiseren. U kunt uw code analyseren met behulp van CodeQL en de resultaten weergeven als waarschuwingen voor codescans. Zie de CodeQL-documentatie voor meer specifieke documentatie over CodeQL.

GitHub Advanced Security voor Azure DevOps werkt met Azure-opslagplaatsen. Zie GitHub Advanced Security om GitHub Advanced Security te gebruiken met GitHub opslagplaatsen.

Benodigdheden

Categorie Vereisten
toestemmingen - Een overzicht van alle waarschuwingen voor een opslagplaats weergeven: Inzender machtigingen voor de opslagplaats.
- Waarschuwingen verwijderen in Geavanceerde beveiliging: Project administrator machtigingen.
- Machtigingen beheren in Geavanceerde beveiliging: Lid van de Project Verzamelingsbeheerders groep of Advanced Security: instellingen beheren machtigingen ingesteld op Allow.

Zie Geavanceerde beveiligingsmachtigingen beherenvoor meer informatie over geavanceerde beveiligingsmachtigingen.

Over installatietypen voor het scannen van code

Er zijn twee belangrijke manieren om codescans in te stellen voor uw opslagplaats: standaardinstallatie en geavanceerde installatie.

Standaardinstelling Geavanceerde installatie
Configuration Automatische, geen pijplijnconfiguratie vereist Handmatig vereist het toevoegen van CodeQL-taken aan een pijplijn
Taaldetectie Automatisch talen detecteren en scannen die door CodeQL worden ondersteund U geeft talen op in de pijplijntaak
Vertakkingsdekking Scant alleen de standaardbranch Scant elke vertakking die de pijplijn activeert
Aanpassing bouwen Geen aangepaste buildstappen: maakt gebruik van none de buildmodus Volledige controle over buildstappen voor gecompileerde talen
Het beste voor Snelle activering, voldoen aan standaard scanbehoeften Scannen met meerdere branches, aangepaste agentenpool of scanfrequentie

De standaardinstelling is de snelste manier om codescans in te schakelen. Er wordt achter de schermen een beheerde scanconfiguratie gemaakt en er zijn geen wijzigingen in de pijplijn vereist. We raden u aan om te beginnen met de standaardinstallatie voor de meeste opslagplaatsen.

Advanced setup biedt u volledige controle door CodeQL-taken rechtstreeks aan uw Azure-pipelines toe te voegen. Gebruik geavanceerde instellingen wanneer u het volgende moet doen:

  • Specifieke agentgroepen beheren voor verschillende talen of rekenbehoeften
  • Aanpassen van buildstappen voor gecompileerde talen
  • Vertakkingen scannen buiten de standaardbranch
  • Codescans integreren in een bestaande CI/CD-pijplijn
  • Een specifieke CodeQL-querysuite of aangepaste query's gebruiken

Advies

U kunt beginnen met de standaardinstelling en later overschakelen naar geavanceerde instellingen als u meer controle nodig hebt of beide wilt gebruiken. Zie Configure GitHub Advanced Security features voor meer informatie over het configureren van standaardinstellingen.

Standaardinstellingen configureren

Nadat u de standaardconfiguratie van CodeQL hebt ingeschakeld, kunt u de agentgroep en het scanschema configureren vanuit de instellingen van uw organisatie. Deze opties zijn van toepassing op alle opslagplaatsen in de organisatie die gebruikmaken van de standaardinstallatie.

Als u toegang wilt krijgen tot de configureerbare opties, gaat u naarOpslagplaatsen voor > en vouwt u de vervolgkeuzelijst met configureerbare opties voor CodeQL uit.

Schermopname van uitgevouwen standaardconfiguratieopties voor CodeQL met instellingen voor agentpool en scanplanning.

Agentenpool

Selecteer de agentgroep die wordt gebruikt voor het uitvoeren van codeQL-standaardinstallatiescans voor alle opslagplaatsen in de organisatie. U kunt kiezen uit:

  • Azure-pipelines : maakt gebruik van Microsoft gehoste agents. Het gebruik van de Azure-pipelines agentpool verbruikt pijplijn parallelisme.
  • Zelf-gehoste agentgroepen — maakt gebruik van uw eigen agents. Selecteer een zelf-hostende pool als uw opslagplaatsen toegang nodig hebben tot privénetwerken, specifieke buildhulpprogramma's of andere resources die niet beschikbaar zijn op gehoste agents.
  • Beheerde DevOps-pools: maakt gebruik van Azure beheerde pools met aangepaste VM-installatiekopieën.

Scanschema

Selecteer wanneer de standaardconfiguratie van CodeQL-scans wordt uitgevoerd voor alle repositories in de organisatie. U kunt een specifieke dag van de week kiezen voor wekelijkse scans. De volgende geplande uitvoeringsdatum wordt weergegeven onder de vervolgkeuzelijst.

Lopende of in de wachtrij geplaatste scans annuleren

Als u actieve of in de wachtrij geplaatste standaardinstallatiescans wilt annuleren, kunt u ze handmatig annuleren via Organisatie-instellingen>Opslagplaatsen. Gebruikers met de beheerrechten 'Geavanceerde Beveiliging: instellingen beheren' in de opslagplaats kunnen uitvoeringen van actieve of in de wachtrij geplaatste standaardconfiguraties annuleren.

Geavanceerde installatie voor het scannen van code

CodeQL is een hulpprogramma op basis van pijplijnen, waarbij de resultaten per opslagplaats worden geaggregeerd.

Advies

Codescanning kan een meer tijdrovende taak binnen de build zijn, dus we raden u aan om de codescanningtaak toe te voegen aan een afzonderlijke, gekloonde pijplijn van uw productiepijplijn of om een nieuwe pijplijn te maken.

Voeg de taken in de volgende volgorde toe:

  1. Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Uw aangepaste buildstappen
  3. Geavanceerde beveiliging Voer CodeQL-analyse uit (AdvancedSecurity-Codeql-Analyze@1)

Schermopname van het instellen van de pijplijn voor het scannen van code voor YAML.

Geef ook op welke taal u analyseert in de Initialize CodeQL taak. U kunt een door komma's gescheiden lijst gebruiken om meerdere talen tegelijk te analyseren. De ondersteunde talen zijn csharp, cpp, go, java, javascript, python, ruby, swift. Als u zelf-hostende agents gebruikt, kunt u ook de enableAutomaticCodeQLInstall: true variabele toevoegen om automatisch de meest recente CodeQL-bits voor uw agent te installeren.

Hier volgt een voorbeeld van een starterspijplijn:

trigger:
  - main

pool:
  # Additional hosted image options are available: https://dotnet.territoriali.olinfo.it/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://dotnet.territoriali.olinfo.it/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://dotnet.territoriali.olinfo.it/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://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Geef ook op welke taal u analyseert in de Initialize CodeQL taak. Als de opgegeven taal is swift, zijn aangepaste buildstappen vereist.

Advies

  • Gebruik java om code te analyseren die is geschreven in Java, Kotlin of beide.
  • Gebruik javascript dit om code te analyseren die is geschreven in JavaScript, TypeScript of beide.

Als u een zelf-gehoste agent gebruikt, selecteert u de Enable automatic CodeQL detection and installation om automatisch de meest recente CodeQL-componenten op uw agent te gebruiken als u de meest recente CodeQL-bundel niet handmatig hebt geïnstalleerd in de cache van uw agent.

Als u waarschuwingen wilt genereren, voert u uw eerste scan uit met een pijplijn die de codescante taken omvat.

Meer configuraties voor het scannen van code

Taal- en queryondersteuning

GitHub experts, beveiligingsonderzoekers en communitybijdragers schrijven en onderhouden de standaard CodeQL-query's die worden gebruikt voor codescans. De queries worden regelmatig bijgewerkt om de analyse te verbeteren en eventuele vals-positieve resultaten te verminderen. De query's zijn open source, zodat u de query's in de opslagplaats github/codeql kunt bekijken en hieraan kunt bijdragen.

CodeQL ondersteunt en gebruikt de volgende taal-id's:

Taal Identificatie
C/C++ cpp
C# csharp
Ga go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Robijn ruby
Snel swift

Advies

  • Gebruik cpp deze functie om code te analyseren die is geschreven in C, C++ of beide.
  • Gebruik java om code te analyseren die is geschreven in Java, Kotlin of beide.
  • Gebruik javascript deze functie om code te analyseren die is geschreven in JavaScript, TypeScript of beide.

Zie Ondersteunde talen en frameworks voor meer informatie.

U kunt de specifieke query's en taakdetails bekijken die door CodeQL worden uitgevoerd in het buildlogboek.

Schermopname van het scannen van code om resultaten te publiceren.

Aanpassing van de buildmodus voor codescans

Codescan ondersteunt twee buildmodi bij het instellen van een pijplijn voor scannen:

  • none - de CodeQL-database wordt rechtstreeks vanuit de codebasis gemaakt zonder de codebasis te bouwen (ondersteund voor alle geïnterpreteerde talen en daarnaast ondersteund voor cpp, javaen csharp).
  • manual - u definieert de buildstappen die moeten worden gebruikt voor de codebasis in de werkstroom (ondersteund voor alle gecompileerde talen).

Zie CodeQL-codescans voor gecompileerde talen voor meer informatie over de verschillende buildmodi, waaronder een vergelijking van de voordelen van elke buildmodus.

Advies

Build-modus none kan worden gebruikt met andere geïnterpreteerde talen, zoals JavaScript, Python, Ruby. Als de buildmodus none is opgegeven voor C# of Java met andere gecompileerde talen die de buildmodus niet ondersteunen none, mislukt de pijplijntaak.

De volgende code toont een voorbeeld van een geldige configuratie met meerdere talen en none buildmodus:

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

De volgende code toont een voorbeeld van een ongeldige configuratie met meerdere talen en none buildmodus:

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

Waarschuwingen voor code-scans

GitHub Advanced Security for Azure DevOps codescanwaarschuwingen bevatten codescanvlagken per opslagplaats die waarschuwing geven over beveiligingsproblemen op toepassingsniveau.

Als u codescans wilt gebruiken, moet u eerst GitHub Advanced Security configureren voor Azure DevOps.

Het tabblad Geavanceerde beveiliging onder Repos in Azure DevOps is de hub om uw waarschuwingen voor het scannen van code weer te geven. Selecteer het tabblad Code scannen om scanwaarschuwingen weer te geven. U kunt filteren op tak, staat, pijplijn, regeltype en ernst. Op dit moment worden in de Alerts Hub geen waarschuwingen weergegeven voor het voltooide scannen op PR-vertakkingen.

Er is geen effect op resultaten als de naam van pijplijnen of vertakkingen is gewijzigd. Het kan tot 24 uur duren voordat de nieuwe naam wordt weergegeven.

Als u ervoor kiest om aangepaste CodeQL-query's uit te voeren, is er standaard geen afzonderlijk filter voor waarschuwingen die zijn gegenereerd op basis van verschillende querypakketten. U kunt filteren op regel, die voor elke query uniek is.

Schermopname van code scan-waarschuwingen in een opslagplaats.

Als u Geavanceerde beveiliging voor uw opslagplaats uitschakelt, verliest u de toegang tot de resultaten op het tabblad Geavanceerde beveiliging en de build-taak. De build-taak mislukt niet, maar de resultaten van builds die worden uitgevoerd met de taak worden verborgen en niet behouden wanneer Advanced Security is uitgeschakeld.

Meldingsdetails

Selecteer een waarschuwing voor meer informatie, inclusief herstelrichtlijnen. Elke waarschuwing bevat een locatie, beschrijving, voorbeeld en ernst.

Schermopname van waarschuwingsdetails voor het scannen van code.

Afdeling Uitleg
Locatie In de sectie Locaties wordt een specifiek exemplaar beschreven waarin CodeQL een beveiligingsprobleem heeft gedetecteerd. Als er meerdere exemplaren van uw code zijn die dezelfde regel schenden, wordt er een nieuwe waarschuwing gegenereerd voor elke afzonderlijke locatie. De kaart Locaties bevat een directe koppeling naar het betreffende codefragment, zodat u het fragment kunt selecteren dat moet worden omgeleid naar de Azure DevOps webgebruikersinterface voor bewerking.
Beschrijving De beschrijving wordt geleverd door het CodeQL-hulpprogramma op basis van het probleem.
Aanbeveling De aanbeveling is de voorgestelde oplossing voor een specifieke code-scanmelding.
Voorbeeld In de voorbeeldsectie ziet u een vereenvoudigd voorbeeld van de geïdentificeerde zwakke plekken in uw code.
Ernst Ernstniveaus kunnen laag, gemiddeld, hoog of kritiek zijn. De ernstscore is gebaseerd op de CVSS-score (Common Vulnerability Scoring System) die is opgegeven voor de geïdentificeerde Common Weakness Enumeration (CWE). Meer informatie over hoe de ernst wordt beoordeeld in dit GitHub-blogbericht.

Waarschuwingen voor een opslagplaats weergeven

Iedereen met inzendermachtigingen voor een opslagplaats kan een overzicht bekijken van alle waarschuwingen voor een opslagplaats op het tabblad Geavanceerde beveiliging onder Repos. Selecteer het tabblad Code scannen om alle waarschuwingen voor geheim scannen weer te geven.

Resultaten weergeven vereist dat codescantaken eerst worden uitgevoerd. Zodra de eerste scan is voltooid, worden alle gedetecteerde beveiligingsproblemen weergegeven op het tabblad Geavanceerde beveiliging.

Op de pagina Waarschuwingen worden standaard scanresultaten voor code weergegeven voor de standaardbranch van de opslagplaats.

De status van een bepaalde waarschuwing weerspiegelt de status van de standaardtak en de laatste uitvoering van de pijplijn, ook al bestaat de waarschuwing op andere takken en pijplijnen.

Waarschuwingen voor het scannen van code afwijzen

Als u meldingen wilt verwijderen, hebt u de juiste rechten nodig. Standaard kunnen alleen projectbeheerders Geavanceerde beveiligingswaarschuwingen negeren.

Een waarschuwing negeren:

  1. Navigeer naar de waarschuwing die u wilt sluiten en selecteer erop.
  2. Selecteer de Alert sluiten-optie in het vervolgkeuzemenu.
  3. Als dit nog niet is geselecteerd, selecteert u Risico geaccepteerd of Fout-positief als reden voor sluiting.
  4. Voeg een optionele opmerking toe aan het tekstvak Opmerking .
  5. Selecteer Sluiten om de waarschuwing te verzenden en te sluiten.
  6. De waarschuwingsstatus verandert van Open naar Gesloten en uw reden voor ontslag wordt weergegeven.

Schermopname van het negeren van een waarschuwing voor het scannen van code.

Met deze actie wordt de waarschuwing in alle afdelingen genegeerd. Andere branches die hetzelfde beveiligingsprobleem bevatten, worden ook verwijderd. Elke waarschuwing die eerder is gesloten, kan handmatig opnieuw worden geopend.

Waarschuwingen voor codescans voor pull-aanvragen beheren

Als er waarschuwingen worden gemaakt voor nieuwe codewijzigingen in een pull-aanvraag, wordt de waarschuwing gerapporteerd als een aantekening in de opmerkingensectie van het tabblad Overzicht van de pull-aanvraag en als waarschuwing op het tabblad Geavanceerde beveiliging. Er is een nieuwe vertakkingskiezervermelding voor de pull-aanvraagbranch.

U kunt de betreffende coderegels bekijken, een samenvatting van de bevindingen bekijken en de aantekening oplossen in de sectie Overzicht.

Schermopname van de annotatie van een actieve code pull request.

Als u waarschuwingen voor pull-aanvragen wilt verwijderen, moet u naar de detailweergave van de waarschuwing navigeren om zowel de waarschuwing te sluiten als de aantekening op te lossen. Als u anders gewoon de opmerkingsstatus (1) wijzigt, wordt de aantekening omgezet, maar wordt de onderliggende waarschuwing niet gesloten of opgelost.

Schermopname van aantekening van gesloten pull requests in de code.

Als u de volledige set resultaten voor de pull-aanvraagvertakking wilt zien, gaat u naar Repos>Advanced Security en selecteert u uw pull-aanvraagvertakking. Als u Meer details weergeven (2) selecteert in de aantekening, wordt u naar de detailweergave van de waarschuwing op het tabblad Geavanceerde beveiliging leiden.

Advies

Aantekeningen worden alleen gemaakt wanneer de betrokken coderegels volledig uniek zijn voor het verschil in pull-aanvragen in vergelijking met de doelbranch van de pull-aanvraag.