
Удобная для пользователя легковесная удалённая аттестация TPM через Bluetooth
Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) — это решение, позволяющее отдельным пользователям выполнять аттестацию состояния загрузки с помощью своего телефона. Оно состоит из сервера, работающего на компьютере и выступающего в роли аттестатора, и графического клиентского приложения, работающего на доверенном телефоне и выступающего в роли проверяющего.
Типичный сценарий использования — проверка целостности вашей цепочки загрузки перед разблокировкой компьютера для предотвращения офлайн-атак на оставленный без присмотра ноутбук. Это также может служить инструментом отладки проблем с безопасной загрузкой после обновления прошивки или вторым фактором для шифрования диска.
После установки классический процесс управления Ultrablue состоит из нескольких шагов:
Для использования Ultrablue требуется компьютер с Linux, состояние загрузки которого вы хотите аттестовать, оснащённый TPM и интерфейсом Bluetooth (обычно ноутбук), а также мобильный телефон.
Чтобы зарегистрировать телефон в качестве проверяющего, запустите сервер в режиме регистрации:
sudo ultrablue-server -enroll -pcr-extend
При этом на терминале отобразится QR-код. На телефоне запустите клиентское приложение и нажмите на значок + в правом верхнем углу, чтобы открыть сканер QR-кодов. После сканирования будет установлен канал Bluetooth Low Energy, и регистрация выполнится автоматически. В случае успеха на главной странице клиентского приложения появится карточка устройства.
Ultrablue может расширить ваш TPM2 PCR9 с помощью случайно сгенерированного значения во время регистрации. Это полезно, если вы хотите, например, привязать шифрование диска к TPM2 sealing. В этом случае ultrablue во время загрузки выполнит обратное расширение регистра PCR9, если аттестация была успешной и признана доверенной. Расширение PCR настраивается во время регистрации (в режиме аттестации этот флаг не действует):
sudo ultrablue-server -enroll -pcr-extend
Если вы хотите, чтобы ultrablue выполнялся в рамках процесса загрузки, вам необходимо пересоздать свой initramfs, включив его в состав. Мы упрощаем эту задачу, предоставляя интеграцию с Dracut и systemd. См. также предоставленные скрипты для виртуальных машин, которые дают ещё более простой способ проверить это.
Сначала установите server/dracut/90ultrablue в каталог модулей /usr/lib/dracut/modules.d/,
Затем можно выполнить следующую команду dracut:
dracut --add ultrablue /path/to/initrd --force
Если вы использовали опцию --pcr-extend на этапе регистрации, вам нужно добавить модуль dracut crypt и скопировать server/dracut/90crypttab.conf в /etc/dracut.conf.d (для обхода ошибки dracut #751640):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
Обратите внимание, что эти параметры не являются постоянными, и ultrablue будет удалён из вашего initramfs при его следующей генерации. Сведения о постоянной настройке см. на man-странице dracut.conf(5).
Если вы выполнили шаг настройки initramfs, сервер Ultrablue запустится автоматически во время загрузки. В противном случае запустите сервер вручную в режиме аттестации:
sudo ultrablue-server
После запуска сервер будет ожидать подключения проверяющего (телефона). На телефоне нажмите на значок ▶️ на карточке устройства. Это запустит аттестацию. По завершении клиентское приложение отобразит результат аттестации.
Основная цель запуска ultrablue во время загрузки — использовать его для расшифровки диска. Пример того, как это сделать, приведён и описан в тестовом стенде сервера.
Проект Ultrablue был разработан в ANSSI (ssi.gouv.fr) автором Loïc Buckwell под руководством Nicolas Bouchinet и Gabriel Kerneis.
Если у вас есть вопросы, обратитесь через issue на GitHub или напрямую к Gabriel Kerneis [email protected].