macOS Sensitive Locations & Interesting Daemons
Senhas
Senhas Shadow
A senha shadow é armazenada com a configuração do usuário em plists localizados em /var/db/dslocal/nodes/Default/users/
.
O seguinte oneliner pode ser usado para extrair todas as informações sobre os usuários (incluindo informações de hash):
Scripts como este ou este podem ser usados para transformar o hash para o formato do hashcat.
Uma alternativa em uma linha que irá despejar credenciais de todas as contas não de serviço no formato hashcat -m 7100
(macOS PBKDF2-SHA512):
Despejo de Chaveiro
Observe que ao usar o binário security para despejar as senhas descriptografadas, várias solicitações pedirão ao usuário para permitir essa operação.
Com base neste comentário juuso/keychaindump#10 (comentário) parece que essas ferramentas não estão mais funcionando no Big Sur.
Visão Geral do Keychaindump
Uma ferramenta chamada keychaindump foi desenvolvida para extrair senhas dos keychains do macOS, mas enfrenta limitações em versões mais recentes do macOS como o Big Sur, conforme indicado em uma discussão. O uso do keychaindump requer que o atacante obtenha acesso e escalone os privilégios para root. A ferramenta explora o fato de que o keychain é desbloqueado por padrão após o login do usuário para conveniência, permitindo que aplicativos acessem sem exigir a senha do usuário repetidamente. No entanto, se um usuário optar por bloquear seu keychain após cada uso, o keychaindump se torna ineficaz.
O Keychaindump opera direcionando um processo específico chamado securityd, descrito pela Apple como um daemon para autorização e operações criptográficas, crucial para acessar o keychain. O processo de extração envolve a identificação de uma Chave Mestra derivada da senha de login do usuário. Essa chave é essencial para ler o arquivo do keychain. Para localizar a Chave Mestra, o keychaindump examina o heap de memória do securityd usando o comando vmmap
, procurando por chaves potenciais em áreas marcadas como MALLOC_TINY
. O comando a seguir é usado para inspecionar essas localizações de memória:
Após identificar chaves mestras potenciais, o keychaindump pesquisa os heaps em busca de um padrão específico (0x0000000000000018
) que indica um candidato a chave mestra. Etapas adicionais, incluindo desobfuscação, são necessárias para utilizar essa chave, conforme descrito no código-fonte do keychaindump. Analistas que se concentram nessa área devem observar que os dados cruciais para descriptografar o chaveiro são armazenados na memória do processo securityd. Um exemplo de comando para executar o keychaindump é:
chainbreaker
Chainbreaker pode ser usado para extrair os seguintes tipos de informações de um keychain do OSX de maneira forense:
Senha do Keychain em formato hash, adequada para quebrar com hashcat ou John the Ripper
Senhas de Internet
Senhas Genéricas
Chaves Privadas
Chaves Públicas
Certificados X509
Notas Seguras
Senhas do Appleshare
Com a senha de desbloqueio do keychain, uma chave mestra obtida usando volafox ou volatility, ou um arquivo de desbloqueio como SystemKey, o Chainbreaker também fornecerá senhas em texto simples.
Sem um desses métodos para desbloquear o Keychain, o Chainbreaker exibirá todas as outras informações disponíveis.
Dump keychain keys
Despejar chaves do chaveiro (com senhas) com SystemKey
Despejar chaves do chaveiro (com senhas) quebrando o hash
Despejar chaves do chaveiro (com senhas) com despejo de memória
Siga estes passos para realizar um despejo de memória
Despejar chaves do chaveiro (com senhas) usando a senha do usuário
Se você conhece a senha do usuário, pode usá-la para despejar e descriptografar os chaveiros pertencentes ao usuário.
kcpassword
O arquivo kcpassword é um arquivo que armazena a senha de login do usuário, mas apenas se o proprietário do sistema tiver habilitado o login automático. Portanto, o usuário será automaticamente conectado sem ser solicitado a inserir uma senha (o que não é muito seguro).
A senha é armazenada no arquivo /etc/kcpassword
xorada com a chave 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Se a senha do usuário for mais longa do que a chave, a chave será reutilizada.
Isso torna a senha bastante fácil de recuperar, por exemplo, usando scripts como este.
Informações Interessantes em Bancos de Dados
Mensagens
Notificações
Você pode encontrar os dados de Notificações em $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
A maior parte das informações interessantes estará no blob. Portanto, você precisará extrair esse conteúdo e transformá-lo em algo legível para humanos ou usar strings
. Para acessá-lo, você pode fazer:
Notas
As notas dos usuários podem ser encontradas em ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Preferências
Nos aplicativos macOS, as preferências estão localizadas em $HOME/Library/Preferences
e no iOS estão em /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
.
No macOS, a ferramenta de linha de comando defaults
pode ser usada para modificar o arquivo de preferências.
/usr/sbin/cfprefsd
reivindica os serviços XPC com.apple.cfprefsd.daemon
e com.apple.cfprefsd.agent
e pode ser chamado para realizar ações como modificar preferências.
Notificações do Sistema
Notificações do Darwin
O principal daemon para notificações é /usr/sbin/notifyd
. Para receber notificações, os clientes devem se registrar através da porta Mach com.apple.system.notification_center
(verifique com sudo lsmp -p <pid notifyd>
). O daemon é configurável com o arquivo /etc/notify.conf
.
Os nomes usados para notificações são notações exclusivas de DNS reverso e quando uma notificação é enviada para um deles, o(s) cliente(s) que indicaram que podem lidar com ela a receberão.
É possível despejar o status atual (e ver todos os nomes) enviando o sinal SIGUSR2 para o processo notifyd e lendo o arquivo gerado: /var/run/notifyd_<pid>.status
:
Centro de Notificação Distribuído
O Centro de Notificação Distribuído, cujo binário principal é /usr/sbin/distnoted
, é outra forma de enviar notificações. Ele expõe alguns serviços XPC e realiza algumas verificações para tentar verificar os clientes.
Notificações Push da Apple (APN)
Neste caso, as aplicações podem se registrar para tópicos. O cliente irá gerar um token entrando em contato com os servidores da Apple através do apsd
.
Em seguida, os provedores também irão gerar um token e serão capazes de se conectar aos servidores da Apple para enviar mensagens aos clientes. Essas mensagens serão recebidas localmente pelo apsd
, que irá encaminhar a notificação para a aplicação que a aguarda.
As preferências estão localizadas em /Library/Preferences/com.apple.apsd.plist
.
Existe um banco de dados local de mensagens localizado no macOS em /Library/Application\ Support/ApplePushService/aps.db
e no iOS em /var/mobile/Library/ApplePushService
. Ele possui 3 tabelas: incoming_messages
, outgoing_messages
e channel
.
Também é possível obter informações sobre o daemon e conexões usando:
Notificações de Usuário
Estas são notificações que o usuário deve ver na tela:
CFUserNotification
: Essa API fornece uma maneira de exibir na tela um pop-up com uma mensagem.**O Quadro de Avisos: Isso mostra no iOS um banner que desaparece e será armazenado no Centro de Notificações.
NSUserNotificationCenter
: Este é o quadro de avisos do iOS no MacOS. O banco de dados com as notificações está localizado em/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Last updated