Delen via


Code scannen instellen

Met codescans in GitHub Advanced Security voor Azure DevOps kunt u de code in een Azure DevOps-opslagplaats analyseren om beveiligingsproblemen en coderingsfouten te vinden. 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 door GitHub is ontwikkeld 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 Repos. Zie GitHub Advanced Securityvoor informatie over het gebruik van GitHub Advanced Security 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: Projectbeheerder machtigingen.
- Voor het beheren van machtigingen in Geavanceerde beveiliging: lid van de beheerders van projectverzamelingen groep of Geavanceerde beveiliging: instellingen beheren machtigingen ingesteld op Toestaan.

Zie Geavanceerde beveiligingsmachtigingen beherenvoor meer informatie over geavanceerde beveiligingsmachtigingen.

Meer configuraties voor het scannen van code

Taal- en queryondersteuning

GitHub-experts, beveiligingsonderzoekers en community-inzenders 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 github/codeql-opslagplaats kunt bekijken en hieraan kunt bijdragen.

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

Taal Identificatie Optionele alternatieve id's (indien aanwezig)
C/C++ c-cpp c of cpp
C# csharp
Ga go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Advies

  • Gebruik c-cpp deze functie om code te analyseren die is geschreven in C, C++ of beide.
  • Gebruik java-kotlin deze functie 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 C# en Java).
  • 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.

Tip

Build-modus none kan worden gebruikt met andere geïnterpreteerde talen, bijvoorbeeld JavaScript, Python, Ruby. Als de buildmodus none is opgegeven voor C# of Java met andere gecompileerde talen die geen ondersteuning bieden voor de buildmodus 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 code scanning alerts omvatten codescanvlaggen per repository die waarschuwen voor applicatiekwetsbaarheden op broncodeniveau.

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

Het tabblad Geavanceerde beveiliging onder Opslagplaatsen 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 codefragment 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 ernst wordt beoordeeld op 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 Opslagplaatsen. 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 resultaten weergegeven voor het scannen van afhankelijkheden voor de standaardbranch van de repository.

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 alleen de waarschuwing voor de geselecteerde branch gesloten. Andere vertakkingen die hetzelfde beveiligingsprobleem bevatten, blijven actief totdat ze zijn gesloten. 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 je de volledige set resultaten voor je pull request-branch wilt zien, ga dan naar Opslagplaatsen>Geavanceerde beveiliging en selecteer je pull request-branch. Als u Meer details weergeven (2) selecteert in de aantekening, wordt u naar de detailweergave van de waarschuwing op het tabblad Geavanceerde beveiliging leiden.

Tip

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.