🔑Signature de fichiers windows
Comprendre le processus de signature des fichiers, en particulier des fichiers windows, en lien avec les certificats d'autorité (CA).
Quelques définitions
Un certificat selon le standard x509 contient :
👨 des informations personnelles sur le sujet (ici le dev, nom, organisation)
⚖️ nom du CA qui a signé ce certificat
🕐 des informations sur la validité du certificat (expiration...)
🖊️ la signature du CA (hash du certificat - sans la signature, signé par la clef privée du CA)
🔑 la clef publique du sujet
Une signature est simplement un hash d'une structure, signé par une clef privée.
Pour un certificat https, on parlera de SSL Certificate, pour un certificat d'un programme, on parlera de Code Signing Certificate
Description du processus
Le développeur obtient son certificat en le signant lui même ou en l'obtenant depuis une autorité de certification :
Il génère sa paire clef publique/clef privée
Il l'envoie au CA avec ses infos
Le CA lui renvoie alors son certificat (voir définition au-dessus) contenant sa signature authentifiant les informations contenues.
Le développeur signe son programme : il crée un signature block avec principalement :
🖊️ le hash de son code signé avec sa clef privée
📜 son certificat
ℹ️ la méthode de hash utilisée
Windows reçoit le programme :
Il hash le code (en excluant à la lecture du PE la section recevant le certificat)
Il déchiffre le hash du code signé (voir 2.) et le compare avec le hash précédent. Il peut déchiffrer ce hash grâce à la clef publique du certificat du signature block (voir 2.).
Si les deux matchent , le certificat correspond bien à la clef publique liée et le hash est le même qu'au moment de la signature du code, ce dernier est intègre. -> On peut maintenant vérifier la signature du certificat (par le CA) : on obtient le nom du CA (issuer) situé dans le certificat. Avec ce nom on peut aller chercher dans une base locale de certificats de CA "racines" (root certificates) le certificat correspondant et dedans la clef publique correspondant à ce CA. Cela nous permet de déchiffrer la signature et d'obtenir le hash supposé du certificat (sans la signature). On calcule à côté le hash du certificat (sans la signature) et on compare : si les deux correspondent le certificat est bien signé par la CA en question.
Ressources
Last updated