25 votes

Quelles sont les restrictions de la signature de code ad-hoc ?

Il est possible de signer du code ou des applications "ad-hoc" en utilisant codesign . La page de manuel nous dit ce qui suit au sujet de la signature de code ad-hoc :

Si l'identité est la lettre unique "-" (tiret), la signature ad hoc est effectuée. La signature ad hoc n'utilise pas du tout d'identité et identifie exactement une instance du code. Des restrictions importantes s'appliquent à l'utilisation du code signé ad-hoc ; consultez la documentation avant de l'utiliser.

(C'est moi qui souligne)

Je voulais en savoir plus et j'ai essayé de trouver ladite documentation, mais je n'ai pas réussi à trouver de détails. J'ai trouvé une note technique intitulée "MacOS Code Signing In Depth" (en anglais) mais il ne mentionne pas du tout la signature ad hoc.

Quelles sont ces "restrictions importantes" et où sont-elles documentées ?

19voto

Jose Chavez Points 645

Dans ce contexte, la signature ad hoc signifie essentiellement que le binaire est signé sans aucune preuve cryptographique.

Essentiellement, les binaires sont normalement signés en ajoutant un soi-disant CMS (un message cryptographique) où le hash du CodeDirectory est le message qui est signé par l'identité de signature. Cela signifie qu'une personne extérieure peut vérifier que le code a bien été signé par une personne détenant la clé privée de cette identité.

Lors de l'exécution des programmes, le système MacOS peut vérifier que ces signatures sont valides, et qu'il fait confiance à l'identité du signataire - et si c'est le cas, exécuter le programme. C'est la base de la fonctionnalité de GateKeeper.

Les binaires signés ad hoc sont très différents car ils ne contiennent pas de tels CMS. Au lieu de cela, il contient simplement la valeur de hachage SHA-1 du CodeDirectory sans aucune preuve cryptographique de sa validité, et aucun chemin de certificats/identités à vérifier.

Le CodeDirectory est un objet qui décrit une instance particulière de code statique en ayant des valeurs de hachage pour divers morceaux de code dont l'application est constituée. En s'assurant que le CodeDirectory n'a pas été altéré en vérifiant la signature cryptographique, et que les différents morceaux de code de l'application correspondent aux valeurs de hachage stockées dans le répertoire, vous pouvez vérifier que le code n'a pas été altéré.

Sans la preuve cryptographique, cette vérification "non altérée" ne peut être effectuée de manière normale.

Au lieu de cela, les binaires signés ad hoc sont vérifiés en comparant la valeur de hachage SHA-1 à une liste de valeurs de hachage "connues et bonnes" stockées dans le cache de confiance statique du noyau.

En substance, cela signifie que les "restrictions importantes" imposées à toute application que vous signez vous-même de manière ad hoc sont qu'elle ne passera aucune sorte de vérification. Elle sera fondamentalement la même qu'un binaire non signé.

Cependant, si vous êtes Apple, vous pouvez créer des applications qui ne sont pas signées par un code ordinaire et qui sont au contraire explicitement approuvées par le noyau. Par exemple, si Apple veut s'assurer qu'une application n'est pas altérée lorsqu'elle est exécutée à un stade précoce du démarrage du système où la vérification complète de l'identité de signature n'est pas opérationnelle (ou n'est pas disponible), elle peut utiliser la signature ad hoc. Ces applications peuvent toujours être vérifiées par le cache de confiance statique, même si votre référentiel de certificats est endommagé ou autre.

Dans la pratique, la création de binaires signés ad hoc ne présente un intérêt pratique que pour les développeurs Apple.

Vous pouvez trouver une documentation mineure sur la signature ad hoc dans la section des développeurs d'Apple. Par exemple :

https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc

Mais vous pouvez également trouver des extraits de documents dans le code source de l'utilitaire de signature de code lui-même, et dans le code source de libsecurity.

1 votes

L'expression "n'ayant qu'une valeur pratique pour les développeurs Apple" signifie-t-elle ici "uniquement pour les développeurs travaillant chez Apple", ou "uniquement pour les développeurs travaillant sur des plateformes Apple" ? Je suis sincèrement curieux, car nous avons commencé à avoir de nouveaux problèmes où le trousseau ne peut pas trouver la clé même si le nom est correct, et nous envisageons de passer au trait d'union pour les versions non publiées.

3 votes

C'est seulement pour les développeurs travaillant chez Apple.

0 votes

Notez que le simulateur iOS utilise également la signature adhoc. La signature adhoc peut être utile aux développeurs en dehors d'Apple pour permettre à l'application de demander des droits, ce qui n'est pas possible sans signature de code (tous les documents que j'ai vus indiquent que non). Sur Mac, ce n'est généralement pas un problème, mais sur iOS, de nombreuses fonctionnalités sont verrouillées par des droits, et il est donc souhaitable pour les développeurs iOS de tester que cela fonctionne correctement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X