Partager via


Analyse du code

L'analyse du code dans GitHub Advanced Security for 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. 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. Si vous souhaitez utiliser GitHub Advanced Security avec des référentiels GitHub, consultez GitHub Advanced Security.

Configurations supplémentaires pour l’analyse de 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 Identificateurs alternatifs facultatifs (le cas échéant)
C/C++ c-cpp c ou cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

Conseil

  • Utilisez c-cpp pour analyser le code écrit en C, C++ ou les deux.
  • Utilisez java-kotlin 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 du code source sans compiler la base de code (pris en charge pour tous les langages interprétés, et également pris en charge pour C# et Java).
  • 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.

Pour exécuter une analyse de code via GitHub Advanced Security pour Azure DevOps, le mode de build autobuild devient une tâche de build distincte, AdvancedSecurity-CodeQL-Autobuild@1.

Conseil

Le mode de build none peut être utilisé conjointement avec d’autres langages interprétés (par exemple, JavaScript, Python, Ruby). Si le mode de build none est spécifié pour C# ou Java conjointement avec d’autres langages compilés qui ne prennent pas en charge le mode de build none, la tâche du pipeline échouera.

Voici un exemple de configuration valide avec plusieurs langages et le mode de build 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

Voici un exemple de configuration non valide avec plusieurs langages et le mode de build 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

Alertes d’analyse du code

GitHub Advanced Security pour les alertes d’analyse du code Azure DevOps incluent des indicateurs d’analyse de code par référentiel qui alertent 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 Advanced Security pour votre référentiel, vous perdez l’accès aux résultats dans l’onglet et la tâche de build Advanced Security. La tâche de génération n’échoue pas, mais les résultats des builds s’exécutent avec la tâche alors que Advanced Security est désactivé 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.
Description 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.
Gravité 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 des alertes affiche les résultats de l’analyse des dépendances pour la branche par défaut du référentiel.

Le statut d’une alerte donnée reflète l’état du pipeline branche par défaut et de la dernière exécution, 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 ignore uniquement l’alerte de votre branche sélectionnée. Les autres branches qui contiennent la même vulnérabilité restent actives tant qu’elles ne sont pas 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 seront créées que lorsque les lignes de code affectées sont entièrement uniques à la différence de demande de tirage par rapport à la branche cible de la demande de tirage.