¿Mejorará la seguridad si coloco las firmas SHA1 y SHA256 dentro del binario codificado en Windows?

4

Mi aplicación apunta a plataformas que comienzan con Windows 7 de 32 bits. Muchos de ellos no están actualizados (es decir, pueden faltar muchas actualizaciones recomendadas de Microsoft).

Dadas las restricciones, debo usar la firma SHA1 dentro de los binarios de mi espacio de usuario y kernel. Sin embargo, ¿hará que la vida del atacante sea más difícil si también inserto SHA256?

Me preocupa, porque estoy tratando de imaginar lo que puede hacer un atacante. Como atacante, mi objetivo sería sustituir el binario sin romper, haciendo que Windows lo note. No estoy seguro de cómo Windows verifica las firmas, pero la idea es eliminar la firma SHA256 y hacer que mi binario de reemplazo tenga la misma firma SHA1. Luego, cuando Windows verifique los binarios de la aplicación, comparará sus firmas SHA256 para todos menos mi binario, que solo tiene la firma SHA1.

Nota: mi certificado público solo tiene una firma SHA1 incrustada por el emisor.

    
pregunta Kentzo 22.07.2015 - 18:02
fuente

3 respuestas

4

Técnicamente, usar SHA-256 no hará las cosas más difíciles para el atacante. A menos que usted sea el atacante.

Las preocupaciones sobre SHA-1 son sobre colisiones . Se cree que SHA-1 es un tanto débil a este respecto (generar una colisión SHA-1 es todavía muy costoso, al punto de que no se ha hecho ni una sola vez, pero tenemos fuertes razones teóricas para pensar que el hallazgo de colisión los métodos que han sido diseñados para atacar SHA-1 tendrían éxito en encontrar una colisión con un esfuerzo sustancialmente menor que el 2 80 esperado de una función hash "perfecta").

Cuando firma una parte de los datos, comienza por hacer un hash y el valor de hash se usa en el resto de los algoritmos de verificación y generación de firmas. Para aprovechar una colisión, uno debe imaginar que hay dos versiones distintas del mismo software, la segunda es maliciosa y está haciendo cosas malvadas en el sistema cliente, pero ambas dan el mismo valor cuando se las utiliza con SHA-1. Si se pueden crear dos de estos archivos, entonces una firma (con SHA-1) calculada en el primer archivo también se aplicaría al segundo, y viceversa. Esto ayuda al atacante solo en un contexto en el que el atacante elige el archivo que ha iniciado sesión en primer lugar.

En su caso, el archivo original (el normal y honesto) es el que usted mismo produce. Si una colisión ayuda al atacante, usted es el atacante.

Si no eres el atacante, entonces lo que debe hacer un atacante es encontrar una segunda preimagen : el atacante ve el archivo honesto, no malicioso (que has firmado) e intenta Hacer un archivo modificado que hash al mismo valor. Esto no es en absoluto el mismo problema. Una colisión consiste en encontrar m y m ' de manera que m m' pero h ( m ) = h ( m '). Una segunda preimagen es lo mismo excepto que m no es elegido por el atacante. Esto es mucho más difícil e (hasta donde sabemos) no es factible con SHA-1. No hay una debilidad conocida, ni siquiera teórica, de SHA-1 que le permita a un atacante hacer eso.

En consecuencia, cambiar de SHA-1 a SHA-256 no mejoraría las cosas. Si el atacante puede crear un archivo malintencionado con una firma suya, esto significa que el atacante puede hacer que usted firme el código de su elección (por ejemplo, el atacante comprometió sus propios equipos de desarrollo), y en estas condiciones, SHA-256 sí lo hace. no bloquee al atacante más de SHA-1.

Sin embargo, los sistemas cliente pueden tener otra opinión sobre el tema. Desde el punto de vista de un cliente, el proceso de firma puede ir así:

  • Alguien envía al firmante (usted) algunos datos para firmar.
  • Usted audita los datos que se van a firmar y los firma si lo considera bueno y apropiado. Por ejemplo, para el software, mire el código fuente y haga la compilación usted mismo.

En este modelo, el atacante puede crear un código que se vea bien pero, cuando se compila, produce un binario que colisiona con un código malicioso que el atacante también diseñó. Bajo este modelo específico, las colisiones son un problema, porque el atacante está en posición de elegir las versiones honestas y maliciosas del software.

Lo más probable es que no siga este modelo: cuando firma un software, es un software que usted mismo desarrolló, no algo enviado por posibles atacantes. Tú lo sabes. Pero Microsoft no está tan seguro y podría decidir que sería demasiado arriesgado utilizar una función hash que podría permitir que ocurran colisiones.

Por lo tanto, es probable que aún desee cambiar a SHA-256, no porque SHA-1 sea demasiado vulnerable (este no es el caso en su situación), sino porque Microsoft puede decidir eliminar la compatibilidad con SHA-1.

La política de Microsoft se explica aquí , con el extracto particular:

  

El código firmado con los certificados SHA-1 con marca de tiempo antes del 1 de enero de 2016 se aceptará hasta el 14 de enero de 2020 (cuando finalice el soporte extendido de Server 2008), a más tardar. Esta fecha se puede mover antes si Microsoft decide que SHA1 es vulnerable al ataque previo a la imagen.

Tenga en cuenta la oración final: el problema se trata realmente de pre-imágenes, no de colisiones.

También querrá comprar un certificado de firma de código tal que la firma en el certificado , y en todos los certificados de CA en la cadena, use SHA-256, porque parece que Windows se está convirtiendo Cada vez más alérgico a SHA-1. Por los mismos motivos anteriores, este anatema en SHA-1 puede calificarse de exagerado, pero Microsoft no tiene otra opción: Google tiene la intención de matar SHA-1, y debe seguir Microsoft; de lo contrario, serán burlados y burlados.

    
respondido por el Tom Leek 22.07.2015 - 20:25
fuente
1

Mi breve respuesta: cambiar de SHA1 a SHA256 para las firmas de archivos apenas aumentará su seguridad, la única buena razón sería mantenerse al día con las mejores prácticas.

La preocupación con SHA-1 y el potencial de colisiones es que puede tener lugar un descifrado potencial. Esto tiene que ver con descifrar hashes después del hecho: por ejemplo, las contraseñas en una base de datos se pueden buscar a través de una tabla de arco iris, y este proceso se puede acelerar a través de colisiones.

Sin embargo, estás usando SHA para un propósito diferente: verificar la integridad del archivo. Debido al efecto de avalancha en los algoritmos de hashing, a pesar de la edad de SHA1, aún sería casi imposible para un atacante insertar un código malicioso o Otras modificaciones manteniendo la firma anterior.

Por lo tanto, para las sesiones SSL que se pueden almacenar y descifrar después del hecho, pasar a SHA256 tiene sentido. Sin embargo, para la validación de la integridad de los archivos, es probable que haya poca diferencia Podría tener sentido proporcionar hash SHA1 y SHA256 solo por el bien de las mejores prácticas, pero no conozco ningún método de ataque previsible que pueda explotar SHA1 para permitir que uno modifique archivos y mantenga su firma anterior.

    
respondido por el Herringbone Cat 22.07.2015 - 20:02
fuente
0

Si le preocupa la seguridad de SHA-1, debe saber que el uso de SHA-1 en Internet ha sido en desuso desde 2011 y solo para darte una pista:

  Los

sitios HTTPS cuyas cadenas de certificados usan SHA-1 y son válidas el 1 de enero de 2017 ya no parecerán ser completamente confiables en la interfaz de usuario de Chrome.

Pero no hay un ataque de colisión completo exitoso conocido hasta la fecha en que hizo esta pregunta en SHA-1, pero puede que no sea el caso durante los próximos años en relación con la creciente velocidad de cálculo de las computadoras, mientras que SHA 256 es totalmente resistente a la colisión. Entonces, sí, su opción es mucho mejor que confiar solo en SHA-1.

    
respondido por el user45139 22.07.2015 - 19:07
fuente

Lea otras preguntas en las etiquetas