PDA

Просмотр полной версии : LVI - новый класс атак на механизм спекулятивного выполнения в CPU


Suicide
11.03.2020, 21:51
Обнародованы (https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00334.html) сведения о новом классе атак LVI (https://lviattack.eu/) (Load Value Injection, CVE-2020-0551 (https://software.intel.com/security-software-guidance/software-guidance/load-value-injection)) на механизм спекулятивного выполнения в CPU Intel, которые могут использоваться для организации утечки ключей и секретных данных из анклавов Intel SGX и других процессов.

Новый класс атак основан на манипуляциях с теми же микроархитектурными структурами, что и в атаках MDS (https://www.opennet.ru/opennews/art.shtml?num=50684) (Microarchitectural Data Sampling), Spectre и Meltdown (https://www.opennet.ru/opennews/art.shtml?num=49608). При этом новые атаки не блокируются существующими методами защиты от Meltdown, Spectre, MDS и других подобных атак. Для обеспечения эффективной защиты от LVI требуется внесение аппаратных изменений в CPU. При организации защиты программным путём, через добавление компилятором инструкции LFENCE после каждой операции загрузки из памяти и замену инструкции RET на POP, LFENCE и JMP, фиксируются слишком большие накладные расходы - по оценке исследователей полная программная защита приведёт к снижению производительности в 2-19 раз.

Частично, трудность блокирования проблемы компенсируется тем, что в настоящее время атака носит больше теоретический, чем практический характер (атака теоретически возможна, но очень трудна в реализации и воспроизводима лишь в синтетических тестах). Компания Intel присвоила (https://blogs.intel.com/technology/2020/03/ipas-security-advisories-for-march-2020/) проблеме умеренный уровень опасности (5.6 из 10) и выпустила (https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00334.html) обновление прошивки и SDK для окружения SGX, в которых попыталась блокировать проведение атаки обходным путём. Предложенные методы атаки пока применимы только к процессорам Intel, но не исключается возможность адаптации LVI и для других процессоров, к которым применимы атаки класса Meltdown.

Проблема была выявлена в апреле прошлого года исследователем Джо Ван Балком (Jo Van Bulck) из Лёвенского университета, после чего при участии 9 исследователей из других университетов, были разработаны пять базовых методов совершения атак, каждый из которых допускает существование более специфичных вариантов (https://transient.fail/). Независимо в феврале этого года исследователи из компании Bitdefender также обнаружили (https://businessinsights.bitdefender.com/bitdefender-researchers-discover-new-side-channel-attack) один из вариантов атаки LVI и сообщили о нём в Intel. Варианты атак отличаются использованием различных микроархитектурных структур, таких как буфер хранения (SB, Store Buffer), буфер заполнения (LFB, Line Fill Buffer), буфер переключение контекста FPU и кэш первого уровня (L1D), ранее применяемых в таких атаках как ZombieLoad (https://www.opennet.ru/opennews/art.shtml?num=51852), RIDL (https://www.opennet.ru/opennews/art.shtml?num=52260), Fallout (https://www.opennet.ru/opennews/art.shtml?num=50684), LazyFP (https://www.opennet.ru/opennews/art.shtml?num=48775), Foreshadow (https://www.opennet.ru/opennews/art.shtml?num=49134) и Meltdown (https://www.opennet.ru/opennews/art.shtml?num=47856).

https://www.opennet.ru/opennews/pics_base/0_1583907341.png (https://lviattack.eu/lvi.pdf)

Основным отличием (https://access.redhat.com/articles/load-value-injection-flaw) LVI от атак MDS является то, что MDS манипулирует определением содержимого микроархитектурных структур, остающихся в кэше после спекулятивной обработки исключений (fault) или операций load и store, в то время как атаки LVI позволяют добиться подстановки данных атакующего в микроархитектурные структуры для влияния на последующее спекулятивное выполнения кода жертвы. При помощи указанных манипуляций атакующий может извлечь содержимое закрытых структур данных в других процессах при исполнении определённого кода на целевом ядре CPU.

https://www.opennet.ru/opennews/pics_base/0_1583907379.png (https://lviattack.eu/lvi.pdf)

Для эксплуатации проблемы (https://lviattack.eu/lvi.pdf) в коде процесса-жертвы должны встречаться (https://software.intel.com/security-software-guidance/insights/deep-dive-load-value-injection) специальные последовательности кода (гаджеты), в которых загружается контролируемое атакующим значение, а загрузка этого значения приводит к возникновению исключений (fault, abort или assist), отбрасывающих результат и повторно выполняющих инструкцию. При обработке исключения возникает спекулятивное окно, во время которого происходит утечка обрабатываемых в гаджете данных. В частности, процессор начинает выполнять в спекулятивном режиме кусок кода (гаджет), потом определяет, что предсказание не оправдалось и откатывает операции в исходное состояние, но обработанные в процессе спекулятивного выполнения данные оседают в кэше L1D и микроархитектурных буферах и доступны для извлечения из них с использованием известных методов определения остаточных данных по сторонним каналам.

Исключение "assist", в отличие от "fault", обрабатывается внутри процессора без вызова программных обработчиков. Assist может возникнуть, например, когда требуется обновить бит A (Accessed) или D (Dirty) в таблице страниц памяти. Главная сложность проведения атаки на другие процессы в том, как инициировать возникновение assist, манипулируя процессом жертвы. В настоящее время не существует надёжных способов сделать это, но в будущем не исключается их нахождение. Возможность совершения атаки пока подтверждена только для анклавов Intel SGX, остальные сценарии являются теоретическими или воспроизводимыми в синтетических условиях (требуется добавление в код определённых гаджетов)

https://www.opennet.ru/opennews/pics_base/0_1583907394.png (https://lviattack.eu/lvi.pdf)

https://www.opennet.ru/opennews/pics_base/0_1583907416.png (https://lviattack.eu/lvi.pdf)

Возможные векторы атак:


Утечка данных из структур ядра в процесс на уровне пользователя. Имеющаяся в ядре Linux защита от атак класса Spectre 1, а также механизм защиты SMAP (Supervisor Mode Access Prevention) существенно уменьшают вероятность атаки LVI. Внесение дополнительной защиты в ядро может потребоваться при выявления в будущем более простых методов проведения атаки LVI.

Утечка данных между разными процессами. Для атаки требуется наличие определённых фрагментов кода в приложении и определение метода формирования исключения в целевом процессе.

Утечка данных из хост-окружения в гостевую систему. Атака отнесена к категории слишком сложных, требующих выполнения различных труднореализуемых шагов и предсказаний активности в системе.

Утечка данных между процессами в разных гостевых системах. Вектор атаки близок к организации утечки данных между разными процессами, но дополнительно требует выполнения сложных манипуляций для обхода изоляции между гостевыми системами.
Исследователями опубликовано несколько (https://github.com/bitdefender/lvi-lfb-attack-poc) прототипов (https://github.com/jovanbulck/sgx-step/tree/master/app/lvi) с демонстрацией принципов проведения атаки, но они пока непригодны для совершения реальных атак. Первый пример позволяет перенаправить спекулятивное выполнение кода в процессе-жертвы по аналогии с возвратно-ориентированным программированием (ROP (https://www.opennet.ru/opennews/art.shtml?num=48730#rop), Return-Oriented Programming). В данном примере в качестве жертвы выступает специально подготовленный процесс, содержащий необходимые гаджеты (применение атаки к реальным сторонним процессам затруднено). Второй пример позволяет вклиниться в вычисления при шифровании AES внутри анклава Intel SGX и организовать утечку данных во время спекулятивного выполнения инструкций для восстановления значения применяемого для шифрования ключа.

11.03.2020

https://www.opennet.ru/opennews/art.shtml?num=52517​

DartPhoenix
11.03.2020, 22:16
Кто вообще юзает эти Анклавы ?

Помнитцо еще Рутковска чото вещала по сабжу, но реально не на чем даже протестить. Прототип самому надо видимо писать а потом его взламывать ибо живой и трепыхающейся софтины я чот не видел.

DartPhoenix
11.03.2020, 22:29
Вообще... я ушь как-то наверное говорил но... они чото не то придумали. Потому что есть область памяти в которую не влезет даже авер. В нее нельзя влезть из ядра. Ничего не навевает ? Например место куда можно спокойно и неторопливо расшифровывать части малвари... Запускаться оттуда она может и не будет, но таблицу раскодировки - сам Джа велел туда затолкать. Так что в общем-то помолимся чтобы АМД поддерживали полностью сей стандарт а потом будем ждать баттхертов от дяди Жени.