O que acontece com o código assinado quando os certificados raiz são comprometidos?

3

Meu Windows Server acabou de solicitar uma atualização de certificado relacionada ao comprometimento de um certificado raiz há algum tempo. Lembro-me de que o Firefox, o Safari, o Flash, a pilha de coisas do .Net e o Internet Explorer pediram essa atualização antes.

Eu sei que o código é assinado com um certificado e, portanto, minha pergunta:

  • são aqueles certificados relacionados de alguma forma,

  • se eles podem comprometer o fato de um certificado raiz ser um risco para o código assinado (como permitir que algum código maligno seja executado, ou talvez permitir que alguém adultere o código assinado?)

  • e, finalmente, no caso do iOS, isso significaria que todos os aplicativos precisam ser recompilados com novos certificados ou não afetam mal o código previamente assinado?

por Kheldar 07.09.2011 / 14:36

2 respostas

4

Primeiro, a raiz de assinatura de código da Apple não está relacionada à raiz comprometida (DigiNotar), então, para sua primeira pergunta, não há impacto direto na assinatura de código do iOS a partir disso. Esse certificado está no armazenamento raiz do iOS, por isso pode impactar os aplicativos, incluindo o Safari ou qualquer pessoa que use o sistema de carregamento de URL interno ou o keystone raiz.

Se a chave de assinatura do código Apple (ou um dos principais intermediários) for comprometida, isso pode ser catastrófico para o sistema de assinatura de código em teoria. Na prática, o invasor também precisaria se disfarçar de servidor de atualização da Apple, o que é um problema diferente. Mas se você colocar essas duas coisas juntas, sim, elas poderiam empurrar o que quisessem em teoria.

Existem apenas duas maneiras em geral para lidar com um comprometimento de chave no X.509: espere o certificado expirar ou revogá-lo. A maioria dos certificados de raiz tem intervalos de validade razoavelmente longos (geralmente décadas). Certificados de nível inferior têm intervalos mais curtos (meses ou anos).

Revogar um certificado significa que o software (iOS, neste caso) precisa verificar uma lista de revogação e rejeitar certificados nela. Isso quebraria todos os softwares disponíveis até que todos fossem resignados e reinstalados.

Como a Apple controla a loja de aplicativos e o iOS, há algumas outras opções à sua disposição. Eles podem corrigir o iOS para fazer uma verificação única de cada parte do software em relação aos hashes na loja de aplicativos e, em seguida, aplicar uma nova assinatura. Quando você controla todas as partes do sistema, é mais fácil determinar a confiança.

O fato de os certificados raiz estarem comprometidos não significa, por si só, que códigos maliciosos seriam executados de repente nos dispositivos de todos (ou em dispositivos de qualquer pessoa). Comprometer um certificado é apenas uma parte de um ataque mais complicado. Mas seria uma peça útil.

Tenha em mente que Mac e Windows e Unix etc existiram por muitos anos sem assinatura de código. A maioria dos sistemas operacionais modernos tem algum tipo de assinatura de código, mas ela não é usada muito extensivamente (geralmente apenas na instalação do pacote). Quando falha, os usuários geralmente a ignoram. O esquema do iOS é um grande passo à frente, mas você pode continuar sem isso.

A assinatura de código não garante que o código seja benigno. Existem várias coisas maliciosas que eu poderia fazer que seria quase impossível para a Apple detectar antes de aprovar o aplicativo. E só porque eles têm um cartão de crédito em arquivo não significa que a Apple realmente sabe quem enviou o aplicativo.

Portanto, a assinatura de código é uma medida de segurança importante, mas não é a única medida de segurança. Como você sugere, as chaves são muito importantes, mas são apenas uma parte do sistema.

    
por 07.09.2011 / 15:36
2

Se você tiver instalado o código assinado com base no fato de ter sido assinado por um certificado X.509 assinado por uma raiz falsa, pode ter sido um código falso. E isso pode ter feito alguma coisa desagradável ou outra em seu sistema.

No entanto, não há implicação para o código assinado por certificados que não foram assinados pela raiz comprometida.

    
por 07.09.2011 / 14:43