macOS Sensitive Locations & Interesting Daemons
Passwords
Password Ombra
La password ombra è memorizzata insieme alla 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 (incluso l'hash):
Script come questo o questo può essere utilizzato per trasformare l'hash nel formato hashcat.
Un'alternativa one-liner che dumpa le credenziali di tutti gli account non di servizio nel formato hashcat -m 7100
(macOS PBKDF2-SHA512):
Dump delle chiavi
Si noti che quando si utilizza il binario di sicurezza per scaricare le password decifrate, verranno visualizzati diversi prompt che chiederanno all'utente di consentire questa operazione.
Basandosi su questo commento juuso/keychaindump#10 (comment) sembra che questi strumenti non funzionino più in Big Sur.
Panoramica di Keychaindump
Uno strumento chiamato keychaindump è stato sviluppato per estrarre password dalle chiavi 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 ed elevi i privilegi a root. Lo strumento sfrutta il fatto che la chiave sia sbloccata per impostazione predefinita all'avvio dell'utente per comodità, consentendo alle applicazioni di accedervi senza richiedere ripetutamente la password dell'utente. Tuttavia, se un utente sceglie di bloccare la propria chiave 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, fondamentale per accedere alla chiave. Il processo di estrazione coinvolge l'individuazione di una Chiave Principale derivata dalla password di accesso dell'utente. Questa chiave è essenziale per leggere il file della chiave. Per individuare la Chiave Principale, keychaindump esamina l'heap di memoria di securityd utilizzando il comando vmmap
, cercando potenziali chiavi nelle aree contrassegnate come MALLOC_TINY
. Il seguente comando viene utilizzato per ispezionare queste posizioni di memoria:
Dopo aver identificato le potenziali chiavi principali, keychaindump cerca tra gli heap un pattern specifico (0x0000000000000018
) che indica un candidato per la chiave principale. Sono necessari ulteriori passaggi, inclusa la deobfuscation, per utilizzare questa chiave, come descritto nel codice sorgente di keychaindump. Gli analisti che si concentrano su questa area dovrebbero notare che i dati cruciali per decrittare il portachiavi sono memorizzati all'interno della memoria del processo securityd. Un esempio di comando per eseguire keychaindump è:
chainbreaker
Chainbreaker può essere utilizzato per estrarre i seguenti tipi di informazioni da un portachiavi OSX in modo forense:
Password del portachiavi 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
Con la password di sblocco del portachiavi, una chiave principale ottenuta utilizzando volafox o volatility, o un file di sblocco come SystemKey, Chainbreaker fornirà anche le password in chiaro.
Senza uno di questi metodi per sbloccare il portachiavi, Chainbreaker visualizzerà tutte le altre informazioni disponibili.
Dump keychain keys
Scaricare le chiavi del portachiavi (con le password) con SystemKey
Dump delle chiavi del portachiavi (con password) per crackare l'hash
Dump delle chiavi del portachiavi (con password) con dump di memoria
Seguire questi passaggi per eseguire un dump di memoria
Scaricare le chiavi del portachiavi (con le password) utilizzando la password dell'utente
Se conosci la password dell'utente, puoi utilizzarla per scaricare e decrittografare i portachiavi che appartengono all'utente.
kcpassword
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 effettuato il login senza essere richiesto di 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 degli utenti è più lunga della chiave, la chiave verrà riutilizzata.
Ciò rende la password piuttosto facile da recuperare, ad esempio utilizzando script come questo.
Informazioni Interessanti nei Database
Messaggi
Notifiche
Puoi trovare i dati delle Notifiche in $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
La maggior parte delle informazioni interessanti si troverà nel blob. Quindi dovrai estrarre quel contenuto e trasformarlo in un formato leggibile per l'utente o utilizzare strings
. Per accedervi puoi fare:
Note
Le note degli utenti possono essere trovate in ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Preferenze
Nelle app macOS le preferenze si trovano in $HOME/Library/Preferences
e in iOS sono 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.
Notifiche di Sistema
Notifiche Darwin
Il daemon principale per le notifiche è /usr/sbin/notifyd
. Per ricevere notifiche, i client devono registrarsi attraverso la porta Mach com.apple.system.notification_center
(verificarli con sudo lsmp -p <pid notifyd>
). Il daemon è configurabile con il file /etc/notify.conf
.
I nomi utilizzati per le notifiche sono notazioni univoche DNS inverse e quando viene inviata una notifica a uno di essi, il/i client che hanno indicato di poterla gestire la riceveranno.
È possibile visualizzare 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
:
Centro Notifiche Distribuito
Il Centro Notifiche Distribuito il cui principale binario è /usr/sbin/distnoted
, è un altro modo per inviare notifiche. Espone alcuni servizi XPC e effettua alcuni controlli per cercare di verificare i client.
Notifiche Push di Apple (APN)
In questo caso, le applicazioni possono registrarsi per argomenti. Il client genererà un token contattando i server di Apple tramite apsd
.
Successivamente, i fornitori avranno generato anche un token e saranno in grado di connettersi ai server di Apple per inviare messaggi ai client. Questi messaggi verranno ricevuti localmente da apsd
che inoltrerà la notifica all'applicazione in attesa di riceverla.
Le preferenze sono situate in /Library/Preferences/com.apple.apsd.plist
.
Vi è un database locale di messaggi situato in macOS in /Library/Application\ Support/ApplePushService/aps.db
e in iOS in /var/mobile/Library/ApplePushService
. Esso ha 3 tabelle: incoming_messages
, outgoing_messages
e channel
.
È anche possibile ottenere informazioni sul daemon e sulle connessioni utilizzando:
Notifiche per l'utente
Queste sono le notifiche che l'utente dovrebbe vedere sullo schermo:
CFUserNotification
: Questa API fornisce un modo per mostrare sullo schermo un popup con un messaggio.Il Bulletin Board: Questo mostra in iOS un banner che scompare e verrà memorizzato nel Notification Center.
NSUserNotificationCenter
: Questo è il bulletin board di iOS in MacOS. Il database con le notifiche si trova in/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Last updated