Empêcher les problèmes liés à l’utilisation de GitHub Copilot
Empêcher les problèmes de sécurité avant qu’ils ne se produisent est plus efficace que de les résoudre après le déploiement. Cette unité explore comment utiliser GitHub Copilot de manière proactive pendant le développement pour écrire du code sécurisé dès le début.
État d’esprit de sécurité proactif
Le bogue le plus rentable est celui que vous n’introduisez jamais. Bien que l’apprentissage de résoudre rapidement les problèmes de sécurité soit utile, les empêcher de se produire en premier lieu est bien supérieur. Ce passage de la sécurité réactive à la sécurité proactive nécessite l’intégration de pratiques de codage sécurisées et d’outils comme GitHub Copilot dans votre workflow de développement quotidien.
Tenez compte des coûts relatifs :
- Pendant le codage : coût minimal : écrivez-le correctement la première fois.
- Pendant la révision du code : faible coût : intercepter et corriger avant la fusion.
- Pendant les tests d’assurance qualité : coût modéré : nécessite un test de nouveau et une planification potentiellement impactante.
- En production : coûts élevés : correctifs d’urgence, incidents de sécurité potentiels, dommages à la réputation.
En créant la sécurité dès le départ, vous réduisez considérablement les coûts et les risques.
GitHub Copilot en tant que partenaire de codage axé sur la sécurité
GitHub Copilot peut vous aider à écrire du code sécurisé dès le début du développement, pas seulement lors de la résolution des problèmes.
Écriture de code sécurisé à partir de zéro
Lors du démarrage de nouvelles fonctions ou fonctionnalités, communiquez l’intention de sécurité par le biais de commentaires et d’invites. GitHub Copilot utilise ce contexte pour suggérer des implémentations sécurisées.
Considérez le commentaire de code suivant :
// Query database for user by name using parameterized query to prevent SQL injection
GitHub Copilot évalue l’intention décrite dans le commentaire, examine le contexte fourni par le code ouvert dans l’éditeur, puis génère du code suggéré à l’aide de modèles de codage sécurisés. Dans ce cas, au lieu de suggérer une concaténation de chaîne pour les requêtes SQL, GitHub Copilot est susceptible de suggérer quelque chose similaire au code suivant :
string query = "SELECT * FROM Users WHERE Name = @name";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@name", userName);
using (SqlDataReader reader = command.ExecuteReader())
{
// Process results
}
}
En écrivant clairement des commentaires destinés à déplacer GitHub Copilot vers des modèles sécurisés, vous appliquez l’entraînement de l’IA sur des millions d’exemples de code pour obtenir des implémentations recommandées par défaut.
Vous pouvez également utiliser la vue Chat de GitHub Copilot pour explorer les pratiques de codage sécurisées. Par exemple, si vous souhaitez obtenir de l’aide sur l’implémentation du hachage de mot de passe, vous pouvez entrer l’invite suivante dans la vue Conversation :
How do I hash a password using a secure, industry-standard algorithm with automatic salting?
GitHub Copilot évalue votre soumission, utilise le code ouvert dans l’éditeur pour le contexte, puis suggère du code qui utilise une bibliothèque bien considérée et des pratiques sécurisées. Par exemple, il peut suggérer le code suivant :
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(password);
L’utilisation de GitHub Copilot peut vous aider à implémenter des modèles sécurisés dès le départ, ce qui réduit la probabilité d’introduire des vulnérabilités.
Validation continue pendant le développement
GitHub Copilot peut agir en tant qu’conseiller de sécurité en temps réel pendant que vous codez. Vous pouvez poser des questions GitHub Copilot pour valider votre approche lorsque vous écrivez du code.
Voici quelques exemples d’invites qui peuvent être utilisées pour la validation de la sécurité :
- « Existe-t-il une faille de sécurité potentielle dans l’approche d’authentification sélectionnée ? »
- « Quelle validation d’entrée dois-je ajouter à la fonction de chargement de fichier sélectionnée ? »
- « Le code de chiffrement sélectionné suit-il les bonnes pratiques actuelles ? »
- « Passez en revue le fichier ouvert dans l’éditeur de code. Existe-t-il des problèmes de sécurité liés à la gestion des sessions utilisateur ?
Cette validation en temps réel agit comme avoir un réviseur de code conscient de la sécurité disponible immédiatement.
Intégration d’outils et de pratiques de sécurité
GitHub Copilot complète d’autres outils et pratiques de sécurité dans votre workflow de développement.
Analyse statique et linters
Les outils d’analyse de code automatisé fonctionnent avec GitHub Copilot pour fournir une couverture de sécurité complète tout au long du processus de développement.
Combinez Copilot avec des outils d’analyse de code automatisés :
- Analyseurs .NET : appliquez des normes de codage et interceptez les problèmes courants.
- GitHub CodeQL : analysez les vulnérabilités de sécurité dans les demandes de tirage (pull request).
- Linters de sécurité : outils spécifiques au langage qui signalent des modèles dangereux.
GitHub Copilot vous aide à écrire du code qui est moins susceptible de déclencher les avertissements de ces outils. Lorsque vous indiquez à GitHub Copilot d’utiliser des requêtes paramétrables, le code suggéré doit passer des vérifications d’injection SQL sans nécessiter de modifications.
Tenez compte de l’intégration de flux de travail suivante :
- Écrivez du code avec l’assistance de Copilot à l’aide d’invites axées sur la sécurité.
- Exécutez des linters et des analyseurs locaux pendant le développement.
- Résolvez les problèmes avant de valider.
- Le pipeline CI/CD automatisé exécute des analyses de sécurité complètes.
- La révision du code comprend des vérifications de sécurité humaines et automatisées.
Cette approche en couches intercepte les problèmes à plusieurs points. L’utilisation de GitHub Copilot vous permet d’éviter les problèmes au plus tôt.
Normes de codage et pratiques d’équipe
Des normes de sécurité cohérentes au sein de votre équipe de développement garantissent que tout le monde implémente des mesures de sécurité uniformément et efficacement.
Établissez et appliquez des normes de codage sécurisées :
- Définissez des instructions d’équipe pour les pratiques de sécurité courantes.
- Utilisez uniquement les bibliothèques de chiffrement approuvées (spécifiez laquelle).
- Ne concaténer jamais l’entrée utilisateur dans des requêtes SQL.
- Validez toujours les chemins d’accès des fichiers à partir de l’entrée utilisateur.
- Journaliser les événements, pas les données sensibles.
- Utilisez des modèles d’authentification/autorisation approuvés.
Lorsque les membres de l’équipe travaillent sur du code, ils peuvent référencer ces normes dans leurs invites GitHub Copilot. GitHub Copilot peut vous aider à garantir la cohérence en générant du code qui correspond aux modèles établis.
Mesures de sécurité préventives
Appliquez ces pratiques de manière cohérente pour réduire les vulnérabilités de sécurité.
Validation et assainissement des entrées
La validation de toutes les entrées utilisateur avant le traitement est l’une des pratiques de sécurité les plus fondamentales pour empêcher les attaques par injection et d’autres vulnérabilités.
Chaque point d’entrée pour les données utilisateur doit inclure la validation. Utilisez les limites de longueur, la validation du format, les approches de liste d’autorisation, la vérification de type et la validation de plage pour empêcher les dépassements de mémoire tampon, les attaques DoS et les entrées malveillantes.
Vous pouvez inviter GitHub Copilot à générer du code de validation. Par exemple, pour valider une adresse e-mail :
// Validate email address format and length before processing
GitHub Copilot peut suggérer du code qui vérifie les valeurs null/vides, vérifie les limites de longueur et utilise regex pour valider le format.
Principe du privilège minimum
Limiter les autorisations à ce qui est nécessaire réduit uniquement les dommages potentiels si une violation de sécurité se produit.
Appliquez des autorisations minimales nécessaires dans votre application pour les connexions de base de données, l’accès au système de fichiers, l’accès aux API et les autorisations utilisateur. Bien que GitHub Copilot ne puisse pas configurer l’infrastructure, il peut vous aider à implémenter des vérifications d’autorisation appropriées dans le code.
Utilisation sécurisée de la bibliothèque
L’utilisation de bibliothèques de sécurité bien établies réduit le risque d’erreurs d’implémentation dans les fonctionnalités de sécurité critiques.
Utilisez des bibliothèques bien testées et gérées plutôt que d’implémenter vous-même des fonctionnalités critiques de sécurité. Choisissez des bibliothèques établies comme Entity Framework pour les requêtes de base de données, ASP.NET Identity pour l’authentification, BCrypt.Net pour le hachage de mot de passe et le Kit de développement logiciel (SDK) Azure Key Vault pour la gestion des secrets.
Écrivez des invites qui indiquent à GitHub Copilot d’utiliser des bibliothèques approuvées. Par exemple : « Implémenter le hachage de mot de passe à l’aide de BCrypt.Net bibliothèque ».
Test des exigences de sécurité
Les tests de sécurité vérifient que vos mesures de protection fonctionnent comme prévu et interceptent les vulnérabilités avant le déploiement.
Intégrez des tests de sécurité dans votre processus de développement. Testez les cas de périphérie de validation d’entrée, les scénarios d’authentification et d’autorisation, les opérations de chiffrement, la gestion des erreurs avec des données sensibles et les limites d’autorisation.
Vous pouvez inviter GitHub Copilot à générer des tests de sécurité. Par exemple : « Écrire des tests xUnit pour la fonction ValidatePath qui vérifient qu’elle empêche les attaques de traversée de répertoire ».
Utilisation de GitHub Copilot dans les révisions de code
Les révisions de code sont des points de contrôle de sécurité critiques. GitHub Copilot pour les pull requests peut signaler automatiquement des motifs suspects, identifier les vulnérabilités potentielles et suggérer des améliorations.
Vous pouvez également utiliser GitHub Copilot Chat pendant les révisions manuelles en posant des questions telles que « Existe-t-il des problèmes de sécurité avec ces modifications ? » ou « Quelles vulnérabilités potentielles existent dans ce code ? »
Équilibrage de la sécurité et de la productivité
La construction de la sécurité dès le départ est plus rapide que la rénovation. L’écriture de code sécurisé ajoute initialement 5 à 10% temps de développement, tout en corrigeant les problèmes de sécurité ultérieurement ajoute 30-50%, et la réponse aux incidents de sécurité peut ajouter 200-500% ou plus. GitHub Copilot accélère le développement sécurisé en suggérant rapidement des modèles appropriés.
Développement d’un état d’esprit de sécurité
Adopter une approche centrée sur la sécurité est essentiel pour tous les développeurs. Une approche de sécurité première hiérarchise les considérations de sécurité tout au long du processus de développement, de la conception au déploiement.
Vous pouvez empêcher les problèmes de sécurité en appliquant constamment ces principes :
- Supposons que toutes les entrées sont malveillantes et valident tout.
- Échouez en toute sécurité sans exposer de données ni créer des vulnérabilités.
- Utilisez la défense en profondeur avec plusieurs couches de sécurité.
- Accordez les autorisations minimales nécessaires.
- Journaliser les événements de sécurité sans inclure de données sensibles.
Utilisez GitHub Copilot pour implémenter ces principes de manière cohérente en les incluant dans vos invites et commentaires.
Résumé
Empêcher les problèmes de sécurité pendant le développement est plus efficace et rentable que de les résoudre ultérieurement. GitHub Copilot sert de partenaire de sécurité proactif, ce qui vous aide à écrire du code sécurisé dès le départ via des invites axées sur la sécurité, la validation en temps réel et l’implémentation des meilleures pratiques. En intégrant GitHub Copilot à d’autres outils de sécurité, en établissant des normes d’équipe et en conservant un état d’esprit de sécurité, vous pouvez réduire considérablement les vulnérabilités dans votre codebase.