Mencionas CCleaner, por lo que es relevante vincular a ¿Una firma digital hubiera evitado el compromiso de CCleaner? La respuesta corta es que no habría evitado este compromiso en particular .
Esto nos da nuestro primer problema con el suministro de hashes: ¿En quién confiamos para firmar la compilación y qué confiamos en que verifiquen? ¿La firma simplemente representa el servidor de compilación oficial, que podría estar comprometido? ¿O representa una auditoría de seguridad real realizada por alguna parte de confianza previa?
Sin embargo, hay otros ataques que tal hash evitaría, por ejemplo, un espejo comprometido o fraudulento que ofrece una compilación alterada. En este caso, sería suficiente para la página principal del proyecto publicar un hash, que podría verificarse contra la descarga ofrecida por cualquier duplicado.
Sin embargo, esto nos lleva al segundo problema, que es uno de los problemas difíciles de la criptografía: distribución de claves (o, en este caso, distribución de firmas).
Para un hash sin firmar, simplemente confía en la página que muestra que el hash no ha sido manipulado. Un hash firmado a primera vista parece mejor, pero aún tiene que descargar la clave pública de algún lugar, por lo que aún confía en la fuente de esa clave. Si un atacante puede dirigir a un usuario a una página de descarga falsa, puede agregar un enlace a una clave pública de su elección, y el usuario obtendrá una falsa sensación de seguridad al verificar el hash de una descarga comprometida.
La alternativa es tener una autoridad central en la que confíe para múltiples aplicaciones diferentes: este es el principio detrás de la firma de controladores de Windows, los administradores de paquetes de Linux y las tiendas de aplicaciones de teléfonos (y también detrás de los certificados utilizados para los sitios web de HTTPS). Ahora tiene un nuevo problema: ¿por qué confía en esas autoridades centrales? ¿Están auditando directamente el código fuente y construyen los procesos de los archivos que está descargando? ¿O están delegando el fideicomiso, a través de un certificado firmado a la inversa, en base a la seguridad de la parte que produce el software? Además, aún necesita adquirir la clave pública raíz de alguna manera, probablemente se incluyó en algunos medios de instalación confiables cuando instaló el sistema operativo / tienda de aplicaciones / administrador de paquetes.
Al final, la publicación de un hash será más útil para proyectos grandes, donde:
- es probable que el mismo usuario descargue y verifique varias versiones, o diferentes aplicaciones, con la misma clave pública;
- y es probable que la fuente de la clave pública sea diferente del servidor que ofrece la descarga (un servidor diferente o algún medio físico)
Pero incluso entonces, no puede arreglar todas las vulnerabilidades, como demostró CCleaner; y existe el peligro de dar a los usuarios una falsa sensación de seguridad.