Исследователи из университета Карнеги-Меллона и Intel изучили аппаратный дефект в большом количестве модулей памяти DDR3. Те непроизвольно меняют значение битов в соседних рядах при колебании напряжения в определённой линии управления. То есть можно изменить значение ячейки памяти без прямого доступа к ней.

Глюк легко вызывается программным путём. Достаточно задать только две операции считывания данных из памяти с особым относительным смещением и некоторыми инструкциями для контроля кэша — и запустить небольшой цикл.

На иллюстрации показаны примеры кода. Код слева вызывает ошибку, код справа — не вызывает.

003

Ошибки удалось вызвать в 110 из 129 модулей памяти от трёх ведущих производителей DRAM. Устойчивы к дефекту многие старые модули, произведённые до 2012 года. Среди новых модулей (2012-2013 гг) ошибки присутствуют почти в 100% экземпляров.

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

Вероятно, даже простой запуск такой программы на компьютере приравнивается к DoS-атаке, поскольку замена битов в оперативной памяти наверняка вызовет системные ошибки.

Трудно предположить, что такого рода «уязвимости» были внедрены в аппаратуру умышленно. Очень похоже на ток утечки между соседними электродами. Это известная проблема в электронике, тем более при современном уровне миниатюризации. Банальный технический дефект.

В то же время, случайность появления бага вовсе не отменяет возможности его эксплуатации.



5 комментариев

  1. 25.12.2014 at 16:13

    Ошибка неприятная, но эксплуатировать её будет крайне тяжело из-за страничного преобразования. Подгадать, чтобы нужный участок памяти и наш буфер оказались по определённым физическим адресам, довольно сложно. Максимум, на что можно рассчитывать — это DoS.

    • 28.12.2014 at 01:08

      а вот например (гипоетеически) мы корраптнули место памяти, где хранился указатель на разрешенное нам место чтения (ну или записи). Мы читаем оттуда уже чтото другое или пишем туда чтото выполнимое. Я не говорю что это вохможно (не знаю что вообще случиться если произойдет инверсия битов), но сам факт что если нету дополнительных проверок указателей — то любое их изменение будет опасно никто не отменит.

  2. 25.12.2014 at 21:18

    Это многое объясняет. Это эти глюки на стабильном железе…

  3. 29.12.2014 at 14:18

Оставить мнение