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.
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.
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 build ne échoue pas, mais tous les résultats des builds exécutés avec la tâche alors qu’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é.
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 :
- Accédez à l’alerte que vous souhaitez fermer et sélectionnez-la.
- Sélectionnez la liste déroulante Fermer l’alerte.
- S’il n’est pas déjà sélectionné, sélectionnez Risque accepté ou Faux positif comme raison de fermeture.
- Ajoutez un commentaire facultatif dans la zone de texte Commentaire.
- Sélectionnez Fermer pour envoyer et fermer l’alerte.
- L’état d’alerte passe de Ouvert à Fermé et votre motif de licenciement s’affiche.
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 sous forme d’alerte dans l’onglet Référentiel Advanced Security, avec un nouveau résultat du 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.
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, le simple fait de changer le statut du commentaire (1) résout l’annotation mais ne ferme pas ou ne corrige pas l’alerte sous-jacente.
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. La sélection de Afficher plus de détails (2) sur l’annotation vous dirigera vers la vue détaillée de l’alerte dans 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 la pull request.