macOS Sensitive Locations & Interesting Daemons
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
La password shadow è memorizzata con la configurazione dell'utente in plists situati in /var/db/dslocal/nodes/Default/users/
.
Il seguente oneliner può essere utilizzato per estrarre tutte le informazioni sugli utenti (inclusi i dati degli hash):
Script come questo o questo possono essere utilizzati per trasformare l'hash in formato hashcat.
Un'alternativa in un'unica riga che eseguirà il dump delle credenziali di tutti gli account non di servizio in formato hashcat -m 7100
(macOS PBKDF2-SHA512):
Un altro modo per ottenere il ShadowHashData
di un utente è utilizzare dscl
: sudo dscl . -read /Users/`whoami` ShadowHashData
Questo file è utilizzato solo quando il sistema è in modalità utente singolo (quindi non molto frequentemente).
Nota che quando si utilizza il binario di sicurezza per estrarre le password decrittografate, verranno visualizzati diversi prompt che chiederanno all'utente di consentire questa operazione.
In base a questo commento juuso/keychaindump#10 (comment), sembra che questi strumenti non funzionino più in Big Sur.
Uno strumento chiamato keychaindump è stato sviluppato per estrarre password dai portachiavi di macOS, ma presenta limitazioni sulle versioni più recenti di macOS come Big Sur, come indicato in una discussione. L'uso di keychaindump richiede che l'attaccante ottenga accesso e escalare i privilegi a root. Lo strumento sfrutta il fatto che il portachiavi è sbloccato per impostazione predefinita al momento del login dell'utente per comodità, consentendo alle applicazioni di accedervi senza richiedere ripetutamente la password dell'utente. Tuttavia, se un utente sceglie di bloccare il proprio portachiavi dopo ogni utilizzo, keychaindump diventa inefficace.
Keychaindump opera prendendo di mira un processo specifico chiamato securityd, descritto da Apple come un demone per operazioni di autorizzazione e crittografia, cruciale per accedere al portachiavi. Il processo di estrazione implica l'identificazione di una Master Key derivata dalla password di accesso dell'utente. Questa chiave è essenziale per leggere il file del portachiavi. Per localizzare la Master Key, keychaindump scansiona l'heap di memoria di securityd utilizzando il comando vmmap
, cercando potenziali chiavi all'interno delle aree contrassegnate come MALLOC_TINY
. Il seguente comando viene utilizzato per ispezionare queste posizioni di memoria:
Dopo aver identificato potenziali chiavi master, keychaindump cerca tra gli heap un modello specifico (0x0000000000000018
) che indica un candidato per la chiave master. Ulteriori passaggi, inclusa la deoffuscazione, sono necessari per utilizzare questa chiave, come descritto nel codice sorgente di keychaindump. Gli analisti che si concentrano su quest'area dovrebbero notare che i dati cruciali per decrittografare il portachiavi sono memorizzati nella memoria del processo securityd. Un comando di esempio per eseguire keychaindump è:
Chainbreaker può essere utilizzato per estrarre i seguenti tipi di informazioni da un keychain OSX in modo forense:
Password del keychain hashata, adatta per il cracking con hashcat o John the Ripper
Password Internet
Password generiche
Chiavi private
Chiavi pubbliche
Certificati X509
Note sicure
Password Appleshare
Data la password di sblocco del keychain, una chiave master ottenuta utilizzando volafox o volatility, o un file di sblocco come SystemKey, Chainbreaker fornirà anche password in chiaro.
Senza uno di questi metodi per sbloccare il Keychain, Chainbreaker mostrerà tutte le altre informazioni disponibili.
Segui questi passaggi per eseguire un dump di memoria
Se conosci la password dell'utente, puoi usarla per dumpare e decrittare i portachiavi che appartengono all'utente.
Il file kcpassword è un file che contiene la password di accesso dell'utente, ma solo se il proprietario del sistema ha abilitato l'accesso automatico. Pertanto, l'utente verrà automaticamente connesso senza essere invitato a inserire una password (il che non è molto sicuro).
La password è memorizzata nel file /etc/kcpassword
xored con la chiave 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Se la password dell'utente è più lunga della chiave, la chiave verrà riutilizzata.
Questo rende la password piuttosto facile da recuperare, ad esempio utilizzando script come questo.
Puoi trovare i dati delle Notifiche in $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
La maggior parte delle informazioni interessanti si troverà in blob. Quindi dovrai estrarre quel contenuto e trasformarlo in leggibile da umani o usare strings
. Per accedervi puoi fare:
Le note degli utenti possono essere trovate in ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
In macOS, le preferenze delle app si trovano in $HOME/Library/Preferences
e in iOS si trovano in /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
.
In macOS, lo strumento cli defaults
può essere utilizzato per modificare il file delle Preferenze.
/usr/sbin/cfprefsd
gestisce i servizi XPC com.apple.cfprefsd.daemon
e com.apple.cfprefsd.agent
e può essere chiamato per eseguire azioni come modificare le preferenze.
Il file /System/Library/OpenDirectory/permissions.plist
contiene le autorizzazioni applicate sugli attributi dei nodi ed è protetto da SIP.
Questo file concede autorizzazioni a utenti specifici tramite UUID (e non uid) in modo che possano accedere a informazioni sensibili specifiche come ShadowHashData
, HeimdalSRPKey
e KerberosKeys
, tra gli altri:
Il demone principale per le notifiche è /usr/sbin/notifyd
. Per ricevere notifiche, i client devono registrarsi tramite il Mach port com.apple.system.notification_center
(controllali con sudo lsmp -p <pid notifyd>
). Il demone è configurabile con il file /etc/notify.conf
.
I nomi utilizzati per le notifiche sono notazioni DNS inverse uniche e quando una notifica viene inviata a uno di essi, il/i client che hanno indicato di poterla gestire la riceveranno.
È possibile dumpare lo stato attuale (e vedere tutti i nomi) inviando il segnale SIGUSR2 al processo notifyd e leggendo il file generato: /var/run/notifyd_<pid>.status
:
Il Distributed Notification Center il cui binario principale è /usr/sbin/distnoted
, è un altro modo per inviare notifiche. Espone alcuni servizi XPC e esegue alcuni controlli per cercare di verificare i client.
In questo caso, le applicazioni possono registrarsi per argomenti. Il client genererà un token contattando i server di Apple tramite apsd
.
Poi, i fornitori avranno anche generato un token e saranno in grado di connettersi ai server di Apple per inviare messaggi ai client. Questi messaggi saranno ricevuti localmente da apsd
che inoltrerà la notifica all'applicazione in attesa.
Le preferenze si trovano in /Library/Preferences/com.apple.apsd.plist
.
C'è un database locale di messaggi situato in macOS in /Library/Application\ Support/ApplePushService/aps.db
e in iOS in /var/mobile/Library/ApplePushService
. Ha 3 tabelle: incoming_messages
, outgoing_messages
e channel
.
È anche possibile ottenere informazioni sul demone e sulle connessioni utilizzando:
Queste sono le notifiche che l'utente dovrebbe vedere sullo schermo:
CFUserNotification
: Queste API forniscono un modo per mostrare sullo schermo un pop-up con un messaggio.
La Bacheca: Questa mostra in iOS un banner che scompare e sarà memorizzato nel Centro Notifiche.
NSUserNotificationCenter
: Questa è la bacheca di iOS in MacOS. Il database con le notifiche si trova in /var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)