macOS Sensitive Locations & Interesting Daemons

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Passwörter

Shadow-Passwörter

Das Shadow-Passwort wird zusammen mit der Benutzerkonfiguration in Plist-Dateien gespeichert, die sich in /var/db/dslocal/nodes/Default/users/ befinden. Mit dem folgenden Oneliner können alle Informationen über die Benutzer (einschließlich Hash-Informationen) abgerufen werden:

for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done

Skripte wie dieses hier oder dieses hier können verwendet werden, um den Hash in hashcat-Format umzuwandeln.

Ein alternativer One-Liner, der Anmeldeinformationen aller Nicht-Service-Konten im hashcat-Format -m 7100 (macOS PBKDF2-SHA512) ausgibt:

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'

Schlüsselbund-Dump

Beachten Sie, dass bei der Verwendung des security-Binärs zum Dumpen der entschlüsselten Passwörter mehrere Aufforderungen den Benutzer auffordern, diese Operation zu erlauben.

#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)

Basierend auf diesem Kommentar juuso/keychaindump#10 (Kommentar) scheint es, dass diese Tools in Big Sur nicht mehr funktionieren.

Keychaindump Übersicht

Ein Tool namens keychaindump wurde entwickelt, um Passwörter aus macOS-Schlüsselbunden zu extrahieren, stößt jedoch auf Einschränkungen in neueren macOS-Versionen wie Big Sur, wie in einer Diskussion angegeben. Die Verwendung von keychaindump erfordert, dass der Angreifer Zugriff erhält und Berechtigungen auf root eskaliert. Das Tool nutzt die Tatsache aus, dass der Schlüsselbund standardmäßig beim Benutzerlogin entsperrt ist, um Anwendungen den Zugriff darauf zu ermöglichen, ohne wiederholt das Passwort des Benutzers anzufordern. Wenn ein Benutzer jedoch entscheidet, den Schlüsselbund nach jeder Verwendung zu sperren, wird keychaindump unwirksam.

Keychaindump arbeitet, indem es einen bestimmten Prozess namens securityd ins Visier nimmt, den Apple als Daemon für Autorisierungs- und kryptografische Operationen beschreibt, die für den Zugriff auf den Schlüsselbund unerlässlich sind. Der Extraktionsprozess beinhaltet die Identifizierung eines Master Key, der aus dem Anmeldepasswort des Benutzers abgelekt wird. Dieser Schlüssel ist entscheidend für das Lesen der Schlüsselbunddatei. Um den Master Key zu finden, durchsucht keychaindump den Speicherhaufen von securityd mithilfe des Befehls vmmap und sucht nach potenziellen Schlüsseln in Bereichen, die als MALLOC_TINY markiert sind. Der folgende Befehl wird verwendet, um diese Speicherorte zu inspizieren:

sudo vmmap <securityd PID> | grep MALLOC_TINY

Nach Identifizierung potenzieller Master-Schlüssel durchsucht keychaindump die Heaps nach einem spezifischen Muster (0x0000000000000018), das auf einen Kandidaten für den Master-Schlüssel hinweist. Weitere Schritte, einschließlich der Entschleierung, sind erforderlich, um diesen Schlüssel zu nutzen, wie im Quellcode von keychaindump beschrieben. Analysten, die sich auf diesen Bereich konzentrieren, sollten beachten, dass die entscheidenden Daten zur Entschlüsselung des Schlüsselbunds im Speicher des securityd-Prozesses gespeichert sind. Ein Beispielbefehl zum Ausführen von keychaindump lautet:

sudo ./keychaindump

chainbreaker

Chainbreaker kann verwendet werden, um die folgenden Arten von Informationen aus einem OSX-Schlüsselbund auf forensisch korrekte Weise zu extrahieren:

  • Gehashtes Keychain-Passwort, geeignet zum Knacken mit hashcat oder John the Ripper

  • Internetpasswörter

  • Generische Passwörter

  • Private Schlüssel

  • Öffentliche Schlüssel

  • X509-Zertifikate

  • Sichere Notizen

  • Appleshare-Passwörter

Mit dem Schlüsselbund-Entsperrpasswort, einem mit volafox oder volatility erhaltenen Master-Key oder einer Entsperrdatei wie SystemKey wird Chainbreaker auch Klartextpasswörter bereitstellen.

Ohne eine dieser Methoden zum Entsperren des Schlüsselbunds zeigt Chainbreaker alle anderen verfügbaren Informationen an.

Schlüsselbundschlüssel dumpen

#Dump all keys of the keychain (without the passwords)
python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain

Schlüsselbundschlüssel (mit Passwörtern) mit SystemKey auslesen

# 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

Schlüsselbundschlüssel (mit Passwörtern) ausgeben und den Hash knacken

# 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

Schlüsselbundschlüssel (mit Passwörtern) mit Speicherabbild dumpen

Befolgen Sie diese Schritte, um ein Speicherabbild durchzuführen

#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

Schlüsselbundschlüssel (mit Passwörtern) mithilfe des Benutzerpassworts auslesen

Wenn Sie das Benutzerpasswort kennen, können Sie es verwenden, um Schlüsselbunde des Benutzers auszulesen und zu entschlüsseln.

#Prompt to ask for the password
python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db

kcpassword

Die kcpassword-Datei ist eine Datei, die das Anmeldepasswort des Benutzers enthält, aber nur, wenn der Systembesitzer die automatische Anmeldung aktiviert hat. Daher wird der Benutzer automatisch angemeldet, ohne nach einem Passwort gefragt zu werden (was nicht sehr sicher ist).

Das Passwort wird in der Datei /etc/kcpassword mit dem Schlüssel 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F xor-verknüpft. Wenn das Passwort des Benutzers länger als der Schlüssel ist, wird der Schlüssel wiederverwendet. Dies macht das Passwort ziemlich einfach wiederherzustellen, zum Beispiel mit Skripten wie diesem hier.

Interessante Informationen in Datenbanken

Nachrichten

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'

Benachrichtigungen

Sie können die Benachrichtigungsdaten unter $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/ finden.

Die meisten interessanten Informationen werden im Blob sein. Sie müssen also diesen Inhalt extrahieren und ihn in ein menschlich lesbares Format umwandeln oder strings verwenden. Um darauf zuzugreifen, können Sie Folgendes tun:

cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
strings $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/db2/db | grep -i -A4 slack

Hinweise

Die Notizen der Benutzer finden sich in ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite

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

Einstellungen

In macOS-Apps befinden sich die Einstellungen in $HOME/Library/Preferences und in iOS in /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences.

In macOS kann das CLI-Tool defaults verwendet werden, um die Einstellungsdatei zu ändern.

/usr/sbin/cfprefsd beansprucht die XPC-Dienste com.apple.cfprefsd.daemon und com.apple.cfprefsd.agent und kann aufgerufen werden, um Aktionen wie das Ändern von Einstellungen auszuführen.

Systembenachrichtigungen

Darwin-Benachrichtigungen

Der Hauptdaemon für Benachrichtigungen ist /usr/sbin/notifyd. Um Benachrichtigungen zu erhalten, müssen Clients sich über den com.apple.system.notification_center Mach-Port registrieren (überprüfen Sie sie mit sudo lsmp -p <pid notifyd>). Der Daemon ist konfigurierbar mit der Datei /etc/notify.conf.

Die Namen, die für Benachrichtigungen verwendet werden, sind eindeutige Reverse-DNS-Notationen, und wenn eine Benachrichtigung an eine von ihnen gesendet wird, erhalten die Client(s), die angegeben haben, dass sie damit umgehen können, diese.

Es ist möglich, den aktuellen Status (und alle Namen zu sehen), indem das Signal SIGUSR2 an den notifyd-Prozess gesendet und die generierte Datei gelesen wird: /var/run/notifyd_<pid>.status:

ps -ef | grep -i notifyd
0   376     1   0 15Mar24 ??        27:40.97 /usr/sbin/notifyd

sudo kill -USR2 376

cat /var/run/notifyd_376.status
[...]
pid: 94379   memory 5   plain 0   port 0   file 0   signal 0   event 0   common 10
memory: com.apple.system.timezone
common: com.apple.analyticsd.running
common: com.apple.CFPreferences._domainsChangedExternally
common: com.apple.security.octagon.joined-with-bottle
[...]

Verteilter Benachrichtigungsdienst

Der Verteilte Benachrichtigungsdienst, dessen Hauptbinary /usr/sbin/distnoted ist, ist ein weiterer Weg, um Benachrichtigungen zu senden. Er stellt einige XPC-Dienste bereit und führt einige Überprüfungen durch, um Clients zu verifizieren.

Apple Push-Benachrichtigungen (APN)

In diesem Fall können Anwendungen sich für Themen registrieren. Der Client generiert ein Token, indem er über apsd mit den Servern von Apple kommuniziert. Dann werden auch Anbieter ein Token generiert haben und in der Lage sein, sich mit den Servern von Apple zu verbinden, um Nachrichten an die Clients zu senden. Diese Nachrichten werden lokal von apsd empfangen, der die Benachrichtigung an die darauf wartende Anwendung weiterleitet.

Die Einstellungen befinden sich in /Library/Preferences/com.apple.apsd.plist.

Es gibt eine lokale Datenbank von Nachrichten in macOS unter /Library/Application\ Support/ApplePushService/aps.db und in iOS unter /var/mobile/Library/ApplePushService. Sie hat 3 Tabellen: incoming_messages, outgoing_messages und channel.

sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db

Es ist auch möglich, Informationen über den Daemon und Verbindungen mit folgendem Befehl zu erhalten:

/System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status

Benutzerbenachrichtigungen

Dies sind Benachrichtigungen, die der Benutzer auf dem Bildschirm sehen sollte:

  • CFUserNotification: Diese API bietet eine Möglichkeit, auf dem Bildschirm ein Popup mit einer Nachricht anzuzeigen.

  • Das Bulletin Board: Dies zeigt auf iOS ein Banner an, das verschwindet und im Notification Center gespeichert wird.

  • NSUserNotificationCenter: Dies ist das Bulletin Board in MacOS. Die Datenbank mit den Benachrichtigungen befindet sich in /var/folders/<user temp>/0/com.apple.notificationcenter/db2/db

Last updated