tamper resistance против ребёнка


Я имел в виду защиту от несанкционированного доступа со стороны малоквалифицированного злоумышленника. Было трудно придумать короткое название для темы. :-) Злоумышленник не может заменить электронику и BIOS компьютера на вредоносные. Он может писать на носители информации в компьютере (SSD) и может заменить электронику и BIOS на другую честную электронику и BIOS. Предположим, материнская плата принимает только подписанные BIOS-ы.

Родилась следующая идея для реализации такой защиты. При включении компьютера пользователь загружает его с флэшки, которая сравнивает криптографический хэш программных файлов в компьютере со значением, которое хранится на самой флэшке. Если они равны, передаём управление ОС в компьютере.

Плюсы, минусы, подводные камни? А может, эта схема уже реализована где-то?

Комментарии
— SATtva (12/02/2021 10:11)   
Примерно это делает trusted boot, который поддерживает большинство UEFI BIOS при наличии TPM (в виде отдельного чипа или при поддержке стандарта со стороны CPU). Безопасность базируется на неизвлекаемости trusted root-ключа из модуля TPM.
— poptalk (18/02/2021 21:19)   
Насколько я понимаю, заменить TPM-модуль не проблема.
— poptalk (18/02/2021 21:20)   
Кстати, мне не пришло уведомление на почту о вашем комментарии.
— SATtva (19/02/2021 15:44)   

Заменяйте на здоровье, только после этого вы не загрузите систему — ключ в новом модуле будет другой.
— poptalk (23/02/2021 22:38, исправлен 23/02/2021 22:38)   

Каюсь, Secure Boot я знаю поверхностно. Разве Secure Boot нельзя отключить через настройку BIOS?

— SATtva (24/02/2021 13:40)   
Secure Boot имеет смысл в сочетании с дисковым шифрованием (в этом случае TPM обеспечивает защиту от evil maid attack, исключая подмену загрузчика). Если шифрование производится TPM-ключом, то после отключения Secure Boot невозможно будет произвести загрузку.
— poptalk (24/02/2021 16:01)   
Secure Boot имеет смысл в сочетании с дисковым шифрованием (в этом случае TPM обеспечивает защиту от evil maid attack, исключая подмену загрузчика).

Не понял как. Я слышал, что шифрование обеспечивает конфиденциальность, а не целостность. А для защиты от вмешательства (tampering) нужна именно целостность.

Кстати, о каком загрузчике вы говорите? GRUB2? В общем, для простоты предлагаю рассматривать схему загрузки, где UEFI BIOS загружает ядро линукса. Ядро и остальная часть ОС могут находиться на разных разделах.

Если шифрование производится TPM-ключом, то после отключения Secure Boot невозможно будет произвести загрузку.

Меня интересует, может ли злоумышленник изменить ОС так, чтобы она выглядела как раньше, но содержала зловредную программу, скажем, кейло́ггер. Злоумышленник может только менять информацию на SSD. Пока не вижу, как достичь этого с Secure Boot.
— SATtva (24/02/2021 17:26, исправлен 24/02/2021 17:37)   

TPM обеспечивает безопасное (со всеми оговорками) хранение ключевого материала и криптографические операции на аппаратном уровне. Secure Boot обеспечивает безопасный путь, связывая аппаратную и программную часть системы. Целостность обеспечивается за счёт последнего. Дисковое шифрование в данном случае лишь препятствует отключению этого механизма.



Я говорю о любом системной загрузчике, совместимом с Secure Boot. Для GRUB2 требуется специальная обёртка, подписанная ключом Microsoft (т.к. ключ подписи MS присутствует в большинстве TPM). Конкретные инструкции по установке зависят от вашего Линукс-дистрибутива, поскольку данная подписанная обёртка загрузчика должна содержать ключи, которыми подписываются дальнейшие компоненты в цепи загрузки (образ ядра, драйверы и т.д.).



Изменить может, но при включенном Secure Boot ОС не загрузится, поскольку будет нарушена подпись ядра. Можно отключить Secure Boot в настройках BIOS, но если системный раздел был зашифрован ключом, который хранится в TPM, получить к нему доступ и загрузить систему станет невозможно.


Secure Boot — это не решение вашей задачи, это один из механизмов для её решения.

— poptalk (24/02/2021 20:34)   
Можно отключить Secure Boot в настройках BIOS, но если системный раздел был зашифрован ключом, который хранится в TPM, получить к нему доступ и загрузить систему станет невозможно.

Злоумышленник может поставить свой TPM со своим ключом, и загрузить в BIOS NVRAM свои ключи (platform key и так далее), и в системный раздел записать ОС, зашифрованную своим ключом, верно? Компьютер будет загружаться, Secure Boot будет включён.
— poptalk (24/02/2021 20:37)   
Проверка целостности ядра ОС — это только начало пути. Дальше ОС должна проверять целостность всех исполняемых файлов. Поэтому буду благодарен за советы по этой теме для линукса. Пока что нашёл dm-integrity и Linux Integrity Subsystem. Возможно, стоит вынести это в отдельную тему.
— SATtva (24/02/2021 21:12)   

Так он может с тем же успехом заменить жёсткий диск. Какой смысл, если установленная система будет не вашей? Загрузочный пароль он как угадает?
— poptalk (24/02/2021 22:32, исправлен 24/02/2021 22:41)   
Так он может с тем же успехом заменить жёсткий диск. Какой смысл, если установленная система будет не вашей? Загрузочный пароль он как угадает?

Через какое-то время я замечу, что система не моя, но уже после того, как введу пароль шифрования. Он получит этот пароль.


Загрузочный пароль вводится в BIOS?

— SATtva (25/02/2021 12:04)   
Нет, я говорю о пароле к зашифрованному системному разделу. Смысл в том, что ключ должен формироваться из двух составляющих: хэша пароля и ключевого материала в TPM.
— poptalk (25/02/2021 14:36)   
Тогда я вижу следующую атаку. Злоумышленник устанавливает свою ОС на SSD, сохраняя ОС пользователя, и настраивает BIOS так, что BIOS молча загружает ОС злоумышленника. ОС злоумышленника реализует man-in-the-middle, имитируя интерфейс пользователя BIOS, работая с пользователем, TPM, внешними устройствами и ОС пользователя. Не сработает, если материнка не позволяет работать с TPM как с внешним устройством.
— poptalk (25/02/2021 21:40)   
В ходе поиска материалов в интернете узнал, что в современных CPU есть fTPM. Поскольку fTPM неотделим от процессора, это многое упрощает.
— poptalk (05/03/2021 15:29, исправлен 05/03/2021 15:53)   

SATtva, я подумал над вашим предложением использовать TPM. Я согласен, что так будет работать. Скажем, процесс загрузки устроен следующим образом.


  • TPM даёт ОС ключ K_0, если хэш конфигурации оборудования совпадает с тем, который записан в TPM.
  • Пользователь вводит пароль K_1.
  • ОС расшифровывает домашнюю директорию пользователя с помощью конкатенации K_0 и K_1.
  • ОС проверяет аутентичность остальных программ относительно конкатенации K_0 и K_1.
  • ОС показывает пользователю файл K_2, который хранится в домашней директории пользователя. Если показанное совпадает с тем, что помнит пользователь, то компьютер аутентичен. Это надёжнее, чем определять, моя ОС или не моя, по рабочему столу.

Осталось понять, как это реализовать в Linux.


Реализовать man-in-the-middle, как я его описал, конечно, будет трудновато. Но злоумышленнику достаточно имитировать процесс загрузки до формы ввода пароля включительно. Дальше ОС злоумышленника посылает пароль злоумышленнику. Вопрос, сможет ли злоумышленник замести следы после этого. Если нет, то пользователь изменит пароль, и злоумышленнику придётся начинать всё сначала. Злоумышленник сможет замести следы, если его ОС сможет без его присутствия включить Secure Boot, который он выключил, чтобы поставить свою ОС. По этому вопросу не могу найти информацию. Обсуждение на Reddit указывает, что это возможно как минимум в Lenovo Thinkpad с помощью инструментов Windows.[link1]

— poptalk (05/03/2021 16:56)   
Впрочем, заметать следы не нужно. Злоумышленник забирает компьютер пользователя (или только его внутренности, нужные, чтобы ОС загрузилась), а пользователю подкладывает свой компьютер. Когда пользователь вводит пароль, злоумышленник получает этот пароль по интернету, вводит в компьютер пользователя и получает доступ. Выхода нет. ☹

Ссылки
[link1] https://www.reddit.com/r/PowerShell/comments/atgwst/is_it_possible_to_enable_secure_boot_in_bios_via/