Гонка за производительностью обернулась для микропроцессорных устройств технологическими и архитектурными усложнениями. Там, где существуют сложные алгоритмы, присутствуют и уязвимости. Череда опасных изъянов, выявленных в течение последних лет — Meltdown, Spectre, Foreshadow, ZombieLoad, CrossTalk и т. д., — прямое тому подтверждение.
- Введение
- Intel: Meltdown и Spectre, или чипокалипсис сегодня
- 2.1. L1 Terminal Fault, или Foreshadow
- 2.2. Уязвимости ZombieLoad, RIDL, Fallout, SLF
- 2.3. Подсистема Intel CSME
- 2.4. LVI
- 2.5. CrossTalk, CasheOut и SGAxe
- AMD
- 3.1. SMM Callout
- 3.2. Collide + Probe и Load + Reload
- Последствия
- Защита
- Выводы
Введение
Современные процессоры имеют множество алгоритмов для улучшения характеристик своей работы и, в первую очередь, производительности. Это — и спекулятивное выполнение команд, и применение буферов различных уровней, и технологии организации очередей.
Компания Intel начала развивать технологию спекулятивного выполнения команд со времён Pentium, а поскольку тактовая частота процессора росла быстрее скорости работы оперативной памяти, архитектура усложнялась приростом разного уровня кешей (L1-кеш, L2-кеш). Таким образом сформировалась многоуровневая архитектура, на каждом из уровней которой происходит обмен данными, зачастую — с «превентивным доверием». В качестве примера, который позволил бы понять сложность информационного обмена внутри процессорных вычислений, представим рис. 1.
Рисунок 1. Архитектура процессора Intel Bonnell
Сложная архитектура всегда потенциально уязвима, просто потому, что спрогнозировать и протестировать все вероятные последовательности действий, приводящие к утечке или эскалации привилегий и другим нелегитимным действиям, практически невозможно. Стоило экспертам по информационной безопасности обратить пристальное внимание на архитектуру современных процессоров, как «посыпалась» череда обнаруженных уязвимостей, фактически — аппаратного исполнения, закрыть которые производителям крайне сложно. Были обнаружены настолько серьёзные изъяны самой микроархитектуры процессоров, что в ИТ-кругах появилось специальное выражение «чипокалипсис» — как очевидная производная от слова «апокалипсис».
Intel: Meltdown и Spectre, или чипокалипсис сегодня
В январе 2018 года стало известно сразу о двух критических уязвимостях процессоров Intel — Meltdown и Spectre, позволяющих получать несанкционированный доступ к любым привилегированным данным, находящимся в обработке процессоров. Кстати говоря, эти изъяны были обнаружены намного раньше, но не оглашались, а анализировались в узких кругах ИБ-экспертов и разработчиков.
Уязвимости Meltdown подвержены все выпущенные с 1995 года процессоры, за исключением Intel Itanium и Atom. На момент обнаружения она затрагивала всех крупнейших облачных провайдеров — AWS, Google Cloud, Microsoft Azure и др. Брешь Meltdown можно эксплуатировать в ОС Windows, Linux, macOS. При использовании на системах виртуализации, не реализующих специализированной программной защиты, этот вектор атаки позволял обойти меры изоляции памяти и получить доступ на чтение к памяти ОС, что приводило к возможности кражи данных других клиентов облачных инфраструктур. Существуют исследования, показывающие, что подобные операции выполнимы и на виртуализированных серверах, и на контейнерных системах, и в комплексах, использующих паравиртуализацию. Нужно отметить, что в случае полной виртуализации несанкционированному доступу подвержена память гостевого ядра, а не хост-системы.
Уязвимости используют свойство спекулятивного выполнения команд в некоторых процессорах Intel и ARM. Спекулятивное выполнение команд — это механизм оптимизации работы процессоров, суть которого заключается в решении задач предварительно, до их фактического получения. Осуществляется прогнозирование очередной части работы и её выполнение даже в том случае, если на это не поступало явного запроса. Возможно, предсказанная задача совпадёт с фактически запрошенной далее, и тогда будет сэкономлено время, которое требуется для её передачи на процессинг. При этом превентивно может выполняться даже сразу несколько направлений ветвления инструкций, чтобы с большей вероятностью иметь необходимый готовый результат. Если задача не потребовалась — вычисления просто игнорируются. Уязвимой спекулятивной операцией в данном случае является чтение из оперативной памяти без проверки прав доступа процесса к читаемым областям, причём механизм очистки кеша от результатов упреждающего исполнения задач не используется (возможно, для сохранения скорости работы процессора).
Брешь получила идентификатор CVE-2017-5754. Уязвимость позволяет получить несанкционированный доступ на чтение к памяти, используемой ядром ОС. Операция выполнима только при наличии локального доступа к ПК.
Действенным программным механизмом защиты от уязвимости Meltdown является использование технологии Kernel Page-Table Isolation (KPTI, PTI или KAISER), изначально реализованной в ядре Linux 4.15. Её сущность заключается в изоляции памяти пространства ядра для отдельной пользовательской области. В связи с публикацией Meltdown технология была импортирована в ядра 4.14.11, 4.9.75, 4.4.110 и реализована в ОС Windows и macOS.
Рисунок 2. Механизм работы KPTI
Защита KPTI даёт ожидаемое, но не катастрофически большое падение производительности: в среднем для большинства платформ и приложений оно не превышает 6—10 %. Максимальное значение показал только один из тестов (SYSmark 2014 SE Responsiveness) — снижение до 21 % на некоторых рабочих нагрузках, таких как запуск приложения, открытие или копирование файла, шифрование и сжатие файлов, установка фонового приложения и т. п. Для примера на рис. 3 показано среднее влияние на производительность согласно тесту SYSmark 2014 SE.
Рисунок 3. Средние результаты теста SYSmark 2014 SE для KPTI
Кстати, в случае со Spectre KPTI не помогает.
Уязвимость Spectre, как и Meltdown, была обнаружена исследователями из Google Zero Project. Этот изъян открывает посторонним приложениям возможность получить доступ на чтение к виртуальным областям памяти, задействованной процессом-жертвой, и таким образом позволяет нарушить изоляцию памяти между приложениями.
Spectre получила два идентификатора: CVE-2017-5753 и CVE-2017-5715. Она воспроизводима на большинстве современных микропроцессоров — в частности, на архитектурах х86 /x86_64 (Intel и AMD) и некоторых процессорных ядрах ARM. В настоящее время не существует прямых программных исправлений для Spectre, но их разработка ведётся.
L1 Terminal Fault, или Foreshadow
L1 Terminal Fault, или Foreshadow — уязвимости класса Spectre, также использующие внеочередные (out-of-order) и спекулятивные механизмы исполнения инструкций. Они направлены на атаку кеша первого уровня и извлечение из него данных. Обнаружены проблемы были в 2018 году, следом за основной уязвимостью Spectre.
Foreshadow состоит из трёх идентификаторов:
- CVE-2018-3615 — для атак на Intel Software Guard Extensions (SGX), процесса, предназначенного для защиты данных от несанкционированного доступа;
- CVE-2018-3620 — для атак на ядро ОС и System Management Mode (SMM);
- CVE-2018-3646 — представляет опасность для ПО виртуализации и Virtual Machine Monitors (VMM).
Уязвимостям подвержены только процессоры Intel.
Так как названные изъяны могут использоваться для извлечения данных разных виртуальных машин, размещающихся в одном облаке, под удар вновь попали облачные провайдеры. Также эксплуатация этих уязвимостей может использоваться для обхода патчей против Meltdown и Spectre.
Выпущенные компанией Intel программные исправления микрокодов не влияют на производительность процессоров.
Уязвимости ZombieLoad, RIDL, Fallout, SLF
Обнародование Meltdown привело к цепи дальнейших публикаций аналогичных уязвимостей архитектуры. Среди них — целый класс уязвимостей Microarchitectural Data Sampling (MDS), использующих спекулятивное исполнение команд процессором — ZombieLoad, Fallout, Rogue In-Flight Data Load (RIDL) и Store-to-Leak Forwarding (SLF).
Официальные коды уязвимостей (атакуемый элемент процессора указан в названии):
- CVE-2018-12126: микроархитектурная выборка данных в буфере хранения (Microarchitectural Store Buffer Data Sampling);
- CVE-2018-12130: микроархитектурная выборка данных в буфере загрузки (Microarchitectural Fill Buffer Data Sampling);
- CVE-2018-12127: микроархитектурная выборка данных порта загрузки (Microarchitectural Load Port Data Sampling);
- CVE-2019-11091: микроархитектурная выборка данных некешируемой памяти (Microarchitectural Data Sampling Uncacheable Memory).
В случае с ZombieLoad кража информации из буфера происходит через перегрузку процессора данными. При получении чрезмерной нагрузки процессор задействует внутренние буферы, где в этот момент может размещаться материал других приложений. Таким образом снимается ограничение изолированности данных тех программ, которые использовали другие процессорные ядра, но попадали в общий буфер. С помощью ZombieLoad злоумышленник может получить доступ к сведениям о работе пользователя в интернете, и средства анонимизации (Tor и другие) не помогают. Вектор атаки ZombieLoad работает как на уровне ОС, так и на гипервизорах, то есть облачные среды также ей подвержены.
Rogue In-Flight Data Load (RIDL) нацелена на кражу данных буфера заполнения, хранения и портов загрузки, при этом достаточно иметь возможность непривилегированного исполнения кода в системе. Защита других приложений и ядра операционной системы (даже виртуальных машин) не устраняет уязвимость.
Fallout получает доступ к недавно записанным данным из буферов хранилища. В этом случае возможен выбор типа информации, поэтому Fallout используется для обхода механизма KASLR и упрощения проведения других атак. Уязвимость актуальна и для процессоров Intel 9-го поколения, где закрыт изъян Meltdown. Исправление Meltdown сделало процессоры даже более уязвимыми к Fallout.
SLF использует технологии оптимизации процессора для работы с буфером хранения и для обхода механизмов рандомизации адресного пространства ядра (KASLR) с целью мониторинга состояния ОС. SLF часто применяется совместно со Spectre.
MDS-атакам подвержены практически все процессоры Intel, начиная с 2011 года, для ПК, ноутбуков и серверов до 8-го поколения. В процессорах Intel Core 8-го и 9-го поколений, а также в семействе Intel Xeon 2 уязвимости нейтрализованы. В AMD утверждают, что провели исследования и пришли к выводу о том, что их процессоры данным уязвимостям не подвержены.
Атаки воспроизводимы как локально, так и через вредоносный JavaScript-код. С использованием браузера жертвы злоумышленник может отправлять запросы, по которым процессор передаст и пароли, и адреса сайтов, и хеш-суммы, и другие личные данные пользователей в буферы, откуда их «вытащат» MDS-атакой.
Для защиты от уязвимостей необходима установка обновлений ОС и микрокода. Но для полной безопасности рекомендуется отключение механизма Hyper-Threading (или Simultaneous Multi-Threading, SMT). Механизм Hyper-Threading используется для «виртуализации» процессорных ядер с целью увеличения их количества в системе на логическом уровне: одно физическое ядро становится доступным нескольким приложениям для выполнения потока задач, что повышает производительность чипа.
Отключение Hyper-Threading ведёт к существенной деградации производительности серверов, на которых он использовался. Intel уверяет, что падение не превысит 10 %, однако некоторые эксперты прогнозируют потери до 40 %.
Для остальных процессоров, подверженных данным проблемам безопасности, корпорация Intel выпустила программные коррекции: KB4494441 для Windows 10 версии 1809 и KB4500109 для Windows 10 версии 1903. Apple выпустила исправление к macOS Mojave 10.14.5 для всех Mac-устройств (с 2011 г.), Sierra, High Sierra. Устройства на базе iOS и watchOS уязвимости не подвержены. Компания Google разработала исправление для собственной облачной инфраструктуры и устройств на базе Chrome OS и браузера Chrome. Большинство Android-устройств на базе процессоров ARM тоже не подвержено уязвимостям MDS. В ОС Ubuntu, FreeBSD, RHEL, NetBSD и в само ядро Linux добавлена защита (обновление 5.1.2). Amazon утверждает, что AWS обновлён для предотвращения атак и от клиентов не требуется дополнительных действий.
Подсистема Intel CSME
Подсистема управления Intel CSME также оказалась уязвимой. Обнаруженная экспертами Positive Technologies брешь CVE-2019-0090 позволяет злоумышленнику с локальным доступом к системе извлечь корневой ключ платформы (chipset key), который записан в микросхеме PСH, и получить доступ к зашифрованным этим ключом данным. Имея корневой ключ, злоумышленник может также подделать аттестацию ПК, которая основана на схеме EPID (Enhanced Privacy ID) и в свою очередь является фундаментом для работы технологии Data Rights Management (DRM) и других операций авторизации пользователя. Таким образом злоумышленник может выдать свой компьютер за ПК жертвы и получить доступ к закрытым конфиденциальным данным или банковским транзакциям. Эта операция не оставляет следов, поэтому обнаружить утечку крайне сложно.
Уязвимости CVE-2019-0090 подвержены следующие технологии: Intel Converged Security and Management Engine (Intel CSME), Intel Server Platform Services (Intel SPS), Intel Trusted Execution Engine (Intel TXE) и Intel Active Management Technology (Intel AMT).
В качестве защиты Intel рекомендует обновление прошивок для процессов Intel CSME, Intel SPS, Intel TXE, Intel AMT в соответствии с инструкциями на сайте производителя,а также обновление BIOS.
LVI
В апреле 2019 г. группа специалистов из американских и европейских университетов обнаружила новую уязвимость в процессорах Intel — Load Value Injection (LVI). О ней сразу известили производителя. Эта ошибка распространяется на процессоры Intel Xeon E5, E3-1200, E7-8800, E-2200, Intel Core 10-го поколения, базирующиеся на микроархитектуре Ice Lake.
LVI может быть воспроизведена как локально, так и удалённо с помощью JavaScript-атаки. Она позволяет внедрять данные в процесс-жертву и таким образом выполнять необходимые злоумышленнику операции. Уязвимость является сложноустранимой: уменьшение риска взлома через соответствующие программные коррекции от производителя процессора возможно, однако эти исправления значительно (в разы) снижают производительность.
CrossTalk, CasheOut и SGAxe
Эпопея чипокалипсиса в 2020 году продолжается. В начале года обнаружилась уязвимость CasheOut, а позднее — SGAxe. Обе они относятся к классу MDS и направлены на этот раз против криптографических ключей SGX, которым доверяет сервер аттестации Intel, используемый для проверки легитимности анклава в SGX-технологии. Анклав — это выделенная процессу область памяти. Извлечение ключей аттестации позволяет злоумышленнику получить доступ к любому секрету и делает все системы DRM, основанные на SGX, бесполезными.
Обнародованная не так давно уязвимость CrossTalk позволяет получать доступ к информации из другого процессорного ядра. Это происходит благодаря общему буферу Staging Shared Buffer, который копируется в Line Fill Buffer (LBF).
Рисунок 4. Атака CrossTalk на LFB и Staging Buffer
Для исправления CrossTalk выпущено обновление Special Register Buffer Data Sampling (SRBDS, CVE-2020-0543, Intel-SA-00320).
AMD
Процессоры AMD по микроархитектуре отличаются от чипов Intel, так как с определённого момента начали развиваться своим путём (хотя первоначально создавались как клоны). Они также имеют два или три уровня кеша, собственную технологию обмена данными HyperTransport и многоядерную архитектуру. Поэтому они тоже подвержены некоторым из перечисленных выше уязвимостей и дополнительно «страдают» от собственных.
Поскольку внимание экспертов к уязвимостям микропроцессоров значительно повысилось и многие механизмы в свете последних лет обнажились, этот негативный эффект распространился и на AMD.
SMM Callout
Связка уязвимостей под названием SMM Callout Privilege Escalation обнародована в 2020 году. Ей назначен идентификатор CVE-2020-12890. С помощью брешей в протоколе AGESA злоумышленник может получить контроль над UEFI-прошивкой и взломать компьютер жертвы.
AMD отмечает, что согласно её данным уязвимость имеется лишь в определённых клиентских и встраиваемых гибридных процессорах, вышедших в период с 2016 по 2019 годы (точных моделей нет). Исправить ситуацию можно простым обновлением AGESA, и AMD уже обеспечила соответствующими патчами большинство клиентов. Остальные получат их до конца текущего месяца.
Collide + Probe и Load + Reload
Эти уязвимости аналогичны Meltdown и Spectre применительно к микроархитектуре AMD. Атаки работают на чипах AMD, выпущенных с 2011 по 2019 годы, включая Zen, а на процессорах Intel не воспроизводятся. Информация о проблеме была передана в AMD в августе 2019 года.
Collide + Probe затрагивает механизм предсказания для кеш-памяти первого уровня (L1). Злоумышленник может отслеживать доступ к ОЗУ компьютера жертвы без знания физических адресов и разделяемой памяти. Load + Reload использует механизм предсказаний, чтобы получить слепок доступа к памяти на том же физическом ядре. Операции происходят скрыто и не обнаруживаются.
Атаки воспроизводимы как локально, так и с помощью JavaScript в браузерах Chrome и Firefox. Проверки показали возможность получения конфиденциальных пользовательских сведений, но, по утверждениям некоторых экспертов, речь идёт о малых объёмах информации и в основном о метаданных, поэтому большой опасности эти атаки не несут. Для защиты предложена комбинация программно-аппаратных коррекций, данные об их влиянии на производительность на данный момент отсутствуют.
Последствия
При всей значимости описанных уязвимостей надо понимать, что реализовать подобные операции не так просто. В большинстве случаев нужен физический доступ к системе (за исключением некоторых MDS-атак), а также навыки хакера по работе с процедурами низкого уровня. Поэтому данных о реальном использовании этих уязвимостей пока нет.
Тем не менее на плечи корпорации Intel легло множество проблем: помимо того что понадобился срочный поиск методов снижения рисков вкупе с разработкой и распространением программных коррекций, против компании было подано множество судебных исков, связанных с внезапными перезагрузками систем после установки исправлений, незапланированным падением производительности и др.
Большинство крупных облачных провайдеров объявили, что выявленные риски устранены.
Защита
Для многих из рассмотренных уязвимостей существуют программные коррекции, однако имеются некоторые нюансы. Так, меры защиты, направленные на ликвидацию Meltdown, только усиливают уязвимость Fallout. Устранение Meltdown, Spectre и возможности проведения MDS-атак потенциально снизит производительность систем в лучшем случае на 10 %, а в худшем — на 40 %, что равнозначно замене ЦОД. Это — существенные капиталовложения.
С другой стороны, несмотря на видимую опасность уязвимостей, ввиду потребности в низкоуровневом доступе к данным атаки такого рода требуют сложного набора навыков, знаний и усилий для их реализации, и ещё никем из исследователей не были обнаружены эксплойты для них. К тому же все уязвимости направлены на кражу данных, которые в текущий момент находятся на обработке в различных частях процессора, а это — определённый и не слишком большой объём информации, например пароли или криптографические ключи. Таким образом, в каждом конкретном случае необходима взвешенная оценка рисков.
Компания Intel утверждает, что часть процессоров 8-го и 9-го поколений, серверные Xeon Scalable 2-го поколения и все последующие уже содержат аппаратное исправление уязвимостей. Также доступно обновление прошивки остальных процессоров для защиты от изъянов класса MDS — программная коррекция для очистки буфера после перегрузки данными. Следующее за установкой патча прогнозируемое падение производительности не превышает 3 % для пользовательских устройств и 9 % — для серверных (в отличие от исправления Meltdown).
Рисунок 5. Таблица деградации производительности после исправления MDS-уязвимостей
Каждый производитель системного ПО на своём уровне выпускает патчи для защиты от аппаратных атак и — по возможности — защищает свои облака (AWS, Google, Apple и др.).
Однако отбрасывать данные риски полностью нельзя. Для минимизации последствий такого рода атак можно принять следующие меры:
- Своевременно устанавливать программные коррекции ОС и микрокода. Средством захода хакера в систему являются не указанные уязвимости, а более простые. Их незамедлительное исправление в принципе оградит от проблемы появления злоумышленника в системе и исключит возможность эксплуатации уязвимостей микропроцессора.
- Проводить качественный мониторинг инцидентов и расследование кибератак, выявление и блокирование присутствия злоумышленника в инфраструктуре. Прежде чем использовать уязвимости микрокода на серверах или ПК, злоумышленнику необходимо получить доступ в корпоративную сеть.
- Качественно организовать защиту периметра и видимых в общедоступной сети ресурсов. В частности, очень важно использовать WAF-решение. Необходимо укрепить внешний рубеж — использовать все логические защитные функции NGFW на периметре, так как часть атак можно реализовать через внедрение JavaScript-кода.
- Не устанавливать на один и тот же хост виртуализации (контейнеризации) виртуальные машины разного уровня доверия для минимизации последствий при краже данных.
- С опережением (даже ранее запланированного) произвести обновление процессоров до наиболее актуальных поколений, в которых присутствуют механизмы защиты от определённых классов атак.
Выводы
Наличие уязвимостей на микропроцессорном уровне нельзя не признавать и игнорировать, но также не стоит и переоценивать. Взвешенный анализ рисков и качественная организация эшелонированной защиты на разных уровнях — это действенная стратегия обеспечения безопасности применительно к любым уязвимостям.