Использование TPM для аутентификации хоста при загрузке PXE

Вопрос или проблема

У меня есть бездоменная машина, которая загружается по PXE с некоторого хоста, и мне любопытно, есть ли какой-то умный способ достичь аутентификации хоста, используя только TPM (без UEFI Secure Boot).

По очевидным причинам я не могу использовать код, загруженный с неаутентифицированного хоста, чтобы провести аутентификацию. Учитывая, что у меня есть обычный PXE, не так много доверенного кода в моей прошивке (Firmware, BIOS, PXE и т.д.), который мог бы помочь с этой аутентификацией.

Но у меня есть TPM. Учитывая, что я могу заранее настроить TPM, есть ли способ использовать его для достижения аутентификации хоста?

Я видел разработки на тему недавнего TPM ACT “Аутентифицированный таймер наблюдения”, [PDF], который может позволить мне настроить TPM на перезагрузку через определённое количество времени, если таймер наблюдения не будет сброшен (или отключен) каким-то подписанным сообщением (или общим секретом) от хоста, фактически аутентифицируя его.

Есть ли какие-либо более совершенные схемы, которые могут обеспечить проверку хоста только с использованием TPM, без запуска какого-либо кода с несанкционированного хоста и без опоры на что-то вроде UEFI Secure Boot?

Спасибо!

Конечно, есть! Это называется “Измеренная загрузка” и “Удалённая аутентификация”. Microsoft написала небольшой вводный материал по этой теме для своей платформы Azure, который достаточно высокоуровневый, чтобы быть применимым и к другим конфигурациям. Если вы используете Linux, я предлагаю взглянуть на osresearch/safeboot на GitHub, где есть полезные, легко изменяемые скрипты, с которыми вы можете поэкспериментировать, чтобы исследовать различные возможности. Также есть руководство по “Удалённой аутентификации” от команды, создающей инструменты TPM2 для Linux.

Вам определённо стоит сначала ознакомиться с тем, что такое банки PCR.

Суть в том, что ваш TPM получает измерение для каждого загружаемого бинарного файла, который выполняется во время загрузки (предыдущий уровень загружает, хеширует и запускает следующий уровень, что означает, что вам нужно доверять нижнему уровню, т.е. прошивке машины). Затем TPM может выдать документ, подписанный ключом TPM, и вы можете отправить его удалённому хосту, который затем проверяет документ и подпись. Ключ TPM вашей машины может быть подписью встроенного ключа поставщика TPM, так что вам нужно доверять, например, только Infineon или Intel, как верхним сертификатам.

Вы также можете рассмотреть Keylime, который упаковывает весь процесс в более структурированный формат (хотя, похоже, он все ещё на ранних стадиях разработки).

В конечном счёте, измерение каждой части цепочки загрузки до вашего образа и поддержание её в актуальном состоянии достаточно громоздко.
Я знаю, что вы сказали, что не хотите использовать Secure Boot, но для пользы других, читающих это, альтернатива заключается в установке сертификата в (с защищённым паролем) UEFI машины и последующей подписи initramfs (в Linux) с его помощью. Таким образом, вам нужно проверить только то, что система загружается безопасно (PCR7), и что это действительно нужная машина, с которой вы взаимодействуете (используя, например, идентичность ключа TPM).
Как для безопасной загрузки, так и для измеренной загрузки я бы использовал объединённый образ ядра с настраиваемым initramfs, который может загружать squashfs в оперативную память как корневую файловую систему в режиме только для чтения и проверять shasum диска против хеша, встроенного в сам initramfs. Для измеренной загрузки это означает, что вам нужно проверять только до PCR4, который является хешем UKI; если всё в порядке, вы можете предполагать, что и остальное тоже в порядке.

Ответ или решение

Использование TPM (Trusted Platform Module) для аутентификации хоста во время PXE-загрузки — это интересная и сложная задача, особенно в условиях отсутствия UEFI Secure Boot. Однако есть методы, которые могут помочь достичь этой цели.

Возможные подходы

  1. Измеренная загрузка (Measured Boot):
    Измеренная загрузка — это процесс, при котором каждая загружаемая часть программного обеспечения (например, загрузчик, ОС) измеряется (обычно хешируется) и результаты этих измерений хранятся в области TPM, называемой PCR (Platform Configuration Register). Это позволяет проверять целостность и подлинность программного обеспечения, загружаемого на хосте.

    • Удаленная аттестация (Remote Attestation):
      Данная процедура позволяет вашему TPM предоставить документ, подписанный ключами TPM, который подтверждает состояние загрузки системы. Вы можете отправить этот документ на удаленный сервер для проверки. Сервер должен держать доверенный базовый ключ, чтобы подтвердить, что только доверенные образы были загружены.

    • Чтобы выполнить данный процесс, вам нужно будет предварительно настроить TPM, а также установить соответствующие ключи и политики, чтобы обеспечить целостность данных на каждом этапе загрузки.

  2. Использование "Authenticated Watchdog Timer":
    Как вы упомянули, использование таймера с подлинной аутентификацией может помочь. Вы можете настроить TPM так, чтобы он отслеживал время и сбрасывал счетчик только если получал подписанное сообщение от хоста. Это позволяет удостовериться, что хост выполняет разрешенные действия.

  3. Изучение ключевых инструментов и библиотек:
    Вам может быть полезно ознакомиться с инструментами для работы с TPM, такими как tpm2-tools и библиотеками, которые разработаны для интеграции TPM с Linux. Например, проект Keylime может предоставить более высокоуровневую структуру для управления процессом удаленной аттестации.

  4. Рекомендации по конфигурации:

    • Сначала изучите, как работают PCR и механизмы их конфигурации. Вам необходимо будет установить безопасный процесс измерения и загрузки, который будет учитывать хэш каждого уровня загрузки.
    • Рассмотрите возможность поддержания уровня доверия через загрузку фиксированного образа с известным, проверенным хэшом, который предлагает возможность проверки состояния операционной системы.

Заключение

В то время как использование TPM для аутентификации хоста при PXE-загрузке может быть чрезвычайно сложным, сочетание методов измеренной загрузки и удаленной аттестации с использованием таймера аутентификации позволяет создать безопасную систему аутентификации. Настройка процессов и использование соответствующих инструментов имеет крайне важное значение для завершения успешной реализации таких схем. Убедитесь, что учитываете все аспекты безопасности и следите за актуальными разработками в области TPM и загрузки ОС.

Оцените материал
Добавить комментарий

Капча загружается...