1 pontos por GN⁺ 2023-10-30 | 1 comentários | Compartilhar no WhatsApp
  • O ImageMagick anunciou que seu certificado de assinatura de código atual expiraria em 28 de outubro de 2023 e que não poderia mais receber o certificado que vinha sendo patrocinado pela LeaderSSL
  • Desde junho de 2023, o CA/B Forum passou a exigir que chaves privadas de assinatura de código OV sejam armazenadas em dispositivos certificados como FIPS 140-2 Level 2 ou Common Criteria Level EAL4+, impedindo o método de exportar a chave privada para uso no GitHub Actions
  • O impacto não se limita aos instaladores .exe, mas se aplica a todos os binários que eram assinados com o certificado de assinatura de código
  • Na discussão, foram citadas alternativas como o certificado anual de US$ 629 da Digicert, SignPath, Azure Key Vault com AzureSignTool, Azure Code Signing e autoassinatura; algumas têm restrições, como integração com GitHub Actions ou exigência de AppVeyor
  • Em 6 de novembro de 2023, o ImageMagick decidiu usar o Azure Code Signing e, com isso, conseguiu voltar a assinar os binários

Expiração do certificado e interrupção da assinatura

  • O mantenedor do ImageMagick anunciou que o certificado de assinatura de código em uso expiraria em 28 de outubro de 2023
  • Por vários anos, a LeaderSSL patrocinou o certificado de assinatura de código, mas não poderá mais fazê-lo
  • Desde junho de 2023, os requisitos do CA/B Forum mudaram, e a chave privada de assinatura de código OV deve ser armazenada em um dos seguintes tipos de dispositivo
    • Dispositivo certificado como FIPS 140-2 Level 2
    • Dispositivo certificado como Common Criteria Level EAL4+
  • Por causa desse requisito, o ImageMagick não pode continuar usando o método anterior de exportar o certificado de assinatura de código e a chave privada para uso no GitHub Actions

Alternativas necessárias e custos

  • O mantenedor apresentou duas opções para o novo método
    • Usar um agente próprio do GitHub com um token de hardware
    • Usar uma solução de assinatura baseada em nuvem integrada ao GitHub
  • A abordagem preferida é uma solução em nuvem integrada ao GitHub
  • Na época, o mantenedor disse que a Digicert parecia ser a única opção, e informou que o certificado de assinatura de código da Digicert custava US$ 629 por um ano, sem impostos
  • Pediu que organizações que precisassem de instaladores assinados patrocinassem o certificado de assinatura de código

Escopo do impacto

  • Um participante perguntou se o impacto se aplicava apenas ao instalador .exe ou se todos os binários Win32, como o magick.exe do zip portable, também deixariam de ser assinados
  • O mantenedor respondeu que todos os binários assinados com o certificado de assinatura de código seriam afetados

Alternativas discutidas

  • SignPath

    • Um participante sugeriu o SignPath, e o mantenedor respondeu que não conhecia a empresa, mas que poderia ser uma opção
    • Outro participante compartilhou que usa o SignPath em projetos OSS há mais de dois anos e que as respostas às dúvidas sempre foram boas
    • Esse participante acrescentou que, pelo que sabia, devido ao método de verificação de procedência do SignPath, é necessário usar o AppVeyor para compilar binários ou instaladores assinados, e o instalador precisa estar no formato .MSI
    • Um participante do SignPath explicou que o certificado gratuito tem algumas restrições
      • O certificado gratuito emitido para a “SignPath Foundation” exige builds transparentes e verificáveis, o que, na época, significava usar o AppVeyor
      • O conector para GitHub Actions seria disponibilizado em breve
      • Há vantagens em formatos padrão como MSI, MSIX e AppX, mas outros instaladores também podem ser processados
      • Como o ImageMagick tem uma LLC registrada, poderia receber um certificado em nome do ImageMagick sem restrições, e o SignPath poderia patrocinar o primeiro ano
  • Azure Key Vault e AzureSignTool

    • Um participante compartilhou que coloca um certificado EV de assinatura de código emitido pela GlobalSign no Azure Key Vault e assina arquivos no GitHub Actions com o AzureSignTool
    • O mantenedor respondeu que esse método parecia uma opção mais barata e disse que também havia recebido, no dia anterior, uma recomendação do dotnet/sign, que usa o AzureSignTool
    • Outro participante compartilhou um artigo sobre assinar instaladores Windows com certificado EV usando a combinação GlobalSign e Azure Key Vault
    • Um participante disse que o Azure Key Vault oferece suporte a isso e que, mesmo assinando builds várias vezes por dia, o custo fica na casa dos centavos
    • Mais tarde, outro participante acrescentou que enfrentou o mesmo problema depois que seu certificado expirou em janeiro de 2024; o novo certificado precisava ser emitido em um dispositivo e não pôde ser transferido para o Azure Key Vault
  • Azure Code Signing

    • Um participante disse que havia migrado para o Azure Code Signing e que tentaria entrar em contato com a Microsoft e a equipe responsável
    • O mantenedor respondeu que havia enviado um e-mail diretamente para o AzureCodeSigningTAP
    • Um participante que se apresentou como engenheiro do Azure Code Signing disse que o GitHub Actions era suportado e orientou que entrassem em contato, se necessário
  • Autoassinatura

    • Um participante perguntou se eles haviam considerado assinar os binários por conta própria e fazer com que os usuários instalassem o certificado público
    • O mantenedor respondeu que ainda não havia considerado isso e que estava avaliando as opções sugeridas na discussão

Decisão final

  • Em 6 de novembro de 2023, o mantenedor agradeceu pelas várias opções sugeridas e informou que decidiu usar o Azure Code Signing
  • Com essa decisão, o ImageMagick pôde voltar a assinar seus binários
  • O processo de configuração foi documentado em um artigo em um repositório separado, ImageMagick now uses Azure Code Signing

1 comentários

 
GN⁺ 2023-10-30
Comentários do Hacker News
  • Criei de graça um player de vídeo open source para treinadores de e-sports, e continuo recebendo reclamações de que é preciso contornar um aviso na primeira instalação, então entendo a dor
    Posso pagar pelo certificado, mas, para um projeto que já distribuo gratuitamente depois de investir tempo nele, não quero também ter que pagar dinheiro
    Seria bom se existisse um serviço como o Let's Encrypt para software open source, mas, do ponto de vista da Microsoft ou da Apple, isso poderia tirar as pessoas do jardim murado das app stores, então parece contrariar seus interesses centrais
    Faço software há quase 25 anos, e é bem amargo ver minha propriedade sobre o meu computador diminuir em nome da “segurança”
    https://www.vodon.gg/

    • Nos fóruns do Let's Encrypt, pedidos assim existem continuamente desde o início do projeto
      A resposta comum é que certificados de assinatura de código têm como objetivo fornecer prova de identidade legal, para permitir punir offline quem distribuiu malware ou viabilizar políticas que só permitem instalar software de uma lista específica de publicadores
      Já certificados de validação de domínio para HTTPS buscam provar o controle sobre um nome DNS, algo que pode ser verificado por meios técnicos automatizados e não necessariamente está ligado a uma identidade offline
      Um certificado do Let's Encrypt confirma que uma determinada chave parece estar sob controle de quem controla certo nome DNS, enquanto um certificado de assinatura de código tenta confirmar também que ela parece estar sob controle de um representante de uma entidade jurídica específica existente em uma jurisdição específica, de modo que o custo de fazer uma verificação útil é muito maior
      Talvez algum dia governos ofereçam uma forma de automatizar isso, mas o que os dois certificados comprovam e o modo de verificação são bastante diferentes
      A discussão relacionada já continua de forma mais longa em https://news.ycombinator.com/item?id=38056024
    • Pode ser ingenuidade, mas a solução parece bem clara: fazer crowdsourcing do custo do certificado e assinar o software apenas enquanto o dinheiro estiver entrando
      Se os usuários realmente se importam tanto, deveriam estar dispostos a dividir o custo; caso contrário, ele não ser assinado também não deveria ser um problema
    • Se não for assinado, há outra dor: o Chrome também mostra um aviso no download
      Parece que esse aviso desaparece quando se acumula um número suficiente de downloads
    • O Windows tem tanta inconveniência, anúncios, rasteiras, rastreamento e atualizações forçadas de hardware que não sei por que as pessoas o usam
      Usando Mac, essas preocupações diminuem
    • Para apps utilitários, a Microsoft Store chega a parecer uma piada
  • O custo não é o único problema
    Eu vinha gerenciando a assinatura por meio de um workflow de releases automático
    https://github.com/technion/rustypwneddownloader/blob/main/....
    Pelas novas regras, não posso usar esse workflow, e é difícil aceitar o argumento de que mover o build para o meu desktop, usar uma chave de assinatura em hardware e fazer upload de uma forma nem automatizada nem transparente seja uma melhoria de segurança

    • Gostando ou não, para a maioria dos projetos isso é, sim, uma melhoria
      Primeiro, uma chave privada armazenada como arquivo pode ser roubada silenciosamente, e então a única saída restante é revogá-la
      Esse é o principal motivo da exigência de HSM, e criadores de malware fazem isso há algum tempo; por vários motivos, a revogação é difícil e cara
      Um HSM também pode ser roubado, mas alguém teria que invadir um escritório ou uma casa e levar o objeto, então há uma boa chance de perceber
      As credenciais de uso do HSM também podem ser roubadas, mas são fáceis e rápidas de trocar; se você descobrir que o PIN foi capturado por keylogger, depois de se recuperar da invasão basta trocar o PIN, sem precisar revogar o certificado
      Segundo, assinar automaticamente no CI pode ser perigoso na prática
      Qualquer pessoa capaz de enviar código ao sistema de CI pode obter uma assinatura de código em seu nome, e você pode nem perceber
      Como a chave está sempre online, se o sistema de CI for comprometido acabou; e, mesmo que não seja, o CI executa muito código arbitrário e não é monitorado de perto, então qualquer pessoa que consiga inserir código vira um ponto fraco
      Ao assinar localmente, você pode manter a chave literalmente offline até o momento do release e usar autenticação de dois fatores, com o fator de posse que é a chave e o fator de conhecimento que são as credenciais, o que é bastante seguro
      Builds noturnos de desenvolvimento, ferramentas internas e binários temporários que não deveriam sair podem ser autoassinados gratuitamente
    • Estou exatamente na mesma situação
      Armazeno um certificado OV .pfx nos segredos do GitHub Actions e uso da mesma forma
      Meu certificado expira em novembro de 2024, e ainda não decidi o que fazer
      Só conseguir um certificado como desenvolvedor individual, e não como empresa, já foi difícil o suficiente
      Ainda assim, no fim deveria ser uma questão de dinheiro
      Com o HSM hospedado em nuvem de US$ 629 por ano mencionado no texto original, seria possível; pagando esse custo, dá para fazê-lo funcionar no GitHub Actions com os comandos que já uso, como signtool ou Set-AuthenticodeSignature: https://docs.digicert.com/en/software-trust-manager/ci-cd-in...
    • Não tenho certeza quanto ao GitHub Actions, mas talvez isso se resolva com um executor de CI local
      Bastaria conectar a chave de hardware a um pequeno PC SFF/Atom de cerca de 100 dólares
      A única mudança seria a etapa de assinatura sair da nuvem e ir para o executor local
      Em termos de segurança, não sei bem por qual lado olhar para decidir se isso é uma melhoria ou não
    • Se, por causa disso, as pessoas simplesmente deixarem de assinar binários, isso com certeza é um resultado negativo
  • É surpreendente que um projeto tão importante e amplamente usado como o ImageMagick não consiga levantar nem mesmo US$ 629 para algo essencial como assinatura de software
    É um exemplo claro de como a indústria de tecnologia não consegue apoiar financeiramente, de forma adequada, os projetos open source dos quais depende muito
    Mesmo entregando um valor enorme, esses projetos muitas vezes não conseguem capturar valor suficiente para se manterem sustentáveis
    Serve como um lembrete duro de que precisamos de uma mudança significativa na forma como tratamos e avaliamos contribuições open source

    • Acho que o problema não são os US$ 629 em si, mas ser obrigado a gastar dinheiro em algo que muita gente nem concorda que seja “essencial”
      O ponto central é se isso é uma questão de segurança ou se é uma tentativa de empurrar um mercado em que só participa quem paga, gritando “segurança”
    • Não está claro por que o projeto ImageMagick deveria pagar dinheiro à Microsoft
      A meu ver, não deveria ser o contrário?
    • Dá para ver isso como uma falha da indústria de tecnologia em financiar o open source, mas eu vejo como uma falha de esses sistemas de segurança não serem oferecidos sem gatekeeping financeiro
      US$ 629 não é pouco dinheiro
    • Não dá para aceitar como algo normal ter que pagar US$ 629 para distribuir algo feito de graça
      Isso é algo que a Microsoft criou para si no ecossistema Windows
    • Software livre tem a ver com liberdade
      Não com pagar aluguel à Microsoft ou a seus parceiros
  • Meu editor de texto desktop KeenWrite assina binários do Windows usando Wine, rcedit-x64.exe, osslsigncode e scripts shell
    Primeiro, o rcedit-x64.exe anexa informações de identificação ao binário
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/installe...
    Depois, o osslsigncode aplica o certificado
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/scripts/...
    Como dito antes, um projeto open source com US$ 0 de receita ter que pagar para distribuir no Windows reduz minha propriedade sobre o meu computador

    • Para referência, esse método provavelmente não permitirá renovar o certificado
      Agora precisa ser baseado em HSM
  • Já passei por um inferno com assinatura de aplicativos tanto no Windows quanto no macOS, e isso está ficando cada vez pior
    Para começo de conversa, esse tipo de coisa dá vontade de oferecer tudo como web app
    O navegador oferece uma experiência muito melhor em vários aspectos, inclusive uma experiência de segurança bem integrada, enquanto sistemas operacionais de 25 anos parecem estar tentando enxertar segurança tardiamente
    Ninguém dentro da Apple deve se importar, mas seria bem engraçado se isso virasse uma rachadura que derrubasse o monopólio de hardware e software
    Em segundo lugar, fico me perguntando por que um terceiro não pode oferecer esse tipo de assinatura como serviço
    Tecnicamente, não há limite para a quantidade de apps que eu posso assinar, certo?
    Do ponto de vista do usuário, também não sei por que seria um problema o certificado estar assinado em nome da ABC Corp, confiada pelo sistema operacional, em vez de no meu nome
    Seria possível revogar algum ponto da cadeia, mas tecnicamente parece viável, e também fico curioso se isso é proibido explicitamente em algum trecho do EULA com o qual concordei meio no piloto automático

    • Passei exatamente pelo mesmo processo de decisão no Pianojacq, e muita coisa ficou bem mais difícil, especialmente operações de banco de dados
      Mesmo assim, estou muito satisfeito com o resultado, e os usuários parecem estar também
      Curiosamente, uma pessoa me recomendou recentemente que eu experimentasse o app, e ficou bem surpresa ao descobrir que eu sou o autor principal
    • Acho que isso talvez vire uma questão de responsabilidade
      Nesse cenário, a pessoa assina qualquer coisa de olhos fechados? Se for isso, claramente não é bom
      A alternativa é um processo longo de revisão e auditoria, mas, se algo passar despercebido, ainda assim o prejuízo recai sobre quem assinou
    • WASM e WebGPU estão reduzindo a lacuna de desempenho entre navegador e nativo
      Se não for driver de dispositivo, estamos nos aproximando de um ponto em que dá para recompilar para rodar no navegador do lado do cliente
  • Na empresa, passamos recentemente pelo mesmo problema, e só descobrimos a mudança de requisitos quando não conseguimos renovar o certificado com o provedor atual
    Agora há uma quantidade surpreendentemente pequena de informações sobre como fazer assinatura de código para Windows
    Eu não queria usar um dispositivo físico, e isso não é realista para uma equipe totalmente remota
    No fim, decidimos usar Azure KeyVault com a Digicert
    Não gosto da Comodo, ou seja, da Sectigo
    Há pouquíssima informação sobre como fazer essa combinação funcionar de fato, e é preciso gastar cerca de US$ 600 antes mesmo de testar se funciona
    Depois de terminar a configuração, funcionou bem
    A nova configuração de assinatura via Azure é mais segura do que armazenar a chave privada no sistema de CI
    Mas eu nunca imaginei que assinar apps para Windows seria mais difícil do que assinar para macOS ou iOS

    • Imagino dois vendedores em algum lugar da Microsoft lendo isso e batendo as mãos em comemoração
      Missão cumprida
    • Acho que talvez tornar isso um tanto difícil e caro seja um design intencional
    • Seria ótimo se você pudesse escrever um post explicando como configurou
      Como você disse, falta informação, então acho que seria útil para muita gente, incluindo eu
  • Fico curioso se alguém já usou o SignPath(https://signpath.org), mencionado em uma das respostas
    O site diz: “SignPath Foundation provides reliable code signing for Open Source projects.”
    Se for um serviço legítimo, pode ser uma opção útil

    • Pelo fato de vim e transmission estarem linkando de volta para ele, parece legítimo
      Atualmente, a “fundação” é operada pela empresa SignPath, mas eles dizem esperar que, algum dia, a fundação cresça e se torne independente e administrada pela comunidade
  • Fico me perguntando para onde foi o “Developers, developers, developers!”
    O que parece ser comum entre as grandes empresas de tecnologia é que, no começo, elas parecem boas, mas alguns anos depois a corrupção começa a se infiltrar e, se resistirem por tempo suficiente, acabam se tornando uma existência parasitária
    Uma empresa do porte da Microsoft certamente teria como criar uma forma de permitir que o mundo livre e open source, que ela diz apoiar tanto, distribuísse em sua plataforma sem incômodo nem custo
    Esse atrito em nome da segurança, por coincidência, sempre acaba ajudando a receita

    • Mesmo assim, se não estou deixando passar algo, não entendo por que o ImageMagick esperou até o dia do vencimento para publicar isso
  • Gostaria que reduzissem o custo dos certificados de assinatura de modo geral
    Algo em torno de 10 dólares no máximo já bastaria
    Para softwares especializados usados por pouquíssimas pessoas, o custo atual não se justifica
    A única razão que consigo imaginar para precisar ser tão caro é que o valor tenha de ser grande o bastante para que o legítimo dono de um cartão roubado perceba
    Isso, por si só, poderia significar uma espécie de verificação do autor
    Nesse caso, não daria para reembolsar parte ou tudo depois de 3 meses?
    Mesmo para fins de verificação, parece haver pouca necessidade de cobrar anualmente por essa verificação; no fim, parece rent seeking

    • A Microsoft, na prática, já reduziu o custo
      A Store, se me lembro bem, custa US$ 19 uma vez só e não tem cobrança recorrente ou anual
      Portanto, esse problema só se aplica à distribuição fora da Store
      O motivo de os certificados serem caros é que os governos não estão digitalizados e não lidam bem com criptografia, então é preciso muito trabalho manual para vincular a posse de uma chave privada à posse de uma identidade legal
      As autoridades certificadoras precisam procurar informações de registro em sites de cada país, muitas vezes sem API, fazer ligações telefônicas, analisar cópias digitalizadas de passaportes e assim por diante
      Tudo isso é intensivo em mão de obra e, por isso, fica caro
      Poderia ficar muito mais barato se os governos operassem sua própria infraestrutura de chave pública e emitissem uma chave privada junto com o registro de empresas, ou se os passaportes incluíssem uma chave privada para assinatura de documentos
      Infelizmente, há muito tempo não há avanço, e os poucos países que experimentaram uma infraestrutura nacional de chave pública em sua maioria desistiram
      Os EUA nunca tentaram uma infraestrutura governamental de chave pública em grande escala fora do Departamento de Defesa e, por isso, as empresas de software dos EUA também nunca sentiram muita necessidade de oferecer bom suporte a smart cards
      Os sistemas operacionais mainstream não têm suporte robusto, e também faltam padrões
      Soma-se a isso a elevada carga operacional que a consumidora de certificados Microsoft e o CA/Browser Forum impõem às autoridades certificadoras
      Isso também custa dinheiro
      A taxa anual serve para diluir o custo ao longo do tempo
      Quando uma autoridade certificadora emite o primeiro certificado, ela gasta mais do que a taxa de um ano, mas, supondo que o usuário o utilize por alguns anos, consegue atingir o ponto de equilíbrio e obter um pequeno lucro
  • https://www.gnu.org/philosophy/right-to-read.en.html
    Quanto mais vivo, mais percebo que RMS foi uma Cassandra moderna