Share via


Codeüberprüfung

Mit der Codeüberprüfung in GitHub Advanced Security für Azure DevOps können Sie den Code in einem Azure DevOps-Repository analysieren, um Sicherheitsrisiken und Codierungsfehler zu finden. Alle durch die Analyse identifizierten Probleme werden als Warnung ausgegeben. Die Codeüberprüfung verwendet CodeQL, um Sicherheitsrisiken zu identifizieren.

CodeQL ist die Codeanalyse-Engine, die von GitHub entwickelt wurde, um Sicherheitsüberprüfungen zu automatisieren. Sie können Ihren Code mithilfe von CodeQL analysieren und die Ergebnisse als Codescanwarnungen anzeigen.

GitHub Advanced Security für Azure DevOps funktioniert mit Azure Repos. Wenn Sie GitHub Advanced Security mit GitHub-Repositorys verwenden möchten, lesen Sie GitHub Advanced Security.

CodeQL-Warnungen

GitHub-Experten, Sicherheitsexperten und Mitwirkende der Community schreiben und verwalten die CodeQL-Standardabfragen, die für die Codeüberprüfung verwendet werden. Die Abfragen werden regelmäßig aktualisiert, um die Analyse zu verbessern und falsch positive Ergebnisse zu verringern. Die Abfragen sind Open-Source-Code, d. h. Sie können die Abfragen im github/codeql-Repository einsehen und zu ihnen beitragen.

Spezifischere Dokumentation zu CodeQL finden Sie in der CodeQL-Dokumentation auf GitHub.

CodeQL unterstützt sowohl kompilierte als auch interpretierte Sprachen und kann Sicherheitsrisiken und Fehler in Code finden, der in den unterstützten Sprachen geschrieben wurde.

  • C/C++
  • C#
  • OK
  • Java
  • JavaScript/TypeScript
  • Kotlin (Betaversion)
  • Python
  • Ruby
  • Swift

Weitere Informationen finden Sie in der Dokumentation auf der CodeQL-Website unter Unterstützte Sprachen und Frameworks.

Sie können die spezifischen Abfragen und Taskdetails anzeigen, die von CodeQL verwendet werden, indem Sie das Buildprotokoll durchsuchen, ähnlich wie bei der Abhängigkeitsüberprüfung.

Screenshot: Task „Veröffentlichen von Ergebnissen der Codeüberprüfung

Codescanwarnungen

Die Warnungen der Codeüberprüfung von GitHub Advanced Security für Azure DevOps enthalten Codeüberprüfungsflags nach Repository, die bei Anwendungsrisiken auf Codeebene warnen.

Um Codeüberprüfung zu verwenden, müssen Sie zunächst GitHub Advanced Security für Azure DevOps konfigurieren.

Die Registerkarte „Advanced Security“ unter „Repos“ in Azure DevOps ist der Hub zum Anzeigen Ihrer Codeüberprüfungswarnungen. Wählen Sie die Registerkarte Code scanning (Codeüberprüfung) aus, um Überprüfungswarnungen anzuzeigen. Sie können nach Branch, Zustand, Pipeline, Regeltyp und Schweregrad filtern. Zurzeit werden im Warnungshub keine Warnungen für die abgeschlossene Überprüfung von PR-Verzweigungen angezeigt.

Es hat keine Auswirkungen auf die Ergebnisse, wenn Pipelines oder Branches umbenannt werden. Es kann bis zu 24 Stunden dauern, bis der neue Name angezeigt wird.

Wenn Sie benutzerdefinierte CodeQL-Abfragen ausführen, wird aus den verschiedenen Abfragepaketen standardmäßig kein separater Filter für Warnungen generiert. Sie können nach Regel filtern, die für jede Abfrage eindeutig ist.

Screenshot: Codeüberprüfungswarnungen für ein Repository

Wenn Sie Advanced Security für Ihr Repository deaktivieren, verlieren Sie den Zugriff auf die Ergebnisse auf der Registerkarte „Advanced Security“ und den Buildtask. Der Buildtask schlägt nicht fehl, aber alle Ergebnisse von Builds, die mit dem Task ausgeführt werden, während Advanced Security deaktiviert ist, werden ausgeblendet und nicht beibehalten.

Warnungsdetails

Wählen Sie eine Warnung aus, um weitere Details zu erhalten, einschließlich Anleitungen zur Behebung. Jede Warnung enthält einen Speicherort, eine Beschreibung, ein Beispiel und einen Schweregrad.

Screenshot: Details der Codeüberprüfungswarnung

`Section` Erklärung
Standort Im Abschnitt Locations (Speicherorte) wird eine bestimmte Instanz beschrieben, in der CodeQL ein Sicherheitsrisiko erkannt hat. Wenn es mehrere Instanzen Ihres Codes gibt, die gegen dieselbe Regel verstoßen, wird für jeden einzelnen Speicherort eine neue Warnung generiert. Die Karte „Locations“ (Speicherorte) enthält einen direkten Link zum betroffenen Codeschnipsel, damit Sie den Codeschnipsel auswählen können, der zur Bearbeitung an die Azure DevOps-Webbenutzeroberfläche weitergeleitet werden soll.
BESCHREIBUNG Die Beschreibung wird vom CodeQL-Tool basierend auf dem Problem bereitgestellt.
Empfehlung Die Empfehlung ist die empfohlene Korrektur für eine bestimmte Codeüberprüfungswarnung.
Beispiel Der Beispielabschnitt zeigt ein vereinfachtes Beispiel für die identifizierte Schwachstelle in Ihrem Code.
severity Schweregrade können niedrig, mittel, hoch oder kritisch sein. Dies Bewertung des Schweregrads basiert auf der angegebenen CVSS-Bewertung (Common Vulnerability Scoring System) für die identifizierte CWE (Common Weakness Enumeration). Weitere Informationen zur Bewertung des Schweregrads finden Sie in diesem GitHub-Blogbeitrag.

Verwalten von Codeüberprüfungswarnungen

Anzeigen von Warnungen für ein Repository

Jede Person mit der Berechtigung „Mitwirkender“ für ein Repository kann eine Zusammenfassung aller Warnungen für ein Repository auf der Registerkarte „Advanced Security“ unter „Repositorys“ anzeigen. Wählen Sie die Registerkarte Code scanning (Codeüberprüfung) aus, um alle Geheimnisüberprüfungswarnungen anzuzeigen.

Um Ergebnisse anzuzeigen, müssen zuerst Codeüberprüfungstasks ausgeführt werden. Sobald die erste Überprüfung abgeschlossen wurde, werden alle erkannten Sicherheitsrisiken auf der Registerkarte „Advanced Security“ angezeigt.

Standardmäßig werden auf der Warnungsseite Ergebnisse der Abhängigkeitsüberprüfung für den Standardbranch des Repositorys angezeigt.

Die Status einer bestimmten Warnung gibt den Status für den Standardbranch und die zuletzt ausgeführte Pipeline an, auch wenn die Warnung für andere Branches und Pipelines vorhanden ist.

Schließen von Codeüberprüfungswarnungen

Zum Schließen von Warnungen benötigen Sie entsprechende Berechtigungen. Standardmäßig können nur Projektadministratoren Advanced Security-Warnungen schließen.

So schließen Sie eine Warnung:

  1. Navigieren Sie zu der Warnung, die Sie schließen möchten, und wählen Sie sie aus.
  2. Wählen Sie die Dropdownliste Close alert (Warnung schließen) aus.
  3. Falls noch nicht ausgewählt, wählen Sie als Schließungsgrund entweder Risk accepted (Risiko akzeptiert) oder False positive (Falsch positiv) aus.
  4. Fügen Sie dem Textfeld Comment (Kommentar) einen optionalen Kommentar hinzu.
  5. Wählen Sie Close (Schließen) aus, um die Warnung zu übermitteln und zu schließen.
  6. Der Warnungsstatus ändert sich aus Open (Offen) in Closed (Geschlossen), und Ihr Schließungsgrund wird angezeigt.

Screenshot: Schließen einer Codeüberprüfungswarnung

Dadurch wird nur die Warnung für Ihren ausgewählten Branch geschlossen. Andere Branches, die dasselbe Sicherheitsrisiko enthalten, bleiben aktiv, bis sie geschlossen werden. Alle Warnungen, die zuvor geschlossen wurden, können manuell erneut geöffnet werden.

Verwenden benutzerdefinierter Abfragen mit CodeQL

Wenn In Ihrem Pipelinesetup keine benutzerdefinierte Konfigurationsdatei angegeben ist, führt CodeQL zur Analyse Ihres Codes standardmäßig das Abfragepaket security-extended aus. Sie können benutzerdefinierte CodeQL-Abfragen verwenden, um eigene Abfragen zur Suche nach bestimmten Sicherheitsrisiken und Fehlern zu schreiben. Sie müssen auch eine benutzerdefinierte Konfigurationsdatei erstellen, um die CodeQL-Standardanalyse zu ändern.

Informationen zur Suche nach vorhandenen benutzerdefinierten Abfragen oder zum Schreiben Ihrer eigenen benutzerdefinierten Abfragen finden Sie unter Eigene CodeQL-Abfrage schreiben.

Analyse mit benutzerdefinierten Abfragen

Am schnellsten können Sie mit einer benutzerdefinierten Abfrage beginnen, indem Sie eine Abfrage schreiben und diese in Ihrem lokalen Azure DevOps-Repository speichern. Sie können eine benutzerdefinierten Abfrage entsprechend Ihrer Anforderung anpassen, sie muss jedoch mindestens eine Regel-ID beinhalten. Weitere Informationen zum Schreiben Ihrer eigenen CodeQL-Abfrage finden Sie unter CodeQL-Abfragen schreiben. Sie können auch mehrere Abfragen in einer Abfragesammlung bündeln oder von anderen Personen veröffentlichte Pakete verwenden. Weitere Informationen finden Sie unter Veröffentlichen und Verwenden von CodeQL-Paketen.

Verwenden einer benutzerdefinierten Konfigurationsdatei

Mithilfe einer benutzerdefinierten Konfigurationsdatei können Sie bestimmen, welche Abfragen während der CodeQL-Analyse ausgeführt werden sollen. Sie können festlegen, welche zusätzlichen Abfragen oder Abfragepakete ausgeführt werden sollen, und die standardmäßigen CodeQL-Abfragen ändern oder deaktivieren.

Um eine bestimmte Abfrage einzuschließen, geben Sie für die Abfrage einen Namen sowie einen Pfad an, der zu dem Ort führt, an dem die Abfragedatei (.ql) in Ihrem Repository gespeichert ist.

Um ein bestimmtes Paket einzuschließen, geben Sie den Namen des Pakets an. Sie können eine beliebige Anzahl von CodeQL-Abfragepaketen angeben, die in Ihrer Konfigurationsdatei ausgeführt werden sollen.

Tipp

Der packs Filter aus der Konfigurationsdatei unterstützt das Herunterladen von Paketen aus Repositorys, die in GitHub gehostet werden, der queries-Filter macht dies nicht. Wenn das Paket in GitHub privat ist, müssen Sie über die Aufgabe AdvancedSecurity-Codeql-Init@1 ein GitHub-Zugriffstoken als Umgebungsvariable und einen Variablennamen als GITHUB_TOKEN bereitstellen und den Gültigkeitsbereich des Tokens auf read:packages festlegen.

Hier sehen Sie eine Beispielkonfigurationsdatei:

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

Tipp

Konfigurationsdateispezifikationen ignorieren Konfigurationen auf Pipelineebene für die Aufgabe AdvancedSecurity-Codeql-Init@1 und haben diesen gegenüber Vorrang. includepaths / ignorepaths werden ignoriert, oder, wenn paths/paths-ignore vorhanden sind, werden sie mit Werten aus paths/paths-ignore überschrieben. querysuite wird mit Werten aus queries oder mit packs aus der Konfigurationsdatei überschrieben.

Spezielle Ratschläge und Informationen zu Konfigurationsoptionen für Ihre Konfigurationsdatei finden Sie unter Anpassen des erweiterten Setups für die Codeüberprüfung.

Sobald Sie über Ihre Konfigurationsdatei verfügen, müssen Sie Ihre Pipeline anpassen, indem Sie eine CodeQL-Analyse ausführen, um Ihre neue Datei verwenden zu können. Hier ist eine Beispielpipeline, die auf eine Konfigurationsdatei zeigt:

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-Autobuild@1
  displayName: AutoBuild
 
- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Problembehandlung bei der Codeüberprüfung

Wenn bei der CodeQL-Ausführung Fehler auftreten, meldet die CodeQL-CLI den Status der ausgeführten Befehle normalerweise als Exitcode. Der Exitcode stellt Informationen für nachfolgende Befehle oder für andere Tools bereit, die von der CodeQL-CLI abhängen. Weitere Details zu Exitcodes finden Sie unter Exitcodes.

Fehler: CodeQL-Befehl 'database finalize' (32)

Dieser Fehler weist auf ein Problem beim Abschließen der CodeQL-Datenbankerstellung hin, möglicherweise aufgrund von Extraktionsfehlern oder fehlenden Buildschritten.

Schritte zur Problembehandlung:

  1. Überprüfen, ob der Code vorhanden ist und kompiliert wird
    • Überprüfen Sie für kompilierte Sprachen, ob der Buildprozess Code kompiliert und zwischen den Tasks AdvancedSecurity-Codeql-Init und AdvancedSecurity-Codeql-Analyze ausgeführt wird. Allgemeine Buildbefehle und erforderliche Flags (z. B. clean no-cache/no-daemon) finden Sie unter Angeben von Buildbefehlen.
    • Vergewissern Sie sich bei interpretierten Sprachen, dass sich Quellcode für die angegebene Sprache im Projekt befindet.
  2. Überprüfen von Extraktionsfehlern
    • Überprüfen Sie, ob sich Extraktionsfehler auf die Integrität der CodeQL-Datenbank auswirken.
    • Überprüfen Sie die Protokolldatei auf Extraktionsfehler und Warnungen, um die grundsätzliche Integrität der Datenbank zu beurteilen.
  3. Untersuchen übergreifender Fehler
    • Wenn für die meisten Dateien Extraktorfehler auftreten, müssen Sie die Ursache der Extraktionsprobleme ermitteln.

Fehler: AutoBuild-Skript (1)

Dieser Fehler beschreibt einen automatischen Buildfehler und deutet auf ein Problem mit der Einrichtung oder Konfiguration der Codeüberprüfung hin.

Schritte zur Problembehandlung:

  1. Konfigurieren der Buildschritte

Fehler: CodeQL-Verzeichnisse konnten im Agent-Toolcache nicht gefunden werden

Dieser Fehler weist auf ein Problem mit der Installation von CodeQL für selbstgehostete Agents hin.

Schritte zur Problembehandlung:

  1. Informationen zu Setuprichtlinien und Konfigurationsskripts finden Sie unter Konfigurieren von GitHub Advanced Security für Azure DevOps.

Fehler: Sprachenpipelinevariable nicht festgelegt

Dieser Fehler tritt auf, wenn Sie CodeQL ausführen, ohne die Pipelinevariable festzulegen, mit der die zu scannenden Sprachen angegeben werden.

Schritte zur Problembehandlung:

  1. Festlegen der Sprachpipelinevariable

CodeQL gibt keine Ergebnisse zurück

Dieser Abschnitt enthält Anleitungen für den Fall, dass CodeQL-Analysen keine Ergebnisse liefern.

Schritte zur Problembehandlung:

  1. Überprüfen auf erkannte Sicherheitsrisiken
    • Berücksichtigen Sie die Möglichkeit, dass der Code möglicherweise keine Sicherheitsrisiken aufweist. Wenn Sicherheitsrisiken erwartet, aber nicht erkannt werden, setzen Sie die Überprüfung fort.
  2. Überprüfen der Abfragesammlungskonfiguration
    • Ermitteln Sie die verwendete Abfragesammlung und erwägen Sie bei Bedarf, zu einer umfassenderen Sammlung zu wechseln.
    • Alternativ können benutzerdefinierte Abfragesammlungen für eine maßgeschneiderte Analyse erstellt werden.
  3. Anpassen der Berechtigungen zum Anzeigen von Ergebnissen
    • Stellen Sie sicher, dass mindestens auf der Ebene der Mitwirkenden die richtigen Berechtigungen für den Zugriff auf Analyseergebnisse gewährt werden. Weitere Informationen finden Sie unter Erweiterte Sicherheitsberechtigungen.

Codescanaufgabenberechtigungen

Die Codeüberprüfungs-Buildaufgabe verwendet die Pipelineidentität, um die Advanced Security REST-APIs aufzurufen. Standardmäßig haben Pipelines im selben Projekt Zugriff auf das Hochladen der SARIF-Datei, die durch ausführen der CodeQL-Analyse generiert wird. Wenn Sie diese Berechtigungen aus dem Builddienstkonto entfernen oder über ein benutzerdefiniertes Setup verfügen (z. B. eine Pipeline, die in einem anderen Projekt als das Repository gehostet wird), müssen Sie diese Berechtigungen manuell erteilen.

Schritte zur Problembehandlung:

  • Erteilen Sie die Advanced Security: View alerts- und Advanced Security: Manage and dismiss alerts-Berechtigung für das in Ihrer Pipeline verwendete Builddienstkonto, für projektbezogene Pipelines [Project Name] Build Service ([Organization Name]) und für Sammlungs-bezogene Pipelines Project Collection Build Service ([Organization Name]).