L’article original est paru sur le Blog OpenSSF. L’auteur, Harimohan Rajamohanan, est un architecte de solutions et un développeur Full Stack chez Wipro Limited. En savoir plus sur la Fondation Linux Formation Développement de logiciels sécurisés (LFD121).

Aujourd’hui, tous les logiciels font l’objet d’attaques continues. Les architectes et développeurs de logiciels doivent donc se concentrer sur des mesures pratiques pour améliorer la sécurité des informations. Il existe de nombreux documents disponibles en ligne qui traitent de divers aspects des pratiques de développement sécurisé, mais ils sont dispersés dans divers articles et livres. Récemment, j’étais tombé sur un cours développé par l’Open Source Security Foundation (OpenSSF), qui fait partie de la Linux Foundation, qui s’adresse aux développeurs de logiciels, aux professionnels de DevOps, aux développeurs d’applications Web et à d’autres personnes intéressées à apprendre les meilleures pratiques de développement logiciel sécurisé. Mon expérience d’apprentissage en prenant le DÉVELOPPEMENT DE LOGICIELS SÉCURISÉS (LFD121) était positif et j’ai immédiatement commencé à appliquer ces apprentissages dans mon travail d’architecte et de développeur de logiciels.

« Une astuce utile pour créer des systèmes sécurisés est de penser comme un attaquant avant d’écrire le code ou d’apporter une modification au code » – DÉVELOPPEMENT DE LOGICIELS SÉCURISÉS (LFD121)

Ma compréhension antérieure de la sécurité logicielle était principalement axée sur l’authentification et l’autorisation des utilisateurs. Dans ce contexte, les pratiques de codage sécurisé que je suivais se limitaient à :

Aucune lecture non autorisée
Aucune modification non autorisée
Capacité à prouver que quelqu’un a fait quelque chose
Audit et journalisation

Publicité

Il peut ne pas être assez large pour supposer qu’un logiciel est sécurisé si un mécanisme d’authentification et d’autorisation fort est présent. Aujourd’hui, presque tout le développement d’applications dépend de logiciels open source et il est important que les développeurs vérifient la sécurité de la chaîne open source de contributeurs et de ses dépendances. Les récentes divulgations de vulnérabilités et les attaques de la chaîne d’approvisionnement m’ont ouvert les yeux sur le potentiel existant de vulnérabilités dans les logiciels open source. L’objectif naturel de la majorité des développeurs est de faire fonctionner la logique métier et de fournir le code sans aucun bogue fonctionnel.

Le cours m’a donné un aperçu complet des pratiques de développement sécurisé à suivre pour se défendre contre le type d’attaques qui se produisent dans les logiciels modernes.

Que signifie réellement la gestion des risques ?

Le cours contient des conseils pratiques détaillés sur la prise en compte de la sécurité dans le cadre des exigences d’un système. Faisant partie de divers intégrateurs de systèmes mondiaux pendant plus d’une décennie, j’ai été chargé de développer des logiciels d’application pour mes clients. Les exigences fonctionnelles étaient généralement écrites dans de tels projets mais ne couvraient que quelques aspects de la sécurité en termes d’authentification et d’autorisation des utilisateurs. Documenter en détail les exigences de sécurité aidera les développeurs et les futurs responsables du logiciel à avoir une idée de ce que le système essaie d’accomplir pour la sécurité.

Principaux points à retenir sur l’évaluation des risques :

Analyser les bases de la sécurité, y compris la gestion des risques, la triade « CIA » et les exigences
Appliquer des principes de conception sécurisés tels que le moindre privilège, la médiation complète et la validation des entrées
Conseils d’évaluation de la chaîne d’approvisionnement sur la façon de réutiliser les logiciels en tenant compte de la sécurité, y compris la sélection, le téléchargement, l’installation et la mise à jour de ces logiciels
Documenter les exigences de sécurité de haut niveau en un seul endroit

Sécuriser les principes de conception lors de la conception d’une solution logicielle

Les principes de conception sont des guides basés sur l’expérience et la pratique. Le logiciel sera généralement sécurisé si vous appliquez les principes de conception sécurisée. Ce cours couvre un large éventail de principes de conception en termes de composants auxquels vous faites confiance et de composants auxquels vous ne faites pas confiance. Les principes clés que j’ai appris du cours qui me guident dans mes domaines actuels de conception de logiciels sont :

L’utilisateur et le programme doivent fonctionner en utilisant le moindre privilège. Cela limite les dommages causés par une erreur ou une attaque.
Chaque tentative d’accès ou de manipulation de données doit être vérifiée et autorisée à l’aide d’un mécanisme qui ne peut être contourné.
L’accès aux systèmes doit être basé sur plus d’une condition. Comment prouver que l’identité de l’utilisateur authentifié est celle qu’il prétend être ? Le logiciel doit prendre en charge l’authentification à deux facteurs.
L’interface utilisateur doit être conçue pour être facile à utiliser afin de s’assurer que les utilisateurs utilisent régulièrement et automatiquement les mécanismes de protection correctement.
Il est important de comprendre le type d’attaquants que vous comptez contrer.

Quelques exemples sur la façon dont j’ai appliqué les principes de conception sécurisée dans mes conceptions de solutions :

Les solutions que je construis utilisent souvent une base de données. J’ai utilisé la commande SQL GRANT pour limiter le privilège obtenu par le programme. En particulier, le privilège DELETE n’est accordé à aucun programme. Et j’ai implémenté un mécanisme de suppression douce dans le programme qui définit la colonne « active = false » dans le tableau pour les cas d’utilisation de suppression.
Les conceptions logicielles récentes que j’ai réalisées sont basées sur une architecture de microservices où il existe une séparation claire entre l’interface graphique et les services backend. Chaque partie de la solution globale est authentifiée séparément. Cela peut minimiser la surface d’attaque.
La validation des entrées côté client est limitée pour contrer les erreurs accidentelles. Mais la validation réelle des entrées se produit côté serveur. Les points de terminaison de l’API valident soigneusement toutes les entrées avant de les traiter. Par exemple, une API PUT valide non seulement les entrées de modification de ressource, mais s’assure également que la ressource est présente dans la base de données avant de procéder à la mise à jour.
Les mises à jour ne sont autorisées que si l’utilisateur consommant l’API est autorisé à le faire.
Les bases de données ne sont pas directement accessibles pour être utilisées par une application cliente.
Tous les secrets comme les clés cryptographiques et les mots de passe sont conservés en dehors du programme dans un coffre-fort sécurisé. C’est principalement pour éviter que des secrets dans le code source n’entrent dans les systèmes de contrôle de version.
J’ai commencé à rechercher le badge OpenSSF Best Practices lors de la sélection de logiciels et de bibliothèques open source dans mes programmes. Je recherche également la posture de sécurité des logiciels open source en vérifiant le score des tableaux de bord OpenSSF.
Une autre pratique que je suis lorsque j’utilise un logiciel open source consiste à vérifier si le logiciel est maintenu. Y a-t-il des versions ou des annonces récentes de la communauté ?

Pratiques de codage sécurisées

À mon avis, ce cours couvre presque tous les aspects des pratiques de codage sécurisé sur lesquels un développeur devrait se concentrer. Les principaux domaines d’intervention comprennent :

Validation des entrées
Comment valider les nombres
Problèmes clés avec le texte, y compris Unicode et les paramètres régionaux
Utilisation d’une expression régulière pour valider la saisie de texte
Importance de minimiser les surfaces d’attaque
Paramètres par défaut sécurisés et démarrage sécurisé.

Par exemple, appliquez la validation d’entrée d’API sur les ID pour vous assurer que les enregistrements appartenant à ces ID existent dans la base de données. Cela réduit la surface d’attaque. Assurez-vous également que l’objet dans la demande de modification d’objet existe dans la base de données.

Traiter les données en toute sécurité
Importance de traiter les données non fiables comme dangereuses
Évitez les informations d’identification par défaut et codées en dur
Comprendre les problèmes de sécurité de la mémoire tels que les lectures ou écritures hors limites, double-free et use-after-free
Éviter les comportements indéfinis
Appel à d’autres programmes
Appelez d’autres programmes en toute sécurité
Comment contrer les attaques par injection telles que l’injection SQL et l’injection de commande du système d’exploitation
Gérer en toute sécurité les noms de fichiers et les chemins de fichiers
Envoyer la sortie
Envoyer la sortie en toute sécurité
Comment contrer les attaques de type Cross-Site scripting (XSS)
Utiliser les en-têtes de renforcement HTTP, y compris la politique de sécurité du contenu (CSP)
Empêcher la vulnérabilité commune liée à la sortie dans les applications Web
Comment formater en toute sécurité des chaînes et des modèles.

Conclusion

« La sécurité est un processus – un voyage – et non un simple point final » – DÉVELOPPEMENT DE LOGICIELS SÉCURISÉS (LFD121)

Ce cours vous donne une approche pratique pour développer des logiciels sécurisés tout en tenant compte des exigences de sécurité, des principes de conception sécurisés, contrer les erreurs de mise en œuvre courantes, des outils pour détecter les problèmes avant d’expédier le code, gérer rapidement les rapports de vulnérabilité. Je recommande fortement ceci cours et la certification à tous les développeurs là-bas.

A propos de l’auteur

Harimohan Rajamohanan est un architecte de solutions et un développeur Full Stack, Open Source Program Office, Lab45, Wipro Limited. Il est un passionné de logiciels open source et a travaillé dans des domaines tels que la modernisation des applications, la transformation numérique et le cloud computing natif. Les principaux domaines d’intervention sont la sécurité et l’observabilité de la chaîne d’approvisionnement des logiciels.

Rate this post
Publicité
Article précédentFreedomFi, spécialiste du bricolage 5G, racheté par Nova Labs • The Register
Article suivantPersonnages Honkai Star Rail – acteurs de la voix, informations et plus
Avatar
Violette Laurent est une blogueuse tech nantaise diplômée en communication de masse et douée pour l'écriture. Elle est la rédactrice en chef de fr.techtribune.net. Les sujets de prédilection de Violette sont la technologie et la cryptographie. Elle est également une grande fan d'Anime et de Manga.

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici