macOS Sensitive Locations & Interesting Daemons
Contraseñas
Contraseñas de Sombra
La contraseña de sombra se almacena con la configuración del usuario en plists ubicados en /var/db/dslocal/nodes/Default/users/
.
El siguiente oneliner se puede utilizar para volcar toda la información sobre los usuarios (incluida la información del hash):
Scripts like this one o este otro se pueden utilizar para transformar el hash al formato de hashcat.
Una alternativa en una sola línea que volcará las credenciales de todas las cuentas que no son de servicio en formato hashcat -m 7100
(macOS PBKDF2-SHA512):
Volcado de llavero
Tenga en cuenta que al utilizar el binario de seguridad para volcar las contraseñas descifradas, se le pedirá al usuario que permita esta operación en varias ocasiones.
Según este comentario juuso/keychaindump#10 (comentario) parece que estas herramientas ya no funcionan en Big Sur.
Descripción de Keychaindump
Se ha desarrollado una herramienta llamada keychaindump para extraer contraseñas de los llaveros de macOS, pero enfrenta limitaciones en versiones más recientes de macOS como Big Sur, como se indica en una discusión. El uso de keychaindump requiere que el atacante obtenga acceso y escale privilegios a root. La herramienta explota el hecho de que el llavero se desbloquea por defecto al iniciar sesión del usuario por conveniencia, permitiendo que las aplicaciones accedan a él sin requerir la contraseña del usuario repetidamente. Sin embargo, si un usuario opta por bloquear su llavero después de cada uso, keychaindump se vuelve ineficaz.
Keychaindump opera apuntando a un proceso específico llamado securityd, descrito por Apple como un demonio para operaciones de autorización y criptográficas, crucial para acceder al llavero. El proceso de extracción implica identificar una Clave Maestra derivada de la contraseña de inicio de sesión del usuario. Esta clave es esencial para leer el archivo del llavero. Para localizar la Clave Maestra, keychaindump escanea el montón de memoria de securityd utilizando el comando vmmap
, buscando posibles claves dentro de áreas marcadas como MALLOC_TINY
. El siguiente comando se utiliza para inspeccionar estas ubicaciones de memoria:
Después de identificar posibles claves maestras, keychaindump busca en los montones de memoria un patrón específico (0x0000000000000018
) que indica un candidato para la clave maestra. Se requieren pasos adicionales, incluida la deofuscación, para utilizar esta clave, como se describe en el código fuente de keychaindump. Los analistas que se centren en esta área deben tener en cuenta que los datos cruciales para descifrar el llavero se almacenan en la memoria del proceso securityd. Un ejemplo de comando para ejecutar keychaindump es:
chainbreaker
Chainbreaker se puede utilizar para extraer los siguientes tipos de información de un llavero de OSX de manera forense:
Contraseña de llavero con hash, adecuada para crackear con hashcat o John the Ripper
Contraseñas de Internet
Contraseñas genéricas
Claves privadas
Claves públicas
Certificados X509
Notas seguras
Contraseñas de Appleshare
Con la contraseña de desbloqueo del llavero, una clave maestra obtenida usando volafox o volatility, o un archivo de desbloqueo como SystemKey, Chainbreaker también proporcionará contraseñas en texto plano.
Sin uno de estos métodos para desbloquear el llavero, Chainbreaker mostrará toda la información disponible.
Volcar claves del llavero
Volcar claves del llavero (con contraseñas) con SystemKey
Volcar claves del llavero (con contraseñas) rompiendo el hash
Volcar claves del llavero (con contraseñas) con volcado de memoria
Siga estos pasos para realizar un volcado de memoria
Volcar claves del llavero (con contraseñas) usando la contraseña de usuario
Si conoces la contraseña del usuario, puedes usarla para volcar y descifrar los llaveros que pertenecen al usuario.
kcpassword
El archivo kcpassword es un archivo que contiene la contraseña de inicio de sesión del usuario, pero solo si el propietario del sistema ha habilitado el inicio de sesión automático. Por lo tanto, el usuario iniciará sesión automáticamente sin que se le pida una contraseña (lo cual no es muy seguro).
La contraseña se almacena en el archivo /etc/kcpassword
xor con la clave 0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F
. Si la contraseña de los usuarios es más larga que la clave, la clave se reutilizará.
Esto hace que la contraseña sea bastante fácil de recuperar, por ejemplo, utilizando scripts como este.
Información interesante en bases de datos
Mensajes
Notificaciones
Puedes encontrar los datos de Notificaciones en $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
La mayor parte de la información interesante estará en blob. Por lo tanto, necesitarás extraer ese contenido y transformarlo en algo legible para humanos o usar strings
. Para acceder a ello, puedes hacer:
Notas
Las notas de los usuarios se pueden encontrar en ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite
Preferencias
En las aplicaciones de macOS, las preferencias se encuentran en $HOME/Library/Preferences
y en iOS se encuentran en /var/mobile/Containers/Data/Application/<UUID>/Library/Preferences
.
En macOS, la herramienta de línea de comandos defaults
se puede utilizar para modificar el archivo de preferencias.
/usr/sbin/cfprefsd
gestiona los servicios XPC com.apple.cfprefsd.daemon
y com.apple.cfprefsd.agent
y se puede llamar para realizar acciones como modificar preferencias.
Notificaciones del Sistema
Notificaciones de Darwin
El demonio principal para las notificaciones es /usr/sbin/notifyd
. Para recibir notificaciones, los clientes deben registrarse a través del puerto Mach com.apple.system.notification_center
(verificarlos con sudo lsmp -p <pid notifyd>
). El demonio es configurable con el archivo /etc/notify.conf
.
Los nombres utilizados para las notificaciones son notaciones únicas de DNS inverso y cuando se envía una notificación a uno de ellos, el cliente o clientes que han indicado que pueden manejarla la recibirán.
Es posible volcar el estado actual (y ver todos los nombres) enviando la señal SIGUSR2 al proceso notifyd y leyendo el archivo generado: /var/run/notifyd_<pid>.status
:
Centro de Notificaciones Distribuido
El Centro de Notificaciones Distribuido cuyo binario principal es /usr/sbin/distnoted
, es otra forma de enviar notificaciones. Expone algunos servicios XPC y realiza algunas verificaciones para intentar verificar clientes.
Notificaciones Push de Apple (APN)
En este caso, las aplicaciones pueden registrarse para temas. El cliente generará un token contactando a los servidores de Apple a través de apsd
.
Luego, los proveedores también habrán generado un token y podrán conectarse con los servidores de Apple para enviar mensajes a los clientes. Estos mensajes serán recibidos localmente por apsd
que transmitirá la notificación a la aplicación que la espera.
Las preferencias se encuentran en /Library/Preferences/com.apple.apsd.plist
.
Hay una base de datos local de mensajes ubicada en macOS en /Library/Application\ Support/ApplePushService/aps.db
y en iOS en /var/mobile/Library/ApplePushService
. Tiene 3 tablas: incoming_messages
, outgoing_messages
y channel
.
También es posible obtener información sobre el daemon y las conexiones usando:
Notificaciones de Usuario
Estas son notificaciones que el usuario debería ver en la pantalla:
CFUserNotification
: Esta API proporciona una forma de mostrar en la pantalla un mensaje emergente.El Tablón de Anuncios: Esto muestra en iOS un banner que desaparece y se almacenará en el Centro de Notificaciones.
NSUserNotificationCenter
: Este es el tablón de anuncios de iOS en MacOS. La base de datos con las notificaciones está ubicada en/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db
Última actualización