Instalador do ImageMagick para Windows deixará de ser assinado
(github.com/ImageMagick)- 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
.exeou se todos os binários Win32, como omagick.exedo 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
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/
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
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
Parece que esse aviso desaparece quando se acumula um número suficiente de downloads
Usando Mac, essas preocupações diminuem
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
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
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...
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
É 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
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”
A meu ver, não deveria ser o contrário?
US$ 629 não é pouco dinheiro
Isso é algo que a Microsoft criou para si no ecossistema Windows
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
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
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
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
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
Missão cumprida
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
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
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 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