Partager via


Configurer l’analyse du code

L’analyse du code dans GitHub Advanced Security pour Azure DevOps vous permet d’analyser le code dans un référentiel Azure DevOps pour rechercher des vulnérabilités de sécurité et des erreurs de codage. Vous aurez besoin de GitHub Advanced Security pour Azure DevOps ou, si vous utilisez l'expérience autonome, GitHub Sécurité du code pour Azure DevOps activée. Tous les problèmes identifiés par l’analyse sont déclenchés en tant qu’alerte. L’analyse du code utilise CodeQL pour identifier les vulnérabilités.

CodeQL est le moteur d’analyse du code développé par GitHub pour automatiser les vérifications de sécurité. Vous pouvez analyser votre code à l’aide de CodeQL et afficher les résultats sous forme d’alertes d’analyse du code. Pour obtenir une documentation plus spécifique sur CodeQL, consultez la documentation CodeQL.

GitHub Advanced Security for Azure DevOps fonctionne avec Azure Repos. Pour utiliser GitHub Advanced Security avec des référentiels GitHub, consultez GitHub Advanced Security.

Conditions préalables

Catégorie Spécifications
Autorisations - Pour afficher un résumé de toutes les alertes d’un référentiel : Contributeur autorisations pour le référentiel.
- Pour rejeter les alertes dans Advanced Security : administrateur de projet autorisations.
- Pour gérer les autorisations dans Advanced Security : membre du groupe Administrateurs de la collection de projets ou la permission Advanced Security : gérer les paramètres doit être définie sur Autorisé.

Pour plus d’informations sur les autorisations Advanced Security, consultez Gérer les autorisations Advanced Security.

À propos des types d’installation d’analyse du code

Il existe deux façons principales de configurer l’analyse du code pour votre dépôt : configuration par défaut et configuration avancée.

Configuration par défaut Configuration avancée
Configuration Configuration automatique et sans configuration de pipeline requise Manuel, nécessite l’ajout de tâches CodeQL à un pipeline
Détection de langue Détecte et analyse automatiquement les langages pris en charge par CodeQL Vous spécifiez des langues dans la tâche de pipeline
Couverture des branches Analyse uniquement la branche par défaut Analyse toutes les branches qui déclenchent le pipeline
Personnalisation de la compilation Aucun étape de construction personnalisée : utilise le mode de construction none Contrôle total des étapes de génération pour les langages compilés
Idéal pour Mise en service rapide, besoins de numérisation standard Analyse multi-branche, pool d’agents personnalisé ou fréquence d’analyse

La configuration par défaut est le moyen le plus rapide d’activer l’analyse du code. Il crée une configuration d’analyse managée en arrière-plan et ne nécessite aucune modification du pipeline. Nous vous recommandons de commencer par la configuration par défaut pour la plupart des référentiels.

Configurationadvanced vous offre un contrôle total en ajoutant des tâches CodeQL directement à votre Azure Pipelines. Utilisez la configuration avancée lorsque vous devez :

  • Gérer des pools d’agents spécifiques pour différents langages ou besoins de calcul
  • Personnaliser les étapes de génération pour les langages compilés
  • Analyser des branches au-delà de la branche par défaut
  • Intégrer l’analyse du code dans un pipeline CI/CD existant
  • Utiliser une suite de requêtes CodeQL spécifique ou des requêtes personnalisées

Conseil

Vous pouvez commencer par le programme d’installation par défaut et passer à l’installation avancée ultérieurement si vous avez besoin d’un contrôle supplémentaire, ou utiliser les deux. Pour plus d’informations sur la configuration par défaut, consultez Configure GitHub fonctionnalités Advanced Security.

Configurer les options de configuration par défaut

Après avoir activé la configuration par défaut de CodeQL, vous pouvez configurer le pool d’agents et la planification de l’analyse à partir des paramètres de votre organisation. Ces options s’appliquent à tous les référentiels de l’organisation qui utilisent la configuration par défaut.

Pour accéder aux options configurables, allez dans les paramètres de l’organisation>référentiels et déroulez la liste des options configurables par défaut de l’installation de CodeQL.

Capture d’écran des options configurables de la configuration par défaut CodeQL développées, indiquant les paramètres de planification du pool d’agents et du scan.

Pool d’agents

Sélectionnez le pool d’agents utilisé pour exécuter les analyses d’installation par défaut de CodeQL sur tous les référentiels de l’organisation. Vous pouvez choisir parmi :

  • Azure Pipelines : utilise des agents hébergés par Microsoft. L’utilisation du pool d’agents Azure Pipelines consomme la capacité de traitement parallèle du pipeline.
  • Pools d’agents auto-hébergés : utilise vos propres agents. Sélectionnez un pool auto-hébergé si vos référentiels nécessitent l’accès aux réseaux privés, à des outils de génération spécifiques ou à d’autres ressources non disponibles sur les agents hébergés.
  • Pools DevOps managés — utilise des pools gérés par Azure avec des images de machine virtuelle personnalisées.

Planification du scan

Sélectionnez quand l’installation par défaut de CodeQL s’exécute pour tous les référentiels de l’organisation. Vous pouvez choisir un jour spécifique de la semaine pour les analyses hebdomadaires. La date d’exécution planifiée suivante s’affiche sous la liste déroulante.

Annuler les analyses en cours d’exécution ou en file d’attente

Si vous devez arrêter des analyses de configuration par défaut en cours d’exécution ou en file d’attente, vous pouvez les annuler manuellement via paramètres de l'organisation>les dépôts. Les utilisateurs disposant de la sécurité avancée : gérer les autorisations de paramètres sur le référentiel peuvent annuler les exécutions d’installation par défaut en cours d’exécution ou en file d’attente.

Configuration avancée pour l’analyse du code

CodeQL est un outil basé sur un pipeline, où les résultats sont agrégés par référentiel.

Conseil

L’analyse du code peut être une tâche de génération nécessitant davantage de temps. Par conséquent, nous vous recommandons d’ajouter la tâche d’analyse du code à un pipeline distinct et cloné de votre pipeline de production principal ou de créer un nouveau pipeline.

Ajoutez les tâches dans l’ordre suivant :

  1. Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. Vos étapes de construction personnalisées
  3. Sécurité avancée Effectuer une analyse CodeQL (AdvancedSecurity-Codeql-Analyze@1)

Capture d'écran de la configuration du pipeline d'analyse de code pour YAML.

Spécifiez également la langue que vous analysez dans la Initialize CodeQL tâche. Vous pouvez utiliser une liste séparée par des virgules pour analyser plusieurs langues à la fois. Les langues prises en charge sont csharp, cpp, go, java, javascript, python, ruby, swift. Si vous utilisez des agents auto-hébergés, vous pouvez également ajouter la enableAutomaticCodeQLInstall: true variable pour installer automatiquement les derniers bits CodeQL pour votre agent.

Voici un exemple de pipeline de démarrage :

trigger:
  - main

pool:
  # Additional hosted image options are available: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/agents/hosted#software
  vmImage: ubuntu-latest

steps:

  - task: AdvancedSecurity-Codeql-Init@1
    inputs:
      languages: "java"
      # Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
      # You can customize the initialize task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
      # If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
      enableAutomaticCodeQLInstall: true

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.

# If you had a Maven app:
#   - task: Maven@4
#     inputs:
#       mavenPomFile: 'pom.xml'
#       goals: 'clean package'
#       publishJUnitResults: true
#       testResultsFiles: '**/TEST-*.xml'
#       javaHomeOption: 'JDKVersion'
#       jdkVersionOption: '1.17'
#       mavenVersionOption: 'Default'

# Or a general script:
#   - script: |
#       echo "Run, Build Application using script"
#       ./location_of_script_within_repo/buildscript.sh

  - task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines

  - task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://dotnet.territoriali.olinfo.it/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

Spécifiez également la langue que vous analysez dans la Initialize CodeQL tâche. Si la langue spécifiée est swift, les étapes de génération personnalisées sont requises.

Conseil

  • Utilisez java pour analyser le code écrit dans Java, Kotlin ou les deux.
  • Utilisez javascript pour analyser le code écrit en JavaScript, TypeScript ou les deux.

Si vous êtes en cours d’exécution sur un agent auto-hébergé, sélectionnez le Enable automatic CodeQL detection and installation bouton permettant d’utiliser automatiquement les derniers bits CodeQL sur votre agent si vous n’avez pas installé manuellement le dernier bundle CodeQL dans le cache d’outils de votre agent.

Pour générer des alertes, exécutez votre première analyse avec un pipeline avec les tâches d’analyse du code incluses.

Autres configurations pour l’analyse du code

Prise en charge des langages et des requêtes

GitHub experts, chercheurs en sécurité et contributeurs de la communauté écrivent et gèrent les requêtes CodeQL par défaut utilisées pour l’analyse du code. Les requêtes sont régulièrement mises à jour pour améliorer l’analyse et réduire les faux résultats positifs. Les requêtes sont open source. Vous pouvez donc afficher et contribuer aux requêtes dans le référentiel github/codeql.

CodeQL prend en charge et utilise les identifiants de langage suivants :

Langue Identificateur
C/C++ cpp
C# csharp
Allez go
Java/Kotlin java
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Conseil

  • Utilisez cpp pour analyser le code écrit en C, C++ ou les deux.
  • Utilisez java pour analyser le code écrit dans Java, Kotlin ou les deux.
  • Utilisez javascript pour analyser le code écrit en JavaScript, TypeScript ou les deux.

Pour plus d’informations, veuillez consulter la section Langages et frameworks pris en charge.

Vous pouvez consulter les requêtes spécifiques et les détails des tâches exécutées par CodeQL dans le journal de build.

Capture d’écran de la tâche de publication de résultats de l’analyse du code.

Personnalisation du mode de build pour l’analyse de code

L’analyse de code prend en charge deux modes de build lors de la configuration d’un pipeline pour le scan :

  • none : la base de données CodeQL est créée directement à partir de la base de code sans construire la base de code (prise en charge pour tous les langages interprétés, et prise en charge également pour cpp, java et csharp).
  • manual : vous définissez les étapes de génération à utiliser pour la codebase dans le flux de travail (pris en charge pour tous les langages compilés).

Pour plus d’informations sur les différents modes de build, y compris une comparaison des avantages de chaque mode, veuillez consulter la section Analyse de code CodeQL pour les langages compilés.

Conseil

Le mode build none est utilisable avec d’autres langages interprétés, par exemple JavaScript, Python, Ruby. Si le mode de génération none est spécifié pour C# ou Java avec d'autres langages compilés qui ne prennent pas en charge le mode de génération none, la tâche de pipeline échoue.

Le code suivant montre un exemple de configuration valide avec plusieurs langues et none mode de génération :

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

Le code suivant montre un exemple de configuration non valide avec plusieurs langues et none mode de génération :

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

Alertes d’analyse du code

GitHub Advanced Security for Azure DevOps alertes d’analyse du code incluent des indicateurs d’analyse de code par référentiel qui alertent les vulnérabilités d’application au niveau du code.

Pour utiliser l’analyse du code, vous devez d’abord configurer GitHub Advanced Security pour Azure DevOps.

L’onglet Sécurité avancée sous Repos dans Azure DevOps est le hub pour afficher vos alertes d’analyse du code. Sélectionnez l’onglet Analyse du code pour afficher les alertes d’analyse. Vous pouvez filtrer par branche, état, pipeline, type de règle et gravité. À ce jour, le hub d’alertes n’affiche pas les alertes pour les analyses effectuées sur les branches PR.

Il n’y a aucun effet sur les résultats si les pipelines ou les branches sont renommés. Cela peut prendre jusqu’à 24 heures avant que le nouveau nom ne s’affiche.

Si vous choisissez d’exécuter des requêtes CodeQL personnalisées, il n’existe pas par défaut de filtre séparé pour les alertes générées à partir de différents packs de requêtes. Vous pouvez filtrer par règle, qui est différente pour chaque requête.

Capture d’écran des alertes de scan de code pour un référentiel.

Si vous désactivez la Sécurité Avancée pour votre référentiel, vous perdez l'accès aux résultats dans l'onglet et la tâche de construction Sécurité Avancée. La tâche de génération n'échoue pas, mais tous les résultats des builds exécutés avec la tâche alors que la Sécurité Avancée est désactivée sont masqués et non conservés.

Détails de l’alerte

Sélectionnez une alerte pour plus d’informations, notamment des conseils de correction. Chaque alerte inclut un emplacement, une description, un exemple et une gravité.

Capture d’écran des détails de l’alerte d’analyse du code.

Section Explication
Emplacement La section Emplacements détaille un cas spécifique où CodeQL a détecté une vulnérabilité. Si plusieurs instances de votre code violent la même règle, une nouvelle alerte est générée pour chaque emplacement distinct. La carte Emplacements contient un lien direct vers l’extrait de code affecté afin de pouvoir sélectionner l’extrait de code à diriger vers l’interface utilisateur web Azure DevOps pour modification.
Descriptif La description est fournie par l’outil CodeQL en fonction du problème.
Recommandation La recommandation est le correctif suggéré pour une alerte d’analyse de code donnée.
Exemple La section exemple montre un exemple simplifié de la faiblesse identifiée dans votre code.
Sévérité Les niveaux de gravité peuvent être faibles, moyens, élevés ou critiques. Le score de gravité est basé sur le score CVSS (Common Vulnerability Scoring System) donné pour l’énumération de faiblesse commune (CWE) identifiée. Découvrez comment la gravité est évaluée dans ce billet de blog GitHub.

Affichage des alertes pour un dépôt

Toute personne disposant d’autorisations de contributeur pour un référentiel peut afficher un résumé de toutes les alertes d’un référentiel sous l’onglet Sécurité avancée sous Repos. Sélectionnez l’onglet Analyse du code pour afficher toutes les alertes d’analyse des secrets.

Pour afficher les résultats, les tâches d’analyse du code doivent d’abord s’exécuter. Une fois la première analyse terminée, toutes les vulnérabilités détectées s’affichent sous l’onglet Advanced Security.

Par défaut, la page alertes affiche les résultats de l’analyse du code pour la branche par défaut du référentiel.

Le statut d'une alerte donnée reflète l'état de la branche par défaut du pipeline et du dernier pipeline exécuté, même si l'alerte existe sur d'autres branches et pipelines.

Ignorer les alertes d’analyse du code

Pour ignorer les alertes, vous avez besoin des autorisations appropriées. Par défaut, seuls les administrateurs de projet peuvent ignorer les alertes de sécurité avancée.

Pour ignorer une alerte :

  1. Accédez à l’alerte que vous souhaitez fermer et sélectionnez-la.
  2. Sélectionnez la liste déroulante Fermer l’alerte.
  3. S’il n’est pas déjà sélectionné, sélectionnez Risque accepté ou Faux positif comme raison de fermeture.
  4. Ajoutez un commentaire facultatif dans la zone de texte Commentaire.
  5. Sélectionnez Fermer pour envoyer et fermer l’alerte.
  6. L’état d’alerte passe de Ouvert à Fermé et votre motif de licenciement s’affiche.

Capture d’écran montrant comment ignorer une alerte d’analyse du code.

Cette action supprime l’alerte dans toutes les branches. D’autres branches qui contiennent la même vulnérabilité seront également ignorées. Toute alerte précédemment ignorée peut être rouverte manuellement.

Gestion des alertes d’analyse de code sur les pull requests

Si des alertes sont créées pour les modifications de code dans une demande de tirage, l’alerte est signalée en tant qu’annotation dans la section commentaires de l’onglet Vue d’ensemble de la demande de tirage et en tant qu’alerte dans l’onglet Référentiel Advanced Security. Il existe une nouvelle entrée de sélecteur de branche pour la branche de demande de tirage.

Vous pouvez consulter les lignes de code affectées, afficher un résumé de la recherche et résoudre l’annotation dans la section Vue d’ensemble.

Capture d’écran d’une annotation de pull request de code actif.

Pour rejeter les alertes de pull request, vous devez naviguer vers la vue détaillée de l’alerte pour fermer à la fois l’alerte et résoudre l’annotation. Sinon, la modification de l’état du commentaire (1) résout l’annotation, mais ne ferme pas ou ne corrige pas l’alerte sous-jacente.

Capture d’écran d’une annotation de pull request de code fermée.

Pour afficher l’ensemble des résultats de votre branche de demande de tirage, accédez à Repos>Advanced Security et sélectionnez votre branche de demande de tirage. Si vous sélectionnez Afficher plus de détails (2) sur l’annotation, vous accédez à l’affichage des détails de l’alerte sous l’onglet Sécurité avancée.

Conseil

Les annotations ne sont créées que lorsque les lignes de code affectées sont entièrement uniques à la différence de la demande de tirage par rapport à la branche cible de la demande de tirage.