Извлечение пароля от FileVault2 на платформе macOS

Извлечение пароля от FileVault2 на платформе macOS

Полученный пароль можно использовать для разблокировки Мака с целью получения полного доступа.

Автор: Ulf Frisk

FileVault2 позволяет злоумышленникам, обладающим физическим доступом к заблокированному или спящему Маку, получить пароль в чистом виде при помощи устройства стоимостью 300$, поддерживающего интерфейс Thunderbolt. Полученный пароль можно использовать для разблокировки Мака с целью получения полного доступа. Для устранения проблемы необходимо накатить патчи, выпущенные компанией Apple в декабре 2016 года.

Все, включая ваших коллег, полицию, завистливую домработницу или вора (список далеко не полный), могут получить полный доступ к вашим данным в случае наличия физического доступа к системе. Исключение: если ваш Мак полностью выключен. Если спящий режим – Мак остается уязвимым.

Сценарий до безобразия прост. Подключаете к Маку устройство, поддерживающее Thunderbolt , инициируете перезагрузку (комбинация клавиш ctrl + cmd + power) и в течение 30 секунд ждете отображение паролей. Весь процесс продемонстрирован на видео ниже:

Как такое возможно?

По сути, подобное возможно по двум причинам.

Первая проблема – перед стартом Мак не защищает себя от атак, связанных с прямым доступом к памяти (Direct Memory Access, DMA). EFI (Extensible Firmware Interface; Расширяемый Интерфейс Прошивки), используемый на ранней стадии, позволяет вредоносным устройствам, поддерживающим интерфейс Thunderbolt, читать и писать в память. На этой стадии MacOS еще не запустился и располагается на зашифрованном диске, который должен быть разблокирован перед стартом операционной системы. После запуска MacOS, по умолчанию активируются DMA-защиты.

Вторая проблема – пароль к FileVault хранится в открытом виде в памяти и после расшифровки диска автоматически не удаляется, а кладется в различные участки памяти – которые перемещаются в процессе перезагрузок, но внутри ограниченного диапазона.

Обе проблемы сильно упрощают получение пароля. Нужно лишь подключить устройство для DMA-атаки и перезагрузить MacOS. После перезагрузки ранее активированные DMA-защиты отключаются, но содержимое, включая пароли, остается в памяти. Существует временное окно, длинной несколько секунд, перед тем, как участок памяти, содержащий пароль, перезаписывается.

https://4.bp.blogspot.com/-kjlte_dFDi4/WDyrCymmyrI/AAAAAAAAAHg/JG_NOSp_6qEWzTM2RU5bBZDOE2Uvr9x6wCLcB/s1600/mac_pcileech.jpg
Рисунок 1: Схема подсоединения устройства PCILeech, предназначенного для DMA-атаки, к ноутбуку с MacOS

После подсоединения PCILeech на машине злоумышленника запускается команда mac_fvrecover.

https://2.bp.blogspot.com/-9WZuCisUb9c/WD1QUagWp5I/AAAAAAAAAH4/Z_sco98qVNY1QH8rhFatb8HPqhfyzVo0QCEw/s1600/fvrecover_cmd.png
Рисунок 2: Получение пароля из
FileVault при помощи PCILeech. Корректный пароль – DonaldDuck

Детали реализации атаки

После ввода пароль хранится в памяти в кодировке Unicode. Если комбинация состоит только из символов Ascii, каждые два байта будут нулевыми. В окне пароля вводим «случайную» фразу, которая не встречается в памяти. В нашем примере используется последовательность eerrbbnn, которая в памяти хранится как 6500650072007200620062006e006e. При попытке найти эту последовательность с помощью PCILeech вы заметите, что фраза хранится в нескольких областях памяти, как показано на рисунке ниже.

https://3.bp.blogspot.com/-tVJW1MS9nMA/WDyrpwGlHGI/AAAAAAAAAHk/CcRNPurpJzIlqrgrIR-KT30LjQvVr_FwgCLcB/s1600/fvrecover_search.png
Рисунок 3: Поиск в памяти закодированной тестовой последовательности eerrbbnn

После нахождения участков памяти, можно считать информацию. Возможно, потребуется повторное подключение оборудования к Маку, если первый акт завершился неудачно.

Если найдены правильные участки, пароль виден невооруженным взглядом. Дополнительно можно просканировать другие сигнатуры, например, phd0, находящейся вначале страницы памяти.

https://2.bp.blogspot.com/-ew7xrdgjwUM/WDysP9TB69I/AAAAAAAAAHo/x6Z5O5j1a-0eAjUmD3jQCT2PqP8rw23eQCLcB/s1600/fvrecover_result.png
Рисунок 4: Фраза в начале участка памяти

Можно ли реализовать эту атаку самостоятельно?

Легко! Загрузите приложение PCILeech с Github и закажите оборудование. Извлечение пароля успешно тестировалось на нескольких моделях Macbook и Macbook Air (все с интерфейсом Thunderbolt 2). Схема не тестировалась на более новых Маках с коннектором USB-C.

Взлом пароля может не получиться, если используются специальные символы, которые не включены в Ascii. В таких случаях дамп памяти будет сохранен, и поискать пароль можно вручную.

Не забывайте, что реализация подобных схем на Маках, которые вам не принадлежат, противоречит закону.

Дополнительные замечания

Извлечение пароля лишь одна из возможностей, доступных до тех пор, пока вы не накатите свежие обновления. Поскольку EFI-память перезаписывается, можно осуществить еще более неприятные вещи.

Хронология событий выглядит следующим образом:

Конец июля: найдена проблема.

  • 5 августа: PCILeech презентован на конференции DEF CON 24. (проблема с FileVault упомянута не была).
  • 15 августа: компания Apple проинформирована о проблеме.
  • 16 августа: компания Apple подтвердила проблему и попросила отложить обнародование уязвимости.
  • 13 декабря: компания Apple выпустила macOS 10.12.2 с обновлением. По крайней мере, для некоторых типов оборудования – как мой MacBook Air.

Заключение

Обновление от Apple полностью закрыло проблему. По крайней мере, в той степени, в которой мне удалось проверить. Теперь доступ к памяти невозможен до загрузки macOS. На данный момент macOS – одна из самых безопасных платформ с точки зрения данного вектора атаки.

Большой брат следит за вами, но мы знаем, как остановить его

Подпишитесь на наш канал!