Advanced Package Tool o también conocido como «APT», es el gestor de paquetes en algunos sistemas basados en Linux, como por ejemplo Debian o Ubuntu entre otros muchos. APT se encarga de la instalación de aplicaciones desde los repositorios, también se encarga de actualizarlos, y por supuesto, de eliminarlos fácilmente. Sin embargo, un detalle importante que no pasa desapercibido es que apt no utiliza normalmente el protocolo HTTPS para la consulta y la descarga de los paquetes. ¿Es seguro no realizar algo tan crítico como la descarga y actualización de software a través de HTTP?
Gracias al protocolo HTTPS podemos tener cifrado punto a punto, para que nadie sea capaz de «leer» lo que estamos transfiriendo. En las conexiones HTTPS también tenemos autenticación de los datos transmitidos, garantizando que un usuario malintencionado no se ha hecho pasar por el servidor real. Además, también tenemos comprobación de la integridad de los datos, para verificar que los datos no han sido dañados durante la transmisión, o «cambiados» por un usuario malintencionado durante su transmisión por Internet, por una red Wi-Fi o cableada. Podéis visitar nuestro tutorial sobre error 403 forbidden en las webs.
Con HTTP no tenemos ni cifrado punto a punto, ni tampoco autenticación de los datos transmitidos, por lo que cualquier usuario malintencionado se podría hacer pasar por el repositorio y servirnos programas con malware, pero en la vida real esto no ocurre, porque con apt sí tenemos medidas de protección para evitar problemas de seguridad al descargar paquetes vía HTTP.
Todos los paquetes van firmados, y el sistema operativo comprueba su firma
En el caso de Debian (y del resto de distribuciones con apt), todos los paquetes descargados están firmados, y el sistema operativo comprueba la firma. Por defecto, el propio sistema operativo almacena un conjunto de claves de confianza. Esta comprobación de la firma de los paquetes garantiza que tienen un origen legítimo, y que no han sido «cambiados» al vuelo por un usuario malintencionado. En el caso de que un usuario malintencionado intente «cambiar» el paquete, apt rechazará la actualización o la instalación de un paquete, debido a que la firma no se corresponderá con el conjunto de claves de confianza almacenadas. Por tanto, el propio apt nos avisará que el paquete está firmado por una clave desconocida, o que falta una firma válida en nuestro sistema para su instalación correcta.
En el hipotético caso de que usáramos HTTPS, si nos conectamos con un servidor que sirve paquetes sin firmar, lo rechazaría igualmente, aunque la comunicación esté cifrada punto a punto.
Si un usuario malintencionado nos hace un ataque de repetición, es decir, nosotros pedimos un paquete, y nos envía una versión anterior (antigua) del paquete, también tenemos una medida de seguridad. Para solucionar esto, todos los paquetes del repositorio incluyen una marca de tiempo, y apt lo comprueba para descartar paquetes marcados como obsoletos.
¿Por qué no se usa HTTPS si proporciona privacidad?
Cuando realizamos una conexión HTTPS la conexión es totalmente cifrada punto a punto, por lo tanto, tendremos privacidad. En usuario no podrá «ver» lo que estamos descargando en nuestro equipo. Una de las razones por las que no se suele utilizar HTTPS para apt, es que en el caso de actualizar software, un usuario podrá ver la resolución de DNS que lleva directamente a la IP de un repositorio, donde descargaremos únicamente paquetes y no haremos nada más. Lo más importante es que los paquetes descargados no hayan sido modificados.
Otra de las razones por las que no se suele usar HTTPS, es que actualmente hay más de 400 Autoridades de Certificación, y ha habido casos donde los cibercriminales se han hecho con el control de algunas de ellas y han creado certificados SSL ilegítimos, por lo que usar HTTPS no proporcionaría ninguna seguridad a los diferentes mirror que tenemos por todo el mundo en este hipotético caso. Otro aspecto negativo muy importante, es que tendríamos una gran complejidad en toda la red de repositorios por todo el mundo, ya que habría que crear un listado de certificados SSL válidos por cada repositorio, además de tener posibles problemas si tenemos servidores Proxy HTTP en la empresa u organización.
Cómo usar HTTPS a través de apt
APT soporta actualmente HTTPS, e incluso también el protocolo FTP para la descarga de paquetes, sin embargo, si el repositorio no soporta HTTPS, no podremos utilizarlo y dará error al realizar el «apt update». Si quieres utilizar APT con HTTPS, deberás configurar en /etc/apt/sources.list diferentes mirrors con soporte para HTTPS. Podéis ver un listado de mirrors para Ubuntu con soporte HTTPS en Reddit.