`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Что для вас является метрикой простоя серверной инфраструктуры?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Конец спекуляциям?

+44
голоса

Intel предлагает новые правила для ветвлений в программном коде для защиты от атак, основанных на переходах по искаженному адресу при спекулятивном выполнении кода.

Радикальное средство от злоупотреблений в спекулятивных операциях — новая инструкция ENDBRANCH. По задумке Intel она должна стать барьером для несанкционированного вызова подпрограмм с косвенным формированием адресов в ветвящихся процессах. Прямо указанный адрес — не проблема для спекулятивных вычислений, он прозрачен для средств контроля моментально и сразу: здесь играем, здесь не играем, а здесь область данных. То ли дело — операции с указателями и косвенными ссылками! Заранее неизвестно, что и как. Приходится просчитывать все варианты в надежде опередить вычисления только одним правильным предсказанием. Вот здесь и подстерегает нас злополучный Meltdown, рассчитывая поживиться побочными продуктами глубокой конвейеризации.

Что такое Indirect Branch Tracking

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

Важное место в таких сценариях, намеренно провоцирующих ошибки предсказания, занимают инструкции косвенной передачи управления, с использованием содержимого регистра или ячейки памяти в качестве целевого адреса. Заслоном против «исследовательских» попыток вычислить содержимое информации из «запретного» региона памяти призвана стать функциональность Indirect Branch Tracking (IBT), анонсированная Intel более года назад в рамках технологии Control Flow Enforcement Technology (CET).

Конец спекуляциям?

Рис 1. Поддержка функциональности Shadow Stacks в рамках технологии Control Flow Enforcement Technology прямо декларируется процессором посредством инструкции CPUID (скриншот утилиты JavaCrossPlatformCPUID)

Как IBT контролирует операции косвенной передачи управления и защищает от атак, основанных на переходах по искаженному адресу, в том числе в процессе спекулятивного выполнения фрагментов кода?

При использовании IBT в точках программы, являющихся целевыми для законной передачи управления (в том числе — в начале каждой под-программы), располагается нововведение — инструкция ENDBRANCH. Если защита поддерживается и включена, то для перехода по заданному адресу процессор ожидает увидеть там первой именно эту инструкцию. В противном случае формируется исключение. Защита действует только для инструкций косвенной передачи управления по адресу, находящемуся в памяти или регистре. Подразумевается, что прямая передача управления не подвержена рассматриваемому виду уязвимостей.

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

Согласно логике разработчиков, для обеспечения совместимости код инструкции ENDBRANCH будет соответствовать одной из форм инструкции NOP (no operation). Это гарантия того, что если защита не поддерживается процессором или выключена, логика работы программы не изменяется, и ее выполнение происходит без контроля со стороны CPU.

Неочевидные свойства Shadow Stack

Наряду с функциональностью Shadow Stack, контролирующей механизм возврата управления из подпрограмм, Indirect Branch Tracking является вторым элементом технологии CET. Что общего у IBT и Shadow stack?

Конец спекуляциям?

Рис 2. Поддержка функциональности Indirect Branch Tracking в рамках технологии Control Flow Enforcement Technology прямо декларируется процессором посредством инструкции CPUID (скриншот утилиты JavaCrossPlatformCPUID)

Команда возврата RET, читающая адрес из стека и передающая его в счетчик команд, является частным случаем косвенной передачи управления, пусть и менее пригодным для эксплуатации рассмотренной уязвимости.

Расположить инструкции ENDBRANCH в каждой точке возврата из подпрограммы, то есть после каждой инструкции CALL, было бы шагом, мягко говоря, эксцентричным, даже на фоне уже состоявшихся инициатив. Кроме того, стек используется при обработке аппаратных прерываний, которые, как известно, происходят асинхронно, а потому практически каждая точка программы может стать целевой точкой для инструкции IRET — возврата из прерывания.

Конец спекуляциям?

Рис 3. Информация, предоставляемая инструкцией CPUID для декларирования поддержки технологии Control Flow Enforcement Technology (фрагмент «Control-flow Enforcement Technology Preview», Rev 2.0 от июня 2017, Document Number: 334525-002)

С большой долей вероятности можно предположить, что объединение Indirect Branch Tracking и Shadow Stack в рамках технологии CET не случайно. Вместе с тем, как следует из информации, полученной по CPUID, поддержка процессором этих двух видов функциональности отображается раздельными битами.

+44
голоса

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT