¿Una firma digital hubiera evitado el compromiso de CCleaner?

60

Leí hoy acerca de CCleaner hack y cómo se inyectó el código en su binario. La gente pudo descargar e instalar el software comprometido antes de que la empresa se diera cuenta.

¿No es esto para lo que son las firmas digitales? ¿Firmar el binario o proporcionar una suma de comprobación habría hecho algo para evitarlo?

Para agregar a la confusión, en este artículo de noticias de Reuters un investigador afirma que sí tenía una firma digital:

  

"No hay nada que un usuario pueda haber notado", dijo Williams, señalando   que el software de optimización tenía un certificado digital adecuado, que   significa que otras computadoras confían automáticamente en el programa.

¿Cómo podría el sistema operativo aceptar instalar un software con una firma no válida? ¿O puede un atacante cambiar el binario y falsificar la firma?

    
pregunta Steven M. Vascellaro 18.09.2017 - 15:25
fuente

2 respuestas

95

En función de los detalles incompletos que se han publicado hasta ahora, el código malicioso se insertó antes de la compilación y firma (por ejemplo, en la máquina de un desarrollador o en un servidor de compilación). Como resultado, la versión comprometida fue firmada por exactamente los mismos procesos que la versión no comprometida. La falla se introdujo antes de la firma del binario.

De forma similar, una suma de comprobación se habría calculado en función de los resultados de la compilación, en cuyo momento ya estaba presente el código malicioso.

Este es un punto débil en todas las arquitecturas de firmas: si el proceso antes de la firma se compromete, no hay una manera real de detectarlo. No significa que sean inútiles: si los atacantes no tuvieran acceso a los sistemas hasta después de que se hubiera aplicado la firma, la manipulación se habría detectado fácilmente, ya que la firma no habría coincidido.

    
respondido por el Matthew 18.09.2017 - 15:58
fuente
4

Ser firmado por un certificado de confianza y tener un hash / checksum público del código son cosas diferentes.

El certificado le indicará (debería) que el software es de una fuente confiable, pero eso es todo.

Un hash o suma de comprobación le permitirá verificar que el binario coincida con el hash calculado originalmente. En este caso, sin embargo, el hash se calculó mientras el código malicioso estaba presente en el código fuente, lo que representa esta protección particular a menos que, en todo caso, agregue una falsa sensación de seguridad.

Al ofrecer un hash o una suma de comprobación pública (suponiendo que el código fuente no haya sido comprometido), debe tomar medidas para que ese hash se sirva desde un dominio de terceros. Imagine una situación en la que un atacante comprometa su sitio, intercambie un binario genuino por uno malicioso y luego cambie el hash público que está mostrando en su sitio. Al menos, si se sirve de un tercero, el atacante también tendría que comprometer a ese tercero para cambiar el hash.

Recuerde, aunque este ataque en particular fue aparentemente la consecuencia de una máquina de desarrollador pirateada, por lo que ninguno de estos controles de hash / checksum o firma de código habría sido de alguna utilidad.

    
respondido por el Trickycm 18.09.2017 - 15:58
fuente

Lea otras preguntas en las etiquetas