2017-02-21 1 views
1

Je suis après quelques conseils concrets sur la meilleure façon de prévenir (ou au moins de dissuader) les mises à niveau non autorisées de logiciels sur un système embarqué. Il n'a pas besoin d'être à l'épreuve des balles et nous pouvons supposer pour l'instant que le système lui-même est suffisamment verrouillé pour que personne ne puisse y accéder sans autorisation. Mon plan consiste essentiellement à avoir un processus d'installation exécuté sur le système qui recevrait des paquets de mise à jour de n'importe où mais qui pourrait s'assurer que ces paquets provenaient d'une source fiable (ie, moi) avant d'essayer de les installer.Comment puis-je utiliser une signature numérique pour contrôler les mises à niveau logicielles?

Sous une forme simple, le package de mise à jour comprendrait le package d'installation réel, plus une signature numérique correspondante qui ne pourrait être générée que par moi-même. De plus, les signatures seraient purement auto-générées sans aucune autorité externe impliquée.

Ce sont mes réflexions sur le processus possible:

  1. générons une paire clé privée/publique et la distribution de la clé publique ainsi que le système embarqué lui-même. Lors de la création d'un package d'installation de logiciel, acheminez le contenu du package (ou un MD5 du package) via un générateur de signature à l'aide de notre clé privée.

  2. Distribuez le package d'installation du logiciel avec cette signature. Demandez à l'installateur de vérifier la signature par rapport au paquet d'installation du logiciel (en utilisant la clé publique dont il dispose déjà) et de ne l'installer que s'il y a correspondance.

Si quelqu'un peut trouver des problèmes avec ce régime, j'apprécierais les détails, ainsi que des conseils spécifiques sur la façon de les éviter. De plus (bien que ce ne soit pas l'objectif principal de la question), tout conseil sur les outils pour générer les clés serait apprécié.

Répondre

1

Je ne vois aucun problème apparent avec votre solution. Je peux suggérer des améliorations que vous avez déjà prises en compte

Si le logiciel embarqué est suffisamment verrouillé, il n'est pas nécessaire de prendre des mesures supplémentaires pour protéger l'intégrité de la clé publique distribuée avec le logiciel (par exemple en signant l'installateur lui-même et obscurcir, qui pourrait être un mal de tête)

Je l'ai considéré comme une connexion TLS pour télécharger les mises à jour, mais il ne serait pas vraiment nécessaire, parce que les paquets vont être protégés par une signature numérique

Je suggère encapsulant la clé publique dans un certificat X509. De cette façon, vous pouvez contrôler la période de validité et même une éventuelle révocation si la clé privée a été compromise. Dans ce cas, vous aurez besoin d'une autorité de certification hiérarchique, avec un certificat racine qui émet les certificats de signature. Inclure dans le fichier de clés certifiées du programme d'installation la partie publique du certificat racine. Ensuite, l'utilisation d'un certificat de signature différent après l'expiration/la révocation sera transparente pour l'installateur.

Le certificat racine a une longue durée et une grande taille de clé (et devrait être sécurisé de manière pratique), et les certificats de signature ont une durée plus courte et peuvent utiliser une clé plus petite. Avec cette CA, vous pouvez également générer un certificat TLS si vous avez besoin d'un service supplémentaire: par exemple, vérifiez les mises à jour disponibles.Dans ce cas, incluez le certificat dans le fichier de clés certifiées du programme d'installation afin d'éviter les attaques de type man-in-the-middle (épinglage SSL).

Vous pouvez signer la distribution complète ou un hachage. Il n'affecte pas la sécurité (voir https://crypto.stackexchange.com/questions/6335/is-signing-a-hash-instead-of-the-full-data-considered-secure) mais n'utilise pas MD5 car il présente des vulnérabilités étendues. Utilisez une fonction SHA-2.

Pour générer les clés, vous pouvez utiliser openssl dans la ligne de commande ou utiliser l'application GUI KeyStore-Explorer