Intel х86 Root of Trust: утрата доверия

hgoyc4kd5xlruwd43mkczw6v0ui.jpeg

Изображение: shutterstock

Вот и настал момент, которого, возможно, больше всего боялись системные архитекторы, инженеры и специалисты по безопасности компании Intel: была найдена ошибка в неперезаписываемой области памяти (ROM) подсистемы Intel Converged Security and Management Engine, и эта ошибка ставит под сомнение все усилия компании по созданию корня доверия и фундамента безопасности на ее платформах.

И дело здесь даже не в том, что ошибки микропрограммного обеспечения (firmware), которое «зашито» в бортовой памяти Mask ROM микропроцессоров и чипсетов, уже невозможно исправить, а скорее в том, что найденная ошибка разрушает цепочку доверия всей платформы в целом, позволяя скомпрометировать ее аппаратную основу.

Специалисты компании Positive Technologies нашли аппаратную ошибку в оборудовании Intel, а также ошибку в firmware Intel CSME, которая проявляется на очень раннем этапе работы этой подсистемы, в ее загрузочной ROM (boot ROM). Известно, что именно Intel CSME обеспечивает начальную аутентификацию системы, построенной на чипах Intel, загружая и проверяя все остальное микропрограммное обеспечение современных платформ. Например, именно Intel CSME, взаимодействуя с микрокодом CPU, обеспечивает подлинность прошивки UEFI BIOS посредством технологии BootGuard. Кроме того, Intel CSME загружает и верифицирует прошивку контроллера электропитания (Power Management Controller), управляющего подачей напряжения к каждому аппаратному блоку в микросхемах Intel.

Но важнее то, что именно Intel CSME отвечает за криптографическую базу таких аппаратных технологий защиты, разработанных компаний Intel и используемых повсеместно, как DRM, fTPM и Intel Identity Protection. Внутри прошивки Intel CSME реализована схема удаленной аттестации доверенных систем, называемая EPID (Enhanced Privacy ID), которая позволяет однозначно и анонимно идентифицировать каждый конкретный экземпляр вычислительной системы (компьютер), находя множество полезных применений, таких как защита цифрового контента, обеспечение безопасности финансовых транзакций, аттестация интернета вещей. Кроме того, в прошивке Intel CSME реализован программный модуль TPM, позволяющий использовать ее для хранения ключей шифрования без дополнительной микросхемы TPM, которая имеется далеко не в каждом компьютере.

И компания Intel постаралась сделать этот корень доверия как можно более безопасным. Система безопасности платформ Intel построена таким образом, что даже ошибка произвольного выполнения кода в любом из модулей прошивки Intel CSME не несет риска потери корневого ключа безопасности (он же Chipset Key), а только лишь подвергает риску конкретные функции, за которые отвечает уязвимый модуль, при этом позволяя легко нивелировать риск путем смены ключей шифрования с помощью механизма безопасного номера версии SVN. Это было наглядно продемонстрировано в 2017 году, когда была найдена ошибка произвольного выполнения кода в модуле прошивки BringUP (bup), описанная в Intel SA-00086. Тогда компания Intel просто выполнила перегенерацию ключей, увеличив SVN, и таким образом легко избежала риска компрометации технологий, построенных на EPID.

Но к сожалению, не существует идеальных систем безопасности, и, как любая другая, архитектура безопасности Intel имеет свою ахиллесову пяту — загрузочную ROM. Ошибка в ROM на ранних стадиях выполнения действительно позволяет контролировать процесс считывания Chipset Key и генерации всех остальных ключей шифрования. Один из таких ключей предназначен для шифрования массива данных контроля целостности (Integrity Control Value Blob, ICVB). Имея этот ключ, можно подделать код любого из модулей прошивки Intel CSME — и система проверки подлинности не сможет распознать подделку. Это равнозначно утечке закрытого ключа цифровой подписи прошивки Intel CSME, но для данной конкретной платформы.

На данный момент ситуацию с EPID смягчает тот факт, что Chipset Key хранится внутри платформы (в специальной OTP-памяти, One-Time Programmable Memory) в зашифрованном виде и для полной компрометации EPID требуется также извлечь аппаратный ключ, на котором зашифрован Chipset Key, хранящийся в специальном хранилище SKS (Secure Key Storage). Но этот ключ не уникален для платформы, а один на все поколение чипсетов Intel. И поскольку найденная ошибка в ROM позволяет перехватить выполнение кода до запирания (locking) механизма генерации аппаратного ключа в SKS, а сама ошибка в ROM не может быть исправлена, мы считаем, что это только дело времени — когда этот ключ будет извлечен. И тогда наступит полный хаос: аппаратная идентификация будет подделана, цифровой контент извлечен, зашифрованная информация с постоянных носителей расшифрована.
Итак, специалисты Positive Technologies нашли ошибку в Intel CSME boot ROM во всех выпущенных на данный момент чипсетах и SoC Intel кроме Ice Point (10-е поколение процессоров). Эта ошибка позволяет извлечь Chipset Key, а также манипулировать частью аппаратного ключа и процессом его генерации, не позволяя, однако, на данный момент напрямую получить его аппаратную составляющую (зашитую в SKS). При этом данная ошибка в ROM позволяет организовать произвольное выполнение кода на нулевом уровне привилегий Intel CSME.

Более подробно мы опишем технические детали в полном white paper, посвященном этой ошибке, который мы планируем опубликовать немного позже. Следует отметить, что после того, как наши специалисты обратились в Intel PSIRT с отчетом о данной ошибке, Intel сообщила, что ошибка уже известна (CVE-2019–0090). В Intel понимают, что ошибку в ROM исправить в уже выпущенном оборудовании нельзя, и поэтому просто блокируют все возможные пути ее эксплуатации. Патч для CVE-2019–0090 исправляет лишь один из возможных векторов атаки — через интегрированный сенсорный хаб (Integrated Sensors Hub, ISH). Мы думаем, что потенциально существует немало способов эксплуатации данной уязвимости в ROM. Часть из них возможно требуют локального доступа, часть физического. Чтобы немного приоткрыть завесу тайны, скажем пару слов о самой уязвимости:

  1. Уязвимость присутствует и в аппаратуре, и в прошивке boot ROM: основная часть механизмов IOMMU системного агента MISA (Minute IA System Agent), предоставляющего доступ к SRAM (статической памяти) Intel CSME для внешних DMA-агентов, по умолчанию отключена. Эту ошибку, как ни банально это звучит, мы нашли просто читая документацию.
  2. Прошивка Intel CSME в boot ROM вначале инициализирует каталог страниц (page directory), включает страничное преобразование и только спустя некоторое время активирует IOMMU. Таким образом, существует момент, когда статическая память SRAM доступна для внешнего DMA-воздействия на запись (DMA по направлению к CSME, а не к основной памяти процессора) и при этом в этой памяти SRAM уже хранятся проинициализированные таблицы страниц Intel CSME.
  3. Параметры MISA IOMMU сбрасываются при выполнении reset для Intel CSME, которая после reset снова начинает выполнение с boot ROM.


Таким образом, любое устройство платформы, которое может выполнять DMA-транзакции в статическую память Intel CSME и при этом выполнять перезагрузку Intel CSME (либо просто дождаться момента, когда Intel CSME выходит из состояния сна), способно модифицировать системные таблицы страниц Intel CSME и таким образом перехватывать выполнение.

Автор: Марк Ермолов, ведущий специалист отдела исследований безопасности ОС и аппаратных решений Positive Technologies.

© Habrahabr.ru