Como a chave do sistema é protegida no OS X?

22

Estou procurando algo como este white paper de segurança para iOS, exceto para o OS X ou, melhor ainda, algum tipo de relatório de auditoria de segurança de um especialista independente. Depois de ler a documentação como o Guia de programação de serviços de chaveiro, fico ainda mais confuso sobre o que é vulnerável a um ataque adversário a um backup não criptografado de um sistema OS X.

Na última vez que verifiquei, o chaveiro de login do usuário no OS X era tão seguro quanto a senha. Lembro-me de um problema que encolheu o segredo real da chave para algo como 111 bits (memória nebulosa, sinta-se à vontade para me corrigir) devido a algum problema de como a senha é convertida em chave, mas isso foi há muito tempo e espero que tenha sido consertado.

Por outro lado, me disseram que a chave do sistema é inerentemente menos segura porque qualquer administrador pode acessá-la e um invasor tem muitas opções para se tornar um administrador, além de adivinhar a senha de um único usuário.

Em particular, estou preocupado com o armazenamento de senhas usadas em scripts automatizados na Chaveiro do Sistema, pois os arquivos do sistema são copiados e armazenados fora do local sem criptografia adicional. Os documentos e outros dados do usuário são criptografados antes de serem retirados do local, mas tenho uma suspeita persistente de que há um caminho que estou ignorando que recupera essas chaves depois que o System Keychain é comprometido (devido aos nossos procedimentos, não necessariamente a falhas criptográficas) . Então, eu quero ter um entendimento completo de como a Chaveiro do Sistema é simultaneamente protegida e acessível a qualquer administrador.

  1. Como as chaves são arquitetadas para que qualquer usuário administrativo possa desbloquear a chave do sistema?

  2. Existem restrições criptográficas que limitam o que um usuário administrativo pode fazer com as informações no chaveiro do sistema de alguma forma?

  3. Dado um backup de sistema não criptografado sem /Users , como você obteria acesso às chaves na Chave do Sistema?

Estou interessado no OS X 10.5 Leopard e em versões posteriores.

Old Pro
fonte
Não tenho uma resposta, mas uma anedota: como usuário padrão sem privilégios de administrador, consegui extrair senhas do chaveiro do sistema com relativa facilidade. Não me lembro dos passos exatos, mas certamente foi possível. Em uma nota lateral, isso pode ser melhor no security.stackexchange.com ?
Alexwlchan
@ Alex, eu tentei Security.SE primeiro, mas não tenho respostas lá.
Old Pro
1
Por que não usar um chaveiro separado para o que você está fazendo? Existe uma boa razão para o seu script precisar acessar o chaveiro do sistema?
Jay Thompson
@eyemyth, sim, os scripts precisam ser executados pelo sistema para que eles possam acessar todos os arquivos no disco, independentemente das permissões do usuário.
Old Pro

Respostas:

11

O chaveiro do sistema é armazenado /Library/Keychains/System.keychaine a chave para desbloqueá-lo /var/db/SystemKey(suas permissões de arquivo padrão são legíveis apenas pela raiz). A localização desses arquivos é referenciada no script do sistema de verificação de segurança (da fonte security_systemkeychain ). É ainda possível testar o bloqueio / desbloqueio automático das chaves do sistema usando

systemkeychain -vt

A estrutura de segurança de chaves permite que programas não privilegiados façam solicitações de informações, desde que estejam na ACL armazenada na entrada de chaves. Obviamente, se um usuário tiver root, em um sistema, ele poderá acessar diretamente o arquivo que armazena o chaveiro do sistema e a chave para desbloqueá-lo, portanto, eles não precisam fazer solicitações por meio da estrutura de segurança e não estão sujeitos às ACLs armazenadas no chaveiro em si.

(Na verdade, eu não respondi às perguntas originais, então vamos tentar outra vez)

Como as chaves são arquitetadas para que qualquer usuário administrativo possa desbloquear a chave do sistema?

A estrutura de chaves do libsecurity permite que processos regulares interajam com as chaves do sistema de maneira autenticada usando a estrutura de comunicação entre processos XPC da Apple (IPC).

O programa A envia uma solicitação para acessar as informações de chave do sistema usando o IPC. É verificado que o usuário solicitante já está no grupo de volantes e também sabe a senha de um usuário no grupo de volantes. Depois de confirmada a autorização, o kcproxydaemon privilegiado pode ser usado para acessar o material /var/db/SystemKey, desbloquear o chaveiro do sistema e retornar as informações solicitadas.

Existem restrições criptográficas que limitam o que um usuário administrativo pode fazer com as informações no chaveiro do sistema de alguma forma?

Não - um usuário administrativo tem permissão para acessar / alterar qualquer coisa no chaveiro do sistema. Mesmo que não pudessem, eles poderiam copiar os arquivos subjacentes para outra máquina na qual eles têm controle completo e apenas desbloquear / acessar lá.

Dado um backup do sistema não criptografado sem / Usuários, como você obteria acesso às chaves na Chaveiro do sistema?

Se o backup contivesse cópias de /Library/Keychains/System.keychaine, em /var/db/SystemKeyseguida, eu as copiasse em seus respectivos locais em um novo sistema OS X e usaria systemkeychainpara desbloquear o anterior e despejar o banco de dados de chaves usando security dump-keychain.

Anon
fonte
1
Existe um utilitário chamado dumpkeychain da GuidanceSoftware / EnCase, que permite o despejo direto de um chaveiro do sistema (com o SystemKey) no Windows (pode ser mais fácil do que configurar uma nova instalação do OS X para despejá-lo).
drfrogsplat
1
@Anon, como posso usar as informações acima para acessar / desbloquear / despejar um System.keychain a partir de um backup do Time Machine de outro computador? Ou seja, eu tenho o System.keychain e SystemKey armazenados em um disco externo, então acho que devo especificar os caminhos para os dois arquivos, respectivamente, para evitar que ele use os arquivos no local padrão.
db
Esta postagem está relacionada (como usar o SystemKey para descriptografar o System.keychain de um sistema antigo). apple.stackexchange.com/questions/307189/… Estou curioso para saber se existe uma maneira com o Keychain Access ou o systemkeychain cli para desbloquear um System.keychain recuperado (ou seja, de um disco rígido com falha antigo) com o SystemKey correspondente nessa mesma instalação. Meu objetivo é desbloquear e migrar logins para o novo chaveiro do sistema na nova instalação.
mattpr
5

Chaveiro do sistema

O chaveiro do sistema possui alguns recursos exclusivos. Estes são documentados pela página de manual systemkeychain . As menções da senha mestra provavelmente serão o seu foco. O código-fonte específico das chaves do sistema é pequeno e disponível.

O chaveiro do sistema,, /System/Library/Keychains/System.keychainé um chaveiro especial para a Apple e os daemons usarem. Você geralmente deve evitar usá-lo para scripts no nível do usuário.

Revisão de código: chaveiro

A Apple publicou o código fonte da estrutura de chaves e segurança para o Mac OS X 10.5; você pode revisar este código para descobrir como ele funciona.

Abordagem alternativa: chaveiro separado

Você pode criar um chaveiro separado para armazenar as credenciais do seu script. Recomendamos essa prática para nossos clientes. Você pode usar a segurança da ferramenta de linha de comando para acessar, extrair e gerenciar seus chaveiros sem recorrer a uma interface gráfica.

Considere armazenar as senhas dos seus scripts automatizados em um chaveiro separado - e exclua esse chaveiro do backup externo.

Aprecio que remover o chaveiro do seu backup não é o ideal, mas abordaria suas preocupações. Ao restaurar o Mac, você precisará recuperar o Keychain de uma fonte diferente; pode ser uma fonte ou canal lateral mais confiável.

Você sempre pode armazenar a senha da chave em separado na chave do sistema. Você pode desbloquear o chaveiro separado de um script. Se o backup for atacado, você exporá a senha apenas ao Keychain separado e não ao próprio Keychain, pois esse arquivo não está com o backup externo.

Graham Miln
fonte
Obrigado, mas é muito difícil para mim descobrir a partir de todo esse código como a Chave do Sistema está protegida e o que a mantém segura. Precisamos usar o Keychain Sistema porque precisamos dos scripts para ser executado automaticamente em segundo plano com privilégios de root, independentemente de quem está logado.
Old Pro
1
Eu recomendo perguntar na lista de discussão do Apple CDSA ( lists.apple.com/mailman/listinfo/apple-cdsa ) ou usar um incidente de suporte técnico da Apple. Somente por esses meios você pode garantir que encontrará os engenheiros da Apple apropriados.
Graham Miln
A execução de scripts em segundo plano como root é o trabalho do launchd. O que exatamente você está tentando fazer?
Jay Thompson
1
Erro de digitação menor em "/System/Library/Keychains/System.keychain" (você esqueceu "Library"). Na verdade, você pode obter uma lista dos locais das chaves no Acesso às Chaves, escolhendo "Editar> Lista de Chaves"
nome de usuário
1
@OldPro Dadas as suas preocupações de segurança, por que não usar a criptografia de disco completo?
Graham Miln
2

A Apple publicou recentemente um documento descrevendo suas práticas de segurança ; você pode encontrar algumas respostas lá. O documento é específico para iOS, mas muitos recursos de segurança têm muito em comum com o OS X.

demianturner
fonte
Este é o caminho certo, e um bom exemplo do tipo de documentação que eu consideraria útil, mas o iOS não possui o conceito de Chaveiro do Sistema, por isso não responde à minha pergunta.
Old Pro
Estou feliz em aceitar sua generosidade se isso faz com que você na direção certa ;-)
demianturner
0

Eu não tenho conhecimentos específicos de Keychain *, mas essa é uma prática bastante padronizada.

  1. Você deseja proteger o arquivo de texto sem formatação "foo". Foo pode ser de tamanho arbitrário.
  2. Crie uma chave simétrica para criptografar foo.
  3. Criptografe a chave simétrica com uma chave propagada de uma senha.

Feito isso, você pode alterar a "senha" digitando a senha atual, descriptografando a chave simétrica e criptografando-a com a nova senha. Isso evita longos processos de descriptografia / criptografia no caso de "foo" ser muito grande.

Então, como isso funciona para vários usuários que precisam acessar o texto sem formatação de foo? Muito fácil, na verdade, você simplesmente cria uma cópia criptografada da chave simétrica uma vez para cada usuário. Em outras palavras, execute a etapa três para cada usuário.

Na prática, tudo isso é abstraído da vista e o usuário final precisa apenas lidar com sua própria senha.

Com relação à parte 3 de suas perguntas, as chaves dos usuários não são armazenadas em suas casas. Eles provavelmente seriam armazenados em /private/varalgum lugar. Portanto, mesmo sem /Usersalguém que anteriormente tivesse acesso, seria capaz de desbloquear o sistema.


* É possível que o Keychain funcione de maneira diferente.

bahamat
fonte
O que é diferente no conjunto de chaves do sistema é que o sistema pode acessar o que está no conjunto de chaves, independentemente de quem está conectado. Por exemplo, o Time Machine pode acessar o conjunto de chaves do sistema para montar um compartilhamento de arquivos remoto, mesmo que o único usuário registrado não seja um usuário administrativo e, portanto, não pode acessar as chaves do sistema. Então, algo mais está acontecendo, e eu gostaria de saber exatamente o que é isso.
Old Pro
Novamente, só posso supor, mas na OMI não é tão diferente assim. O próprio sistema obviamente pode chegar à chave, isso é garantido. Eu diria que existe uma chave do sistema tratada de maneira semelhante às chaves do usuário. Mas agora estamos no centro de sua pergunta ... o que fornece o primeiro acesso?
bahamat