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 Code Security pour Azure DevOps activé. 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 pour 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 ignorer les alertes dans Advanced Security : administrateur de projet autorisations.
- Pour gérer les autorisations dans Advanced Security : vous devez être membre du groupe Administrateurs de collection de projets ou disposer de l’autorisation Advanced Security : gérer les paramètres définie sur Autoriser.

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

Autres configurations pour l’analyse du code

Prise en charge des langages et des requêtes

Les experts GitHub, les chercheurs en sécurité et les 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 en 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 pour Azure DevOps inclut des alertes d’analyse de code avec des indicateurs par référentiel qui signalent des 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 Advanced Security 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. Pour en savoir plus sur la façon dont la gravité est notée, consultez ce billet de blog GitHub.

Affichage des alertes pour un dépôt

Toute personne disposant d’autorisations contributeur pour un référentiel peut afficher un résumé de toutes les alertes pour un référentiel sous l’onglet Advanced Security 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 voir l’ensemble des résultats de votre branche de pull request, naviguez vers Repos>Sécurité avancée et sélectionnez votre branche de pull request. 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.