2 votes

Comment charger un module de noyau non signé dans mon noyau qui respecte la signature ?

J'ai compilé un module de noyau (wacom.ko) en utilisant la source de noyau appropriée pour mon appareil et la chaîne d'outils de Google. Lorsque j'ai essayé de insmod le module, un message d'erreur s'est affiché disant

clés requises non disponibles

J'ai fait des recherches et j'ai découvert que vous devez signer le module pour le charger dans le noyau si ce dernier utilise la mise en application de la signature (ce qui est le cas dans mon cas). Je suppose qu'il n'y a aucun moyen d'obtenir la clé privée que le noyau a utilisée à l'origine lors de la compilation. Mais cela n'a pas non plus de sens quand je pense à la façon dont tout développeur pourrait étendre le noyau en écrivant des modules si cette barrière est en place.

Existe-t-il un moyen de désactiver l'application de la signature du noyau et de charger le module que j'ai créé ? Sinon, puis-je d'une manière ou d'une autre signer mon module et le charger ?

1voto

Irfan Latif Points 16863

La construction de modules de noyau hors-arbre n'est généralement pas recommandée pour les débutants comme moi afin d'éviter des problèmes comme les suivants vermagic inadéquation :

config MODVERSIONS
...
Habituellement, vous devez utiliser les modules compilés avec votre noyau. Le fait de dire Y ici rend parfois possible l'utilisation de modules compilés pour des noyaux différents, en ajoutant suffisamment d'informations aux modules pour (avec un peu de chance) repérer tout changement qui les rendrait incompatibles avec le noyau que vous utilisez.

De même, le avertissement :

le chargement d'un module hors-arbre entache le noyau

Chargement forcé des modules peut conduire à des situations telles que Symboles / références non définis (fonctions / variables exporté et disponible sur /proc/kallsyms ).

J'ai fait des recherches et j'ai découvert que vous devez signer le module pour le charger.
...
Mais cela n'a pas non plus de sens quand je pense à la façon dont n'importe quel développeur pourrait étendre le noyau en écrivant des modules si cette barrière est en place.

C'est le comportement souhaité :

La signature des modules augmente la sécurité en rendant plus difficile le chargement d'un module malveillant dans le noyau.

Et c'est pourquoi MODULE_SIG_FORCE est là. Sur les PC UEFI Secure Boot exige nécessairement que le noyau et les modules soient signés dans le cadre de la chaîne de démarrage sécurisée. Le système Android Verified Boot signes entiers boot mais qui ensuite - en utilisant dm-verity - sécurise /system y /vendor les partitions qui peuvent éventuellement inclure les modules chargeables du noyau. La signature des modules ne semble donc pas nécessaire :

La signature du module n'est pas obligatoire et n'est pas testée par rapport aux critères suivants

Citation tirée de Modules de noyau chargeables .

Je suppose qu'il n'y a aucun moyen d'obtenir la clé privée que le noyau a utilisée à l'origine lors de la compilation.

Vous avez raison. La paire de clés publique / privée est générée (en utilisant openssl ) lors de la construction du noyau. La clé publique est intégrée au noyau et peut être consultée dans le fichier /proc/keys ou par :

~# keyctl list %:.system_keyring

Si le noyau a été construit avec IKCONFIG_PROC L'algorithme de hachage peut être vu comme suit :

~# zcat /proc/config.gz | grep MODULE_SIG_HASH

Un script perl fait également partie de l'arbre des sources du noyau et peut être utilisé pour signer les modules :

~$ sign-file <algorithm> <priv_key_file> <pub_key_file> <module>.ko

Existe-t-il un moyen de désactiver l'application de la signature du noyau et de charger le module que j'ai créé ?

Non.

Sinon, puis-je d'une manière ou d'une autre signer mon module et le charger ?

Demandez au développeur du noyau de fournir la même clé privée (si possible), sinon la seule option est de reconstruire le noyau entier. Obtenez la configuration du noyau en cours d'exécution à partir de /proc/config.gz si elle est disponible et requise. N'oubliez pas de désactiver CONFIG_MODULE_SIG ou mettre CONFIG_MODULE_SIG_ALL .

SOURCE : Construction de modules externes

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X