Vérifier l'intégrité des paquets Debian
Après mes trois articles Comment vérifier l'intégrité d'un fichier que l'on télécharge ?, Comment vérifier l'intégrité de Firefox quand on le télécharge ?, et Comment vérifier l'intégrité du TorBrowser quand on le télécharge ?, voici des petites explications sur comment cela marche au niveau du gestionnaire de paquets sous Debian/Ubuntu.
Rq : ce billet est une vulgarisation (et donc une simplification) ; il se veut accessible à tous et peut de ce fait contenir des approximations.
Vérification d'authenticité des paquets
Pour cette partie, je citerai le Cahier de l'administrateur Debian et plus précisément cette page http://debian-handbook.info/browse/fr-FR/stable/sect.package-authentication.html
Debian offre un moyen de s'assurer que le paquet installé provient bien de son mainteneur et qu'il n'a subi aucune modification par un tiers : il existe un mécanisme de scellement des paquets.
Cette signature n'est pas directe : le fichier signé est un fichier Release placé sur les miroirs Debian et qui donne la liste des différents fichiers Packages (y compris sous leurs formes compressées Packages.gz et Packages.bz2 et les versions incrémentales), accompagnés de leurs sommes de contrôle MD5, SHA1 et SHA256 (pour vérifier que leur contenu n'a pas été altéré). Ces fichiers Packages renferment à leur tour une liste de paquets Debian et leurs sommes de contrôle, afin de garantir que leur contenu n'a pas lui non plus été altéré.
La gestion des clés de confiance se fait grâce au programme apt-key, fourni par le paquet apt. Ce programme maintient à jour un trousseau de clés publiques GnuPG, qui sont utilisées pour vérifier les signatures des fichiers Release.gpg obtenus depuis les miroirs Debian. Il est possible de l'utiliser pour ajouter manuellement des clés supplémentaires (si l'on souhaite ajouter des miroirs autres que les miroirs officiels) ; mais dans le cas le plus courant, on n'a besoin que des clés officielles Debian, qui sont automatiquement maintenues à jour par le paquet debian-archive-keyring (qui installe les trousseaux de clés dans /etc/apt/trusted.gpg.d).
On voit donc ici que GPG est utilisé pour valider la signature des différents paquets. Quand on ajoute un nouveau dépôt (de backport par exemple), c'est pour celà qu'il faut également télécharger la clef publique du dépôt, car elle est utilisée pour valider et vérifier l'intégrité des paquets .deb qui sont téléchargés.
Si quelqu'un modifie les fichiers sans modifier la signature et la clef fournie, le fichier sera considéré comme corrompu. Ce n'est pas une sécurité ultime, mais cela apporte un peu plus de sécurité qu'un simple téléchargement sans qu'aucune vérification ne soit faite.
Debsum
debsums Vérifie les fichiers des paquets Debian installés grâce à une liste des sommes de contrôle MD5 de /var/lib/dpkg/info/*.md5sums. debsums peut générer des listes de sommes de contrôle à partir des archives deb pour les paquets n'en possédant pas.
Autre programme, debsums. Intéressant, mais comme il est précisé dans la page de man debsums est d'une utilité limitée en tant qu'outil de sécurité, à moins que le programme et tous les outils apparentés (dpkg, perl, Digest::MD5, etc.) soient lancés d'un média reconnu comme sûr (comme un cédérom de secours bootable, voir l'option —root) et que les sommes de contrôle aient étés calculées à partir des fichiers .deb (—generate=all) présents sur ce média ou certifiées en utilisant l'option —md5sums."
C'est un peu le serpent qui se mort la queue : il faut lancer une version déjà vérifié de debsums et des outils Debian associés pour pouvoir valider les autres paquets déjà installés... Or les outils Debian sont eux-même installés par des paquets... Le plus simple est lors de l'installation, d'avoir validé/vérifié l'intégrité du support d'installation (iso, dvdrom...) et ensuite, on utilisera Debsum pour les paquets nouvellement installés (par installation à la demande ou mise à jour).