tamper resistance против ребёнка
Я имел в виду защиту от несанкционированного доступа со стороны малоквалифицированного злоумышленника. Было трудно придумать короткое название для темы. :-) Злоумышленник не может заменить электронику и BIOS компьютера на вредоносные. Он может писать на носители информации в компьютере (SSD) и может заменить электронику и BIOS на другую честную электронику и BIOS. Предположим, материнская плата принимает только подписанные BIOS-ы.
Родилась следующая идея для реализации такой защиты. При включении компьютера пользователь загружает его с флэшки, которая сравнивает криптографический хэш программных файлов в компьютере со значением, которое хранится на самой флэшке. Если они равны, передаём управление ОС в компьютере.
Плюсы, минусы, подводные камни? А может, эта схема уже реализована где-то?
Ссылки
[link1] https://www.reddit.com/r/PowerShell/comments/atgwst/is_it_possible_to_enable_secure_boot_in_bios_via/
Примерно это делает trusted boot, который поддерживает большинство UEFI BIOS при наличии TPM (в виде отдельного чипа или при поддержке стандарта со стороны CPU). Безопасность базируется на неизвлекаемости trusted root-ключа из модуля TPM.
Насколько я понимаю, заменить TPM-модуль не проблема.
Кстати, мне не пришло уведомление на почту о вашем комментарии.
Заменяйте на здоровье, только после этого вы не загрузите систему — ключ в новом модуле будет другой.
Каюсь, Secure Boot я знаю поверхностно. Разве Secure Boot нельзя отключить через настройку BIOS?
Secure Boot имеет смысл в сочетании с дисковым шифрованием (в этом случае TPM обеспечивает защиту от evil maid attack, исключая подмену загрузчика). Если шифрование производится TPM-ключом, то после отключения Secure Boot невозможно будет произвести загрузку.
Не понял как. Я слышал, что шифрование обеспечивает конфиденциальность, а не целостность. А для защиты от вмешательства (tampering) нужна именно целостность.
Кстати, о каком загрузчике вы говорите? GRUB2? В общем, для простоты предлагаю рассматривать схему загрузки, где UEFI BIOS загружает ядро линукса. Ядро и остальная часть ОС могут находиться на разных разделах.
Меня интересует, может ли злоумышленник изменить ОС так, чтобы она выглядела как раньше, но содержала зловредную программу, скажем, кейло́ггер. Злоумышленник может только менять информацию на SSD. Пока не вижу, как достичь этого с Secure Boot.
TPM обеспечивает безопасное (со всеми оговорками) хранение ключевого материала и криптографические операции на аппаратном уровне. Secure Boot обеспечивает безопасный путь, связывая аппаратную и программную часть системы. Целостность обеспечивается за счёт последнего. Дисковое шифрование в данном случае лишь препятствует отключению этого механизма.
Я говорю о любом системной загрузчике, совместимом с Secure Boot. Для GRUB2 требуется специальная обёртка, подписанная ключом Microsoft (т.к. ключ подписи MS присутствует в большинстве TPM). Конкретные инструкции по установке зависят от вашего Линукс-дистрибутива, поскольку данная подписанная обёртка загрузчика должна содержать ключи, которыми подписываются дальнейшие компоненты в цепи загрузки (образ ядра, драйверы и т.д.).
Изменить может, но при включенном Secure Boot ОС не загрузится, поскольку будет нарушена подпись ядра. Можно отключить Secure Boot в настройках BIOS, но если системный раздел был зашифрован ключом, который хранится в TPM, получить к нему доступ и загрузить систему станет невозможно.
Secure Boot — это не решение вашей задачи, это один из механизмов для её решения.
Злоумышленник может поставить свой TPM со своим ключом, и загрузить в BIOS NVRAM свои ключи (platform key и так далее), и в системный раздел записать ОС, зашифрованную своим ключом, верно? Компьютер будет загружаться, Secure Boot будет включён.
Проверка целостности ядра ОС — это только начало пути. Дальше ОС должна проверять целостность всех исполняемых файлов. Поэтому буду благодарен за советы по этой теме для линукса. Пока что нашёл dm-integrity и Linux Integrity Subsystem. Возможно, стоит вынести это в отдельную тему.
Так он может с тем же успехом заменить жёсткий диск. Какой смысл, если установленная система будет не вашей? Загрузочный пароль он как угадает?
Через какое-то время я замечу, что система не моя, но уже после того, как введу пароль шифрования. Он получит этот пароль.Загрузочный пароль вводится в BIOS?
Нет, я говорю о пароле к зашифрованному системному разделу. Смысл в том, что ключ должен формироваться из двух составляющих: хэша пароля и ключевого материала в TPM.
Тогда я вижу следующую атаку. Злоумышленник устанавливает свою ОС на SSD, сохраняя ОС пользователя, и настраивает BIOS так, что BIOS молча загружает ОС злоумышленника. ОС злоумышленника реализует man-in-the-middle, имитируя интерфейс пользователя BIOS, работая с пользователем, TPM, внешними устройствами и ОС пользователя. Не сработает, если материнка не позволяет работать с TPM как с внешним устройством.
В ходе поиска материалов в интернете узнал, что в современных CPU есть fTPM. Поскольку fTPM неотделим от процессора, это многое упрощает.
SATtva, я подумал над вашим предложением использовать TPM. Я согласен, что так будет работать. Скажем, процесс загрузки устроен следующим образом.
Осталось понять, как это реализовать в Linux.
Реализовать man-in-the-middle, как я его описал, конечно, будет трудновато. Но злоумышленнику достаточно имитировать процесс загрузки до формы ввода пароля включительно. Дальше ОС злоумышленника посылает пароль злоумышленнику. Вопрос, сможет ли злоумышленник замести следы после этого. Если нет, то пользователь изменит пароль, и злоумышленнику придётся начинать всё сначала. Злоумышленник сможет замести следы, если его ОС сможет без его присутствия включить Secure Boot, который он выключил, чтобы поставить свою ОС. По этому вопросу не могу найти информацию. Обсуждение на Reddit указывает, что это возможно как минимум в Lenovo Thinkpad с помощью инструментов Windows.[link1]
Впрочем, заметать следы не нужно. Злоумышленник забирает компьютер пользователя (или только его внутренности, нужные, чтобы ОС загрузилась), а пользователю подкладывает свой компьютер. Когда пользователь вводит пароль, злоумышленник получает этот пароль по интернету, вводит в компьютер пользователя и получает доступ. Выхода нет. ☹