Delen via


Code scannen

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.

GitHub Advanced Security voor Azure DevOps werkt met Azure-opslagplaatsen. Als u GitHub Advanced Security wilt gebruiken met GitHub-opslagplaatsen, raadpleegt u GitHub Advanced Security.

CodeQL-waarschuwingen

GitHub-experts, beveiligingsonderzoekers en community-inzenders schrijven en onderhouden de standaard CodeQL-query's die worden gebruikt voor codescans. De query's worden regelmatig bijgewerkt om de analyse te verbeteren en eventuele fout-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.

Ga naar de CodeQL-documentatie op GitHub voor meer specifieke documentatie over CodeQL.

CodeQL ondersteunt zowel gecompileerde als geïnterpreteerde talen en kan beveiligingsproblemen en fouten in code vinden die in de ondersteunde talen zijn geschreven.

  • C/C++
  • C#
  • Go
  • Java
  • JavaScript/TypeScript
  • Kotlin (bèta)
  • Python
  • Ruby
  • Swift

Zie de documentatie op de CodeQL-website over ondersteunde talen en frameworks voor meer informatie.

U kunt de specifieke query's en taakdetails bekijken die door CodeQL worden gebruikt door het buildlogboek te bekijken, vergelijkbaar met het scannen van afhankelijkheden.

Schermopname van het scannen van code voor het publiceren van resultaten

Waarschuwingen voor codescans

GitHub Advanced Security for Azure DevOps code scanning alerts include code scanning flags by repository that alert of application vulnerabilities op codeniveau.

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 vertakking, status, pijplijn, regeltype en ernst. Op dit moment worden in de Alerts Hub geen waarschuwingen weergegeven voor het scannen op pull-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 waarschuwingen voor het scannen van code voor 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 eventuele resultaten van builds worden uitgevoerd met de taak terwijl Advanced Security is uitgeschakeld, worden verborgen en blijven niet behouden.

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

Sectie 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 bepaalde waarschuwing voor het scannen van code.
Opmerking 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 opgegeven CVSS-score (Common Vulnerability Scoring System) voor de geïdentificeerde Common Weakness Enumeration (CWE). Meer informatie over hoe ernst wordt beoordeeld op dit GitHub-blogbericht.

Waarschuwingen voor codescans beheren

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.

Als u resultaten wilt weergeven, moeten 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 opslagplaats.

De status van een bepaalde waarschuwing weerspiegelt de status voor de standaardbranch en de meest recente uitvoeringspijplijn, zelfs als de waarschuwing bestaat op andere vertakkingen en pijplijnen.

Waarschuwingen voor het scannen van code negeren

Als u waarschuwingen wilt sluiten, hebt u de juiste machtigingen nodig. Standaard kunnen alleen projectbeheerders Geavanceerde beveiligingswaarschuwingen negeren.

Een waarschuwing negeren:

  1. Navigeer naar de waarschuwing die u wilt sluiten en selecteer de waarschuwing.
  2. Selecteer de vervolgkeuzelijst Waarschuwing sluiten.
  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 vertakking gesloten. Andere vertakkingen die hetzelfde beveiligingsprobleem bevatten, blijven actief totdat ze zijn gesloten. Elke waarschuwing die eerder is gesloten, kan handmatig opnieuw worden geopend.

Aangepaste query's gebruiken met CodeQL

Als u geen aangepast configuratiebestand hebt opgegeven in uw pijplijninstallatie, voert CodeQL het security-extended querypakket uit om uw code te analyseren. U kunt aangepaste CodeQL-query's gebruiken om uw eigen query's te schrijven om specifieke beveiligingsproblemen en fouten te vinden. U moet ook een aangepast configuratiebestand maken om de standaardanalyse van CodeQL te wijzigen.

Als u bestaande aangepaste query's wilt zoeken of uw eigen aangepaste query wilt bijdragen, raadpleegt u Bijdragen aan CodeQL.

Analyse met aangepaste query's

De snelste manier om te beginnen met een aangepaste query is door een query te schrijven en op te slaan in uw lokale Azure DevOps-opslagplaats. U kunt de details van een aangepaste query aanpassen aan uw behoeften, maar deze moet ten minste een regel-id hebben. Zie CodeQL-query's schrijven voor meer informatie over het schrijven van uw eigen CodeQL-query. U kunt ook meerdere query's bundelen in een querysuite of pakketten gebruiken die zijn gepubliceerd door andere personen. Zie Publiceren en gebruiken van CodeQL-pakketten voor meer informatie.

Een aangepast configuratiebestand gebruiken

Een aangepast configuratiebestand is een manier om te beheren welke query's worden uitgevoerd tijdens de analyse van CodeQL op basis van uw code. U kunt meer query's of querypakketten opgeven die moeten worden uitgevoerd en de standaardCodeQL-query's wijzigen of uitschakelen.

Als u een specifieke query wilt opnemen die u wilt opnemen, geeft u de query op met een naam en pad naar de locatie van het querybestand (.ql) in uw opslagplaats.

Als u een specifiek pakket wilt opnemen dat u wilt opnemen, geeft u de naam van het pakket op. U kunt een willekeurig aantal CodeQL-querypakketten opgeven dat moet worden uitgevoerd in uw configuratiebestand.

De volgende stap bestaat uit het maken van een qlpack.yml bestand. Dit bestand declareert het CodeQL-pakket en informatie hierover. Bestanden *.ql in dezelfde map (of submap) als een qlpack.yml onderdeel van het pakket worden beschouwd.

Tip

Het packs-filter van het configuratiebestand biedt ondersteuning voor het downloaden van pakketten uit opslagplaatsen die worden gehost in GitHub, hoewel het queries-filter dat niet doet. Als het pakket privé is in GitHub, moet u een GitHub-toegangstoken opgeven via de AdvancedSecurity-Codeql-Init@1 taak als een omgevingsvariabele en variabelenaam als GITHUB_TOKEN, met het bereik van het token .read:packages

Hier volgt een voorbeeld van een configuratiebestand:

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

Tip

Configuratiebestandspecificaties negeren en hebben voorrang op configuraties op pijplijnniveau voor de AdvancedSecurity-Codeql-Init@1 taak. includepaths / ignorepathswordt genegeerd of, indien paths/paths-ignore aanwezig, overschreven met waarden van .paths/paths-ignore querysuite wordt overschreven met waarden die zijn opgegeven in queries of packs in het configuratiebestand.

Als u een aangepaste query gebruikt, ziet u hier een voorbeeld qlpack.yml in de map met uw aangepaste query's:

version: 1.0.1
dependencies:
  codeql/javascript-all: "*"
  codeql/javascript-queries: "*"

De dependencies variabele bevat alle afhankelijkheden van dit pakket en hun compatibele versiebereiken. Naar elke afhankelijkheid wordt verwezen als het scope/name codeQL-bibliotheekpakket. Bij het definiëren dependenciesis uw qlpack.yml afhankelijk van precies een van de kerntaalpakketten (bijvoorbeeld JavaScript, C#, Ruby, enzovoort), die bepaalt welke taal uw query kan analyseren.

Zie CodeQL-pakketstructuur aanpassen voor meer qlpack.yml specifieke advies- en configuratieopties voor uw configuratiebestand.

Zodra u uw configuratiebestand hebt, moet u de pijplijn waarop CodeQL-analyse wordt uitgevoerd aanpassen om uw nieuwe bestand te kunnen gebruiken. Hier volgt een voorbeeldpijplijn die verwijst naar een configuratiebestand:

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-Analyze@1
  displayName: Perform CodeQL Analysis

Problemen met codescans oplossen

Over het algemeen rapporteert de CodeQL CLI de status van elke opdracht die wordt uitgevoerd als afsluitcode als afsluitcode. De afsluitcode bevat informatie voor volgende opdrachten of voor andere hulpprogramma's die afhankelijk zijn van de CodeQL CLI. Zie Afsluitcodes voor meer informatie over afsluitcodedetails.

Fout: codeQL-opdracht 'database finalize' (32)

Deze fout geeft aan dat er een probleem is met het voltooien van het maken van de CodeQL-database, mogelijk vanwege extractiefouten of ontbrekende buildstappen.

Stappen voor probleemoplossing:

  1. Controleer of de code bestaat en is gecompileerd
    • Controleer voor gecompileerde talen of het buildproces code samenstelt en plaatsvindt tussen de AdvancedSecurity-Codeql-Init en de AdvancedSecurity-Codeql-Analyze taken. Algemene buildopdrachten en vereiste vlaggen (zoals clean no-cache/no-daemon) vindt u hier in Het opgeven van build-opdrachten.
    • Controleer voor geïnterpreteerde talen of er een broncode is voor de opgegeven taal in het project.
  2. Extractiefouten controleren
    • Controleer of extractiefouten van invloed zijn op de status van de CodeQL-database.
    • Controleer het logboekbestand op extractiefouten en waarschuwingen om de algehele databasestatus te beoordelen.
  3. Overweldigende fouten onderzoeken
    • Als de meeste bestanden extractorfouten tegenkomen, onderzoek dan verder om inzicht te krijgen in de hoofdoorzaak van onjuiste extractie.

Fout: autobuild script (1)

Deze fout beschrijft een automatische buildfout, wat een probleem voorstelt met het instellen of configureren van codescans.

Stappen voor probleemoplossing:

  1. Buildstappen configureren

Fout: CodeQL-directory's zijn niet gevonden in de cache van agenthulpprogramma's

Deze fout geeft een probleem aan met het installeren van CodeQL voor zelf-hostende agents.

Stappen voor probleemoplossing:

  1. Raadpleeg de installatierichtlijnen of configuratiescripts in GitHub Advanced Security configureren voor Azure DevOps.

Fout: taalpijplijnvariabele niet ingesteld

Deze fout treedt op wanneer u CodeQL probeert uit te voeren zonder de pijplijnvariabele in te stellen die aangeeft welke talen moeten worden gescand.

Stappen voor probleemoplossing:

  1. Taalpijplijnvariabele instellen

CodeQL retourneert geen resultaten

Deze sectie bevat richtlijnen voor situaties waarin CodeQL-analyse geen resultaten oplevert.

Stappen voor probleemoplossing:

  1. Controleren op gedetecteerde beveiligingsproblemen
    • Houd rekening met de mogelijkheid dat uw code echt geen beveiligingsproblemen heeft. Als er beveiligingsproblemen worden verwacht maar niet gedetecteerd, gaat u verder met het controleren.
  2. Configuratie van querysuite controleren
    • Controleer of de querysuite wordt gebruikt en overweeg indien nodig over te schakelen naar een uitgebreider pakket.
    • U kunt ook aangepaste querysuites maken voor een op maat gemaakte analyse.
  3. Machtigingen aanpassen voor het weergeven van resultaten
    • Zorg ervoor dat de juiste machtigingen, ten minste op het niveau van de inzender, worden verleend voor toegang tot analyseresultaten. Zie Geavanceerde beveiligingsmachtigingen voor meer informatie.

Time-out voor CodeQL

Als de AdvancedSecurity-Codeql-Analyze@1 taak wordt weergegeven This job was abandoned ... we lost contact with the agent en u een gehoste Microsoft-agent gebruikt, raakt de taak de ingebouwde time-out van zes uur voor betaalde gehoste agents. U kunt in plaats daarvan proberen een analyse uit te voeren op een zelf-hostende agent.

Taakmachtigingen voor codescans

De buildtaak voor codescans maakt gebruik van de pijplijnidentiteit om de Advanced Security REST API's aan te roepen. Pijplijnen in hetzelfde project hebben standaard toegang tot het uploaden van het SARIF-bestand dat is gegenereerd door het uitvoeren van CodeQL-analyse. Als deze machtigingen worden verwijderd uit het buildserviceaccount of als u een aangepaste installatie hebt (bijvoorbeeld een pijplijn die wordt gehost in een ander project dan de opslagplaats), moet u deze machtigingen handmatig verlenen.

Stappen voor probleemoplossing:

  • Verken Advanced Security: View alerts en Advanced Security: Manage and dismiss alerts toestemming voor het buildserviceaccount dat wordt gebruikt in uw pijplijn, wat voor pijplijnen met projectbereik is [Project Name] Build Service ([Organization Name]), en voor pijplijnen Project Collection Build Service ([Organization Name])met een verzamelingsbereik.

Handmatige installatie van CodeQL-bundel naar zelf-hostende agent

Installeer de CodeQL-bundel in de cache van het agenthulpprogramma door gebruik te maken van het installatiescript voor uw architectuur, dat beschikbaar is op GitHub. Voor deze scripts moet de $AGENT_TOOLSDIRECTORY omgevingsvariabele worden ingesteld op de locatie van de map agenthulpprogramma's op de agent, bijvoorbeeld C:/agent/_work/_tool. U kunt ook handmatig de volgende stappen implementeren:

  1. Kies de nieuwste CodeQL-releasebundel van GitHub.
  2. Download en pak de bundel uit naar de volgende map in de map van het agenthulpprogramma, meestal onder_work/_tool: ./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/ Met behulp van de huidige release van v2.16.0, wordt de mapnaam een ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/titel. Meer informatie over de map met agenthulpprogramma's.
  3. Maak een leeg bestand met x64.complete de titel in de ./CodeQL/0.0.0-[codeql-release-bundle-tag] map. In het vorige voorbeeld moet het pad naar het eindbestand naar het x64.complete bestand zijn ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete.