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. Zie de CodeQL-documentatie voor meer specifieke documentatie over CodeQL.
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.
Aanvullende configuraties voor codescans
Taal- en queryondersteuning
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.
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 |
|
Go | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
Ruby | ruby |
|
Swift | swift |
Tip
- 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.
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.
Voor het uitvoeren van analyse van codescans via GitHub Advanced Security voor Azure DevOps is de autobuild
buildmodus in plaats daarvan een afzonderlijke build-taak, AdvancedSecurity-CodeQL-Autobuild@1
.
Tip
De buildmodus none
kan worden gebruikt in combinatie met andere geïnterpreteerde talen (bijvoorbeeld JavaScript, Python, Ruby).
Als de buildmodus none
is opgegeven voor C# of Java in combinatie met andere gecompileerde talen die geen buildmodus none
ondersteunen, mislukt de pijplijntaak.
Hier volgt een voorbeeld van een geldige configuratie met meerdere talen en none
de 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
Hier volgt een voorbeeld van een ongeldige configuratie met meerdere talen en none
de 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 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.
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.
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 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:
- Navigeer naar de waarschuwing die u wilt sluiten en selecteer de waarschuwing.
- Selecteer de vervolgkeuzelijst Waarschuwing sluiten.
- Als dit nog niet is geselecteerd, selecteert u Risico geaccepteerd of Fout-positief als reden voor sluiting.
- Voeg een optionele opmerking toe aan het tekstvak Opmerking .
- Selecteer Sluiten om de waarschuwing te verzenden en te sluiten.
- De waarschuwingsstatus verandert van Open naar Gesloten en uw reden voor ontslag wordt weergegeven.
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.
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 een waarschuwing op het tabblad Geavanceerde beveiligingsopslagplaats, met een nieuw vertakkingskiezerresultaat voor de pull-aanvraagbranch.
U kunt de betreffende coderegels bekijken, een samenvatting van de bevindingen bekijken en de aantekening oplossen in de sectie Overzicht.
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.
Als u de volledige set resultaten voor uw pull-aanvraagvertakking wilt zien, gaat u naar Geavanceerde beveiliging van opslagplaatsen>en selecteert u uw pull-aanvraagvertakking. Als u Meer details weergeven (2) selecteert in de aantekening, wordt u doorverbonden naar de detailweergave van de waarschuwing op het tabblad Geavanceerde beveiliging.
Tip
Aantekeningen worden alleen gemaakt wanneer de betrokken regels code volledig uniek zijn voor het verschil in de pull-aanvraag.