URL: https://linuxfr.org/users/ehoebadoag/journaux/signer-les-modules Title: Signer les modules Authors: 007 Date: 2004年09月06日T19:48:36+02:00 Tags: tcpa et fedora Score: 0 En ces temps de "sécurit" aigu, il convient de bien contrôler ce qu'on nous propose (TCPA, DRM, etc). J'avoue être d'une grande méfiance dans ce domaine. Il y a une petite nouveauté dans Linux qui commence à être exploité. Il est possible de signer les modules du noyau et interdire de charger les modules qui n'ont pas une signature valide. La signature est une signature gpg "classique" stockée dans le modules en utilisant les capacités ELF (ce n'est pas un fichier .sig à part). Le contrôle de la signature est fait "classiquement" par le noyau avec la clée public. Allons dans le détail : * dans /usr/src/linux/crypto/signature/key.h il y a la (ou les) clée public gpg (pour contrôler la signature des modules). * /usr/src/linux/scripts/modsign/modsign.sh signe les modules en utilisant une clée privée gpg. * La clée public est dans le noyau. Donc pour changer/ajouter une clée public, il faut recompiler le noyau (cette exigence est assez évidente). Une indirection supplémentaire serait un plus (Par exemple : le noyau aurait une clée et un modules signé par la clée privée du noyau contiendrait d'autres clées publics). C'est assez simple côté utilisateur final mais néanmoins assez chiant à mettre en oeuvre actuellement. Avantages : - Il est difficile pour un cracker de charger un modules "méchant" s'il n'est pas signé - "traçabilité" des modules. Utilisation "concrète" : Fedora (et sûrement Red Hat dans un proche avenir) utilise ça. Le noyau Fedora a une clée public Red Hat : - "pub 512D/D7186B51 2004年08月16日 Red Hat, Inc. (Kernel Module GPG key)" Évidement, personne (sauf Red Hat) à la clée privée qui signe les modules. Vous voyez déjà le "drame" : - si le module n'est pas signé par "M. Red Hat" (ou IBM si sa clée public est aussi ajoutée dans le noyau), alors le module ne peut pas être chargé. Voilà ce que ça donne : modprobe: FATAL: Error inserting ext2 (/lib/modules/2.6.8-1.521/kernel/fs/ext2/ext2.ko): Operation not permitted kernel: An attempt to load unsigned module was rejected En fait il n'y a pas de problème et ce pour plusieurs raisons : - Pour que le noyau exige des modules signés il faut explicitement le demander (paramètre enforcemodulesig). - Le noyau n'est pas signé mais uniquement les modules. - C'est le noyau qui vérifie la signature des modules et pas l'inverse. Donc on est jamais dépendant des modules et surtout d'un module binaire qui exigerai un noyau signé par Red Hat par exemple. - Il y a les sources :-) Cette fonctionnalité a été initialement développé par un développeur IBM. Elle a été reprise par un dev Red Hat. Les patchs nécessaires sont dans rawhide (paquet kernel) : [http://fr2.rpmfind.net/linux/fedora/core/development/SRPMS/(...)](http://fr2.rpmfind.net/linux/fedora/core/development/SRPMS/) Ce sont les patches *modsig* PS : rpm n'est pas le plus ouvert des standards (par exemple tar ou cpio) mais il n'est pas necéssaire d'avoir rpm pour lire un rpm /usr/lib/rpm/rpm2cpio.sh : #!/bin/sh pkg=1ドル if [ "$pkg" = "" -o ! -e "$pkg" ]; then echo "no package supplied" 1>&2 exit 1 fi leadsize=96 o=`expr $leadsize + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* 2ドル + 3ドル \) + 4ドル \) + 5ドル` dl=`expr 256 \* \( 256 \* \( 256 \* 6ドル + 7ドル \) + 8ドル \) + 9ドル` # echo "sig il: $il dl: $dl" sigsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* 2ドル + 3ドル \) + 4ドル \) + 5ドル` dl=`expr 256 \* \( 256 \* \( 256 \* 6ドル + 7ドル \) + 8ドル \) + 9ドル` # echo "hdr il: $il dl: $dl" hdrsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $hdrsize` dd if=$pkg ibs=$o skip=1 2>/dev/null | gunzip

AltStyle によって変換されたページ (->オリジナル) /