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.
Como as chaves são arquitetadas para que qualquer usuário administrativo possa desbloquear a chave do sistema?
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?
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.
fonte
Respostas:
O chaveiro do sistema é armazenado
/Library/Keychains/System.keychain
e 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 usandoA 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)
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
kcproxy
daemon privilegiado pode ser usado para acessar o material/var/db/SystemKey
, desbloquear o chaveiro do sistema e retornar as informações solicitadas.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á.
Se o backup contivesse cópias de
/Library/Keychains/System.keychain
e, em/var/db/SystemKey
seguida, eu as copiasse em seus respectivos locais em um novo sistema OS X e usariasystemkeychain
para desbloquear o anterior e despejar o banco de dados de chaves usandosecurity dump-keychain
.fonte
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.
fonte
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.
fonte
Eu não tenho conhecimentos específicos de Keychain *, mas essa é uma prática bastante padronizada.
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/var
algum lugar. Portanto, mesmo sem/Users
alguém que anteriormente tivesse acesso, seria capaz de desbloquear o sistema.* É possível que o Keychain funcione de maneira diferente.
fonte