Le développement de logiciels a évolué à travers une succession de petits et grands changements au cours de la dernière décennie, et de par ce fait, plusieurs des pratiques et des mythes envisagés comme fonctionnels dans le passé ne sont tout simplement plus praticables. À cette fin, j’ai regroupé quatre domaines que les développeurs de logiciels modernes devraient prendre en considération pour les aider à améliorer la sécurité de leurs logiciels et de leurs entreprises respectives. Ce sont des erreurs habituelles commises par les développeurs actuels de logiciels. Par conséquent, soyez inhabituels et arrêtez de commettre de telles erreurs.
Domaine 1 :
Gestion de la sécurité du développement des logiciels (GSDL)1
- C’est une bonne pratique d’avoir un processus de développement formel qui intègre des pratiques de codage sécurisé tout au long du processus de développement des logiciels.
- C’est parfois difficile pour les petites entreprises de mettre en œuvre la pratique recommandée de fragmentation, mais diviser ou fragmenter l’environnement de développement, de test et de production est une pratique importante pour assurer la cyberrésilience du code.
- Protégez le logiciel en sauvegardant le code source et la configuration dans un entrepôt de stockage des données à accès limité qui intègre le contrôle de version. GitHub est un bon exemple d’un tel outil.
- Produisez des logiciels bien sécurisés en vérifiant votre code par rapport aux problèmes connus tels que le Top 10 de l’OWASP et le Top 25 des faiblesses logicielles les plus dangereuses du Common Weakness Enumeration de 2022.
- Obtenez de l’aide des outils automatisés pour vérifier ou évaluer votre code et le tester. Certains de ces outils automatisés sont gratuits ou sont livrés avec une version gratuite. L’OWASP met à votre disposition une liste d’outils d’analyse de code source (Source Code Analysis Tools) pour aider à détecter des failles de sécurité.
Domaine 2 :
Sécurité des applications (AppSec)2
- La programmation en binôme ne suffit pas. Il y a de fortes probabilités que ni vous ni vos collègues n’ayez été officiellement formés en meilleures pratiques de développement de logiciel sécurisé durant votre éducation formelle. Maintenant, c’est le moment.
- Décalez vers la gauche. Prenez de bonnes décisions de conception – comme « ne lancez pas votre propre crypto » et « envisagez de sortir de la gestion des informations d’identification ». Intégrez les tests de sécurité (SAST/DAST) dans vos pipelines CI/CD. Les blocages se construisent sur des vulnérabilités graves.
- Les cadres de sécurité et les langages sont importants. Je suis désolé si ça vous fait mal de l’entendre : le code PHP est tout simplement moins sécurisé que Ruby dans la plupart des applications. C++ est moins sécurisé que Rust. Tirer parti d’un cadre de sécurité moderne vous procure un avantage significatif en laissant derrière vous les hypothèses de conception médiocres des langages et des cadres de sécurité antérieurs.
- Arrêtez de partager vos secrets. On ne peut plus compter le nombre de fois où des entreprises ont été attaquées parce quecertains développeurs de logiciels pensaient que leur référentiel Github resterait à jamais privé. Pourtant, ces développeurs de logiciels se sont fait piéger par des cyberintrusions lorsque quelqu’un a actionné une bascule pendant cinq minutes. Afin d’empêcher de telles cyberattaques de se produire, utilisez Trufflehog et d’autres outils pour déterminer si les développeurs de logiciels de votre organisation commettent une telle erreur.
Domaine 3 :
Sécurité opérationnelle (OPSEC)3
- Non, vous n’êtes pas trop intelligent pour être victime d’hameçonnage ou pour être piégé par des maliciels (logiciels malveillants). Oui, un logiciel antivirus ralentira votre machine. Mais vous devez vous adapter à un tel ralentissement. Les cybermalfaiteurs savent que les développeurs de logiciels sont biaisés à ce sujet et s’ils ne peuvent pas pénétrer au sein de votre code, ils vous attaqueront d’abord, et ensuite ils attaqueront votre code en conséquence.
- Utilisez l’authentification multifacteur (AMF) de manière persistante. Ne faites pas confiance à votre réseau Internet à la maison ou, à cet égard, votre réseau Internet au travail. Prenez la bonne habitude d’utiliser uniquement des canaux cryptés pour accéder à votre infrastructure informatique.
- D’accord, vous avez par conséquent copié l’intégralité de votre code localement pour pouvoir compiler des données plus rapidement et travailler hors ligne. Mais avez-vous vraiment besoin de copier la base de données comprenant toutes ces données sensibles sur votre ordinateur portable non crypté ? Je ne le pense pas. Le cryptage est votre ami. S’il ralentit votre ordinateur portable de manière notable, procurez-vous un nouvel ordinateur portable. Sérieusement. Les ordinateurs portables modernes sont équipés de puces spécialisées qui réduisent l’impact sur les performances à moins de 3 %.
- Verrouillez toutes vos affaires, votre téléphone, votre ordinateur portable lorsque vous êtes loin de vos appareils. S’il advient que votre « ami » au bar joue avec votre téléphone, cela veut dire qu’il a également accès à vos jetons d’authentification multifacteur (AMF). Subséquemment, arrêtez de vous mettre en danger!
Domaine 4 :
Sécurité de l’infrastructure informatique (InfraSec)4
- Est-ce que vous êtes conscients que vous êtes un administrateur de système ? Parce que si vous êtes dans DevOps5 (développement et exploitation), vous êtes en effet un administrateur de système. Par conséquent, cela signifie que vous devez corriger vos habitudes. Verrouillez les services inutiles. Les fonctions Lambda et l’architecture de microservices facilitent cette tâche.
- Je m’en fiche que le compartiment S3 soit destiné à un projet de test comprenant des données non sensibles. N’ouvrez pas les autorisations pour vous faciliter la vie. Parce que le prochain développeur de logiciel prendra ce même fichu compartiment S3, y attachera plus de données et un système crucial, et avant que vous ne le sachiez, vous êtes en train de divulguer les dossiers de santé d’un million d’utilisateurs.
- Plus vous avez de systèmes, plus vous avez besoin de les entretenir. Bien qu’il puisse sembler cool d’avoir des dizaines de cases supplémentaires sur vos diagrammes, vous devez prendre le temps de nettoyer l’énigme, c’est-à-dire, le code ou le logiciel mal conçu, inutilement compliqué ou indésirable. Les anciens systèmes oubliés peuvent obstruer votre nuage informatique aussi facilement que votre armoire de serveurs, et les factures du fournisseur de votre nuage informatique augmenteront.
Conclusion
J’espère que vous ne vous reconnaissez pas trop dans les situations précédentes. Si vous vous retrouvez à cocher une grande partie de la liste ci-dessus, vous êtes en train de commettre beaucoup d’erreurs habituelles. Mieux vaut trouver un moyen d’améliorer vos compétences, de vérifier vos hypothèses et de devenir un programmeur exceptionnellement sécuritaire.
Joyeuses fêtes!
Références
[1] « Tout au long de chaque étape du Cycle de vie du développement logiciel (CVDL), la Gestion de la sécurité du développement des logiciels (GSDL) est l’un des mécanismes clés que les entreprises utilisent pour s’assurer qu’un projet de développement logiciel s’aligne avec les objectifs commerciaux et qu’il est conforme aux réglementations externes. La GSDL offre un cadre formel pour accomplir des progrès mesurables ciblant les objectifs stratégiques, maintenir les normes de conformité, protéger la sécurité des données, soutenir la conservation et la sauvegarde des données, et réaliser la récupération des données après une cyberattaque. »
[2] « La Sécurité des applications (en abrégé AppSec) comprend toutes les tâches qui introduisent un cycle de vie de développement logiciel sécurisé pour les équipes de développement. Son objectif final est d’améliorer les pratiques de sécurité et, à travers ces pratiques sécuritaires, de trouver, de corriger et, de préférence, de prévenir les problèmes de sécurité au sein des applications. AppSec englobe l’ensemble du cycle de vie de l’application, depuis l’analyse des exigences, la conception, la mise en œuvre, la vérification ainsi que la maintenance. » Happé, Andreas (3 juin 2021) : « What is AppSec anyways? »
[3] « La Sécurité opérationnelle (OPSEC) est un processus de sécurité et de gestion des risques qui empêche les informations sensibles de tomber entre de mauvaises mains. Une autre signification de l’OPSEC est un processus qui identifie des actions apparemment anodines qui pourraient révéler par inadvertance des données critiques ou sensibles à un cybercriminel. OPSEC est à la fois un processus et une stratégie, et elle encourage les responsables informatiques et de cybersécurité à voir leurs opérations et leurs systèmes du point de vue d’un cyberattaquant potentiel. La Sécurité opérationnelle (OPSEC) implique un éventail d’activités et des processus analytiques tels que la surveillance des comportements, la surveillance des médias sociaux et les meilleures pratiques de cybersécurité. »
https://www.fortinet.com/resources/cyberglossary/operational-security
[4] « La Sécurité de l’infrastructure informatique (InfraSec) est un cadre qui combine des politiques, de meilleures pratiques et des technologies pour garantir que les ressources infonuagiques – y compris les environnements informatiques dans le nuage informatique, les applications et les bases de données – restent sécurisées contre les menaces de cybersécurité infonuagiques internes et externes. »
https://www.twingate.com/blog/what-is-cloud-infrastructure-security/
[5] « Résultant de l’assemblage entre le développement (Dev) et les opérations (Ops), DevOps est l’union des personnes, des processus et de la technologie pour fournir en permanence de la valeur aux clients. Que signifie DevOps pour les équipes de développeurs des logiciels? DevOps permet aux rôles antérieurement cloisonnés – développement, opérations informatiques, ingénierie de la qualité, et sécurité – de se coordonner et de collaborer pour fabriquer des produits meilleurs et plus fiables. Le choix d’une culture DevOps ainsi que des pratiques et des outils DevOps permettent aux équipes de mieux répondre aux besoins des clients, d’accroître la confiance dans les applications qu’elles sont en train de concevoir, et d’atteindre plus rapidement les objectifs commerciaux. »
https://azure.microsoft.com/en-us/resources/cloud-computing-dictionary/what-is-devops/