Home header
Linux temps réel embarqué et outils de développements Technique





Trucs et astuces
retours d'expériences

signer un fichier ELF

Le but

Etre capable de vérifier l'authenticité d'un programme ELF ou d'un module Linux.

Signature

Première opération, générer une clef GPG pour la signature.

# gpg --gen-key

Seconde opération signer le programme test au format ELF.

# gpg -b test 

Troisième opération, insérer la signature dans le fichier ELF.

# gpg -b test 
# objcopy --add-section .elf_sig=test.sig test test.signed

Lire la signature

La signature du fichier ELF peut être vérifiée par le noyau lors de l'appel système execve ou lors du chargement du module par le module de vérification elfsig.ko.

Le shell script ci-dessous permet de retrouver simplement la signature embarquée dans un fichier ELF.

#!/bin/ksh

function usage
{
        print "$0 file section"
        exit 2
}

[[ $# = 2 ]] || usage

typeset -i to_skip
typeset -i the_size

file=$1
section=$2

readelf -S $file | grep $section | read a b c d e f reste

to_skip=0x${e}
the_size=0x${f}

dd if=$file of=$file.$section bs=1 skip=$to_skip count=$the_size


chown et capabilties

Observation:

Je veux modifier l'appartenance d'un fichier et selon la documentation je peux le faire sans problème avec tout utilisateur.
En fait la documentation n'est pas à jour, car par défaut seul root peut effectuer le changement d'appartenance.

pmorel@vaio:~$ touch file
pmorel@vaio:~$ ls -l file
-rw-r--r-- 1 pmorel pmorel 0 May 19 19:08 file
pmorel@vaio:~$ chown 1.1 file
chown: changing ownership of `file': Operation not permitted
pmorel@vaio:~$ 

Le problème

Le problème vient des capabilities: le système de fichier supporte les capabilities et dans ce cas un test est fait lors de la recherche du fichier pour savoir si le process demandant le changement d'utilisateur a le droit (capability) de le faire.
Ceci est géré par la capability CAP_CHOWN.

Solution

La solution, si vous voulez pouvoir donner le droit à un utilisateur lambda de modifier le possesseur d'un fichier est de donner au programme chown cette capability

Le programme setcap est prévu à cet effet, il doit être utilisé par root

pmorel@vaio:~$ sudo setcap 'cap_chown=ep' /bin/chown 

Le résulat:

pmorel@vaio:~$ chown 1.1 file
pmorel@vaio:~$ ls -l file
-rwxr-xr-x 1 daemon daemon 0 mai 19 19:08 file
pmorel@vaio:~$ 

Attention, vous donnez la possibilité à un utilisateur d'outre-passer les limites imposées par les quotas

Notes

Pour debian, setcap est livré par le package libcap2-bin.

pmorel@vaio:~$ sudo apt-get install libcap2-bin

©M.N.I.S Société | Produits | Services | Formations | Support | Partenariat | Presse | Téléchargements ©M.N.I.S