Freigeben über


Einrichten der 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. Sie benötigen entweder GitHub Advanced Security für Azure DevOps oder, wenn Sie die eigenständige Oberfläche verwenden, GitHub Code Security für Azure DevOps aktiviert. 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. Eine spezifischere Dokumentation zu CodeQL finden Sie in der CodeQL-Dokumentation.

GitHub Advanced Security für Azure DevOps funktioniert mit Azure Repos. Informationen zur Verwendung von GitHub Advanced Security mit GitHub-Repositorys finden Sie unter GitHub Advanced Security.

Voraussetzungen

Kategorie Anforderungen
Berechtigungen – Um eine Zusammenfassung aller Warnungen für ein Repository anzuzeigen: Beitragsberechtigungen für das Repository.
- Um Warnhinweise in der erweiterten Sicherheit zu verwerfen: Projektadministrator Berechtigungen.
– So verwalten Sie Berechtigungen in Advanced Security: Mitglied der Gruppe "Project Collection Administrators" oder Berechtigung "Advanced Security: Einstellungen verwalten" auf „Zulassen“ gesetzt.

Weitere Informationen zu Erweiterten Sicherheitsberechtigungen finden Sie unter "Verwalten erweiterter Sicherheitsberechtigungen".

Weitere Konfigurationen für die Codeüberprüfung

Sprachen- und Abfrageunterstützung

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.

CodeQL unterstützt und verwendet folgende Sprachbezeichner:

Sprache Bezeichner
C/C++ cpp
C# csharp
Go go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Rubin ruby
Swift swift

Tipp

  • Verwenden Sie cpp zum Analysieren von Code, der in C und/oder in C++ geschrieben wurde.
  • Verwenden Sie java zum Analysieren von Code, der in Java, Kotlin oder beiden Sprachen geschrieben wurde.
  • Verwenden Sie javascript zum Analysieren von Code, der in JavaScript, TypeScript oder beiden Sprachen geschrieben wurde.

Weitere Informationen finden Sie unter Unterstützte Sprachen und Frameworks.

Die spezifischen Abfragen und Aufgabendetails der Ausführung durch CodeQL können Sie sich im Buildprotokoll ansehen.

Screenshot: Aufgabe zur Veröffentlichung der Ergebnisse der Codeüberprüfung

Buildmodusanpassung für die Codeüberprüfung

Bei der Einrichtung einer Pipeline für die Überprüfung unterstützt die Codeüberprüfung zwei Buildmodi:

  • none - Die CodeQL-Datenbank wird direkt aus der Codebasis erstellt, ohne die Codebasis zu erstellen (unterstützt für alle interpretierten Sprachen und zusätzlich unterstützt für cpp, javaund csharp).
  • manual – Sie definieren die Build-Schritte, die für die Codebasis im Workflow verwendet werden sollen (unterstützt für alle kompilierten Sprachen).

Weitere Informationen zu den verschiedenen Buildmodi, einschließlich eines Vergleichs der Vorteile jedes einzelnen Buildmodus, finden Sie unter CodeQL-Code-Scanning für kompilierte Sprachen.

Tipp

Der Buildmodus none kann mit anderen interpretierten Sprachen verwendet werden, z. B. JavaScript, Python, Ruby. Wenn der Buildmodus none für C# oder Java mit anderen kompilierten Sprachen angegeben ist, die den Buildmodus nonenicht unterstützen, schlägt die Pipelineaufgabe fehl.

Der folgende Code zeigt ein Beispiel für eine gültige Konfiguration mit mehreren Sprachen und 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

Der folgende Code zeigt ein Beispiel für eine ungültige Konfiguration mit mehreren Sprachen und none dem 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

Code-Scan-Warnungen

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 aus, um Scanwarnungen anzuzeigen. Sie können nach Zweig, Zustand, Pipeline, Regeltyp und Schwere 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. Die Buildaufgabe schlägt nicht fehl, aber alle Ergebnisse von Builds, die mit der Aufgabe ausgeführt werden, während die erweiterte Sicherheit 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 Standort, eine Beschreibung, ein Beispiel und eine Schwere.

Screenshot: Details der Codeüberprüfungswarnung

Abschnitt Erklärung
Standort Im Abschnitt Locations wird ein bestimmter Fall beschrieben, in dem 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.
Schweregrad 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.

Anzeigen von Warnungen für ein Repository

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

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

Standardmäßig werden auf der Warnungsseite Codeüberprüfungsergebnisse für den Standardzweig 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 von Open (Offen) zu Closed (Geschlossen), und Ihr Ablehnungsgrund wird angezeigt.

Screenshot: Schließen einer Codeüberprüfungswarnung

Mit dieser Aktion wird die Warnung in allen Zweigstellen zurückgesetzt. Andere Zweige, die dieselbe Sicherheitslücke enthalten, werden ebenfalls geschlossen. Alle Warnungen, die zuvor geschlossen wurden, können manuell erneut geöffnet werden.

Verwalten von Codeüberprüfungswarnungen bei Pull Requests

Wenn Warnhinweise für neue Code-Änderungen in einer Pull-Request erstellt werden, wird die Warnung als Anmerkung im Kommentarbereich der Registerkarte Übersicht der Pull-Request und als Warnung in der Registerkarte Erweiterte Sicherheit des Repositorys geliefert. Es gibt einen neuen Branch Picker Eintrag für den Branch der Pull-Request Anfrage.

Sie können die betroffenen Codezeilen überprüfen, eine Zusammenfassung des Ergebnisses anzeigen und die Anmerkung im Abschnitt "Übersicht" auflösen.

Screenshot: Anmerkung zum aktiven Pull Request für Code

Um Pull Request-Warnungen zu schließen, müssen Sie zur Warnungsdetailansicht navigieren, um die Warnung zu schließen und die Anmerkung aufzulösen. Andernfalls löst einfach das Ändern des Kommentarstatus (1) die Anmerkung auf, schließt oder korrigiert die zugrunde liegende Warnung nicht.

Screenshot: Anmerkung zum geschlossenen Pull Request für Code

Um den gesamten Satz von Ergebnissen für Ihren Pull Request-Branch anzuzeigen, navigieren Sie zu Repos>Advanced Security, und wählen Sie den Pull Request-Branch aus. Wenn Sie in der Anmerkung weitere Details anzeigen (2) auswählen, gelangen Sie zur Warnungsdetailansicht auf der Registerkarte "Erweiterte Sicherheit".

Tipp

Anmerkungen werden nur erstellt, wenn die betroffenen Zeilen des Codes in der Pull-Request-Differenz zum Ziel-Branch der Pull-Request völlig eindeutig sind.