Depredación de certificados de firma de código SHA1 en Windows

23

EDITAR (7/7/2016) - ver la adición al final de la publicación

He estado siguiendo atentamente los problemas con respecto a Microsoft desaprobando el uso de los certificados de firma de código SHA1 para los ejecutables de Windows ( enlace ).

Ya estamos en 2016, y como tendremos que firmar y liberar el código en breve, estoy tratando de verificar que, de hecho, sin actualizar nuestro certificado de firma de código a uno SHA256, tendremos problemas. Sin embargo, parece que no puedo demostrar ningún problema esperado.

He firmado algunos ejecutables (hoy, en 2016) con el certificado SHA1 y he configurado AppLocker para ejecutar solo ejecutables firmados (lo he verificado; no puedo ejecutar ejecutables sin firma). Sin embargo, todavía puedo ejecutar mis nuevos ejecutables con la firma SHA1 y, además, la descarga de estos archivos desde un servidor web en IE no me presenta ninguna 'advertencia' (como esperaba): el análisis de seguridad muestra que es bueno con los archivos!

Estoy ejecutando las pruebas en Windows 7.

¿Qué problemas reales debería esperar experimentar?

(en caso de que se esté preguntando por qué no nos limitamos a actualizar a SHA256 de todos modos, hay varias razones: una es burocrática, pero la otra es el hecho de que también firmamos scripts VBS que actualmente no admiten la firma dual) .

EDITAR (7/7/2016) Bueno, parece que Microsoft finalmente ha publicado una actualización para IE y Edge que le advierte si descarga un ejecutable que está firmado solo con un certificado SHA-1. Básicamente, con IE 11.0.30 o posterior, si descarga un ejecutable firmado con un certificado SHA-1 (pero no SHA-256) DESPUÉS DEL 1/1/2016, verá uno de las siguientes advertencias:

Supongo que Microsoft finalmente estará recibiendo las advertencias en preparación para el corte del 01/01/2017. Es importante tener en cuenta que, por el momento, aparte de estas advertencias, no hay otros cambios: los archivos aún se ejecutan sin problemas y, por supuesto, descargarlos en otros navegadores no causa problemas.

    
pregunta Kevin 03.01.2016 - 15:41
fuente

9 respuestas

11

Ahora he encontrado un ejemplo de una descarga real que se firmó con un certificado SHA-1 después del 1/1/2016. Descargué KeePass 2.31 usando Edge en Windows 10.

Edge me dice que "La firma de este archivo está dañada o no es válida".

Sihagoclicconelbotónderechoyselecciono"Ejecutar de todos modos", o hago doble clic en el archivo en el Explorador de Windows, SmartScreen lo bloquea:

AlmarcarlacasilladeverificaciónyalhacerclicenEjecutardetodosmodos,elarchivoseejecutanormalmente.LaadvertenciadeUACluegomuestraelnombredeleditorcomolohaceconunejecutabledebidamentefirmado.

Alhacerclicen"Ejecutar de todos modos" cuando SmartScreen bloquea el archivo, se elimina la "Marca de la web" del archivo. Al hacer doble clic en el archivo por segunda vez en el Explorador de Windows, ya no se bloquea el archivo.

El cuadro de diálogo Detalles de la firma digital en el Explorador de Windows también indica que la firma es correcta. Lo hace incluso cuando el archivo aún tiene la "marca de la web" (es decir, antes de usar el botón Ejecutar de todos modos en el filtro SmartScreen):

Elarchivoenrealidadtienefirmasduales.ElprimerousaSHA-1paralafirmayelsegundousaSHA-256paralafirma.Perocríticamente,ambossehicieronutilizandouncertificadoSHA-1.EsoesloqueWindows7ymástardeencuentranfallasenlosarchivosdescargados.Además,ambasfirmastienenlamarcadetiempoconSHA-1.Windows10tendráunproblemaconesoparalosarchivosdescargadosapartirdel1/1/2017.

ParecequeelcuadrodediálogoDetallesdefirmasdigitalesnotieneencuentasiunarchivotienela"marca de la web". Dice "esta firma digital está bien" para ambas firmas en este archivo. Para probar realmente si sus archivos están firmados correctamente, debe descargarlos de su sitio web como lo harían sus clientes.

Probando la misma descarga en una instantánea de la máquina virtual del Windows 10 original que no se ha actualizado desde agosto y otra instantánea de la versión 1511 que no se ha actualizado desde noviembre no produce advertencias. Si luego hago que la VM 1511 busque e instale actualizaciones hasta que diga que está actualizada, recibo las advertencias que se muestran arriba. Noté en mi respuesta anterior que la eliminación de SHA-1 se elimina a través de la Actualización de Windows. Así que parece que esta es una actualización muy reciente, tal vez una actualización post-1/1/16. Asegúrese de que su PC tenga las últimas actualizaciones de seguridad antes de probar su descarga.

    
respondido por el Jan Goyvaerts 15.01.2016 - 06:22
fuente
8

Esto es más que una entrada extendida de comentarios / hallazgos. No es una respuesta completa en sí misma.

Yo tampoco lo entiendo. Es bastante confuso. Pero no me siento tan mal por no entender eso, porque Eric Lawrence también está confundido por eso. Solía ser un desarrollador de Internet Explorer, pero ahora trabaja en Google Chrome. Y él sabe cómo sortear los certificados. (Entonces, si él no lo entiende, entonces me inclino a decir que realmente es confuso). (Y también está en StackExchange .)

  1. Vea sus comentarios aquí:

    enlace (Archivado aquí .)

    También es digno de mención: esta gema aquí:

      

    Eric Lawrence
      La KB que se vincula indica que no hay planes para desaprobar las firmas Authenticode basadas en MD5 (el hash en el código, no el certificado). Eso parece ... irresponsable.

    Miedo. Lamentablemente no hay una respuesta de Microsoft a ese comentario.

  2. Y ha dejado otro comentario en el sitio de TechNet Wiki: enlace ( Archivado aquí .)

      

    EricLaw [ex-MSFT] 4 de noviembre de 2015, 9:23 a.m.
      Este texto es bastante confuso: “Hashes de archivos de firma de código: Microsoft no requiere que las CA se muevan para usar SHA-2. Windows tampoco aplicará políticas en estos certificados. Si los ataques de imagen previa en SHA1 se vuelven factibles, volveremos a evaluar cómo el sistema confía en estos certificados ".

         

    El hash del archivo Authenticode no es generado por una CA, y la firma no es un "certificado".

    Y otra vez: No hay respuesta de Microsoft a eso. Y este no es el único comentario que expresa confusión.

  3. ¿Jugar con el reloj del sistema? Si desea reproducir el error, puede probar los pasos listas de "Graham Bloice" en la publicación TechNet :

      

    En las pruebas, hemos encontrado que los archivos de cabina firmados por SHA1 utilizados para instalar un componente ActiveX a través de IE no se instalan inmediatamente después de la fecha de desaprobación (al ajustar la fecha en el registro) a pesar de que la marca de tiempo de la firma de la cabina es anterior a ( movido) fecha de desaprobación. Win 10 no falla, pero Win 7, Win 8.1, Server 2K12 y Server 2K12 R2 fallan en nuestras pruebas.

         

    Esto parece estar en desacuerdo con el aviso de desaprobación que dice que las firmas con marca de tiempo antes de la fecha de desaprobación serán válidas hasta 2020.

    Nuevamente: no hay respuesta de Microsoft a eso.

Lectura adicional

respondido por el StackzOfZtuff 04.01.2016 - 13:07
fuente
5

Hay 3 resúmenes en una firma de Authenticode con marca de tiempo sobre la que tienes control.

  1. El resumen de su certificado. Un certificado recientemente comprado utilizará SHA-256. La mayoría de las CA cambiaron a la emisión de certificados SHA-256 durante 2014. Solo proporcionan certificados SHA-1 a pedido especial. Una forma rápida de verificar su certificado es hacer clic con el botón derecho en un archivo .exe con el que haya iniciado sesión en Explorer y luego ir a la pestaña Firmas digitales, botón Detalles, botón Ver certificado, pestaña Detalles. La firma que tiene el algoritmo debe ser "sha256". Windows XP SP3 es la versión más antigua de Windows que admite certificados SHA-256. La política que se indica en el documento que vinculó es "Windows [7 y posteriores] confía en SHA1 (si tiene la fecha y hora anterior al 1/1/2016) y SHA-2 (cualquier marca de tiempo) para la marca de los archivos web".

  2. El resumen de la firma en sí. Puede verificar las firmas existentes en la pestaña Firmas digitales. Windows 7 y posteriores muestran el algoritmo de digestión directamente. En cualquier versión de Windows puede hacer clic en el botón Detalles, pestaña Avanzado para verificar el algoritmo de resumen. Cuando se utiliza signtool.exe, se puede establecer en SHA-256 con el argumento /fd sha256 . Windows 7 es la versión más antigua de Windows que admite firmas SHA-256. Para esto, la política indicada es "No hay cambios hasta que sea posible la preimagen SHA-1". Incluso se aceptan firmas MD5 .

  3. El resumen de la marca de tiempo. Cuando use signtool.exe, debe usar el argumento /tr con la URL de un servicio de marca de tiempo RFC 3161 y /td sha256 para solicitar SHA-256. Windows 7 es la versión más antigua de Windows que admite las marcas de tiempo SHA-256. Para esto, la política establecida es "En Win 10 y superior, bloqueada el 1/1/2017 para los archivos de Mark of Web".

El resumen es que si obtiene un certificado SHA-256, Windows XP SP3 a través de Windows 10 aceptará actualmente una única firma SHA-1 que use ese certificado con una marca de tiempo SHA-1. necesita firmas dobles si desea admitir Windows 10, así como Vista o XP SP3.

La política de depreciación se aplica a Windows 7 y posteriores a través de la actualización de Windows. Si las actualizaciones están deshabilitadas, la depreciación no ocurrirá. Lo que debería tener en cuenta es que Windows 7 considera que una firma con un certificado SHA-1 no es válida, lo que podría generar advertencias más graves al ejecutar un archivo descargado de Internet.

    
respondido por el Jan Goyvaerts 12.01.2016 - 07:41
fuente
4

También una información adicional de mi parte, ya que encontré un problema con todo esto hoy, que me costó la mitad del día.

Obtuve el mensaje "La firma de este archivo está dañada o no es válida". de Edge también. Windows me dijo que mi archivo (que ya estaba firmado con SHA256), no es seguro y tampoco me mostró la información de certificado correcta (solo el "Editor desconocido").

Estamos utilizando los certificados de firma de código de StartSSL y cambiamos a un nuevo certificado SHA256 en diciembre. Lo que no notamos fue que signtool incluye también todos los certificados intermedios (!) Durante el proceso de firma. Resulta que: Utiliza la versión local en caché de los certificados intermedios, que estaban desactualizados (aún usando SHA1), a pesar de que hay nuevos disponibles. Después de eliminar & Actualizando este certificado, todo funcionó como se esperaba.

Por lo tanto, asegúrese de verificar si todos los certificados de la cadena también son SHA256, o todo se romperá, ¡ya que los intermedios se incluyen durante el proceso de firma!

    
respondido por el mnkypete 08.02.2016 - 14:26
fuente
2

Acabo de pasar por el mismo problema con nuestras aplicaciones de Windows. Así que aquí hay información para ti:

A) Como señalaste, SHA-1 hash se está eliminando debido a que es resistencia a la colisión inadecuada . O, en otras palabras, no produce firmas de código que sean suficientemente fuertes para los estándares criptográficos de hoy.

B) Para firmar el código de su archivo ejecutable, deberá tener un certificado de firma de código que admita cualquiera de SHA-2 algoritmos de hashing, como SHA-256 . (En mi caso, CA , Comodo, actualizó nuestro certificado de firma de código existente de forma gratuita. Deberá consultar a su CA aunque.)

C) Descargue e instale el último SDK de Windows . Luego, puede acceder a signtool.exe en cualquiera de estas dos ubicaciones:

For 32-bit:
%SystemDrive%\Program Files (x86)\Windows Kits\bin\x86

For 64-bit:
%SystemDrive%\Program Files (x86)\Windows Kits\bin\x64

D) La siguiente tabla muestra qué firmas de código de soporte de SHA-1 y SHA-256 :

+---------------------+-------------------------------+------------------------------+
|     Windows OS      |             SHA-1             |           SHA-256            |
+---------------------+-------------------------------+------------------------------+
| XP SP3, Server 2003 | Yes                           | No (need KB968730, KB938397) |
| Vista, Server 2008  | Yes                           | No (need KB2763674)          |
| 7, Server 2008 R2   | No (if signed after 1/1/2016) | Yes (with latest updates)    |
| 8.1, Server 2012 R2 | No (if signed after 1/1/2016) | Yes                          |
| 10, Server 2016     | No (if signed after 1/1/2016) | Yes                          |
+---------------------+-------------------------------+------------------------------+

Una nota importante para los usuarios de Vista es que necesitan instalar KB2763674 para poder abrir archivos firmado con la firma SHA-256 .

E) Por lo tanto, la solución para abordar las discrepancias en la tabla anterior es firmar dos veces los ejecutables. Que yo sepa, los siguientes archivos admiten la firma dual:

.cpl, .com, .dll, .exe, .scr

Entonces, para codificar, firme un archivo llamado signtool dos veces como tal:

Primer SHA-1 (como alternativa para sistemas operativos más antiguos):

SignTool.exe sign /f "path_to_exported_cert.pfx" /p "pfx_file_password" /d "Your file description if you need it" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /v "path_to_file_to_sign.exe"

luego SHA-256 en el mismo archivo para agregarlo (parámetro /as ):

SignTool.exe sign /f "path_to_exported_cert.pfx" /fd sha256 /p "pfx_file_password" /d "Your file description if you need it" /tr "http://timestamp.geotrust.com/tsa" /td sha256 /as /v "path_to_file_to_sign.exe"

Tenga en cuenta que los parámetros para firmar con SHA-256 son diferentes, ¡especialmente para el servidor de marca de tiempo! El uso del servidor de marca de tiempo para SHA-1 produce resultados extraños en Windows 10.

F) Para cualquier otro archivo, incluidos: .msi , .msp , .js , .vbs , .jse , .vbe , .ps1 , .ps1xm , .psm1 , .ps1xml , .wsf deberá elegir uno u otro, ya que no son compatibles con la firma dual. Desafortunadamente, tendremos que firmarlos específicamente para el sistema operativo en el que están destinados a implementarse.

    
respondido por el c00000fd 28.01.2016 - 05:31
fuente
2

He usado osslsigncode (una herramienta de Linux) para firmar de forma dual el instalador exe con SHA1 y SHA256. Para usuarios de Windows, he leído sobre un horquilla de Windows de osslsigncode. Mi actual certificado de firma de comodo 2016 viene con un resumen dual SHA1 y SHA256, por lo que solo necesito un único certificado para ambas firmas.

Primero debe ir la firma compatible con XP:

osslsigncode sign -pkcs12 comodo-signing-2016.p12 -askpass \
-n "My-program installer" \
-i http://www.my-site.com/my-program \
-t http://timestamp.comodoca.com \
-h sha1 \
my-installer.exe my-installer-signed.exe

Luego el compatible con Win7 / 8/10:

osslsigncode sign -pkcs12 comodo-signing-2016.p12 -askpass \
-n "My-program installer" \
-i http://www.my-site.com/my-program \
-ts http://timestamp.comodoca.com \
-nest -h sha256 \
my-installer-signed.exe my-installer-dual-signed.exe

Tenga en cuenta que uso la marca de tiempo Authenticode ( -t ) para la primera firma y la marca de tiempo RFC 3161 ( -ts ) para la segunda. No estoy seguro de lo útil que es esto, pero Authenticode es más antiguo y probablemente más compatible con versiones anteriores. El resumen de la marca de tiempo autenticodo es sha1 de forma predeterminada y el RFC 3161 se establece automáticamente en sha256 como se mencionó aquí .

También tenga en cuenta que el segundo comando incluye la marca -nest para agregar la nueva firma en lugar de reemplazar la primera.

    
respondido por el David 27.07.2016 - 21:36
fuente
2

Parece que Microsoft ha cambiado significativamente su política de desaprobación de SHA-1 para la firma de código, a partir del 19 de octubre de 2016, a las 11:15 a.m. Antes de ese tiempo, dijeron que SHA-1 iba a ser desaprobado para la firma de código ( 11:14 ); después de ese tiempo, dicen que la firma del código SHA-1 no se ve afectada por ahora, sin una fecha de cierre especificada para el futuro ( 11:16 ).

Aquí están los detalles al día de hoy, 25 de febrero de 2017 ( enlace a la versión actual ):

TLS Server-Authentication Certificates
   Today:      No lock icon Microsoft Edge and Internet Explorer 11
   Mid-2017:   Invalid Certificate
Code Signing Certificates
   Today:      Unaffected
   Mid-2017:   Unaffected
Timestamping Certificates
   Today:      Unaffected
   Mid-2017:   Unaffected

A largo plazo, por supuesto, SHA-1 es un riesgo; Sin embargo, esta pregunta es acerca de la desaprobación de los certificados de firma de código en Windows, y el cambio de Microsoft en octubre de 2016 es significativo en comparación con los planes lanzados anteriormente. Actualmente dicen "A largo plazo, Microsoft tiene la intención de desconfiar de SHA-1 en Windows en todos los contextos", y el plan para eso está en "Fase 3", "después de 2017".

    
respondido por el stevek_mcc 20.12.2016 - 19:07
fuente
1

Aunque su certificado no devolverá signos de advertencia en plataformas y navegadores más antiguos, verá signos de advertencia en los sistemas actualizados. El mejor ejemplo para ofrecerle es Windows 10. Windows 10 mostrará una advertencia para CUALQUIER certificado de firma de código que NO ES un certificado EV - SHA-256.

Si la plataforma se ha actualizado a las nuevas recomendaciones de las directrices del foro CA / B, su certificado no eliminará las señales de advertencia.

Si desea hablar con alguien más detalladamente, hágamelo saber y lo pondré en contacto con alguien de GlobalSign que puede emitirle un nuevo certificado o simplemente hablarle más detalladamente sobre la compatibilidad. De lo contrario, este artículo puede ayudar: enlace

    
respondido por el GlobalSign 09.02.2016 - 10:41
fuente
0

No como una respuesta completa, pero para obtener información general adicional, incluidas las líneas de ejemplo de signtool para firma dual (compatibilidad con XP / Vista)

Me las arreglé para cambiar muy bien a doble firma en mi cadena de compilación de acuerdo con esta muy buena blog post de ksoftware.net , nuestro proveedor de certificados.

Escribí un pequeño archivo de proceso por lotes para firmar dos veces un archivo con los dos certificados y llamarlo desde mi script de implementación:

set SIGNTOOL_CMD=F:\FuH\dev\Docklight1\Installer\signtool\signtool.exe
set DL_WWW=http://docklight.de
set DL_PROJ_NAME=Docklight
set TIMESERVER_SHA1=http://timestamp.comodoca.com
set TIMESERVER_SHA256=http://timestamp.comodoca.com/?td=sha256

"%SIGNTOOL_CMD%" sign /v /sha1 D35C... /t %TIMESERVER_SHA1% /du %DL_WWW% /d "%DL_PROJ_NAME%" "%1"
"%SIGNTOOL_CMD%" sign /v /sha1 7FD7... /as /fd sha256 /tr %TIMESERVER_SHA256% /td sha256 /du %DL_WWW% /d "%DL_PROJ_NAME%" "%1"

En lugar de descargar el SDK de Windows completo para una herramienta de prueba actualizada, simplemente agarré el enlace de descarga de la herramienta desde el blog KSoftware

He probado esto en Windows 10 x64 / Edge y se ve bien.

    
respondido por el Oliver Heggelbacher 28.01.2016 - 11:15
fuente

Lea otras preguntas en las etiquetas