Уязвимости безопасности, уникальные для суперскалярных процессоров
Проекты суперскалярных процессоров являются основой современных высокопроизводительных вычислений, позволяя процессорам выполнять несколько инструкций за тактовый цикл с помощью передовых методов, таких как параллелизм на уровне инструкций (ILP), выполнение не по порядку и спекулятивное исполнение. В то время как эти функции обеспечивают замечательный прирост пропускной способности для всего, от облачных серверов до мобильных устройств, они также вводят класс уязвимостей безопасности, которые в значительной степени отсутствуют в более простых скалярных архитектурах. Понимание этих уникальных угроз - это не просто академическое упражнение; это практическая необходимость для системных архитекторов, инженеров безопасности и всех, кто отвечает за развертывание безопасной вычислительной инфраструктуры. Эта статья погружается в конкретные слабые места безопасности, присущие суперскалярным процессорам, объясняет, почему они так сложно смягчить, и описывает проверенные стратегии для укрепления систем против них.
Что такое суперскалярные процессоры?
Чтобы оценить последствия для безопасности, необходимо сначала понять, как суперскалярные процессоры отличаются от своих более простых аналогов. Скалярный процессор выполняет не более одной инструкции за тактовый цикл, обрабатывая инструкции в жестком, последовательном порядке. Напротив, суперскалярный процессор содержит несколько исполнительных блоков (например, целые ALU, блоки с плавающей запятой, блоки загрузки / хранения) и может выдавать несколько инструкций одновременно - часто две, четыре или даже больше за цикл. Эта возможность является основой современной производительности процессора, но она поставляется со значительной внутренней сложностью.
Ключевые механизмы, которые позволяют выполнять суперскаляр, включают:
- Множественные функциональные блоки: Выделенные аппаратные блоки, которые могут работать параллельно, такие как отдельные блоки для арифметики, доступа к памяти и разрешения ветвей.
- Выполнение в непорядке (OoOE): Процессор динамически переупорядочен инструкции, чтобы держать исполнительные блоки заняты, сохраняя при этом иллюзию выхода в порядке через буфер переупорядочения.
- Регистровое переименование: Устраняет ложные зависимости данных (Write-after-Read, Write-after-Write) путём отображения архитектурных регистров в больший пул физических регистров.
- Специальное исполнение: Процессор прогнозирует результат ветвей и выполняет инструкции заранее, отбрасывая результаты, если предсказание неверно.
- Отраслевое прогнозирование: Передовые предикторы (например, TAGE, нейронные предикторы) угадывают направление и цель ветвей с высокой точностью, питая спекулятивный трубопровод.
Хотя эти функции необходимы для производительности, они также подвергают микроархитектурное состояние процессора - кэши, буферы, стадии трубопровода - потенциальному наблюдению и манипулированию злоумышленниками. В отличие от скалярных конструкций, где путь выполнения детерминирован и легко наблюдаем, суперскалярные процессоры содержат скрытые внутренние состояния, которые можно исследовать через временные, силовые и электромагнитные боковые каналы. Кроме того, спекулятивное исполнение может оставлять следы данных, которые никогда не должны были быть архитектурно доступными, создавая открытие для эксплойтов, таких как Spectre и Meltdown.
Уязвимости безопасности, характерные для суперскалярных архитектур
Сложность суперскалярных конструкций приводит к уязвимостям, которые отсутствуют в более простых процессорах с одним выпуском. Эти слабости обычно делятся на две широкие категории: атаки по боковым каналам, которые утекают информацию через физические или временные наблюдения, и атаки спекулятивного исполнения, которые используют микроархитектурное состояние для обхода границ, навязанных программным обеспечением.
1. Боковые атаки
Суперскалярные процессоры имеют глубоко трубопроводные параллельные исполнительные блоки, которые демонстрируют измеримые изменения в потреблении энергии, электромагнитном излучении и времени выполнения в зависимости от обрабатываемых данных.Злоумышленники могут использовать эти боковые каналы для вывода конфиденциальной информации, такой как криптографические ключи или данные частных пользователей.
- Сайд-каналы на основе кэша:] Наиболее хорошо изученная категория. Суперскалярные процессоры полагаются на многоуровневые иерархии кэша для преодоления разрыва в скорости между ядром и основной памятью. Поскольку время доступа к кэшу резко отличается от некэшированных доступов к памяти (порядка величины), злоумышленник может отслеживать, какие линии кэша выселяются или заполняются процессом жертвы. Такие методы, как Prime+Probe, Flush+Reload и Evict+Reload, позволяют злоумышленнику реконструировать шаблоны доступа к памяти жертвы — включая поиск секретных таблиц в алгоритмах шифрования. Например, шпионский поток может повторно заполнять набор кэша, а затем измерять свое собственное время доступа, чтобы определить, выселила ли жертва свои данные, раскрывая, какой адрес памяти был получен жертвой.
- Анализ мощности: Суперскалярные процессоры потребляют разное количество энергии в зависимости от выполняемой комбинации команд, значений данных и активных функциональных блоков.Простой анализ мощности (SPA) и дифференциальный анализ мощности (DPA) могут извлекать криптографические ключи из смарт-карт или встроенных устройств, хотя такие атаки сложнее монтировать на расстоянии на многоядерных настольных процессорах.
- Время выполнения инструкций варьируется в зависимости от значений операнда (например, умножение, деление) и наличия исполнительных блоков. Злоумышленники могут измерять время отклика удаленной службы, чтобы вывести секреты — классическая уязвимость, используемая в атаках на реализации SSL/TLS.
- Электромагнитные (ЭМ) эманации: Быстрое переключение транзисторов в сверхскалярных трубопроводах генерирует ЭМ-излучение, которое может быть захвачено специализированными зондами. Сложные злоумышленники могут демодулировать эти сигналы для реконструкции последовательностей команд или значений данных.
Эти боковые каналы усиливаются в суперскалярных конструкциях, потому что повышенный параллелизм означает больше одновременных переходов, более высокое потребление энергии и более сложные взаимодействия между этапами трубопровода. Методы изоляции, которые работают на более простых процессорах (например, отключение кэша, программирование в постоянное время), становятся труднее применять, не жертвуя тем самым повышением производительности, которое обещают суперскалярные архитектуры.
2.Спектр и расплавленные варианты
Spectre и Meltdown, раскрытые в начале 2018 года, шокировали сообщество компьютерной архитектуры, продемонстрировав, что спекулятивное исполнение — краеугольный камень сверхскалярной производительности — может быть использовано для утечки произвольных данных через границы безопасности. Хотя эти уязвимости не являются эксклюзивными для суперскалярных процессоров (они также влияют на некоторые процессоры в порядке со спекулятивным доступом к памяти), агрессивное внепорядковое и спекулятивное исполнение в современных суперскалярных конструкциях резко усиливает поверхность атаки.
- Meltdown (CVE-2017-5754): Использует внезапную работу процессоров Intel и некоторых ARM для считывания памяти ядра из пользовательского пространства. Когда команда пользовательского пространства пытается получить доступ к защищенному адресу ядра, процессор поднимает исключение. Однако из-за OoOE инструкция, возможно, уже была завершена — и оставила следы в кэше — до того, как будет обработано исключение. Злоумышленник может исследовать кэш для восстановления данных, которые были спекулятивно загружены.
- Вариант спектра 1 (CVE-2017-5753) — Обход проверки границ: Настройте предиктор ветви на спекулятивное выполнение инструкций за пределами проверки границ массива, утечка данных через тайминг кэша. Эта атака работает, потому что современные суперскалярные трубопроводы выполняют предсказанный путь до вычисления фактического адреса.
- Spectre Variant 2 (CVE-2017-5715) — Впрыск ветви цели: Отравить буфер ветви цели (BTB) процесса жертвы, чтобы заставить его спекулятивно выполнять код по выбранному злоумышленником адресу, даже в привилегированных доменах. Суперскалярные процессоры с общими BTB особенно уязвимы, потому что состояние предиктора является глобальным.
- Варианты спектра 3a, 4 и далее: Последующие исследования выявили варианты, использующие буферы обратного стека (RSB), пересылку в хранилище и впрыск значения нагрузки (LVI). Все эти эксплойты микроархитектурные побочные эффекты спекулятивного исполнения в суперскалярных конструкциях.
Эти атаки однозначно опасны, потому что они нарушают фундаментальные гарантии изоляции операционных систем и гипервизоров, не требуя какой-либо уязвимости программного обеспечения. Они могут утечка ключей шифрования, паролей и даже содержимого памяти других виртуальных машин на общем облачном хосте. Распространенность суперскалярных процессоров в каждом сегменте вычислений - от смартфонов до серверных ферм - означает, что поверхность атаки огромна.
3. вариативность времени в общих ресурсах
В дополнение к кэшам, суперскалярные процессоры разделяют много других микроархитектурных ресурсов среди потоков и ядер: предиктор ветвей, TLB (буферы с видом на экран), буфер магазина и буфер порядка памяти. Спор на этих ресурсах создает различия во времени, которые могут быть измерены вредоносным потоком для вывода активности или данных совместно расположенной жертвы. Например, атака PortSmash использует спор на порте выполнения, используемом братьями SMT для утечки информации через гиперпотоки. Метод Collide + Load использует спекулятивный доступ к общим линиям кэша, которые недействительны жертвой. Эти атаки подчеркивают, как параллельная природа исполнения суперскаляр создает новые межъядерные и межпоточные информационные каналы.
Проблемы с обеспечением безопасности суперскалярных процессоров
Защита суперскалярных процессоров принципиально сложнее, чем защита более простых скалярных архитектур.
- Сложность проверки: Конструкционное пространство современного суперскалярного ядра включает миллиарды возможных состояний из-за параллелизма, спекуляций и переименования. Формальная проверка свойств безопасности (например, информационный поток, невмешательство) вычислительно неосуществима даже при расширенной проверке модели. Многие уязвимости, включая Spectre v1, присутствовали в течение десятилетий, прежде чем были обнаружены.
- Компромиссы в области безопасности производительности: Многие из мер по смягчению последствий для спекулятивных атак на исполнение, такие как коммутатор с промежуточной связью, инструкции по сериализации трубопровода или отключение SMT, налагают значительные штрафы за производительность. Исследование 2018 года показало, что смягчение Spectre / Meltdown может стоить до 30% на некоторых рабочих нагрузках. Разработчики систем должны сбалансировать безопасность с той самой производительностью, которую предназначены для обеспечения суперскалярные проекты.
- Ограничения на исправление программного обеспечения: В отличие от уязвимостей программного обеспечения, микроархитектурные недостатки часто не могут быть полностью исправлены с помощью обновлений микрокода. Многие варианты Spectre требуют исправлений операционной системы, изменений компилятора или редизайна оборудования. Даже исправления микрокода, хотя и полезны, могут снизить производительность и могут не охватывать все векторы атак.
- Развивающийся ландшафт угроз: Новые варианты продолжают появляться спустя годы после первоначального раскрытия. Каждая новая атака может потребовать специального смягчения, а комбинация нескольких смягчений может создать неожиданные взаимодействия или новые боковые каналы. Например, некоторые ранние Spectre исправляют непреднамеренно введенную утечку времени по новым кодовым путям.
- Отсутствие видимости для пользователей:] Большинство конечных пользователей и даже многие системные администраторы плохо понимают микроархитектурные особенности своих процессоров. Это затрудняет оценку риска или применение соответствующих мер по смягчению последствий. Облачные провайдеры должны поддерживать обширные черные списки уязвимых моделей процессоров и постоянно обновлять свои прошивки и гипервизоры.
Эти проблемы означают, что для защиты суперскалярных процессоров не существует серебряной пули. Вместо этого требуется многоуровневый подход, сочетающий аппаратное обеспечение, прошивку, программное обеспечение и операционные элементы управления.
Стратегии смягчения уязвимостей
Несмотря на трудности, отрасль добилась значительного прогресса в смягчении уникальных уязвимостей безопасности суперскалярных архитектур.Наиболее эффективные стратегии сочетают в себе аппаратные улучшения, обновления микрокодов, программные патчи и лучшие архитектурные практики.
Аппаратные решения
Вендоры кремния представили множество аппаратных функций для уменьшения поверхности атаки:
- Безопасная загрузка и доверенные среды выполнения: Такие технологии, как Intel SGX, AMD SEV и ARM TrustZone, обеспечивают изолированные анклавы, которые защищены даже от скомпрометированной ОС. Однако сами анклавы были уязвимы для побочных и спекулятивных атак (например, SGAxe, SmashEx).
- Разделение и окрашивание кэша: Технология распределения кэша Intel (CAT) позволяет ОС назначать способы кэширования конкретным ядрам или процессам, предотвращая атаки по боковым каналам с помощью выселения кэша. Аналогично, MPAM Arm (Разделение и мониторинг памяти) предлагает аппаратное разделение кэша и полосы памяти.
- Механизмы управления спекуляции: Intel добавила инструкцию по сериализации и / (Ограниченная спекуляция непрямой ветви) функции для ограничения спекулятивного исполнения на уровнях привилегий. AMD ввела (SSBD) управление. Барьеры спекуляции Arm (например, , ) используются компиляторами для смягчения Spectre v1.
- Прототипы аппаратного обеспечения: Некоторые исследовательские прототипы предлагают обнаружение в реальном времени активности боковых каналов путем мониторинга частоты промахов кэша или задержки прерываний. Коммерческие реализации остаются ограниченными, но обнаружение аномалий на основе машинного обучения является активной областью.
- Блоки выполнения в постоянное время: Проектирование криптографических блоков, которые имеют независимое от данных время (например, с использованием умножения Монтгомери в аппаратном обеспечении) уменьшает боковые каналы времени. Некоторые процессоры включают специализированные криптографические движки (например, инструкции ARMv8.4-A AES), которые специально разработаны для постоянного времени.
Обновления микрокодов и прошивок
Регулярные обновления микрокодов от поставщиков процессоров имеют решающее значение для устранения вновь обнаруженных уязвимостей.
- Spectre v2 microcode mitigations: Intel и AMD выпустили обновления микрокода, реализующие барьер предикторов непрямых ветвей (IBPB) и предикторы непрямых ветвей однопоточной ветви (STIBP) для предотвращения впрыска целевой ветви в контекстах.
- Смягчение последствий Meltdown: Изоляция таблицы ядра страницы (KPTI) была реализована в операционных системах, но она полагается на обновления микрокода для полной эффективности на некоторых старых процессорах.
- Программная прошивка кэша: Некоторые обновления прошивки добавляют автоматическую промывку кэша на контекстных переключателях или обработчиках прерываний, чтобы уменьшить окно для атак на основе кэша.
Однако обновления микрокодов имеют ограничения. Они не могут принципиально перепроектировать конвейер, и они часто вводят регрессии производительности. Более того, некоторые старые процессоры могут не получать обновления, оставляя их постоянно уязвимыми. Системные администраторы должны поддерживать инвентаризацию моделей процессоров и применять последний микрокод от поставщика или через механизм обновления прошивки операционной системы (например, пакет Linux ).
Программное обеспечение и смягчение OS-уровня
Операционные системы, гипервизоры и наборы инструментов компилятора играют решающую роль:
- Изоляция таблицы страниц ядра (KPTI): Эта функция ОС разделяет таблицы страниц пользовательского пространства и пространства ядра для предотвращения чтения, подобного Meltdown. Она включена по умолчанию в Linux (патчи KAISER) и Windows после раскрытия Meltdown.
- Retpoline: Конструкция программного обеспечения, которая заменяет непрямые ветви сериализованной последовательностью для предотвращения впрыска ветви-мишени. Компиляторы, такие как GCC и LLVM, поддерживают генерацию кода ретполина для x86-64.
- Специальные барьеры: Вставка или после проверок границ (Spectre v1) или после дезинфицирования указателя.Компиляторы могут автоматически вставлять эти барьеры при компиляции опций, таких как или .
- Промывание кэша на контекстных переключателях: Ядра ОС могут промыть или разбить кэши для предотвращения утечки информации между процессами.Такие методы, как обнаружение и смягчение атак Flush+Reload, теперь встроены в дистрибутивы Linux, ориентированные на безопасность.
- Отключение SMT/гиперпотока: Многие руководства по безопасности рекомендуют отключить одновременную многопоточность (SMT) на ненадежных системах с несколькими арендаторами, поскольку гиперпотоки совместно используют ресурсы выполнения и уязвимы для атак по боковым каналам с межпоточным потоком (например, PortSmash, TLBleed).
- Тестирование и закаливание во время выполнения: Такие инструменты, как (Linux) и скрипты, предназначенные для конкретных поставщиков, могут проверять, какие смягчения активны.
Принципы дизайна, учитывающие безопасность
В перспективе наиболее эффективным подходом является включение безопасности в процесс проектирования процессора с самого начала.
- Безопасное спекулятивное исполнение: Академические предложения, такие как InvisiSpec (задержка попадания спекулятивного кэша до выполнения инструкции), Спекулятивное отслеживание тента (отслеживание спекулятивных данных в аппаратном обеспечении) и Скрытие доступа к спекулятивной памяти, направлены на предотвращение утечки микроархитектурного состояния. Некоторые из этих идей находят свой путь в коммерческие проекты, такие как «защита боковых каналов спекулятивного исполнения» Intel, добавленная в Олдер-Лейк.
- Физическая изоляция критически важных для безопасности ресурсов: Разделение состояния предиктора ветви на процесс или на уровень привилегий (например, идентификация цели ветви Arm) уменьшает утечку поперечного домена.
- Архитектуры, основанные на возможностях: Исследовательские проекты, такие как CHERI (Capability Hardware Enhanced RISC Instructions) обеспечивают мелкозернистую защиту памяти, которая может смягчить целые классы уязвимостей программного обеспечения, включая те, которые могут быть использованы с помощью спекуляций.
- Формальная проверка свойств безопасности: В то время как полная проверка суперскалярного ядра все еще недоступна, применение формальных методов к критическим микроархитектурным компонентам (таким как логика упорядочивания памяти или предиктор ветвей) может помочь поймать тонкие ошибки перед скотчем.
На практике, сочетание аппаратных улучшений, обновлений микрокода и закаливания программного обеспечения имеет важное значение.Ни один слой не обеспечивает полную защиту, но слоистая защита значительно затрудняет для злоумышленника успешное использование суперскалярных уязвимостей.
Заключение
Проекты процессоров Superscalar обеспечивают производительность, которая лежит в основе современных вычислений, но они также вводят уникальный набор уязвимостей безопасности, которые отсутствуют в более простых архитектурах. Те же качества, которые обеспечивают высокую пропускную способность - параллельное выполнение, внепорядковая обработка, спекулятивное исполнение и общие микроархитектурные ресурсы - создают возможности для атак по боковым каналам и спекулятивных эксплойтов исполнения, которые могут разорвать изоляцию между процессами, пользователями и виртуальными машинами. Кашель-ориентированные временные атаки, такие как варианты Prime + Probe и Spectre, продолжают развиваться, требуя постоянной бдительности со стороны поставщиков процессоров, разработчиков ОС и системных администраторов.
Смягчение этих уязвимостей является сложной задачей из-за присущей сложности суперскалярных конструкций и стоимости производительности многих контрмер. Однако сочетание функций изоляции аппаратного обеспечения (разделение кэша, контроль спекуляции), регулярных обновлений микрокода, смягчения программного обеспечения (KPTI, ретполин, кодирование в постоянное время) и принципов проектирования с учетом безопасности предлагает жизнеспособный путь вперед. По мере развития исследований и созревания отраслевых стандартов мы можем ожидать, что будущие суперскалярные процессоры будут включать более надежную защиту от утечки информации, надеясь уменьшить поверхность атаки, не жертвуя преимуществами производительности, которые стимулируют инновации.
Для дальнейшего чтения по конкретным уязвимостям и смягчению последствий, обратитесь к оригинальным документам Spectre и Meltdown (]SpectreAttack.com, веб-сайту Meltdown и рекомендациям Intel по безопасности (]Intel Security Center. Для более широкого обзора статья «Обзор уязвимостей микроархитектурных боковых каналов, атак и защиты в современных микропроцессорах» предоставляет всеобъемлющий обзор.