Опасная периферия: разбираемся в Thunderspy
Год от года мы наблюдаем технический прогресс: мощность компьютеров растет, скорости передачи данных увеличиваются, появляются новые стандарты… Но, как говорилось в одном известном фильме, с великой силой приходит великая ответственность! Что мы получаем (помимо большой скорости) от новых стандартов и интерфейсов? Какие угрозы таят в себе Thunderbolt и USB4? Так ли опасен Thunderspy, как его описывают? Давайте разберемся!
В своей самой «минимальной» комплектации компьютер состоит всего из двух частей: процессора и оперативной памяти. В оперативной памяти находится программный код, исполняемый процессором, и данные, с которыми он работает. Но сам по себе такой компьютер бесполезен: несмотря на то, что он сам себе что-то там считает, мы ни «сказать» ему ничего не можем, ни результатов получить. И вот здесь требуется периферия:
Предок современного ПК, процессор Intel 8086, имел общие шины адреса и данных для обращения как к памяти, так и ко внешним устройствам ввода-вывода (Input/Output, I/O). Если требовался доступ к I/O, процессор сообщал об этом сигналом на специальном выводе «IO/M», после чего выполнял чтение или запись в нужный порт. Выглядело это как дополнительное адресное пространство с адресами от 0×0000 до 0xFFFF:
Механизм I/O-портов дошел до наших дней и до сих пор используется в архитектуре x86 и x86–64. Как и ранее, для доступа к I/O-портам процессор исполняет специальную команду in или out:
Через взаимодействие с I/O-портами компьютер взаимодействует с такими устройствами, как:
- клавиатура и мышь PS/2;
- RTC — встроенные в матплату часы;
- COM- и LPT-порты;
- IDE-контроллер жестких дисков.
Проблемы начинаются, когда требуется передать какой-либо значительный объем данных: для общения с I/O-портами процессор должен исполнять инструкции ввода-вывода, причем за один вызов команды in можно получить максимум 32 бита данных. В результате мы полностью занимаем процессор банальной пересылкой байтов от внешнего устройства. Так не годится!
Для облегчения жизни процессора внешним устройствам разрешили напрямую работать с памятью (Direct Memory Access, DMA). Теперь процесс передачи данных возложен на само устройство, процессор может заниматься своими делами, пока контроллер в фоне копирует байты:
Такими периферийными устройствами с возможностью доступа к памяти компьютера являются различные контроллеры интерфейсов, где требуется быстро передавать много данных (USB, SATA, NVMe, Wi-Fi):
Но там, где мы выигрываем в скорости, мы проигрываем в безопасности. В памяти, куда такое устройство имеет доступ, хранится программный код системы, персональные данные пользователя и много чего другого. Подключив к системе специальным образом подготовленное устройство, можно обойти пароль системы и украсть данные — такой функционал, к примеру, предлагает PCI Leech:
До недавнего времени DMA-атаки было достаточно сложно реализовать. Системные шины PCI и PCI Express, которые поддерживают механизм DMA, находились внутри компьютера, и для подключения к ним нужно было как минимум разобрать устройство. Единственным внешним интерфейсом с поддержкой DMA-транзакций был IEEE 1394 (FireWire), но его сейчас днем с огнем не сыщешь:
А затем появился Thunderbolt. По сути Thunderbolt-контроллер является чересчур умным коммутатором PCI Express: он туннелирует транзакции PCI Express между компьютером и внешними устройствами и управляет подключением этих самых устройств.
Наконец-то стало возможным подключить к компьютеру внешнюю видеокарту:
…и вообще любое другое устройство PCI Express:
Но подождите, теперь можно подойти к компьютеру, подключиться Thunderbolt-кабелем, взломать систему и украсть данные! И все это не вскрывая корпуса.
Разработчики тоже так подумали и добавили в Thunderbolt примочки для защиты от таких ситуаций. По умолчанию контроллер не подключает новые устройства к компьютеру, все решает системный драйвер. В зависимости от режима работы, выставленного в BIOS, драйвер может:
- подключать любые устройства автоматически (SL0);
- подключать разрешенные ранее устройства (SL1, SL2);
- не подключать устройства вовсе (SL3).
Сейчас в подавляющем большинстве систем по умолчанию используется режим User Authorization (SL1), когда при подключении незнакомого устройства в Windows появляется окно и требует подтверждения:
Только после того как контроллер получил подтверждение от драйвера, устройство окончательно подключается к системе и получает доступ к памяти.
Каждый раз подтверждать устройство, кликать в окошки — неужели нет адекватного и безопасного решения в формате «подключил — заработало»? Именно таким путем пошла компания Apple, выключив защиту Thunderbolt. Все Thunderbolt-устройства на MacBook и iMac сразу и без вопросов подключаются к системе, даже на этапе загрузки.
Безопасность обеспечивается технологией I/O MMU (Input/Output Memory Management Unit), которую поддерживают все современные процессоры.
С помощью этой технологии виртуальные машины могут обращаться к реальному железу, а операционная система — защищаться от DMA-атак. Если раньше устройство на шине PCI Express напрямик обращалось к физической памяти, то при включении I/O MMU становится возможным «фильтровать» запросы и пускать устройство только к тем областям ОЗУ, которые ему выделили. На деле I/O MMU является дополнительным уровнем адресной трансляции между устройствами и реальной физической памятью.
Вслед за Apple Microsoft также применила эту технологию. Теперь в ноутбуках выпуска 2019 года и новее есть «Защита DMA ядра», которая активируется только для подключенных Thunderbolt-устройств и только если ноутбук поддерживает эту функцию на уровне BIOS.
Недавно был опубликован релиз, включающий несколько уязвимостей технологии Thunderbolt под общим названием Thunderspy. В конечном итоге всем рекомендуется выключить Thunderbolt из-за больших проблем в его безопасности. Но не спешите торопиться, давайте рассмотрим уязвимости подробнее.
1. Отсутствие проверки целостности прошивки
Образ флеш-памяти контроллера Thunderbolt 3 содержит помимо собственной прошивки еще и конфигурацию, а также прошивку контроллера USB Type C Power Delivery (PD):
Авторы обнаружили, что конфигурация никак не защищена и может быть перезаписана программатором! Это означает, что режим защиты Thunderbolt можно понизить до уровня No Security, в результате чего драйвер операционной системы подключит любое устройство без лишних вопросов.
В публикации упоминается модификация прошивки контроллера и даже прилагается утилита Thunderbolt Controller Firmware Patcher, но она выполняет изменение только области конфигурации. Достоверных сведений о возможности модификации самой прошивки в публикации не имеется.
Да, возможность разобрать ПК и отключить защиту программатором имеется. Но с другой стороны — если компьютер попал в руки злоумышленникам, то они могут и к PCI Express подключиться, и жесткий диск вытащить.
2. Слабая аутентификация устройств
Авторы с помощью программатора «клонируют» ранее запомненное в системе устройство, после чего система принимает его как родное. В режиме Secure Connect помимо идентификатора UUID дополнительно приходится копировать данные аутентификации SL2 из самого устройства (и снова программатором).
Такой способ работает, но только для старых Thunderbolt-устройств и контроллеров. Во всех контроллерах Thunderbolt 3 UUID зашит в сам чип и его нельзя изменить. А еще в актуальных версиях прошивки Thunderbolt 3 используется 128-битный UUID:
И если для 64-битного UUID можно взять устройство поколения Thunderbolt 2 и прописать нужный UUID в DROM, то 128-битный идентификатор так клонировать не получится: формат DROM идентификаторы такой длины не поддерживает.
3. Метаданные устройства можно изменять
Сведения о Thunderbolt-контроллере (название, идентификатор, производитель) хранятся в специальной области DROM, которую можно модифицировать:
То есть модификацией этой области можно «переименовать» Thunderbolt-контроллер, заставив систему поверить, что подключено поддерживаемое устройство.
Авторы ссылаются на другую публикацию, посвященную исследованию технологии Thunderbolt, — Thunderclap. В ней упоминается, что в Apple MacOS применяется «белый список» поддерживаемых Thunderbolt-устройств и этим приемом данный список можно обойти. Имеются большие сомнения, что это действительно так (Apple вбивает в систему ID каждой новой модели Thunderbolt-устройства? Новые устройства не будут работать на старых системах?).
Один и тот же контроллер может применяться для подключения разных PCI-Express-устройств. Поэтому область DROM контроллера изначально допускает возможность модификации, чтобы каждый производитель мог указать характеристики устройства, его уникальный идентификатор и аппаратную версию.
4. Обратная совместимость с Thunderbolt 1 и 2
Здесь продолжается идея пункта № 2, где для клонирования устройства поколения Thunderbolt 3 (в котором нельзя менять UUID) использовалось устройство поколения Thunderbolt 2. Системный драйвер производит идентификацию только на основе UUID и данных аутентификации, не принимая во внимание, что контроллер не только другой версии, но и другого поколения.
Естественно, сама обратная совместимость не является уязвимостью.
5. Некорректная обратная связь конфигурации Thunderbolt
Конфигурация уровня безопасности Thunderbolt-контроллера выполняется в UEFI:
При этом UEFI не получает текущее состояние конфигурации от контроллера, а хранит его в BIOS компьютера. И если изменить конфигурацию безопасности программатором, то в BIOS будет отображаться неактуальная информация.
Но как в Windows, так и в Linux имеется ПО, в котором отображается реальный установленный уровень безопасности:
6. Возможность заблокировать запись по SPI
Здесь проблема, скорее, не в том, что программатором можно установить блокировку на SPI-флеш-память контроллера (такую операцию можно проделать буквально на любом устройстве, и оно тоже перестанет обновляться), а в отсутствии отображения ошибок при попытке смены конфигурации/обновлении микропрограммы при заблокированном флеш.
UEFI посылает команду смены уровня безопасности и не проверяет, установился ли нужный уровень. Вы считаете, что все выполнилось, а на самом деле ничего не изменилось! Драйверы в Linux тоже отправляют новую прошивку устройству и не проверяют, успешно ли прошла запись. Получается, чтобы удостовериться в том, что результат точно соответствует ожиданиям, пользователь должен дополнительно проверять информацию о контроллере.
7. Отсутствие защиты Thunderbolt в Boot Camp
Как уже упоминалось ранее, Apple не использует уровни безопасности Thunderbolt и полагается на технологию I/O MMU. Соответственно, если вы запускаете на том же MacBook иную операционную систему и в ней не включена поддержка I/O MMU, вы сам себе злой Буратино. Примерно так ответили Apple авторам:
Some of the hardware security features you outlined are only available when users run macOS. If users are concerned about any of the issues in your paper, we recommend that they use macOS.
Эта проблема также не относится к самой технологии Thunderbolt, а является особенностью работы ОC Windows на аппаратной платформе Apple. Во всех MacBook имеется поддержка I/O MMU на уровне BIOS и нет причин, по которым защита DMA ядра Windows не должна функционировать.
С актуальной версией Windows и включенной защитой DMA атаки системе не страшны.
Так или иначе, все описанные методы взлома компьютера через Thunderbolt требуют что-то разбирать, применять программатор и в конечном итоге подключать свое PCI-Express-устройство.
Если уж дошло до физического доступа к вашему устройству и тем более до его разборки, можно вынуть диск и скопировать данные, можно использовать загрузочный диск или сброс пароля, можно подключиться в «нормальный» PCI-Express и провести точно такую же атаку PCI Leech.
Средства защиты данных не ограничиваются конфигурацией интерфейсов: шифрование диска Bitlocker или TrueCrypt не даст шансов злоумышленнику даже при наличии полного доступа к компьютеру.
Несмотря на то что эти интерфейсы только анонсированы и мы не имеем возможности оценить все защитные технологии, встроенные в них, некоторую информацию почерпнуть можно.
Самые новые процессоры Intel с кодовым именем Ice Lake имеют встроенный контроллер Thunderbolt 3 и не подвержены атакам на конфигурацию безопасности (прошивка и конфигурация хранятся в BIOS компьютера, в защищенном разделе Intel ME). Системы на базе этих процессоров изначально имеют поддержку I/O MMU и по умолчанию не подвержены DMA-атакам через интерфейс Thunderbolt.
Что до стандарта USB4 — он включает в себя возможность туннелирования PCI Express, но это не является обязательной функцией. Все больше новых систем идет с включенной поддержкой I/O MMU, что пригодится и для USB4. Microsoft даже продвигает специальную версию Windows с усиленной защитой ядра от DMA-атак на волне новостей про Thunderspy.
Прогресс не стоит на месте. В погоне за увеличением скорости интерфейсов разработчики одновременно добавляют проблем как себе, так и пользователям. Новые возможности взлома компьютера (DMA через внешние интерфейсы), новые способы защиты от этого взлома (I/O MMU).
Так каков же ответ на вопрос «отключать ли Thunderbolt»? Скорее нет, чем да. В той же самой публикации Thunderspy показано, что конфигурацию DisplayPort & USB Only можно легко изменить программатором на No Security и включить Thunderbolt обратно. Но в таком случае (при физическом доступе к устройству) украсть данные можно не только через Thunderbolt.
Ну, а что будет дальше и как производители реализуют защиту в USB4 — время покажет, будем держать вас в курсе!
Raccoon Security — специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.