1 puntos por GN⁺ 2023-10-30 | 1 comentarios | Compartir por WhatsApp
  • ImageMagick anunció que su certificado de firma de código existente vencerá el 28 de octubre de 2023 y que ya no podrá recibir el certificado que hasta ahora patrocinaba LeaderSSL
  • Desde junio de 2023, el CA/B Forum exige que las claves privadas de firma de código OV se almacenen en un dispositivo certificado FIPS 140-2 Level 2 o Common Criteria Level EAL4+, lo que impide exportar la clave privada para usarla en GitHub Actions
  • El alcance del impacto no se limita a los instaladores .exe, sino que afecta a todos los binarios que se firmaban con el certificado de firma de código
  • En la discusión se mencionaron como alternativas el certificado de Digicert de 629 dólares al año, SignPath, Azure Key Vault con AzureSignTool, Azure Code Signing y la autofirma; algunas tienen restricciones como integración con GitHub Actions o requisitos de AppVeyor
  • El 6 de noviembre de 2023, ImageMagick decidió usar Azure Code Signing, lo que le permitió volver a firmar los binarios

Vencimiento del certificado y problema de interrupción de firmas

  • El mantenedor de ImageMagick anunció que el certificado de firma de código que usan actualmente vence el 28 de octubre de 2023
  • Durante varios años, LeaderSSL patrocinó el certificado de firma de código, pero ya no puede seguir haciéndolo
  • Desde junio de 2023, cambiaron los requisitos del CA/B Forum, y las claves privadas de firma de código OV deben almacenarse en uno de los siguientes dispositivos
    • Dispositivo certificado FIPS 140-2 Level 2
    • Dispositivo certificado Common Criteria Level EAL4+
  • Debido a este requisito, ImageMagick ya no puede seguir usando el método existente de exportar el certificado de firma de código y la clave privada para usarlos en GitHub Actions

Alternativas necesarias y costos

  • El mantenedor presentó dos opciones para el nuevo método
    • Usar un agente propio de GitHub con un token de hardware
    • Usar una solución de firma basada en la nube integrada con GitHub
  • La opción preferida es una solución en la nube integrada con GitHub
  • En ese momento, el mantenedor dijo que Digicert parecía ser la única opción, y señaló que un certificado de firma de código de Digicert cuesta 629 dólares por un año, sin incluir impuestos
  • Pidió que, si una organización necesita instaladores firmados, patrocine un certificado de firma de código

Alcance del impacto

  • Un participante preguntó si el impacto solo aplicaba a los instaladores .exe, o si también dejarían de firmarse todos los binarios Win32, como magick.exe dentro del zip portable
  • El mantenedor respondió que se ven afectados todos los binarios que se firmaban con el certificado de firma de código

Alternativas discutidas

  • SignPath

    • Un participante sugirió SignPath, y el mantenedor respondió que no conocía la empresa, pero que podría ser una opción
    • Otro participante compartió que había usado SignPath durante más de dos años en proyectos OSS y que siempre respondieron bien a sus preguntas
    • Ese participante añadió que, según entendía, debido al método de verificación de procedencia de SignPath, para compilar binarios o instaladores firmados se necesita AppVeyor, y el instalador debe estar en formato .MSI
    • Un participante de SignPath explicó que el certificado gratuito tiene algunas restricciones
      • El certificado gratuito emitido a “SignPath Foundation” exige compilaciones transparentes y verificables, lo que en ese momento significaba AppVeyor
      • Indicó que el conector para GitHub Actions estaría disponible pronto
      • Los formatos estándar como MSI, MSIX y AppX tienen ventajas, pero también pueden procesar otros instaladores
      • Como ImageMagick tiene una LLC registrada, puede recibir un certificado a nombre de ImageMagick sin restricciones, y propuso que SignPath podría patrocinar el primer año
  • Azure Key Vault y AzureSignTool

    • Un participante compartió que coloca un certificado de firma de código EV emitido por GlobalSign en Azure Key Vault y firma archivos desde GitHub Actions con AzureSignTool
    • El mantenedor respondió que este método parecía una opción más barata, y dijo que el día anterior también le habían recomendado dotnet/sign, que usa AzureSignTool
    • Otro participante compartió un artículo sobre cómo firmar instaladores de Windows con un certificado EV usando la combinación de GlobalSign y Azure Key Vault
    • Un participante dijo que Azure Key Vault lo soporta y que, incluso firmando compilaciones varias veces al día, el costo es de apenas unos centavos
    • Más adelante, otro participante añadió que, tras el vencimiento del certificado en enero de 2024, tuvo el mismo problema: el nuevo certificado debía emitirse en un dispositivo y no se podía mover a Azure Key Vault
  • Azure Code Signing

    • Un participante dijo que había migrado a Azure Code Signing y que intentaría contactar a Microsoft y a ese equipo
    • El mantenedor respondió que había enviado un correo directamente a AzureCodeSigningTAP
    • Un participante que se identificó como ingeniero de Azure Code Signing dijo que soportan GitHub Actions e indicó que lo contactaran si era necesario
  • Autofirma

    • Un participante preguntó si habían considerado firmar los binarios ellos mismos y hacer que los usuarios instalaran el certificado público
    • El mantenedor respondió que todavía no lo habían considerado y que estaban revisando las opciones propuestas en la discusión

Decisión final

  • El 6 de noviembre de 2023, el mantenedor agradeció las distintas opciones propuestas y anunció que decidieron usar Azure Code Signing
  • Con esta decisión, ImageMagick pudo volver a firmar sus binarios
  • Indicó que el proceso de configuración fue documentado en un artículo de un repositorio separado: ImageMagick now uses Azure Code Signing

1 comentarios

 
GN⁺ 2023-10-30
Comentarios de Hacker News
  • Hice gratis un reproductor de video de código abierto para coaches de eSports, y como sigo recibiendo quejas de que hay que saltarse advertencias en la primera instalación, entiendo el dolor
    Puedo pagar el costo del certificado, pero no quiero además poner dinero en un proyecto que ya distribuyo gratis invirtiendo mi tiempo
    Estaría bueno que existiera un servicio tipo Let's Encrypt para software de código abierto, pero desde la perspectiva de Microsoft o Apple probablemente iría contra sus intereses clave, porque podría sacar a la gente del jardín amurallado de la app store
    Llevo casi 25 años haciendo software, y es bastante amargo ver cómo se reduce la propiedad sobre mi propia computadora en nombre de la “seguridad”
    https://www.vodon.gg/

    • Incluso en los foros de Let's Encrypt hubo solicitudes así desde el inicio del proyecto
      La respuesta habitual es que los certificados de firma de código buscan una prueba legal de identidad para poder castigar fuera de línea a quien distribuya malware, o permitir políticas que solo instalen software de una lista específica de editores
      En cambio, los certificados HTTPS de validación de dominio buscan probar el control sobre un nombre DNS, lo que puede verificarse por medios técnicos automatizados y no tiene por qué estar ligado a una identidad fuera de línea
      Un certificado de Let's Encrypt confirma que cierta clave parece estar controlada por quien controla cierto nombre DNS, mientras que un certificado de firma de código intenta confirmar incluso que parece estar controlado por un representante de una entidad legal específica existente en cierta jurisdicción, por lo que el costo de verificarlo de forma útil es mucho mayor
      Algún día los gobiernos podrían ofrecer una forma de automatizar eso, pero lo que prueban ambos certificados y cómo se verifican es bastante distinto
      Hay una discusión relacionada, más larga, en https://news.ycombinator.com/item?id=38056024
    • Puede ser una idea ingenua, pero la solución parece bastante clara: financiar colectivamente el costo del certificado y firmar el software solo mientras siga entrando dinero
      Si a los usuarios realmente les importa tanto, deberían estar dispuestos a compartir el costo; y si no, entonces no debería ser problema que no esté firmado
    • Si no está firmado, también existe otro dolor: Chrome muestra una advertencia al descargarlo
      Parece que esa advertencia se desactiva cuando se acumulan suficientes descargas
    • Windows tiene demasiada molestia, publicidad, puñaladas por la espalda, rastreo y actualizaciones de hardware forzadas; no entiendo por qué lo usan
      Si usas Mac, te preocupas menos por estas cosas
    • Para apps de tipo utilitario, la Microsoft Store está al nivel de un chiste
  • El problema no es solo el costo
    He estado gestionando la firma con un flujo de trabajo de publicación automatizado
    https://github.com/technion/rustypwneddownloader/blob/main/....
    Con las nuevas reglas ya no puedo usar ese flujo, y me cuesta creer que mover la build a mi escritorio para usar una clave de firma en hardware y subirla de una manera ni automatizada ni transparente sea una mejora de seguridad

    • Te guste o no, para la mayoría de los proyectos sí es una mejora
      Primero, una clave privada guardada como archivo puede ser robada silenciosamente, y entonces lo único que queda es revocarla
      Esa es la razón principal del requisito de HSM; los creadores de malware llevan tiempo haciendo esto, y por varias razones la revocación es difícil y costosa
      Un HSM también puede ser robado, pero para eso alguien tendría que entrar a tu oficina o casa y llevarse cosas, así que hay muchas probabilidades de que te des cuenta
      Las credenciales para usar un HSM también pueden ser robadas, pero se pueden cambiar fácil y rápido, así que si descubres que te registraron el PIN con keylogging, después de recuperarte del incidente basta con cambiar el PIN y no hace falta revocar el certificado
      Segundo, firmar automáticamente en CI realmente puede ser riesgoso
      Cualquiera que pueda hacer push de código al sistema de CI puede conseguir que se firme código con tu nombre, y puede que ni te enteres
      Como la clave está siempre en línea, si hackean el sistema de CI se acabó; e incluso si no, CI ejecuta mucho código arbitrario sin supervisión estrecha, así que cualquiera que pueda colar código se vuelve un punto débil
      Si firmas en local, puedes mantener la clave literalmente fuera de línea hasta el momento de la publicación, y puedes aplicar autenticación de dos factores con el factor de posesión que es la clave y el factor de conocimiento que son las credenciales, lo cual es bastante seguro
      Las builds nocturnas de desarrollo, herramientas internas y binarios temporales que no deberían salir al exterior pueden autofirmarse gratis
    • Estoy exactamente en la misma situación
      Guardo un certificado OV .pfx en los secretos de GitHub Actions y lo uso de la misma manera
      Mi certificado vence en noviembre de 2024 y todavía no decido qué hacer
      Ya fue bastante difícil obtener un certificado siendo desarrollador individual y no una empresa
      Aun así, al final debería ser un tema de dinero
      Con el HSM en la nube de $629 al año que mencionan en el texto original se puede, y pagando eso puedes hacerlo funcionar en GitHub Actions con comandos como signtool o Set-AuthenticodeSignature, que son los que uso ahora: https://docs.digicert.com/en/software-trust-manager/ci-cd-in...
    • No estoy seguro con GitHub Actions, pero me pregunto si no se resolvería con un runner de CI local
      Bastaría con una pequeña PC SFF/Atom de unos 100 dólares con una clave de hardware conectada
      Lo único que cambia es que la etapa de firma se mueve de la nube a un runner local
      No tengo claro de qué lado cae eso en términos de mejora de seguridad
    • Si esto hace que la gente deje de firmar binarios por completo, ese sí sería claramente un resultado negativo
  • Resulta sorprendente que un proyecto tan importante y ampliamente usado como ImageMagick no pueda reunir ni siquiera $629 para algo tan esencial como la firma de software
    Es un ejemplo claro de cómo la industria tecnológica no logra apoyar financieramente de forma adecuada a los proyectos de código abierto de los que depende enormemente
    Aunque aportan un valor enorme, muchas veces estos proyectos no logran recuperar suficiente valor como para ser sostenibles
    Es un recordatorio duro de que hace falta un cambio profundo en la forma en que se trata y se valora la contribución al código abierto

    • Creo que el problema no son los $629 en sí, sino que se obligue a mucha gente a pagar por algo que muchos ni siquiera consideran “esencial”
      La clave es si esto es realmente un tema de seguridad, o si es un caso de impulsar un mercado donde hay que pagar para participar en nombre de la “seguridad”
    • No está claro por qué el proyecto ImageMagick tendría que pagarle dinero a Microsoft
      Incluso parecería que debería ser al revés
    • Esto puede verse como un fracaso de la industria tecnológica por no financiar al código abierto, pero yo lo veo como un fracaso por no ofrecer este sistema de seguridad sin gatekeeping económico
      $629 no es una suma menor
    • No puedo aceptar como algo normal que haya que pagar $629 para distribuir algo hecho gratuitamente
      Es algo que Microsoft creó por su cuenta dentro del ecosistema Windows
    • El software libre trata de la libertad
      No de pagar renta a Microsoft o a sus socios
  • Mi editor de texto de escritorio KeenWrite firma binarios de Windows usando Wine, rcedit-x64.exe, osslsigncode y scripts de shell
    Primero, rcedit-x64.exe agrega información de identificación al binario
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/installe...
    Luego, osslsigncode aplica el certificado
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/scripts/...
    Como dije antes, que un proyecto de código abierto con ingresos de 0 dólares tenga que pagar para distribuirse en Windows significa perder parte de la propiedad sobre mi propia computadora

    • Como referencia, con este método no se podrá renovar el certificado
      Ahora tiene que ser basado en HSM
  • He pasado por el infierno de firmar aplicaciones tanto en Windows como en macOS, y cada vez empeora más
    Primero que nada, esto da ganas de ofrecer todo como web app
    El navegador ofrece una experiencia mucho mejor en muchos sentidos, y la seguridad está mucho mejor integrada, mientras que estos sistemas operativos de hace 25 años se sienten como si les hubieran agregado la seguridad encima a última hora
    A nadie dentro de Apple le importará, pero sería bastante gracioso si esto terminara siendo una grieta que rompa el monopolio de hardware y software
    En segundo lugar, me pregunto por qué un tercero no podría ofrecer este firmado como servicio
    Técnicamente, ¿no hay un límite en la cantidad de apps que yo puedo firmar?
    Tampoco veo por qué sería un problema que, para el usuario, el certificado aparezca firmado no con mi nombre sino con el de ABC Corp, en quien confía el sistema operativo
    Supongo que en algún punto de la cadena se podría revocar, pero técnicamente parece posible, y me pregunto si en alguna parte del EULA que acepté medio dormido eso está explícitamente prohibido

    • En Pianojacq pasamos exactamente por el mismo proceso de decisión, y muchas cosas se volvieron bastante más difíciles, especialmente el trabajo con bases de datos
      Aun así, estoy realmente satisfecho con el resultado y parece que los usuarios también
      Curiosamente, hace poco alguien me recomendó que lo probara, y se sorprendió bastante al enterarse de que yo soy el autor principal
    • Me parece que esto se vuelve un tema de responsabilidad
      En este escenario, ¿se firmaría cualquier cosa sin mirar? Si es así, claramente eso no está bien
      La alternativa es un proceso largo de revisión y auditoría, pero si algo se cuela igual, el golpe sigue cayendo sobre quien firma
    • WASM y WebGPU están reduciendo la brecha de rendimiento entre el navegador y lo nativo
      Si no se trata de un driver de dispositivo, cada vez estamos más cerca del punto en que se puede recompilar para usarse del lado cliente en el navegador
  • En la empresa pasamos por el mismo problema hace poco, y solo nos enteramos del cambio de requisitos cuando no pudimos renovar el certificado con nuestro proveedor anterior
    Ahora hay sorprendentemente poca información sobre cómo hacer firma de código para Windows
    No queríamos usar un dispositivo físico, y en un equipo totalmente remoto no era algo realista
    Al final decidimos usar Azure KeyVault con Digicert
    Comodo, o sea Sectigo, no me convence
    Realmente hay muy poca información para lograr que esta combinación funcione, y hay que gastar unos $600 antes siquiera de poder probar si funciona
    Una vez que terminamos la configuración, funciona bien
    La nueva configuración para firmar a través de Azure es más segura que guardar la clave privada en el sistema de CI
    Pero nunca pensé que firmar apps de Windows fuera a ser más difícil que firmar para macOS o iOS

    • Seguramente ahora mismo hay dos vendedores de Microsoft en algún lado leyendo esto y chocando los cinco
      Misión cumplida
    • Creo que es posible que hacerlo algo difícil y caro sea parte del diseño intencional
    • Estaría bueno que escribieras una guía de cómo lo configuraste
      Como dijiste, hay poca información y creo que sería útil para mucha gente, incluyéndome
  • Me pregunto si alguien ha probado SignPath(https://signpath.org), que apareció en una de las respuestas
    En el sitio web dice: “SignPath Foundation provides reliable code signing for Open Source projects.”
    Si es un servicio legítimo, podría ser una opción útil

    • Que vim y transmission vuelvan a enlazarlo hace que parezca legítimo
      Por ahora la “fundación” está gestionada por la empresa SignPath, pero dicen que esperan que con el tiempo crezca hasta convertirse en algo independiente y gestionado por la comunidad
  • Me hace pensar qué pasó con “Developers, developers, developers!”
    Lo que parece común en las grandes empresas tecnológicas es que al principio se ven bien, pero unos años después se van corrompiendo y, si sobreviven lo suficiente, al final se convierten en entidades parasitarias
    Una empresa del tamaño de Microsoft no puede no ser capaz de crear una forma de que el mundo del software libre y de código abierto que dice apoyar tanto pueda distribuir en su plataforma sin molestias ni costos
    Esta clase de fricción en nombre de la seguridad siempre termina, casualmente, ayudando a los ingresos

    • Aun así, si no se me escapa algo, no entiendo por qué ImageMagick esperó hasta el mismo día del vencimiento para publicar esto
  • Ojalá bajaran los costos de los certificados de firma en general
    10 dólares como máximo estaría bien
    Para software especializado que usa muy poca gente, hoy no se puede justificar ese costo
    La única razón que se me ocurre para que sea tan caro es que tenga que ser una cantidad lo bastante grande como para que el dueño legítimo de una tarjeta robada se dé cuenta
    Eso en sí mismo podría contar como una especie de verificación del autor
    Si es así, entonces quizá podrían reembolsar una parte o todo después de 3 meses
    Incluso si es por verificación, casi no parece haber razón para cobrar dinero cada año por esa verificación, y al final se ve como búsqueda de rentas

    • Microsoft en cierto sentido ya bajó el costo
      Según recuerdo, la Store es un pago único de $19, no un costo recurrente o anual
      Así que este problema solo aplica cuando distribuyes fuera de la Store
      La razón de que los certificados sean caros es que los gobiernos no están digitalizados y no manejan bien la criptografía, así que hace falta mucho trabajo manual para vincular la posesión de una clave privada con la posesión de una identidad legal
      Las autoridades certificadoras tienen que buscar información de registro en sitios web de cada país, y muchas veces no hay API; también tienen que hacer llamadas telefónicas, revisar escaneos de pasaportes y cosas por el estilo
      Todo eso requiere mucha mano de obra, y por eso es caro
      Si los gobiernos operaran su propia infraestructura de clave pública y emitieran una clave privada junto con el registro de la empresa, o si los pasaportes incluyeran una clave privada para firmar documentos, podría ser mucho más barato
      Por desgracia, no ha habido avances desde hace mucho tiempo, y varios países que experimentaron con infraestructura nacional de clave pública en su mayoría la abandonaron
      Estados Unidos nunca ha intentado una infraestructura de clave pública gubernamental a gran escala fuera del Departamento de Defensa, y por eso las empresas de software de EE. UU. tampoco han sentido mucha necesidad de dar un buen soporte para smartcards
      Los sistemas operativos principales no tienen un soporte sólido y también faltan estándares
      A eso súmale la alta carga operativa que Microsoft, como consumidor de certificados, y el CA/Browser Forum exigen a las autoridades certificadoras
      Eso también cuesta dinero
      La tarifa anual existe para repartir el costo a lo largo del tiempo
      A las autoridades certificadoras les cuesta más emitir el certificado al principio de lo que cobran por 1 año, pero si asumen que el usuario lo usará varios años, pueden llegar al punto de equilibrio y obtener una pequeña ganancia
  • https://www.gnu.org/philosophy/right-to-read.en.html
    Mientras más vivo, más siento que RMS era la Casandra de la era moderna