Comprendre les bonnes pratiques en matière de signature de code
La signature de code garantit aux utilisateurs, aux systèmes d'exploitation et aux outils de sécurité qu'une application provient bien de l'éditeur déclaré et qu'elle n'a pas été altérée depuis sa publication. Sans elle, un logiciel peut être signalé comme dangereux, bloqué lors de son installation ou exploité par des acteurs malveillants.
La signature de code sert à authentifier l’identité du développeur d’un programme et sa provenance, tout en confirmant que le logiciel n’a pas été altéré depuis sa signature.
En signant numériquement un programme, une application, un fichier exécutable ou un script, un développeur y associe un certificat numérique qui confirme son identité et l’intégrité du logiciel. Les certificats de signature de code utilisent la cryptographie à clé publique, qui est la même technologie que celle employée pour d’autres types de certificats numériques. Cette approche est prise en charge par tous les systèmes d’exploitation et toutes les plateformes, des environnements mobiles aux environnements de bureau en passant par les systèmes embarqués. La signature de code est largement utilisée sous Windows par Microsoft, sous Mac OS X par Apple, dans les distributions Linux, ainsi que sur iOS et Android.
Alors que les cybermenaces ciblent de plus en plus les failles dans la confiance accordée aux logiciels, la signature de code est devenue une ligne de défense de premier plan contre la falsification, la diffusion de logiciels malveillants et les attaques de la chaîne d’approvisionnement.
La mise en œuvre de pratiques rigoureuses de signature de code est donc essentielle pour les éditeurs de logiciels et les organisations de développement qui cherchent à protéger les utilisateurs, à préserver la confiance dans la plateforme et à garantir que les logiciels puissent être fournis de manière sûre et fiable. Les bonnes pratiques suivantes permettent de faire face aux risques les plus courants liés à la sécurité de la signature de code :
- Sécurisez votre code à l’aide de certificats de signature de code : la recommandation la plus importante est d’utiliser des certificats de signature de code dans la mesure du possible. Ceux-ci vérifient la provenance et l’authenticité du code auprès des utilisateurs finaux et renforcent la confiance des clients dans leur sécurité personnelle. En signant correctement votre code, vous pouvez conférer à votre application ou à votre programme une confiance gérée par une autorité de certification publique de confiance telle que Sectigo. Pour plus de sécurité, vous pouvez utiliser un certificat de signature de code à validation étendue (EV), qui offre une vérification d’identité plus rigoureuse que la signature de code standard.
- Limitez au maximum l’accès aux clés privées : tout bon expert en informatique mettra en place des mesures de contrôle d’accès dès que possible ; cela inclut la restriction de l’accès aux clés privées et aux certificats racine de base. Vous ne devriez autoriser qu’un petit nombre de personnes à accéder aux clés privées de votre organisation, et ces personnes doivent avoir une raison spécifique justifiant cet accès. La mise en place d’une politique d’accès basée sur les rôles (RBAC) au sein de votre organisation contribuera à limiter les risques d’exposition.
- Protégez les clés privées à l’aide de matériel cryptographique : l’utilisation de matériel cryptographique vous permet de protéger vos clés privées à l’aide des algorithmes de chiffrement les plus récents. Ce type de matériel doit au minimum être certifié FIPS 140 niveau 2. Des produits tels que les modules de sécurité matériels (HSM) empêcheront vos clés privées de tomber entre les mains d’acteurs malveillants.
- Horodatage du code : l’horodatage de votre code garantit que le logiciel reste fiable même après l’expiration du certificat de signature, car il prouve que le code a été signé alors que le certificat était valide.
- Différences entre la signature de test et la signature de mise en production : comme décrit ci-dessus, il est important de distinguer et de comprendre la différence entre les clés/certificats de signature de test et ceux de signature de mise en production. Les certificats et clés de signature de test nécessitent moins de sécurité et peuvent être auto-signés par une autorité de certification (CA) interne privée. Ils doivent également être chaînés à un certificat racine différent de celui du produit signé mis en production. Les meilleures pratiques consistent à mettre en place une infrastructure de signature de code totalement distincte pour la signature de production et celle de pré-production. Cela vous permettra de mettre en place des contrôles d’accès appropriés pour votre environnement de test et votre code de production.
- Authentification du code : la signature de code n’identifie pas spécifiquement le code comme sûr ; elle indique simplement qui l’a écrit. À ce titre, le code doit tout de même être entièrement authentifié avant de pouvoir être mis à la disposition du public. Cela vous permet de vous assurer que vous ne diffusez pas accidentellement du code incorrect ou malveillant qui pourrait nuire à vos clients et porter atteinte à votre réputation. Toutes les activités d’authentification liées à la signature de code doivent être consignées pour la postérité, au cas où une enquête ou une intervention en cas d’incident s’avérerait nécessaire.
- Analysez le code à la recherche de logiciels malveillants ou de virus avant de le signer : outre la vérification qu’aucune modification n’a été apportée à votre code, il est important de l’analyser à la recherche de virus ou d’autres codes malveillants. Des codes malveillants peuvent souvent être insérés par inadvertance par des développeurs qui réutilisent ou intègrent du code existant provenant de projets externes. Il est beaucoup plus facile de détecter et de corriger les erreurs avant la publication du code.
- Limitez l’utilisation répétée des clés : la réutilisation de clés privées pour signer du code à plusieurs reprises augmente les risques. Si une clé est compromise, tout le code signé avec cette clé à cette date sera invalidé et devra être mis à jour à l’aide d’un nouveau certificat de signature de code. Prendre l’habitude d’alterner entre différentes clés et différents certificats vous permettra de répartir le risque et réduira l’effort et l’impact liés à la réémission des certificats.
- Révoquez les certificats compromis : la révocation est l’une des tâches les plus importantes pour garantir la sécurité du code. L’équipe de développement est chargée de signaler tout code, toute clé ou tout certificat compromis à son autorité de certification afin que celle-ci puisse prendre les mesures appropriées. En cas de problème éventuel, l’autorité de certification exigera que le certificat de signature de code soit révoqué. Si vous apposez un horodatage à votre code, seul le code dont la date de révocation est postérieure à l’incident sera affecté.
- Surveiller et auditer l’activité de signature : sans visibilité, les utilisations abusives peuvent passer inaperçues jusqu’à ce que des dommages surviennent. Tenez des journaux détaillés des événements de signature de code, des accès, des validations et des horodatages. Des examens réguliers permettent de détecter les anomalies et facilitent les enquêtes.
- Maintenir à jour les politiques et les formations : des pratiques incohérentes entre les équipes affaiblissent la sécurité. Des politiques formelles doivent être mises en place pour définir la gestion des clés, les workflows, les validations, les normes d’automatisation et la gestion des incidents. Une formation continue garantit que les équipes restent alignées à mesure que les menaces évoluent.
Comment mettre en œuvre la signature de code ?
Pour mettre en œuvre la signature de code, une paire de clés cryptographiques unique est nécessaire. Celle-ci se compose d’une clé privée, qui reste secrète, et d’une clé publique, qui peut être partagée. Ensemble, elles constituent le fondement de la cryptographie à clé publique et permettent de signer des logiciels sans exposer la clé privée.
Après avoir généré la nouvelle paire de clés à l’aide d’une infrastructure à clé publique (PKI), la clé publique est envoyée à une autorité de certification (CA) dans le cadre d’une demande de signature de certificat (CSR). La CA vérifie l’identité du développeur ou de l’organisation et délivre le certificat de signature de code.
Maintenant que le développeur est en possession du certificat, il doit calculer le hachage du code du logiciel. Le hachage est une procédure dans laquelle une fonction de hachage est utilisée pour convertir le code en une valeur fixe arbitraire. Le résultat du hachage, appelé « digest », est ensuite chiffré à l’aide de la clé privée. Ensuite, le développeur combine ce condensé avec le certificat de signature de code et la fonction de hachage pour créer ce qu’on appelle un bloc de signature, qui regroupe essentiellement tous les éléments ci-dessus en un fragment de code pouvant être facilement intégré au logiciel.
Importance de la protection
Le principal enjeu de la signature de code réside dans la protection de la clé privée de signature associée au certificat. Si une clé est compromise, le certificat perd toute crédibilité et toute valeur, ce qui met en péril le logiciel que vous avez signé.
De nombreuses organisations se protègent à l’aide de coffres-forts sécurisés et de modules de sécurité matériels (HSM) afin de renforcer le niveau de sécurité de leurs clés privées. D’autres ont recours à des plateformes de gestion des certificats conçues pour automatiser et sécuriser la gestion du cycle de vie de tous les certificats de signature de code. Le Sectigo Certificate Manager en est un exemple. L’utilisation d’un gestionnaire de certificats contribue grandement à garantir l’intégrité des clés privées et des autres actifs de chiffrement.
Que permet d'éviter la signature de code ?
En termes simples, la signature de code permet d’empêcher l’introduction de logiciels malveillants et d’autres codes malveillants dans le système d’un utilisateur final sous le couvert d’un fichier inoffensif ou d’un événement tel qu’une mise à jour Windows. Pour ce faire, elle permet aux utilisateurs de vérifier que le fichier téléchargé provient bien de son émetteur d’origine et non d’un acteur malveillant. Cela renforce le concept de confiance au sein du système, permettant aux développeurs de garantir aux utilisateurs finaux qui téléchargent le logiciel que la source est fiable et sûre.
Les certificats de signature de code EV offrent des garanties de sécurité supplémentaires. Ils exigent que la clé soit stockée dans un matériel hautement sécurisé, conforme à la norme FIPS 140-2 ou à une norme supérieure. Il existe des clés USB qui répondent à cette exigence et ajoutent une couche de protection supplémentaire grâce à un code PIN. Vous pouvez également stocker la ou les clés dans le module HSM sur site de votre organisation.
Une étude menée par le Cyber Forensics Innovation Lab de Georgia Tech montre que l’émission et l’utilisation de certificats SSL/TLS à validation étendue (EV) offrent une probabilité de 99,99 % d’être à l’abri des attaques de phishing et des abus. Le livre blanc, parrainé par Sectigo, peut être téléchargé ici.
Sécurisez vos logiciels grâce aux solutions de signature de code fiables de Sectigo
Le respect de ces bonnes pratiques en matière de signature de code réduit considérablement le risque de distribution non autorisée de logiciels, d’alertes de sécurité lors de l’installation et de perte de confiance des utilisateurs. Cela peut également se traduire par des taux d’installation plus élevés et une adoption plus fluide de votre logiciel.
Les certificats émis par des autorités de confiance sont largement reconnus par les systèmes d’exploitation et les plateformes de sécurité. Sectigo est une autorité de certification de premier plan proposant des solutions de signature de code rapides et flexibles. Nos certificats de signature de code aident les éditeurs à instaurer la confiance, à protéger les utilisateurs contre les codes altérés et à commercialiser leurs logiciels plus rapidement. Découvrez les différents types de certificats de signature de code proposés par Sectigo, ou contactez notre équipe d’experts pour plus d’informations.