macOS Sensitive Locations & Interesting Daemons
Senhas
Senhas Shadow
A senha shadow é armazenada com a configuração do usuário em plists localizadas em /var/db/dslocal/nodes/Default/users/
.
A seguinte linha de comando pode ser usada para despejar 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 formato hashcat.
Uma alternativa de uma linha que irá despejar credenciais de todas as contas não de serviço no formato hashcat -m 7100
(macOS PBKDF2-SHA512):
Outra maneira de obter o ShadowHashData
de um usuário é usando dscl
: sudo dscl . -read /Users/`whoami` ShadowHashData
/etc/master.passwd
Este arquivo é usado apenas quando o sistema está rodando em modo de usuário único (então não muito frequentemente).
Keychain Dump
Observe que ao usar o binário de segurança para extrair as senhas descriptografadas, vários prompts 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 ganhe acesso e eleve privilégios para root. A ferramenta explora o fato de que o keychain é desbloqueado por padrão ao fazer login do usuário por conveniência, permitindo que aplicativos acessem sem exigir repetidamente a senha do usuário. No entanto, se um usuário optar por bloquear seu keychain após cada uso, o keychaindump se torna ineficaz.
Keychaindump opera direcionando um processo específico chamado securityd, descrito pela Apple como um daemon para operações de autorização e criptografia, crucial para acessar o keychain. O processo de extração envolve identificar uma Chave Mestra derivada da senha de login do usuário. Esta chave é essencial para ler o arquivo do keychain. Para localizar a Chave Mestra, o keychaindump escaneia o heap de memória do securityd usando o comando vmmap
, procurando por chaves potenciais em áreas sinalizadas como MALLOC_TINY
. O seguinte comando é usado para inspecionar essas localizações de memória:
Após identificar chaves mestres potenciais, keychaindump procura nos heaps por um padrão específico (0x0000000000000018
) que indica um candidato para a chave mestre. Passos adicionais, incluindo desofuscação, são necessários para utilizar esta chave, conforme descrito no código-fonte do keychaindump. Analistas que se concentram nesta área devem notar que os dados cruciais para descriptografar o chaveiro estã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 hashada, adequada para quebra com hashcat ou John the Ripper
Senhas da Internet
Senhas genéricas
Chaves privadas
Chaves públicas
Certificados X509
Notas seguras
Senhas do Appleshare
Dada 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 claro.
Sem um desses métodos de desbloqueio do Keychain, o Chainbreaker exibirá todas as outras informações disponíveis.
Dump keychain keys
Extrair chaves do keychain (com senhas) usando SystemKey
Extrair chaves do chaveiro (com senhas) quebrando o hash
Extrair chaves do chaveiro (com senhas) com despejo de memória
Siga estas etapas para realizar um despejo de memória
Extrair chaves do keychain (com senhas) usando a senha do usuário
Se você souber a senha do usuário, pode usá-la para extrair e descriptografar keychains que pertencem ao usuário.
kcpassword
O arquivo kcpassword é um arquivo que contém a senha de login do usuário, mas apenas se o proprietário do sistema tiver ativado o login automático. Portanto, o usuário será automaticamente conectado sem ser solicitado a fornecer uma senha (o que não é muito seguro).
A senha é armazenada no arquivo /etc/kcpassword
xored com a chave 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Se a senha do usuário for mais longa que a chave, a chave será reutilizada.
Isso torna a senha bastante fácil de recuperar, por exemplo, usando scripts como este aqui.
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á em blob. Portanto, você precisará extrair esse conteúdo e transformá-lo em 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
Em aplicativos macOS, as preferências estão localizadas em $HOME/Library/Preferences
e em 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.
OpenDirectory permissions.plist
O arquivo /System/Library/OpenDirectory/permissions.plist
contém permissões aplicadas em atributos de nó e é protegido pelo SIP.
Este arquivo concede permissões a usuários específicos por UUID (e não uid) para que possam acessar informações sensíveis específicas, como ShadowHashData
, HeimdalSRPKey
e KerberosKeys
, entre outros:
Notificações do Sistema
Notificações Darwin
O daemon principal 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-os 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 DNS reversas únicas e, quando uma notificação é enviada para um deles, o(s) cliente(s) que indicaram que podem lidar com isso 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
:
Distributed Notification Center
O Distributed Notification Center cujo binário principal é /usr/sbin/distnoted
, é outra maneira de enviar notificações. Ele expõe alguns serviços XPC e realiza algumas verificações para tentar verificar os clientes.
Apple Push Notifications (APN)
Neste caso, os aplicativos podem se registrar para tópicos. O cliente gerará um token contatando os servidores da Apple através do apsd
.
Então, os provedores também terão gerado um token e poderão se conectar aos servidores da Apple para enviar mensagens aos clientes. Essas mensagens serão recebidas localmente pelo apsd
que retransmitirá a notificação para o aplicativo que a aguarda.
As preferências estão localizadas em /Library/Preferences/com.apple.apsd.plist
.
Há 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 as conexões usando:
User Notifications
Estas são notificações que o usuário deve ver na tela:
CFUserNotification
: Esta API fornece uma maneira de mostrar 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