9.6 KiB
macOS Keychain
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.
Principais Keychains
- O User Keychain (
~/Library/Keychains/login.keycahin-db
), que é usado para armazenar credenciais específicas do usuário como senhas de aplicativos, senhas de internet, certificados gerados pelo usuário, senhas de rede e chaves públicas/privadas geradas pelo usuário. - O System Keychain (
/Library/Keychains/System.keychain
), que armazena credenciais em todo o sistema como senhas WiFi, certificados raiz do sistema, chaves privadas do sistema e senhas de aplicativos do sistema.
Acesso à Senha do Keychain
Esses arquivos, embora não tenham proteção inerente e possam ser baixados, são criptografados e exigem a senha em texto simples do usuário para serem descriptografados. Uma ferramenta como Chainbreaker pode ser usada para descriptografar.
Proteções de Entradas do Keychain
ACLs
Cada entrada no keychain é governada por Listas de Controle de Acesso (ACLs) que ditam quem pode executar várias ações na entrada do keychain, incluindo:
- ACLAuhtorizationExportClear: Permite que o detentor obtenha o texto claro do segredo.
- ACLAuhtorizationExportWrapped: Permite que o detentor obtenha o texto claro criptografado com outra senha fornecida.
- ACLAuhtorizationAny: Permite que o detentor execute qualquer ação.
As ACLs são acompanhadas por uma lista de aplicativos confiáveis que podem executar essas ações sem solicitação. Isso pode ser:
- N
il
(nenhuma autorização necessária, todos são confiáveis) - Uma lista vazia (ninguém é confiável)
- Lista de aplicativos específicos.
Além disso, a entrada pode conter a chave ACLAuthorizationPartitionID
, que é usada para identificar o teamid, apple e cdhash.
- Se o teamid for especificado, então para acessar o valor da entrada sem uma solicitação, o aplicativo usado deve ter o mesmo teamid.
- Se a apple for especificada, o aplicativo precisa ser assinado pela Apple.
- Se o cdhash for indicado, o aplicativo deve ter o cdhash específico.
Criando uma Entrada do Keychain
Quando uma nova entrada é criada usando o Keychain Access.app
, as seguintes regras se aplicam:
- Todos os aplicativos podem criptografar.
- Nenhum aplicativo pode exportar/descriptografar (sem solicitar ao usuário).
- Todos os aplicativos podem ver a verificação de integridade.
- Nenhum aplicativo pode alterar as ACLs.
- O partitionID é definido como
apple
.
Quando um aplicativo cria uma entrada no keychain, as regras são um pouco diferentes:
- Todos os aplicativos podem criptografar.
- Somente o aplicativo criador (ou qualquer outro aplicativo adicionado explicitamente) pode exportar/descriptografar (sem solicitar ao usuário).
- Todos os aplicativos podem ver a verificação de integridade.
- Nenhum aplicativo pode alterar as ACLs.
- O partitionID é definido como
teamid:[teamID aqui]
.
Acessando o Keychain
security
# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d
# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g
# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S
APIs
{% hint style="success" %} A enumeração e o dumping do keychain de segredos que não geram um prompt podem ser feitos com a ferramenta LockSmith {% endhint %}
Liste e obtenha informações sobre cada entrada do keychain:
- A API
SecItemCopyMatching
fornece informações sobre cada entrada e existem alguns atributos que você pode definir ao usá-la:kSecReturnData
: Se verdadeiro, tentará descriptografar os dados (defina como falso para evitar possíveis pop-ups)kSecReturnRef
: Obtenha também a referência ao item do keychain (defina como verdadeiro no caso de você ver que pode descriptografar sem pop-up)kSecReturnAttributes
: Obtenha metadados sobre as entradaskSecMatchLimit
: Quantos resultados retornarkSecClass
: Que tipo de entrada do keychain
Obtenha as ACLs de cada entrada:
- Com a API
SecAccessCopyACLList
você pode obter a ACL para o item do keychain, e ela retornará uma lista de ACLs (comoACLAuhtorizationExportClear
e as outras mencionadas anteriormente) onde cada lista tem:- Descrição
- Lista de aplicativos confiáveis. Isso pode ser:
- Um aplicativo: /Applications/Slack.app
- Um binário: /usr/libexec/airportd
- Um grupo: group://AirPort
Exporte os dados:
- A API
SecKeychainItemCopyContent
obtém o texto simples - A API
SecItemExport
exporta as chaves e certificados, mas pode ser necessário definir senhas para exportar o conteúdo criptografado
E estes são os requisitos para poder exportar um segredo sem um prompt:
- Se 1 ou mais aplicativos confiáveis estiverem listados:
- Precisa das autorizações apropriadas (
Nil
, ou ser parte da lista permitida de aplicativos na autorização para acessar as informações secretas) - Precisa que a assinatura do código corresponda ao PartitionID
- Precisa que a assinatura do código corresponda à de um aplicativo confiável (ou ser um membro do grupo KeychainAccessGroup correto)
- Precisa das autorizações apropriadas (
- Se todos os aplicativos são confiáveis:
- Precisa das autorizações apropriadas
- Precisa que a assinatura do código corresponda ao PartitionID
- Se não houver PartitionID, isso não é necessário
{% hint style="danger" %} Portanto, se houver 1 aplicativo listado, você precisará injetar código nesse aplicativo.
Se a apple for indicada no partitionID, você pode acessá-la com osascript
para qualquer coisa que esteja confiando em todos os aplicativos com apple no partitionID. Python
também pode ser usado para isso.
{% endhint %}
Dois atributos adicionais
- Invisível: É uma sinalização booleana para ocultar a entrada do aplicativo UI Keychain
- Geral: É para armazenar metadados (portanto, NÃO É CRIPTOGRAFADO)
- A Microsoft estava armazenando em texto simples todos os tokens de atualização para acessar pontos de extremidade sensíveis.
Referências
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Obtenha o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas dicas de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.