Verificar la integridad de ficheros con GPG y apt-secure

Índice

Integridad de ficheros con GPG

Para verificar las firmas de un archivo como, por ejemplo, la ISO de Debian hay que descargar todos los ficheros que publica la distribución en un mismo directorio. Esto incluye la imagen .iso del sistema operativo, los ficheros SHA256SUMS y SHA512SUMS y los ficheros SHA256SUMS.sign y SHA512SUMSsign.

❯ ll
total 632M
-rw-rw-r-- 1 fj_huete fj_huete 631M dic 16 19:34 debian-12.8.0-amd64-netinst.iso
-rw-rw-r-- 1 fj_huete fj_huete  302 dic 16 19:34 SHA256SUMS
-rw-rw-r-- 1 fj_huete fj_huete  833 dic 16 19:34 SHA256SUMS.sign
-rw-rw-r-- 1 fj_huete fj_huete  494 dic 16 19:34 SHA512SUMS
-rw-rw-r-- 1 fj_huete fj_huete  833 dic 16 19:35 SHA512SUMS.sign

Para garantizar la veracidad del contenido de la imagen iso se usan los comandos sha512sum y sha256sum con la opción -c para leer la suma del contenido de la imagen y verificarla con la que se indica en los ficheros SHA512SUM y SHA256SUM respectivamente.

❯ sha512sum -c SHA512SUMS --ignore-missing 
debian-12.8.0-amd64-netinst.iso: La suma coincide
❯ sha256sum -c SHA256SUMS --ignore-missing 
debian-12.8.0-amd64-netinst.iso: La suma coincide

Con esta verificación se comprueba que el contenido del archivo .iso es idéntico al que se ha usado para generar los ficheros de sumas que se encuentran en el directorio público de descargas de la distribución.

Ahora queda por verificar el origen de esos ficheros comprobando que la firma corresponde realmente con la del equipo de desarrollo de Debian. Para ello se usa el comando gpg. Para poder verificar la firma, tal y como se ha demostrado en la Tarea 1, es necesario que la clave pública de la entidad firmante se encuentre en el anillo de claves del equipo en el que se comprueba la veracidad de la firma.

Para obtener la clave pública, se puede buscar su ID en la firma del equipo de desarrolladores de Debian.

❯ gpg --verify SHA512SUMS.sign 
gpg: asumiendo que los datos firmados están en 'SHA512SUMS'
gpg: Firmado el sáb 09 nov 2024 17:35:02 CET
gpg:                usando RSA clave DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Imposible comprobar la firma: No hay clave pública

Para obtener la clave a partir de este identificador se puede buscar en repositorios de claves públicas. Parece más que probable que la clave pública de la distribución Debian estará almacenada en el servidor de claves de Debian y, desde él, se puede descargar al anillo de claves usando la opción --recv-keys del comando gpg.

❯ gpg --keyserver keyring.debian.org --recv-keys DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: clave DA87E80D6294BE9B: clave pública "Debian CD signing key <debian-cd@lists.debian.org>" importada
gpg: Cantidad total procesada: 1
gpg:               importadas: 1

Como curiosidad, llama la atención que el servidor keyring.debian.org no permite la búsqueda de claves.

❯ gpg --keyserver keyring.debian.org --search-keys DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: error searching keyserver: No está implementado
gpg: búsqueda del servidor de claves fallida: No está implementado

Tras importar la clave pública desde el servidor, se puede verificar la firma.

❯ gpg --verify SHA512SUMS.sign 
gpg: asumiendo que los datos firmados están en 'SHA512SUMS'
gpg: Firmado el sáb 09 nov 2024 17:35:02 CET
gpg:                usando RSA clave DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Firma correcta de "Debian CD signing key <debian-cd@lists.debian.org>" [desconocido]
gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
gpg:          No hay indicios de que la firma pertenezca al propietario.
Huellas dactilares de la clave primaria: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
❯ gpg --verify SHA256SUMS.sign 
gpg: asumiendo que los datos firmados están en 'SHA256SUMS'
gpg: Firmado el sáb 09 nov 2024 17:35:02 CET
gpg:                usando RSA clave DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Firma correcta de "Debian CD signing key <debian-cd@lists.debian.org>" [desconocido]
gpg: ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza!
gpg:          No hay indicios de que la firma pertenezca al propietario.
Huellas dactilares de la clave primaria: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B

Integridad de ficheros con apt-secure

Como se explica en su manual el software que utiliza apt-secure es apt-key. Apt-key es el programa que maneja las claves usadas por APT para confiar en sus repositorios. Este software se usa para añadir o eliminar claves, así como para listar claves en las que se confía.

Asimismo, para firmar sus paquetes, apt-secure recomienda a los mantenedores usar la herramienta gpg.

La herramienta apt-key sirve para gestionar la lista de claves en las que confía APT para autentificar paquetes. Los paquetes que se verifican con estas claves se consideran confiables.

Sin embargo, el uso de apt-key está en desuso actualmente, excepto para el uso de apt-key del en los scritps de los mantenedores para eliminar claves existentes en sus anillos de clave.

El comando apt-key list muestra una lista de claves en las que se confía junto a sus huellas.

Los ficheros con los que trabaja apt-key son:

  • /etc/apt/trusted.gpg Es el fichero en el que se almacenan las claves locales en las que se confía. Las nuevas claves se añaden también a este fichero.
  • /etc/apt/trusted.gpg.d/ Es el directorio en el que se almacenan fragmentos de ficheros para las claves en las que se confía, así como keyrings adicionales generados por otros paquetes o el administrador del sistema.
  • /etc/apt/keyrings/ En este directorio se almacenan los keyrings adicionales que se usan con la opción signed-by de la herramienta.

El fichero Release de un repositorio de Debian contiene una lista de las sumas de verificación de cada uno de los paquetes del repositorio. El archivo Release.gpg contiene la clave pública de Debian para verificar la veracidad de las firmas de verificación incluidas en el fichero Release.

Cuando se ejecuta un apt update, el sistema busca el contenido de los repositorios de la distribución y lo descarga. Antes de ejecutar ninguna otra acción, el gestor de paquetes, en este caso apt, revisa la suma de verificación de cada uno de los ficheros que conforman los paquetes de la actualización.

Para ello, verifica que el fichero Release es el fichero realmente publicado por Debian comprobando que la firma del fichero coincide con la clave pública del fichero Release.gpg. A continuación equipara la suma de verificación de cada uno de los paquetes que se van a actualizar con la suma de verificación que se indica en el fichero Release.

Así, el gestor de paquetes se asegura de que el contenido de los paquetes que se actualizan es legítimo.

Sólo tras realizar esta verificación y asegurarse de que los paquetes de la actualización son legítimos el gestor de paquetes los instala en el sistema.

Integridad de ficheros desde un repositorio de terceros

Para añadir el repositorio de VirtualBox al sistema se añade una nueva línea al fichero /etc/apt/sources.list en la que se indica el keyring en el que está almacenada la clave pública que permite verificar la legitimidad de los ficheros descargados desde este repositorio junto con el enlace al propio repositorio y la versión de la distribución del sistema.

deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian bookworm contrib

Para que el gestor de paquetes pueda descargar e instalar paquetes desde el repositorio es necesario importar al sistema la clave pública de Orcle con la que apt pueda verificar la integridad de los paquetes. Para conseguirlo, se puede usar el comando wget para descargar la clave pública y el comando gpg para almacenarla en el directorio que se ha indicado al añadir el repositorio de VirtualBox al fichero sources.list.

wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg --dearmor
comments powered by Disqus

Relacionados

Introducción a Openstack Client

OpenStack es una herramienta de infraestructura como servicio que puede gestionarse desde la línea de comandos a través de su cliente.

Leer

Conceptos básicos del gestor de paquetes apt

En este post se recoge un breve resumen sobre la información relativa a los gestores de paquetes apt y aptitude incluida en el manual de referencia de Debian

Leer

Cómo instalar qemu/kvm en Debian 12 para virtualizar equipos

Qemu es un potente virtualizador que permite el uso de máquinas virtuales en equipos que usen sistemas operativos basados en Debian y otras distribuciones GNU/Linux. Este software se complementa a la perfección con VirtManager, que ofrece una interfaz gráfica amigable para realizar todas las tareas relacionadas con la virtualización.

Leer