Обход полнодискового шифрования в Linux через непрерывное нажатие клавиши Enter

Майкл Финчем (Michael Fincham) из компании Pulse Security выявил уязвимость в реализации механизма разблокировки полнодискового шифрования, позволяющую при наличии физического доступа к компьютеру выполнить свои команды с правами root на раннем этапе загрузки, вручную снять блокировку с шифрованного диска и получить полный доступ к информации, хранимой на дисках. Уязвимость затрагивает Linux-системы в которых используется формат шифрования LUKS (Linux Unified Key Setup), механизмы защиты ключей на базе TPM (Trusted Platform Module) и компоненты Clevis, dracut и systemd для организации автоматической разблокировки во время загрузки.

Метод атаки напоминает выявленную в 2016 году уязвимость в пакете Cryptsetup, позволявшую получить доступ с правами root в командную оболочку начального загрузочного окружения при удерживании клавиши Enter в ответ на запрос ввода пароля для разблокировки зашифрованного раздела. Новый вариант атаки был выявлен после проверки как отреагирует система, если генерировать нажатия Enter не вручную, а при помощи эмулятора клавиатуры, обеспечивающего минимально возможную задержку между нажатиями. Для проведения эксперимента был собран USB-брелок на базе микроконтроллера Atmel ATMEGA32U4, непрерывно симулирующий нажатие Enter c задержкой на уровне 15 миллисекунд, что примерно в 10 раз больше, чем при удерживании клавиши на обычной клавиатуре.

Успешная атака продемонстрирована в удовлетворяющей вышеотмеченным требованиям конфигурации на базе Ubuntu 20.04, которая применялась одним из клиентов Pulse Security. Подобные конфигурации на базе фреймворка Clevis и хранения ключей в TPM обычно применяются, когда необходимо обеспечить шифрование дисков на удалённых серверах, на которых нет возможности после каждой перезагрузки вручную вводить пароль для разблокировки зашифрованных дисков. При этом помимо автоматизированной разблокировки в подобных системах остаётся и возможность ручного ввода пароля разблокировки зашифрованного раздела, которая оставлена на случай сбоя автоматизированного процесса разблокировки.

Атака сводится к тому, что злоумышленник может подключить устройство для симуляции непрерывного нажатия Enter, откатить процесс загрузки на ручной ввод пароля разблокировки и успеть исчерпать максимальный лимит на число попыток ввода пароля в небольшой промежуток времени до окончания выполнения обработчика автоматической разблокировки (автоматическая разблокировка требует времени и симулируя очень быстрые нажатия Enter можно успеть завершить выполнение процесса ручной разблокировки раньше, чем отработает параллельно запущенный процесс автоматической разблокировки). Systemd, получив управление после неудачных попыток ручной разблокировки, не сможет получить доступ к файловым системам на зашифрованных дисках, предложит перейти в режим восстановления после сбоя и предоставит доступ к командной оболочке с правами root в окружении загрузочного ram-диска.




Далее, так как ключи для разблокировки хранятся в TPM, атакующий, сохраняя за собой доступ с правами root, может инициировать штатный процесс автоматической разблокировки зашифрованных дисков при помощи инструментария Clevis и примонтировать корневой раздел из зашифрованного диска.


В качестве возможной меры для защиты от атаки рекомендуется выставить при загрузке параметры ядра rd.shell=0 и rd.emergency=reboot, при которых в случае сбоя на раннем этапе загрузки будет выполнена автоматическая перезагрузка, а не переход в интерактивный сеанс.

Release. Ссылка here.