• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья ТПМ сниффинг

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
TL;DR: Мы воспроизвели ПОК Дениса Андзаковича, который показывает, что можно читать и записывать данные с устройства, защищенного BitLocker (например, украденного ноутбука), прослушивая ключ TPM из шины LCP.

Авторы: Томас Деваэле и Жюльен Оберсон

Особая благодарность Денису Андзаковичу за его ПОК и Джо Гранду (@joegrand) за его обучение взлому оборудования на Insomni’hack 2018.

Теория

Bitlocker — это решение Full Disk Encryption (FDE), предлагаемое Microsoft для своих операционных систем Windows, начиная с Windows Vista, для защиты хранящихся данных пользователей. Решение предлагает различные конфигурации, включая несколько способов хранения ключа дешифрования. Наиболее распространенная конфигурация заключается в хранении главного ключа тома (VMK) в модуле Trusted Platform Module (TPM), встроенном в последние компьютеры.

Эта установка интересна тем, что расшифровка полностью прозрачна для пользователя. Это преимущество превосходит другие, поскольку многие компании не хотят настраивать дополнительный пароль/ПИН-код для загрузки пользователем своего компьютера. Недостатком является то, что он открывает дверь для нескольких атак, включая анализ TPM, описанный в этой статей, а также атаки DMA или Cold Boot.

Под капотом TPM проверяет различные свойства системы во время запуска, чтобы убедиться, что последовательность загрузки не была изменена. Если проверка проходит успешно, VMK освобождается и передается на ЦП, который может начать расшифровку диска и загрузку операционной системы.

В зависимости от аппаратного обеспечения TPM может быть подключен к материнской плате с помощью нескольких каналов связи, включая LPC, I2C или SPI. Эти шины имеют общее свойство, а именно низкую скорость передачи (тактовая частота обычно составляет около 25 Мгц). Это не является проблемой для решения, потому что необходимо передавать только ограниченное количество данных, но это упрощает прослушивание каналов, поскольку требуемое оборудование является недорогим.

Поиск TPM

Первым шагом для выполнения этой атаки является определение правильного места для исследования. Конечно, расположение зависит от каждой материнской платы. В нашем случае испытуемым ноутбуком был Lenovo ThinkPad L440.

Лучший способ найти коммуникационную шину — это получить схемы материнской платы, но мы смогли найти только один веб-сайт со схемами для L440, и они выглядят немного хитроумно.

1660290859295.png


Оплата схем материнской платы через Western Union: кажется законной.

Вместо этого мы решили пойти по по другому и выбрали ручной путь и и начали наше путешествие с поиска чипа TPM. Эти чипы обычно поставляются в корпусах TSSOP28 или VQFN32. Мы обнаружили чип TSSOP28 с маркировкой P24JPVSP под трекпадом, и Google, похоже, указал, что он связан с TPM:

1660290874257.png


Микросхема TPM (внизу справа) и отладочные площадки (вверху слева).

Судя по логотипу, чип произведен компанией ST Microelectronics, но референс P24JPVSP на сайте st.com не найден. После некоторых обоснованных предположений и еще нескольких поисков в Google мы пришли к выводу, что он, вероятно, эквивалентен чипу ST33TPM12LPC, который использует LPC для связи. Вот распиновка из даташита:

1660290889270.png


Распиновка ST33TPM12LPC.

Чтобы получить кадры LPC, нам нужно проверить следующие 6 сигналов (+ земля):

1660290901662.png


Описания необходимых сигналов для декодирования кадров LPC.

LAD0, LAD1, LAD2 и LAD3 — это 4-битная шина, по которой фактически происходит обмен данными с микросхемой. Сигнал кадра используется, чтобы указать, когда отдельные кадры LPC начинаются или заканчиваются. Тактовый сигнал представляет собой просто циклический тик с постоянной частотой (в нашем случае 25 МГц), который используется для синхронизации всех остальных сигналов.

Теперь, если (1) у вас есть подходящее оборудование и (2) вы уверены в своих навыках микропайки, вы можете припаять провода непосредственно к этим контактам, чтобы прикрепить щупы, но расстояние между каждым контактом составляет всего 0,65 миллиметра ( для наших слабовидящих читателей это 0,4 миллионной мили). Мы не выполнили несколько из этих двух требований.

К счастью, на плате нередко можно найти более удобные места, которые подключаются к этим контактам. Как вы можете видеть на картинке выше, непосредственно рядом с чипом есть 6 контактных площадок, и вы можете пройти по дорожкам, чтобы получить следующую распиновку:

1660290923585.png


К сожалению, сигнал LCLK отсутствует! Похоже, что дорожка, идущая к этому контакту, идет с другой стороны материнской платы. На нижней стороне он находится под модулем WiFi и изначально был заклеен черной изолентой:

1660290933473.png


Сюрприз! Отладочные площадки LPC пытались спрятать, но мы застали их врасплох (отсюда и смазанная картинка).

Мы были рады обнаружить эти (относительно) большие отладочные площадки LPC, а это означает, что нам не только будет легче припаивать туда щупы, но также мы можем провести атаку, просто сняв нижнюю панель без необходимости разбирать весь ноутбук и сборка клавиатуры.

С помощью мультиметра в режиме прозвонки мы определили распиновку этих контактных площадок (что было немного акробатично, так как микросхема находится на другой стороне платы). К сожалению, нам по-прежнему не хватало LCLK, а одна из площадок вроде бы ни к чему не была подключена. Мы подумали, что это слишком большое совпадение, и, конечно же, эта неизвестная контактная площадка на самом деле была LCLK, за исключением того, что цепь проходит через несколько резисторов между контактной площадкой и контактом.

В этот момент мы, вероятно, могли бы YOLO'ировать это и надеялись, что наше предположение было правильным, но мы думали, что на самом деле попытаемся купить схемы материнской платы на странном веб-сайте, упомянутом в начале.

Мы заплатили 20 долларов через PayPal, полностью ожидая мошенничества, но через 15 минут мы получили электронное письмо с адреса GMail с несколькими архивами .rar, содержащими файл BoardView и программное обеспечение. Естественно, мы открыли архивы и запустили программное обеспечение на нашем производственном контроллере домена, и оно было действительно законным! Мы могли подтвердить, что загадочная панель отладки действительно была тактовым генератором LPC, проходящим через некоторые резисторы и микросхему, смонтированную на BGA (нам бы пришлось нелегко, выполняя тесты под ним!)

1660290956058.png


Возвращение сигнала LCLK к площадкам отладки LPC.

Ниже приведена распиновка отладочных площадок LPC, и мы, наконец, получили все необходимые сигналы. Мы также заметили, благодаря схемам, что путь тактового сигнала от микросхемы до отладочной площадки не был полным, и нам пришлось создать запаяный мост, чтобы соединить их (см. резистор R1806).

1660290972727.png


Сигнал LCLK на отладочных площадках LPC и положение моста (R1806).

1660290982369.png


Паяльная перемычка для связи тактового сигнала между чипом и отладочной площадкой.

Подключение сниффера

Найдя лучшее место для зондирования, мы припаяли несколько проводов к отладочным площадкам LPC, чтобы легко подключить сниффер.

1660290998282.png


Слева направо: LDA[0:3], LFRAME, LCLK и земля.

Мы начали с подключения логического анализатора MSO 19.2 для наблюдения за трафиком. Согласно паспорту производителя, буфер LA недостаточно велик, чтобы захватить всю последовательность запуска, поэтому устройство использовалось только для проверки правильности извлечения данных. Сделав это, мы смогли подтвердить, что форма сигнала соответствует трафику LPC.

1660291018426.png


Трассировка LPC с сигналом CLK белым, сигналом FRAME красным и DATA[0:3] на каналах 3,4,5,6.

Чтобы обойти ограничение буфера, мы использовали устройство на базе FPGA производства Lattice Semiconductor, а именно iCEstick40. Это то же самое оборудование, которое Денис Андзакович использовал для попытки прослушивания TPM 2.0 (за исключением того, что наше устройство заключено в причудливую домашнюю 3D-печатную коробку!)

Мы подключили сниффер по распиновке, указанной в репозитории сниффера LPC на Github, с помощью зажимов для щупов к ранее припаянным проводам. Зажимы обеспечивали хорошее соединение с припаянными проводами, но соединение с модулем сниффера было менее надежным. Чтобы уменьшить движения и, следовательно, ограничить проблемы с контактом, вилки были затянуты путем сжатия нижней части металлического разъема.

1660291034423.png


Зацепление щупа с помощью зажимов зонда (1).

1660291044865.png


Зацепление щупа с помощью зажимов зонда (2).

1660291055479.png


Зондовые соединения со сниффером; Крупный план на коробке

1660291063757.png


Получение данных

Сбор данных был выполнен с использованием модифицированной версии LPC Sniffer. Прошивка была изменена Денисом Андзаковичем для экономии буферного хранилища и, следовательно, задержки переполнения за счет записи только адресов 0x00000024, связанных с TPM.

После прошивки устройства можно использовать скрипт Python read_serial.py для получения кадров LPC. Следующая команда выполняется на сниффинг-компьютере, затем включается целевой ноутбук, чтобы TPM мог проверить регистры PCR, освободить VMK и передать его по шине LPC.

Как показано в выходных данных ниже, в выходной файл журнала записываются только кадры, начинающиеся с 24.

1660291089245.png


После завершения последовательности загрузки скрипт останавливается. Собранные данные были обработаны для удаления заголовка кадра и сохранения только фактических данных. Затем команда grep используется для извлечения заголовка VMK, за которым следует ключ (32 следующих шестнадцатеричных символа), как показано ниже.

1660291098396.png


Ключевые значения, наблюдаемые в шине, каждый раз не были точно такими же. Такое поведение, вероятно, связано с соединением сниффера, которое далеко от совершенства даже после сеанса натягивания сокета. Поскольку ошибки передачи возникают случайным образом, их было относительно легко идентифицировать путем сравнения нескольких измерений. В таблице ниже показаны значения, полученные во время четырех загрузок.

1660291110307.png


Сравнение нескольких перехваченных данных и окончательный ключ в правом столбце.

Расшифровка диска

Имея на руках ключ дешифрования, можно было расшифровать локальный диск благодаря dislocker. Последняя версия инструмента на момент написания — 0.7.2, и она поддерживает параметр --vmk, который позволяет напрямую указать VMK без необходимости воссоздавать FVEK. VMK должен быть помещен в двоичный файл, как показано ниже.

1660291126079.png


На этом этапе можно было бы полностью обойти защиту Bitlocker и обычно:

- получить доступ и изменить любой сохраненный файл;
- украсть локальную базу паролей в том числе;
-- локальные учетные записи в улье SAM
-- последние десять пользователей, подключенных к домену, благодаря MSCACHE
- заблокировать машину вредоносным ПО

Вывод


Подводя итог, мы смогли получить ключ Bitlocker за пару дней с модулем FPGA за 49 долларов, используя только инструменты, доступные в магазинах DIY. Операция оказалась проще, чем мы ожидали, особенно если учесть, что это была наша первая аппаратная атака и что многие компании полагаются на конфигурацию только с TPM.

Конечно, все это было бы невозможно (по крайней мере, за такое короткое время) без работы многих других исследователей безопасности, которые обнаружили проблему, написали статьи и опубликовали свои инструменты.

Схемы материнской платы очень помогли найти расположение отладочных площадок.

Однако важно подчеркнуть, что лучшие навыки пайки позволили бы прикрепить соединения непосредственно к самой микросхеме TPM, что избавило бы от необходимости отслеживать соединения.

Рекомендация

Чтобы избежать атаки с перехватом TPM, самым простым способом было бы настроить Bitlocker для использования дополнительного фактора аутентификации перед загрузкой, такого как PIN-код. Некоторые другие факторы, такие как USB-устройства или смарт-карты, также могут работать, но обычно считаются менее удобными для пользователя.

Конечно, это изменение конфигурации подразумевает, что пользователям придется вводить дополнительную информацию при загрузке компьютера.

Недавно выпущенная ОС Windows 11 требует использования чипа TPM 2.0, который был разработан для обеспечения зашифрованной связи. Это предварительное условие может открыть двери для правильного способа защиты передачи, не требуя от пользователя добавления второго фактора аутентификации. Однако обратите внимание, что это изменение технически предотвратит прослушивание TPM, но не другие физические атаки.

Дополнительные сведения о мерах противодействия Bitlocker также можно найти в специальном посте Microsoft.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх