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. Eine spezifischere Dokumentation zu CodeQL finden Sie in der CodeQL-Dokumentation.

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.

Zusätzliche 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 Identifier Optionale alternative Bezeichner (falls vorhanden)
C/C++ c-cpp c oder cpp
C# csharp
OK go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Tipp

  • Verwenden Sie c-cpp zum Analysieren von Code, der in C und/oder in C++ geschrieben wurde.
  • Verwenden Sie java-kotlin 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 auf der Grundlage der Codebasis erstellt, ohne die Codebasis zu erstellen. (Dies wird für alle interpretierten Sprachen und zusätzlich für C# und Java unterstützt.)
  • 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 sowie einen Vergleich der Vorteile der einzelnen Buildmodi finden Sie in den Informationen zum CodeQL-Analyseworkflow und zu kompilierte Sprachen.

Bei der Ausführung der Codeüberprüfungsanalyse über GitHub Advanced Security für Azure DevOps ist der Buildmodus autobuild stattdessen eine separate Buildaufgabe (AdvancedSecurity-CodeQL-Autobuild@1).

Tipp

Der Buildmodus none kann in Verbindung mit anderen interpretierten Sprachen (z. B. JavaScript, Python, Ruby) verwendet werden. Wenn der Buildmodus none für C# oder Java in Verbindung mit anderen kompilierten Sprachen angegeben wird, die den Buildmodus none nicht unterstützen, ist die Pipelineaufgabe nicht erfolgreich.

Hier sehen Sie ein Beispiel für eine gültige Konfiguration mit mehreren Sprachen und dem Buildmodus none:

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 sehen Sie ein Beispiel für eine ungültige Konfiguration mit mehreren Sprachen und dem Buildmodus none:

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

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. Die Buildaufgabe schlägt nicht fehl, aber alle Ergebnisse aus Builds werden mit der Aufgabe ausgeführt, während Advanced Security deaktiviert ist, ausgeblendet und nicht beibehalten werden.

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

Abschnitt Erklärung
Location 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.

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

Diese Aktion schließt die Warnung nur für Ihren ausgewählten Branch. 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.

Verwalten von Codeüberprüfungswarnungen bei Pull Requests

Wenn Warnungen für neue Codeänderungen in einer Pullanforderung erstellt werden, wird die Warnung als Anmerkung im Kommentarabschnitt der Pullanforderung und als Warnung auf der Registerkarte Advanced Security gemeldet. Es gibt einen neuen Verzweigungsauswahleintrag für die Pullanforderungsverzweigung.

Sie können die betroffenen Codezeilen überprüfen, eine Zusammenfassung der Suche 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 Codezeilen im Vergleich zum Zielzweig der Pullanforderungsanforderung vollständig eindeutig sind.