Подключение сниффера к модулю TPM по шине LPC
Полнодисковое шифрование BitLocker в ОС Windows считается довольно надёжным способом сохранения данных. По умолчанию оно использует алгоритм Advanced Encryption Standard (AES) в режиме сцепления блоков (CBC) или в режиме подстроенной кодовой книги с кражей шифротекста (XTS) на базе xor-encrypt-xor (XEX) со 128- или 256-битным ключом.
В теории это довольно крепкая схема. Проблема только в том, что секретный ключ BitLocker хранится в Trusted Platform Module (TPM), а в некоторых случаях (на некоторых компьютерах) его можно извлечь, получив физический доступ к устройству.
BitLocker
Полнодисковое шифрование в Windows 10 можно включить в меню «Панель управления» → «Система и безопасность» → «Шифрование диска BitLocker».
TPM (англ. Trusted Platform Module) — спецификация, описывающая криптографический процессор, в котором хранятся криптографические ключи для защиты информации. Как видно на скриншоте, BitLocker имеет возможность работать и без совместимого криптопроцессора. В этом случае ключи хранятся в другом месте.
Если вкратце, BitLocker шифрует данные с помощью ключа шифрования полного тома (FVEK). В свою очередь, этот ключ шифруется с помощью мастер-ключа тома (VMK).
Ключ VMK шифруется несколькими «протекторами». В конфигурации по умолчанию их два. Один — TPM, другой — ключ восстановления:
Всё это сделано для того, чтобы злоумышленник, имея физический доступ к устройству, не смог загрузить на ноутбуке Linux (или извлечь диск) и получить доступ к данным.
Шифрование в режиме сцепления блоков (CBC)
BitLocker в конфигурации по умолчанию не требует дополнительного вмешательства пользователя. Это связано с тем, что TPM используется только для расшифровки VMK. Любые изменения в BIOS или коде загрузчика изменят регистры конфигурации (PCR), и TPM не откроет VMK.
Шифрование в режиме xor-encrypt-xor (XEX)
Поскольку расшифровка данных происходит автоматически, то достаточно перехватить VMK из TPM, ввести его в любую библиотеку BitLocker — и расшифровать диск.
Извлечение ключа
Ключи из TPM можно извлечь с помощью недорогого модуля FPGA или логического анализатора. Первым этот способ в 2019 году продемонстрировал хакер Денис Андзакович (Denis Andzakovic) из компании Pulse Security. Он опубликовал proof-of concept и исходный код сниффера.
Сниффер подключается к шине LPC, откуда получает мастер-ключ для шифрования тома. Этим ключом можно расшифровать диск. В демонстрации 2019 года использовались ноутбук HP с чипом TPM 1.2 и планшет Surface Pro 3 с чипом TPM 2.0, что указывает на уязвимость обеих версий TPM. Для атаки автор применил логический анализатор DSLogic Plus 16 (стоимость около $150).
На материнской плате HP установлена микросхема Infineon SLB96350. Она выполняет роль криптопроцессора и подключена по шине LPC:
К этой шине и подключается сниффер:
Поскольку LPC работает на частоте 33 МГц, инженер выставил частоту сбора данных на 100 МГц:
После декодирования пакетов по шине LPC остаётся лишь найти ключ VMK в дампе записанного трафика. Его можно найти по заголовку
0x2c 0x00 0x00 0x00
.Через несколько байт после заголовка начинается тело ключа.
Для прослушивания ключа Surface Pro 3 специалист использовал девкит Lattice ICEStick, который продаётся по цене около $49.
В 2021 году эксперимент Дениса со сниффингом ключа Bitlocker воспроизвели специалисты из компании SCRT Information Security на ноутбуке Lenovo ThinkPad L440 с криптопроцессором ST Microelectronics P24JPVSP (эквивалент чипа ST33TPM12LPC).
В данном случае использовалось аналогичное FPGA-устройство iCEstick40 от Lattice Semiconductor и программный сниффер с некоторыми модификациями для прослушивания именно TPM.
Найдя в дампе вышеупомянутый заголовок ключа, затем он извлекается целиком с помощью команды
grep
и записи 32-ти последующих hex-значений:$ cut -f 2 -d\' log6 | grep '24..00$' | perl -pe 's/.{8}(..)..\n/$1/' | grep -Po "2c0000000100000003200000(..){32}"
2c00000001000000032000005af9490916013a0bc177b3301d41508c4af8abb8583de5e4c60bbbabafad8a3a
Расшифровка диска выполняется программой
dislocker
, которая в последних версиях поддерживает опцию --vmk
и принимает напрямую ключи VMK без реконструкции FVEK:$ hexdump -C vmk
00000000 5a f9 49 09 16 01 3a 0b c1 27 b3 30 1d 41 50 8c
00000010 4a f8 ab b8 58 3d e5 e4 c6 0b bb ab cf ad 8a 3a
$ sudo dislocker -v -V /dev/sdb3 --vmk vmk -- /media/bl
$ sudo mount -o ro,loop /media/bl/dislocker-file /media/blm
$ ls /media/blm
'$RECYCLE.BIN' ESD pagefile.sys 'Program Files (x86)' Users
'$SysReset' hiberfil.sys PerfLogs Recovery Windows
Chocolatey install ProgramData swapfile.sys
'Documents and Settings' Intel 'Program Files' 'System Volume Information'
Таким образом, в случае потери/кражи ноутбука при использовании BitLocker на сохранность данных не всегда можно положиться. Важно понимать, какой именно модуль TPM используется в устройстве. Если он не совмещён с CPU и находится отдельной микросхеме, то насколько шина уязвима для сниффинга. TPM обычно подключается по низкоскоростной шине LPC, I2C или SPI, которая работает на частоте 25−33 МГц и легко доступна для прослушивания на дешёвом оборудовании.
Несколько недель назад появилась информация, что в качестве сниффера можно использовать даже Raspberry Pi Pico стоимостью $4, а весь процесс занимает меньше минуты.
Но есть и положительный аспект: если пользователь забыл свой пароль или пинкод BitLocker, то в некоторых компьютерах файлы всё равно можно восстановить.
Microsoft опубликовала рекомендации по дополнительной защите при использовании BitLocker. Компания рекомендует добавить дополнительный фактор аутентификации перед загрузкой (например, пинкод).
Комментарии (29)
ispodvupodverta
07.04.2024 19:28+1>> Но есть и положительный аспект: если пользователь забыл свой пароль или пинкод BitLocker, то в некоторых компьютерах файлы всё равно можно восстановить.
>> Microsoft опубликовала рекомендации по дополнительной защите при использовании BitLocker. Компания рекомендует добавить дополнительный фактор аутентификации перед загрузкой (например, пинкод).
Эти параграфы взаимоисключающие, не так ли? С пинкодом это уже не конфигурация по умолчанию, и перехватив по шине ключ от TPM не является полноценным VMK, а чем-то что требует преобразования как раз таки с пинкодом, чтобы получить VMK (блок TPM and PIN на блоксхеме).
iburanguloff
07.04.2024 19:28+2Но есть и положительный аспект: если пользователь забыл свой пароль или пинкод BitLocker, то в некоторых компьютерах файлы всё равно можно восстановить.
Получится то же самое что и написать пинкод на банковской карте. Если злоумышленник получит к ней физический доступ, то вы потеряете все средства. Но есть и положительный аспект: если забыли пинкод, то его можно посмотреть
mxr
07.04.2024 19:28+2Ставим Veracrypt и забываем о проблемах с TPM, один хер не поддерживает.
dartraiden
07.04.2024 19:28+1VeraCrypt давно поддерживает TPM, эта возможность есть в загрузчике и настраивается ручной правкой конфига. Равно как и возможность вместо пароля использовать графический ключ в виде картинки, на разные участки которого следует нажимать. Просто эти возможности добавлены для опытных пользователей, особо не тестировались, в графических настройках и документации отсутствуют и поэтому не афишируются.
Кроме того, отказываясь от хранения ключа в TPM, вы лишаетесь возможности прозрачно расшифровать накопитель при загрузке. Выше в комментариях я привел сценарий, когда это необходимо.
not-allowed-here
07.04.2024 19:28тому кому реально нужна полнодисковая криптография TPM не поможет да и SED только второй, а то и третий уровень защиты.....
тому кому Хватает TPM скорее всего не нужна полнодисковая криптография...
Hint
07.04.2024 19:28Почему? Чем плох BitLocker с TPM с включенным pin-кодом, который нужно вводить каждый раз до запуска системы? А плюсы очевидны - это штука поддерживается системой из коробки, работает стабильно, не глючит, меньше переживаний за сохранность данных на диске.
friend001002
07.04.2024 19:28+1Он плох тем, что пин не является выбором по-умолчанию. Я сам активировал BitLocker на ноуте и когда он не спросил меня пароль для расшифровки, я решил, что пароль тот же, что и пароль юзера. Что меня должно было побудить подумать "что-то не так" и пойти разбираться как включить пин и что он вообще существует? Ничего не побудило. MS вполне могли использовать пароль учётки для шифрования, вот я и предположил, что они так и сделали. Вот если бы Винда сразу мне сказала, что будет использоваться TPM и сразу предложила использовать вместо него пин, тогда всё было бы хорошо.
not-allowed-here
07.04.2024 19:28тем что это не защита, а её не самая правильная имитация.... если полноценный ключ можно выяснить съемом дампа с незащищенной ни чем шины, не удивлюсь если реализация PIN-кода(причем ограниченного от 4 до 20 цирф) будет тоже с особенностями..... или там не окажется верификации или даже тупого счетчика числа попыток и PIN будт брутится на частоте 20-30 мегахеш....
суть в том что это "защита" от честных людей не более.....
Hint
07.04.2024 19:28Можно установить произвольный пароль с цифрами, буквами и символами: https://learn.microsoft.com/en-us/powershell/module/configurationmanager/new-cmenhancedpin?view=sccm-ps
Я совсем не эксперт, но пытался разобраться, как это всё работает, когда впервые настраивал BitLocker. И вот если PIN нет, то ключ передается из BitLocker в систему, можно перехватить (Windows загружена, блокировка только на уровне учетной записи пользователя). А если есть, то PIN проверяется внутри TPM, ключи не покидают модуль. И примитивный bruteforce невозможен, потому что в TPM есть встроенная защита от перебора.
Если хочешь что-то перебрать, то можно просто перебрать 16 байт ключа восстановления, который не привязан к TPM.
friend001002
07.04.2024 19:28Да, уже поставил пин. Но без того видео на Ютубе или этой статьи я бы так и не узнал, что Мелкомягкие такие хреновые настройки по-умолчанию выставили.
dartraiden
07.04.2024 19:28Они не хреновые. BitLocker по задумке майков может выполнять роль средства авторизации (пароль/PIN), но предназначен слегка для иного.
Авторизацией, по-хорошему, занимается не BitLocker, а Windows.
Если вы пользуетесь машиной один, то вы можете и авторизацию переложить на BitLocker. Если не один - то это уже не очень удобно.
friend001002
07.04.2024 19:28Не совсем. Шифрование данных в шине TPM предусмотрено стандартом, но, насколько я помню, почти ни один производитель его не юзает. Так, наверное, дешевле. Но если сильно поискать, то наверняка можно найти систему с включённым шифрованием данных из/в TPM. Разумеется, стоило Интелу, MS или кто там топит за TPM клеить на всякую дрянь (то есть 90+% рынка) шильдик "недо-TPM"
xenon
07.04.2024 19:28Про защиту от честных людей... Я вот не уверен, что это так, что если эта возможность для хитрого и нечестного оставлена специально? Ну как бэкдор для спецслужб, например.
Вспоминается генератор паролей от ФСБ (т.е. от Касперского), который ослаблял пароли в какие-то астрономические квадриллионы раз. Пароль-то он генерировал "как все", через PRNG. И инициализировал PRNG как в школе на информатике учат - через time(). Получался - замечательно выглядящий пароль. Длинный, с разными буквами, цифрами, фигурными скобочками - пальцы сломаешь, пока наберешь! Как посмотришь - первое впечатление - ну ооочень хороший пароль.
Вот только в сутках всего 86400 секунд. Если два человека создают пароли в одну секунду - они у них совпадают. Да и просто - дата вашей регистрации на хабре публична, то есть, если кто-то знает, что вы поставили пароль от касперского в определенный день, ему не нужно перебирать секстиллионы квадриллионов комбинаций, ему достаточно перебрать скромые 86400 паролей. А если знает хобя бы год (например, если сервис принуждает менять пароли ежегодно) - ну всего 31.5 миллиона комбинаций.
0x6b73ca
07.04.2024 19:28Вспомнилась статья о том что некоторые производители ноутов используют модули биометрии которые не передают данные сканирования в систему а хранят в себе и только отправляют команду что пользователь прошел верификацию, таким образом удалось продублировать команду и устройство было разблокировано
xenon
07.04.2024 19:28Вроде датчик отпечатка пальца в обычном телефоне так и работает. Приложение - никакие данные о пальце не получает, проверка отпечатка на уровне ОС происходит (но вот не знаю - программно или прямо аппаратно? ОС сверяет с эталонными отпечатками или они тоже загружаются в датчик). А приложение только знает, что только что к датчику коснулись "правильным" пальцем, каким надо - таким и коснулись, без подробностей. Булевый ответ.
kilobait3
07.04.2024 19:28Битлокер ещё эшелон взломали и уже на следующий день. Все данные в открытом доступе. Вам нужен только программатор sp. Снимал защиту даже с массива.
dartraiden
07.04.2024 19:28Сколько я видел заявлений про "взлом BitLocker", они все делятся на 2 категории
вытащили ключ из TPM при условии, что TPM был единственным предохранителем (т.е. это уязвимость не BitLocker, а конкретной реализации TPM)
"у друга приятеля менты совместно со сволочами из лаборатории касперского изъяли комп и вскрыли битлокер" (реально видел в одном тг-чатике, достоверность этого заявления всерьёз воспринимать, конечно, невозможно)
VADemon
07.04.2024 19:28Also presented at the Jamboree were successes in the targeting of Microsoft’s disk encryption technology, and the TPM chips that are used to store its encryption keys. Researchers at the CIA conference in 2010 boasted about the ability to extract the encryption keys used by BitLocker and thus decrypt private data stored on the computer.
Starting with Windows 8, Microsoft removed the Elephant Diffuser from BitLocker. I see no reason to remove it other than to make the encryption weaker.
А теперь бэкап ключа шифрования в облаке.
dartraiden
07.04.2024 19:28+1Включайте шифрование из консоли (
manage-bde
), там бэкап не требуется - вам выплевывают резервный ключ в консоль и на этом всё: сделаете вы его бэкап, не сделаете, куда сделаете - на вашей совести.
neowisard
07.04.2024 19:28+1Вот что за подстава).
Только поставил новую ubuntu с full disk encryption. через TPM., ее наконец то в экспериментальном режиме реализовали.
Это с одной стороны чуть лучше чем zfs с luks, с другой частичная потеря плюшек от zfs.
Радует что процесс сам по себе стоит условные пару тысяч баксов и мало кому доступен, ибо вот на вскидку все слова понял в статье, но наврядли смогу повторить на своём msi ноуте.
sn-dv
TrueCrypt решает проблему )))
ohno1052
LUKS на весь корень / на хомяк через systemd-homed решает проблему
Zrgk
А не dm-crypt?
Alexsey
Да достаточно просто в битлокере поверх TPM еще и пароль поставить и вопрос решен. Доверять одному TPM - так себе затея.
Ratenti
А смысл в TPM, если без пароля запускается?
dartraiden
Смысл в том, чтобы BitLocker защищал от кражи накопителя. Вы не сможете украсть накопитель и расшифровать его на другой машине. А конкретно на этой машине он расшифровывается автоматически прозрачно для пользователя.
Да, конечно, вы можете зашифровать накопитель с использованием пароля. Но тогда:
1) пользователю придётся либо вводить два пароля (BitLocker + Windows), либо настраивать автовход в Windows, что не приемлемо, когда машиной пользуется несколько пользователей с разными учётками
2) пароль от BitLocker придётся сообщить каждому пользователю, что увеличивает риск компрометации. А при компрометации придётся до каждого пользователя довести новый пароль, т.к. он один на всю машину.
Для корпоративного использования удобно, когда BitLocker расшифровывает накопитель прозрачно для пользователя, а затем уже Windows осуществляет авторизацию в системе (экран входа в систему). При этом, у каждого пользователя свой единственный пароль (от учётки Windows).
Для домашнего использования, когда у машины лишь один пользователь, авторизацию можно возложить на BitLocker, зашифровав накопитель с паролем, а в Windows настроить автовход.
friend001002
Я так и вижу вора. который вместо кражи моего ноута целиком в спешке вытаскивает из него SSD. Хотя, в случае с серверами достать отдельный диск просто и легко. Когда я работал в Касперском, Битлокер у нас был с пин-кодом, и никакой проблемы вводить два пароля я не испытывал. В любом случае, было бы лучше иметь простой способ выставить пин-код при желании. Сейчас это сделать не так легко, что уменьшает количество пользоваталей с пином.
xenon
Чтобы решить и вторую угрозу (то что бандиты/фсб заберут весь комп) нужно выпускать материнскую плату 2*2 метра. Чтобы даже в дверь обратно не вытащить. Но на стенку закрепил и можно норм работать.
Интересно, сильно ли замедлится у нее производительность, т.к. между компонентами расстояния теперь во много раз больше....
dartraiden
Не решает. TrueCrypt не поддерживает TPM и соответственно не умеет в прозрачную расшифровку накопителя вовсе. Выше в ветке я показывал сценарий, при котором нужна прозрачная расшифровка.
VeraCrypt поддерживает хранение в TPM, но она точно так же уязвима к этой атаке.
Это уязвимость самого TPM, а не конкретного ПО, использующего TPM. Просто демонстрируется на примере BitLocker.