Как расшифровать системный брелок с другого мака в командной строке

Я только что столкнулся с ситуацией, когда пользователь с Mac, который был сильно поврежден из-за прерванного обновления, нуждался в резервной копии Time Machine вне обычного процесса восстановления. К сожалению, они забыли пароль для этого.

У меня есть доступ к файловой системе на сломанном Mac, и мне нужно восстановить их пароль Time Machine, а также все остальное в цепочке ключей System.

Сложность: системная цепочка ключей не использует обычный пароль, она использует случайные байты .

Как расшифровать системную связку ключей?

Ответы (1)

Вам понадобятся следующие вещи:

  • Один мертвый Mac с читаемой файловой системой ( далее именуемой исходной машиной)
  • Одна новая машина Mac или Linux ( далее именуемая целевой машиной)

  • Файл System.keychainс исходной машины.

    • Этот файл находится либо /System/Library/Keychainsв/Library/Keychains
  • Файл SystemKeyс исходной машины. Он содержит фактический пароль.
    • Находится в в/var/db/SystemKey
  • Доступ в Интернет на целевой машине.

Шаг 1. Восстановление ключа шифрования для исходной цепочки ключей

Мы не можем использовать SystemKeyкак есть — он содержит случайные байты, которые нельзя ввести в диалоговое окно пароля или командную строку. Еще лучше, нам нужно 24 байта из середины файла — после магического числа, указывающего на ключевой файл, но до байтов контрольной суммы.

Правильная команда для получения правильного шестнадцатеричного ключа:

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

Объяснение: пропустите первые 8 байтов от начала файла, продолжайте 24 байта после этого и используйте строку формата для вывода данных в одну строку (это строка в стиле C, если вам интересно) printf.

Это && echoзначит, что после завершения команды мы получаем одну новую строку, поэтому вывод не попадает в начало приглашения вашей оболочки после завершения команды.

Скопируйте эту строку в сторону. Это ключ расшифровки цепочки для ключей.

Шаг 2. Сделайте дамп связки ключей, используя пароль

Для этого нам нужен сторонний инструмент. Мы исходим из того, что мертвый Mac не может быть загружен таким образом, чтобы мы могли нормально использовать его приложение Keychain Access.

Этим инструментом будет Chainbreaker — скрипт на Python. Вам нужно будет установить hexdumpбиблиотеку для Python. Выполните следующие команды на целевой машине:

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

Теперь мы просто даем chainbreaker ключ, который вы только что нашли, и файл:

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

Вы увидите незашифрованный пароль всего в системной связке ключей. Для моего варианта использования мне нужен пароль Time Machine, и он будет представлен в выводе как Generic password recordименованный файл Time Machine. Открытый текстовый пароль будет ниже.

Теперь мы можем просто использовать Finder, чтобы открыть Time Machine .sparsebundle, указать пароль, который мы выкопали из ключевого файла, и продолжить как обычно.

Солидные инструкции. Только что восстановил свои пароли Wi-Fi из резервной копии Time Machine.
Полезный ответ. Вы подразумеваете, что мы используем сторонний инструмент, потому что у нас нет доступа к работающей программе KeychainAccess? Мне любопытно, будет ли это работать с Keychain Access напрямую... т.е. вы загружаете связку ключей со старого диска в KeyChain Access на новом компьютере, а затем разблокируете его, используя пароль, извлеченный из SystemKey. На первый взгляд кажется, что это не работает, но, возможно, вы сможете пролить больше света на то, почему это сработает или не сработает. В моем случае хотелось бы перенести элементы в новую связку ключей.
@mattpr Проблема, с которой вы столкнетесь с обычной программой доступа к цепочке для ключей, заключается в том, что она попытается разблокировать только цепочку для ключей, которую вы добавили с помощью SystemKey, которая представляет собой случайный двоичный файл. И, поскольку это случайный двоичный файл, вы не можете вставить его в диалоговое окно пароля. Должен быть способ сделать это, но, к сожалению, я не знаю, что это такое.
Стоит отметить, что более поздние версии ChainBreaker позволяют вам просто использовать файл SystemKey как есть, устраняя необходимость в шаге 1.