Cómo descifrar el llavero del sistema desde otra mac en la línea de comandos

Acabo de encontrarme con una situación en la que un usuario con una Mac que se había roto por una actualización interrumpida necesitaba una copia de seguridad de Time Machine fuera del proceso de recuperación normal. Desafortunadamente, habían olvidado la contraseña para hacer esto.

Tengo acceso al sistema de archivos en la Mac rota y necesitaba recuperar su contraseña de Time Machine, así como cualquier otra cosa en el llavero del sistema.

Dificultad: El llavero del sistema no usa una contraseña normal, usa bytes aleatorios .

¿Cómo se descifra un llavero del sistema?

Respuestas (1)

Necesitas las siguientes cosas:

  • Una Mac muerta con un sistema de archivos legible (llamada la máquina de origen de aquí en adelante)
  • Una nueva máquina Mac o Linux (llamada la máquina Target de ahora en adelante)

  • El System.keychainarchivo de la máquina de origen.

    • Este archivo se encuentra en cualquiera /System/Library/Keychainso/Library/Keychains
  • El SystemKeyarchivo de la máquina de origen. Esto contiene la contraseña real.
    • Ubicado en en/var/db/SystemKey
  • Acceso a Internet en la máquina de destino.

Paso 1: Recuperación de la clave de cifrado para el llavero de origen

No podemos usarlo SystemKeytal como está: contiene bytes aleatorios que no se pueden ingresar en un cuadro de diálogo de contraseña o línea de comando. Aún mejor, necesitamos 24 bytes de la mitad del archivo, después del número mágico que indica un archivo clave, pero antes de los bytes de suma de comprobación.

El comando adecuado para obtener la clave hexadecimal correcta es:

hexdump -s 8 -n 24 -e '1/1 "%.2x"' /path/to/SystemKey && echo

Explicación: omita los primeros 8 bytes desde el principio del archivo, continúe 24 bytes después de eso y use la cadena de formato para volcar los datos en una línea (es una cadena de estilo C, si tiene curiosidad) printf.

La && echorazón es que obtenemos una sola línea nueva después para que la salida no se ejecute al comienzo de su indicador de shell después de que finalice el comando.

Copie esta cadena a un lado. Esta es la clave de descifrado para el llavero.

Paso 2: Vuelca el llavero usando la contraseña

Necesitamos una herramienta de terceros para esto. Suponemos que la Mac muerta no se puede iniciar de tal manera que podamos usar su aplicación Acceso a Llaveros normalmente.

Esa herramienta será Chainbreaker , un script de Python. Deberá instalar la hexdumpbiblioteca para Python. Ejecute los siguientes comandos en la máquina de destino:

  • sudo pip install hexdump
  • git clone https://github.com/n0fate/chainbreaker
  • cd chainbreaker

Ahora simplemente le damos a chainbreaker la clave que acabas de encontrar y el archivo:

python chainbreaker.py -f /path/to/system.keychain -k (the byte string from step 1)

Verá la contraseña de texto sin formato de todo en el llavero del sistema. Para mi caso de uso, quería la contraseña de Time Machine, y esto se representará en la salida como un Generic password recordarchivo Time Machine. La contraseña de texto sin formato estará debajo.

Ahora podemos simplemente usar el Finder para abrir Time Machine .sparsebundle, proporcionar la contraseña que extrajimos del archivo de claves y continuar como de costumbre.

Instrucciones sólidas. Acabo de recuperar mis contraseñas Wifi de una copia de seguridad de Time Machine con él.
Respuesta útil. ¿Quiere decir que estamos usando la herramienta de terceros porque no tenemos acceso a un programa KeychainAccess en funcionamiento? Tengo curiosidad por saber si esto funcionará directamente con Keychain Access... es decir, carga el llavero de la unidad anterior en KeyChain Access en la nueva computadora y luego lo desbloquea usando la contraseña extraída de SystemKey. No parece funcionar a primera vista, pero tal vez pueda arrojar más luz sobre por qué funcionará o no. En mi caso me gustaría migrar los artículos a un nuevo llavero.
@mattpr El problema que tendría con el programa normal de acceso al llavero es que solo intentará desbloquear el llavero que agregó con SystemKey, que es un archivo binario aleatorio. Y, dado que es binario aleatorio, no puede insertarlo en un cuadro de diálogo de contraseña. Debe haber una manera de hacerlo, pero lamentablemente, no sé cuál es.
Vale la pena mencionar que las versiones más recientes de ChainBreaker le permiten usar el archivo SystemKey tal como está, obviando la necesidad del paso 1.