Защита Thunderbolt требует виртуализации

06 Июн 2016

Thunderbolt

Информационная безопасность является важнейшим свойством совре­мен­ной вычислительной системы. Область эта одна из самых ди­на­мич­ных: сценарии хакерских атак и технологии противодействия, еще вчера считавшиеся абсурдными и даже анекдотичными в силу их сложной ре­ализуемости, постепенно приобретают статус рутинных. Как выясни­лось, целью для «инъекции» вредоносного кода могут быть не только пользовательские приложения и системные драйверы, выполняемые центральным процессором, но и встроенное программное обеспечение или firmware периферийных устройств.

О проблеме

Для начала, вспомним пример, уже потерявший статус сенсации. Инфицированный флэш-накопитель имеет возможность изменять хранимые файлы, либо эмулируя клавиатуру, набрать команду форматирования жесткого диска. В этом контексте технология Thunderbolt, дающая периферийным устройствам функциональность, ранее характерную исключительно для локальных шин, стала очередным объектом пристального внимания.

Детальное описание динамически реконфигурируемой архитектуры этого интерфейса и многочисленных опций его применения потребует нескольких отдельных публикаций. А сейчас акцентируем внимание на том, что периферийное устройство может приобретать полномочия PCI Express подключения и, следствие этого, — способность адресовать оперативную память, а также другие ресурсы платформы в режиме bus-master.

Напомним, классическая подсистема виртуальной памяти, безопасно изолирующая каждое пользовательское приложение в его собственном адресном пространстве, обрабатывает обращения к памяти, выполняемые центральным процессором. Транзакции, формируемые bus-master устройствами, транслируются на системную шину, минуя блок трансляции страниц (CPU Paging Unit). Это и создает уязвимость.

Внимательный читатель может спросить: «А почему для Thunderbolt эта тема более актуальна, чем для USB, ведь USB хост контроллер также самостоятельно адресует оперативную память без участия центрального процессора?»

Дело здесь в том, что в случае USB, периферийное устройство, например жесткий диск или Flash накопитель, только передает и принимает информацию. При этом логика, обеспечивающая доступ к буферам данных и скриптам, управляющим работой контроллера, входит в состав хост-платформы и не подвержена влиянию со стороны внешнего устройства. В случае Thunderbolt, периферийная шина становится полноценным фрагментом системной топологии PCI Express и приобретает право адресовать системные ресурсы (в частности, — оперативную память).

Два примера топологии интерфейса Thunderbolt

Рис 1. Два примера топологии интерфейса Thunderbolt. Подключение на блок-схеме слева, использует PCI Express порт в составе микросхемы CPU. Подключение на блок-схеме справа, использует PCI Express порт в составе микросхемы PCH (Platform Controller Hub, он же южный мост)

Трафик PCI Express, наряду с трафиком Display Port, присутствует в потоке данных Thunderbolt

Рис.2 Трафик PCI Express, наряду с трафиком Display Port, присутствует в потоке данных Thunderbolt

Здесь нелишне вспомнить и о технологии Peer-to-Peer, расширяющей номенклатуру системных ресурсов, способных быть объектом bus-master доступа.

 

О решении

К счастью, решение существует и уже достаточно давно, это технологии аппаратной виртуализации Intel VT-d и AMD vi.

Архитектура подсистемы защиты памяти, рекомендуемая в одной из презентаций Intel Thunderbolt
Рис.3 Архитектура подсистемы защиты памяти, рекомендуемая в одной из презентаций Intel Thunderbolt

В классической платформе, как уже было сказано, подсистема виртуальной памяти обеспечивает адресную трансляцию только для операций, выполняемых центральным процессором. Для этого предназначен блок MMU (Memory Management Unit, синоним Paging Unit)

В современной платформе, подсистема виртуальной памяти способна выполнить трансляцию адресов, как для центрального процессора, так и для периферийных контроллеров. Для этого предусматривается специальный компонент IOMMU (Input-Output Memory Management Unit, иногда называемый Translation Agent).

Резюме

Таким образом, совместными усилиями блоков трансляции адресов (MMU+IOMMU), защищенное виртуальное адресное пространство создается как для выполняемого кода пользовательского приложения, так и для периферийных устройств, находящихся под его контролем. Попытки инфицированного контроллера обратиться к «чужой» памяти за конфиденциальными данными (выполнить DMA side-channel attacks) будут перехвачены блоком IOMMU. Как-то беспечно и наивно это прозвучало, но по крайней мере, так должно быть.