Mise en place de signature de code avec une YubiKey dans un contexte Windows

Pourquoi ?

Pourquoi signer du code ? Avec l’explosion du nombre d’applications et parallèlement celle des malwares, signer du code permet à une entreprise d’apposer un tampon, une preuve d’intégrité de son application. Voici en exemple, les propriétés d’un exécutable signé :

exemple d'executable

 

Il est important de s’assurer que le certificat émis pour signer du code ne soit pas dérobé. Une telle erreur permettrait à qui l’a récupéré de pouvoir émettre tout code qu’il souhaite en se faisant passer pour la société.

Prenons le cas d’un malware qui serait signé avec ce certificat dérobé, toute personne le téléchargeant se verrait assuré d’une certaine sureté du document alors que celle-ci ne serait qu’illusoire. Et cela sans compter les retombées médiatiques pour la société et l’impact sur sa réputation.
C’est dans cette idée-là que nous détaillerons ici, la mise en place de signature de code avec un certificat sur une clef cryptographique (YubiKey) dans un contexte Windows. En effet, selon le type de code, différents logiciels sont utilisés. Dans notre cas, nous utiliserons l’outils SignTool, utilisé pour le chiffrement d’exécutable pour Windows (.exe entre autres).

Il est à préciser que la partie concernant la demande de génération d’un certificat de code auprès d’une autorité de certification publique n’est pas détaillée ici. 

Pour en savoir plus à ce sujet, vous pouvez vous rendre directement sur le site de ces autorités, dont voici une liste non-exhaustive :

  • GlobalSign
  • DigiCert
  • Thawte

Intégration du certificat dans une YubiKey

Toujours en partant du principe que le certificat a été généré par une autorité de certification et que désormais celui-ci se situe sur le poste de l’utilisateur, il reste alors à procéder à son intégration au sein de la YubiKey, le support cryptographique. Dans notre exemple, il s’agit du modèle YubiKey 5 NFC.

Pour procéder à l’import du certificat, l’application YubiKey Manager est nécessaire.

Celle-ci est téléchargeable à l’URL suivante :
https://www.yubico.com/products/services-software/download/yubikey-manager/

Une fois téléchargé et installé, il ne reste plus qu’à brancher la YubiKey sur un port USB de l’ordinateur et à démarrer l’application. On obtient alors l’interface suivante.

interface yubikey manager

Il faut ensuite choisir « PIV » dans l’onglet « Applications »

onglet yubikey manager

A partir de ce menu, il est possible de partir sur dans trois directions différentes :

  • La configuration du PIN de la YubiKey. Cette partie est détaillée en annexe à la fin de l’article.
  • Configurer les certificats, c’est-à-dire générer ou importer les certificats pour les différents cas d’utilisation.
  • Restaurer la configuration par défaut de la YubiKey. Il s’agit donc là d’une suppression de toute configuration concernant le PIV (et le PIV uniquement).

Dans cette partie, le cas qui nous intéresse est la configuration des certificats, il faut donc appuyer sur « Configure Certificates ».

configuration certificat

Il existe avec la YubiKey 5 NFC, 4 slots principaux pour les certificats :

  • Authentication :  l’authentification. Ex : Smart Card Logon
  • Digital Signature : Signature numérique. Ex : signature de code. C’est le cas d’utilisation qui nous intéressera ici.
  • Key Management : Chiffrement. Ex : chiffrement de disques durs avec le logiciel Cryhod.
  • Card Authentication : Accès phyisque. Ex : ouverture de porte d’un batiment. (Le code PIN n’est pas requis pour ce slot).

Dans notre cas, le slot qui nous intéressera est donc le second, Digital Signature.

Une fois le slot sélectionné, il suffit d’importer le certificat en cliquant sur le bouton « Import » puis en sélectionnant le certificat dans l’arborescence de l’ordinateur local.

Le certificat est alors importé.

Signer du code

Pour signer du code simplement sur Windows, l’outil SignTools est nécessaire. Ce dernier est compris dans le Windows 10 SDK de Visual Studio. Il est possible d’installer le SDK directement depuis l’URL suivante :

https://go.microsoft.com/fwlink/?LinkID=698771

Si vous avez un doute sur la présence ou non du SDK, il est possible de vérifier la présence de SignTool.exe ici :

C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\

Une fois l’installation effectuée, la signature d’un binaire s’effectue par le biais de la commande suivante (à effectuer dans l’interface de commande Windows) :

<Chemin de signtool> signtool.exe sign  /td SHA256 /fd sha256 /a <Chemin complet du binaire>

Le PIN de la clef cryptographique est alors demandé pour signer le binaire :

PIN cryptographique

Dans son processus, SignTools va d’abord chercher un certificat de signature de code au sein du magasin de certificats personnel de l’utilisateur puis dans un second temps, au niveau de la clef cryptographique.

Ainsi, si plusieurs certificats de signature de code existent, il peut être nécessaire de préciser lequel on souhaite utiliser. Pour cela, on précisera le hash du certificat comme dans la commande suivante :

<Chemin de signtool> signtool.exe sign /tr « http://sha256timestamp.ws.symantec.com/sha256/timestamp » /td SHA256 /fd sha256 /SHA1 6e08dd8f8a56537b75f230b612c8290ad2e4f418 <Chemin complet du binaire>

Annexes

Configuration du PIN YubiKey

Dans cette partie, nous détaillerons le processus de configuration du code PIN pour une YubiKey (ici la YubiKey 5 NFC). Cette étape est primordiale pour permettre le maintien de la sécurité du certificat déposé sur le support cryptographique. En effet, par défaut le code PIN est « 123456 », ce qui n’est bien entendu pas acceptable pour protéger le certificat de signature de code.

Pour configurer le PIN de la YubiKey, il faut la connecter et ouvrir l’application YubiKey Manager.

interface yubikey manager
onglet yubikey manager

Dans l’interface, sélectionner «PIV » dans l’onglet Applications.

Sélectionner ensuite « Configure PINs ».

Puis « Change PIN ».

ecran configuration PIN
ecran change PIN

Cocher ensuite la case « Use default » puis remplir les deux champs du dessous avec le nouveau code PIN.

Cocher ensuite la case « Use default » puis remplir les deux champs du dessous avec le nouveau code PIN.

Important : Le code PIN de la YubiKey doit faire entre 6 et 8 caractères alphanumériques. En ce qui concerne les autres codes (PUK et Management Key), ils sont à configurer de la même manière (avec 6 à 8 caractères alphanumériques pour le PUK et 48 caractères numériques pour la Management Key).



Retrouvez la practice Sécurité Opérationnelle : https://www.synetis.com/expertises/securite-operationnelle/

Retrouvez l’offre de chiffrement de données sensibles en partenariat avec Primx et Yubico : https://www.synetis.com/goencrypt/

 

Brian Nicolas-Nelson

Consultant Sécurité Opérationnelle