
Доказательство концепции, демонстрирующее обход привязанного к TPM шифрования диска LUKS в Linux-системах, с извлечением ключей тома через атаку с использованием пользовательской корневой файловой системы.
В этом репозитории содержится простой proof-of-concept код, эксплуатирующий распространённую слабость, впервые описанную более года назад на https://oddlama.org/blog/bypassing-disk-encryption-with-tpm2-unlock/. Хотя он конкретно нацелен на IncusOS, атака довольно универсальна против большинства современных Linux-систем.
Если вы привязываете своё LUKS-шифрование к TPM, убедитесь, что вы также установили PIN-код для TPM.
Это быстрый и черновой PoC. Он не полностью отполирован, и есть некоторые шероховатости. Поддержки нет, и я не планирую дальнейшего развития.
Я, как и большинство людей, предполагал, что настройка LUKS-шифрования диска, привязанного к TPM-чипу моего ноутбука, будет безопасной и предотвратит возможность извлечения злоумышленником ключа тома LUKS (также известного как мастер-ключ). Оказалось, что это почти удручающе просто сделать, не оставляя следов атаки.
Да, проблема в том, что злоумышленник может предоставить собственную корневую файловую систему, и после загрузки вашей системы TPM будет находиться в известном «хорошем» состоянии, в котором он с радостью разблокирует ваш LUKS-том. Затем злоумышленник может делать всё, что захочет, и легко скрыть любые улики атаки.
Но подготовленному злоумышленнику буквально нужно лишь подержать ваш компьютер в своих руках пару минут — и вы взломаны. Оставили ноутбук в гостиничном номере, уйдя на ужин? А как насчёт контрольно-пропускного пункта, где вас отводят в сторону для допроса? Да, это нехорошо.
Скрипт ./prepare.sh выполняет шаги, необходимые для компрометации целевой виртуальной машины. Те же шаги легко можно выполнить против реального жёсткого диска, временно извлечённого из его обычного корпуса.
Собственно «эксплойт» извлечёт исходный ключ тома LUKS, который можно увидеть, просмотрев журнал для attack.service. Возможно множество вариаций этой атаки.
Запустите ./restore.sh, чтобы стереть все улики ваших деяний, пока вы уходите с ключом тома LUKS вашей жертвы.