Se a assinatura do código do Mac for violada, o que poderá falhar?

11

Quais aborrecimentos ou problemas reais podem ocorrer quando a assinatura digital de um aplicativo Mac é quebrada?

Os aplicativos em um Mac podem ser assinados digitalmente. Quando a assinatura está de alguma forma quebrada, sei que alguns aplicativos podem perceber isso. Mas não sei em que detalhes isso será apenas aborrecimento ou realmente quebrará as coisas:

  • O firewall do OS X pode não ser capaz de definir corretamente uma assinatura ad hoc, fazendo com que uma seja solicitada repetidamente "Deseja que o aplicativo '[..]' aceite conexões de rede de entrada?"

  • Os aplicativos permitidos pelo Controle dos Pais podem não ser mais executados?

  • O acesso ao chaveiro pode estar quebrado?

  • Alguns dizem que a atualização do software da Apple pode falhar. Se for verdade, pergunto-me se isso realmente depende da assinatura da assinatura de código ou se seria causado por algum hash não correspondente para todo o aplicativo ou informações de arquivos de BOM .

Mais informações de plano de fundo abaixo.


Os detalhes da assinatura do código podem ser mostrados usando:

codesign --display -vv /Applications/iTunes.app/

... que produziria algo como o seguinte (mas não alertaria sobre modificações):

[..]
CDHash=86828a2d631dbfd417600c458b740cdcd12b13e7
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
[..]

A assinatura pode ser validada usando:

codesign --verify -vv /Applications/iTunes.app/

O que renderia:

/Applications/iTunes.app/: valid on disk
/Applications/iTunes.app/: satisfies its Designated Requirement

... ou (mesmo quando simplesmente colocar algum arquivo extra na pasta ./Contents/Resources de um aplicativo):

/Applications/iTunes.app/: a sealed resource is missing or invalid

... ou (talvez pior que a mensagem acima):

/Applications/iTunes.app/: code or signature modified

A assinatura de código volta ao OS 9 ou anterior, mas a implementação atual foi introduzida no 10.5 Leopard. Ars Technica escreve :

A assinatura de código vincula uma identidade criptograficamente verificável a uma coleção de códigos e garante que qualquer modificação nesse código seja detectada. Não há garantias sobre as partes envolvidas. Por exemplo, se você baixar um aplicativo assinado pela Acme Inc., não poderá provar nada a respeito, exceto que ele veio da mesma entidade que afirma ser a Acme Inc. na última vez em que baixou algo de seu site.

Este exemplo, na verdade, destaca a aplicação mais útil da tecnologia da perspectiva do consumidor. Ao atualizar um aplicativo para Mac OS X hoje [na 10.4 Tiger, AvB], o usuário geralmente é solicitado a verificar novamente se esse aplicativo tem permissão para acessar o Keychain para recuperar nomes de usuário e senhas. Esse parece ser um bom recurso de segurança, mas tudo o que realmente faz é treinar os usuários do Mac a clicarem cegamente em "Sempre permitir" sempre que aparecer. E realmente, o que o usuário comum fará, execute o executável através de um desmontador e verifique manualmente se o código é seguro?

Um aplicativo assinado, por outro lado, pode provar matematicamente que é realmente uma nova versão do mesmo aplicativo do mesmo fornecedor em que você confiava anteriormente. O resultado é o fim das caixas de diálogo solicitando que você confirme uma escolha cuja segurança você não tem uma maneira razoável de verificar.

Para o firewall no 10.5 Leopard, a Apple explica :

Quando você adiciona um aplicativo a esta lista, o Mac OS X assina digitalmente o aplicativo (se ainda não tiver sido assinado). Se o aplicativo for modificado posteriormente, você será solicitado a permitir ou negar as conexões de rede recebidas. A maioria dos aplicativos não se modifica, e esse é um recurso de segurança que notifica você sobre a alteração.

[..]

Todos os aplicativos que não estão na lista assinados digitalmente por uma Autoridade de Certificação confiável pelo sistema (para fins de assinatura de código) podem receber conexões de entrada. Todo aplicativo Apple no Leopard foi assinado pela Apple e tem permissão para receber conexões de entrada. Se você deseja negar um aplicativo assinado digitalmente, primeiro adicione-o à lista e depois negue-o explicitamente.

No 10.6 Snow Leopard, este último fica mais explícito (e pode ser desativado) como "Permitir automaticamente que o software assinado receba conexões de entrada. Permite que o software assinado por uma autoridade de certificação válida forneça serviços acessados ​​a partir da rede".

Firewall do Mac OS X 10.6: permite automaticamente que software assinado receba conexões de entrada

(Na 10.6, as opções 10.5.1 "Permitir todas as conexões de entrada", "Permitir apenas serviços essenciais" e "Definir acesso a serviços e aplicativos específicos" foram reformuladas para uma opção para "Bloquear todas as conexões de entrada" ou uma lista de aplicativos e opções permitidos "Permitir automaticamente que software assinado receba conexões de entrada" e "Ativar modo furtivo". Antes da atualização 10.5.1 , "Permitir apenas serviços essenciais" era na verdade chamado "Bloquear todas as conexões de entrada".)

Para aplicativos (Apple) que de alguma forma têm sua assinatura original quebrada, essa assinatura ad hoc pode, de alguma forma, não persistir e é conhecida por ter causado problemas ao configd, mDNSResponder e racoon.

Arjan
fonte
Eu acho que a resposta do Tentacle diz tudo (e não importa o quanto eu tente: a quebra de assinaturas nem me mostrou um aviso para o Keychain Access ainda). Ainda assim, gostaria de saber se alguém encontrou problemas. Esperança a questão não é muito tempo para ler ... ;-)
Arjan
etiqueta de certificado adicionada
quack quixote
Nice: alguém re-assinou o Safari 4 beta (com as suas abas no topo) para torná-lo compatível com o Keychain: ver os comentários de "petersconsult" no macosxhints.com/article.php?story=20090925131057394
Arjan

Respostas:

1

Um exemplo de onde a assinatura de código 'quebrará' um aplicativo:

  • O Keychain Access.app não permitirá que você exiba senhas se detectar que foi adulterado.

Fonte: Apple Mailing List e Jaharmi's Irreality

Chealion
fonte
Claro, agora que você mencionou, esse é o aplicativo que eu deveria ter usado nos meus primeiros testes! :-)
Arjan
3

O que posso dizer é o Candybar, o aplicativo de personalização de ícones usado por muitas pessoas, quebra a assinatura digital de pelo menos o Finder e o Dock (e provavelmente alguns outros aplicativos principais do sistema), pois altera os arquivos de recursos e, até agora, nada foi relatado como um problema por causa disso. Assim, uma amostragem in-the-wild usando componentes principais do sistema operacional diria - não muito!

EDIT: aqui está o resultado da verificação da minha assinatura de código para o meu Dock no Snow Leopard:

⚛$ codesign --verify --verbose /System/Library/CoreServices/Dock.app/
/System/Library/CoreServices/Dock.app/: a sealed resource is missing or invalid
/System/Library/CoreServices/Dock.app/Contents/Resources/expose-window-selection-big.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/expose-window-selection-small.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/finder.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/frontline.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_large.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_medium.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/indicator_small.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-l.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-m.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-sm.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/scurve-xl.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/trashempty.png: resource modified
/System/Library/CoreServices/Dock.app/Contents/Resources/trashfull.png: resource modified
O Tentáculo
fonte
Aha, eu vou investigar isso um pouco! Alguns ícones alterados manualmente não quebraram a assinatura de código para outros aplicativos. Os próprios criadores escreveram em 2008: Quanto à alteração manual dos ícones de aplicativos, você é mais que bem-vindo! Como um aviso: se a Apple ativar a assinatura de código embutida em uma futura atualização secundária do Mac OS X, seus aplicativos simplesmente não serão mais iniciados. É isso que estamos tentando evitar com segurança, desativando esse recurso até que tenhamos uma noção da Apple de seus planos. - macupdate.com/info.php/id/8948?rord=mod
Arjan
Eu adicionei o resultado após mão-modificar minha doca no Snow Leopard ...
The Tentacle
Ah, idiota. Até agora, a única coisa que eu testei foi o ícone do programa (colando um novo ícone no Finder Get Info), e não qualquer ícone usado pelo próprio programa. Ok, assinatura de código quebrada, com certeza. O comentário do desenvolvedor da Candybar ainda é um pouco assustador para mim, mas a Apple colocaria muitas pessoas em problemas ao mudar repentinamente os efeitos (não) atuais.
Arjan
Bem, o teste é modificar recursos em um aplicativo voltado para o rede e ver se quebrar a assinatura interrompe a passagem automática do firewall de aplicação ...
The Tentacle
(Hmmm, o desenvolvedor do CandyBar removeu o comentário de 10 de janeiro de 2008 do MacUpdate. O cache do Google ainda o mostra, mas aparentemente há uma nova versão do OS X 6.1, para que o problema tenha sido resolvido ou o CandyBar quer deixar os cães adormecidos. .? Vamos supor que há sem problemas depois)!
Arjan
0

Uma explicação um pouco detalhada da assinatura de código no Snow Leopard é fornecida na revisão do Snow Leopard da ars technica . Até onde eu sei, quebrar a assinatura de código não quebrará nada. No entanto, isso fará com que os aplicativos não sejam confiáveis, o que significa ter que verificar mais ações.

Peter Wagenet
fonte
Na verdade, é a revisão 10.5 Leopard. Uma boa citação da revisão 10.6: "E não vamos esquecer as tecnologias" Mac OS X "que aprendemos mais tarde foram desenvolvidas para o iPhone e foram anunciadas para o Mac primeiro (porque o iPhone ainda era um segredo), como animação principal e assinatura de código ". - arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars
Arjan
0

Eu estava reparando minhas permissões de disco no outro dia (no Disk Utility) e recebi este aviso:

Warning: SUID file "System/.../ARDAgent" has been modified and will not be repaired.

Então, há algo que vai acontecer. Não sei o quanto isso é significativo.

wfaulk
fonte
Interessante, especialmente porque a Apple lista isso em "Mac OS X 10.5: Mensagens de permissões de disco de reparo do Utilitário de Disco que você pode ignorar com segurança" em support.apple.com/kb/TS1448 Nenhuma palavra da Apple sobre como isso foi alterado e por que não ' não importa ... De codesign --verifyfato, mostra uma assinatura quebrada?
Arjan #
0

A implementação atual da assinatura de código é desdentada e provavelmente foi lançada às pressas para o benefício dos desenvolvedores do iPhone. Esperançosamente, isso se tornará obrigatório em algum momento no futuro e, esperançosamente, também se tornará muito mais fácil e barato nesse período.

Hasaan Chop
fonte