Verificar la integridad de ficheros con GPG y apt-secure
- Javi Huete
- Seguridad
- January 14, 2025
Í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