Изображение: 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. Часть из них возможно требуют локального доступа, часть физического. Чтобы немного приоткрыть завесу тайны, скажем пару слов о самой уязвимости:
- Уязвимость присутствует и в аппаратуре, и в прошивке boot ROM: основная часть механизмов IOMMU системного агента MISA (Minute IA System Agent), предоставляющего доступ к SRAM (статической памяти) Intel CSME для внешних DMA-агентов, по умолчанию отключена. Эту ошибку, как ни банально это звучит, мы нашли просто читая документацию.
- Прошивка Intel CSME в boot ROM вначале инициализирует каталог страниц (page directory), включает страничное преобразование и только спустя некоторое время активирует IOMMU. Таким образом, существует момент, когда статическая память SRAM доступна для внешнего DMA-воздействия на запись (DMA по направлению к CSME, а не к основной памяти процессора) и при этом в этой памяти SRAM уже хранятся проинициализированные таблицы страниц Intel CSME.
- Параметры MISA IOMMU сбрасываются при выполнении reset для Intel CSME, которая после reset снова начинает выполнение с boot ROM.
Таким образом, любое устройство платформы, которое может выполнять DMA-транзакции в статическую память Intel CSME и при этом выполнять перезагрузку Intel CSME (либо просто дождаться момента, когда Intel CSME выходит из состояния сна), способно модифицировать системные таблицы страниц Intel CSME и таким образом перехватывать выполнение.
Автор: Марк Ермолов, ведущий специалист отдела исследований безопасности ОС и аппаратных решений Positive Technologies.
Sayaka
Звучит интересно, эксплоит то опубликуете? Или только после договора на пентест?:)
yleo
Для проигрывания "эксплоита" нужна примерно такая балалайка.
А с договорами — заходите, всегда будем рады )
VelocidadAbsurda
PCIe bus master, модифицирующий таблицы трансляции IOMMU в момент, когда они доступны?
https://shop.lambdaconcept.com/home/40-screamer-m2.html — подойдёт?
Tufed
Я так понимаю, что «балалайка» нужна уже модифицированная?, а значит физический доступ к системе. Или бывает возможность модифицировать прошивку уже имеющейся в системе немного другой «балалайки»? что даст вектор развития удаленной атаки.
sebres
Вы немного не поняли, оно не совсем про безопасность в прямом смысле…
Intel CSME используется как аппаратная база для DRM и прочих «копирастных» инструментов.
Если цель — «избавиться» от этого, например выковырять ключи и/или цифровой контент, добавить эксплойт, чтобы снять блокировку чего-либо и т.д., то «балалайку» вполне можно и воткнуть :)
Tufed
Ах вот оно, с какого конца безопасность. Я сразу то и не понял вектор развития. Спасибо за разъяснение.
h0t_max
Нет, не нужна;)
yleo
Хм, а откуда вы без "балалайки" (или её аналога) физически возьмете payload для sram?
PCH будет пере-инициализирован со всеми его устройствами.
CodeRush
Если делать полный ресет — будет, а если нет? Там сейчас всяких ресетов разных видимо-невидимо, а на PCH есть такое отличное устройство Integrated Sensor Hub, к которому пользователь может написать свою прошивку собственную.
Понятно, что это все — страшно дорогая целевая атака, которую нет смысла даже пытаться применять по площадям против условного слесаря Васи (фишинг и рассылка вирусов отлично работают там уже, сложнее ничего не нужно), и статья больше про «это потенциально возможно сделать при условии что А, Б, Ц и звезды верно сошлись», чем про «любое повышение прав до рута позволяет взломать МЕ полностью и любить в нем гусей до старости лет». Тем не менее, баг отличный, и статья отличная, и пацаны — вообще ребята, пусть ищут и пишут еще.
yleo
PCH и все его устройства должны быть переконфигурированы, как минимум enable-бит должен быть сброшен в configuration space.
CodeRush
Кому именно должны?
МЕ конкретно основной системе вообще не должен ничего, кроме как по HECI отвечать и в том самом конфигурационном пространстве светиться, так что он вполне может уйти в глубокий сон, последующее пробуждение из которого снова пройдет через уязвимый ROM, и вот в этот самый момент (если его получится отловить) можно перехватить управление через ДМА-атаку прямо с хоста.
h0t_max
Самая большая проблема в возможности извлечения ключа, в итоге когда вы получаете компьютер на руки вы даже не можете проверить был ли он атакован или нет. Я согласен, проще отправить фишинговое письмо. Плюс ко всему тут есть возможность получить RED-unlock, а это прекрасные возможности для изучения платформы.
h0t_max
Вариантов для проведения атаки много, PoC уже есть и работает, векторов несколько, DMA плату не использовали.
yleo
h0t_max, или (неужели) sram можно читать/писать через jtag на этой стадии запуска?
ппц
atbuhw
Я на 99% уверен, что господа пуристы/пинисты такую балалайку могут себе позволить (а то и уже позволили). Остаётся вопрос только в том, считают ли они и авторы этого конкретного эксплойта друг друга достаточно хорошими, чтобы обменяться информацией об этом самом эксплойте.
dartraiden
А им это зачем? Избавиться от ME это не поможет, потому что кто-то должен инициализировать железо и провести другие необходимые манипуляции с ним.