RowPress — атака на оперативную память

Новый метод атаки через «простукивание ячеек памяти».

Новый метод атаки через «простукивание ячеек памяти».

Сегодня мы поговорим о методе атаки на микросхемы оперативной памяти, актуальном и для персональных компьютеров, и для серверов, и для смартфонов. Тем более есть хороший повод: недавно было опубликовано свежее исследование, в котором предложен новый метод атаки через «простукивание ячеек памяти», получивший название RowPress. Сама по себе идея не нова — впервые нечто подобное было представлено почти 10 лет назад под именем RowHammer. Однако RowPress — более эффективный вариант атаки. Но для начала давайте разберемся, что именно понимается под тем самым «простукиванием».

Как работает оперативная память

Микросхемы оперативной памяти всегда были не очень надежными. Каждая ячейка памяти, хранящая один бит информации, представляет собой, ну если совсем упростить, миниатюрную батарейку. Когда мы ее заряжаем — записываем в ячейку единицу. Если заряда нет — это ноль. Только представьте, что это происходит миллионы раз в секунду. В современных микросхемах плотность таких ячеек фантастически высока: на кристалле размером с ноготь их миллиарды. При высокой частоте обновления данных и предельной миниатюрности электронных компонентов рано или поздно будут происходить сбои. Например, наша упрощенная «батарейка» потеряет заряд, и единица превратится в ноль. Иногда сбои могут возникать из-за внешних причин, скажем, если модуль памяти сильно нагреется, или даже из-за космических лучей.

Такие сбои могут привести к критическим ошибкам. Представьте, что ваша программа держит в оперативной памяти адрес, по которому нужно обратиться при выполнении каких-то условий. Если несколько бит этого адреса спонтанно поменяют свое значение с единицы на ноль, переход произойдет неизвестно куда и выполнится не нужный нам код, а неизвестно что. Чтобы сбоев не происходило, применяется множество технологий. Например, принудительное обновление содержимого ячеек памяти: последовательное считывание и запись информации, даже если процессор и программа в ней прямо сейчас не нуждаются. Процесс чтения данных — деструктивный, после обращения информацию надо обязательно перезаписать. Кроме того, применяется механизм коррекции ошибок, когда в память сохраняются и данные, и отдельная информация для проверки корректности этих же данных. Важно понимать, что высокая плотность ячеек памяти в современных компьютерах — фундаментальная особенность, делать их как-то по-другому не получится.

Атака RowHammer

Но вернемся к исследованию RowHammer 2014 года. Исследователи из Университета Карнеги-Меллон и компании Intel показали, как можно воспользоваться вышеописанными особенностями динамически обновляемой оперативной памяти для причинения вреда. Если чтение данных деструктивно и после них следует перезапись, то что будет, если мы напишем программу, которая будет выполнять чтение десятки и сотни тысяч раз в секунду?

Схематичное изображение структуры ячеек оперативной памяти

Схематичное изображение структуры ячеек оперативной памяти. Источник

Ячейки памяти расположены в виде матрицы, и при любой операции с конкретной ячейкой происходит обращение к целому их ряду. Оказалось, что последовательное, многократное обращение к определенному ряду ячеек влияет на соседние ряды. Если проделать эту операцию очень много раз, информация в ячейках соседнего ряда может измениться: единица превратится в ноль или наоборот. В 2014 году возможность такой атаки показали для еще актуальных в то время модулей памяти стандарта DDR3.

Почему это важно и достаточно опасно? Представьте, что вы можете выполнять на атакуемой системе какой-то произвольный код, но без особых привилегий. В крайнем случае это может быть даже код веб-страницы, ссылку на которую можно прислать жертве. Если позволить этой программе «простучать» определенную область оперативной памяти, это может привести к искажению информации в соседних ячейках. А там могут, например, храниться данные операционной системы.

В 2015 году представители компании Google показали, что атаку RowHammer можно применить для получения неограниченного доступа к оперативной памяти компьютера. Это очень сложная атака, в которой много неизвестных: надо еще как-то ухитриться попасть в нужную область памяти и вызвать «правильное» повреждение данных, чтобы компьютер не завис, программа не прекратила работу, а сделала то, что нужно потенциальному злоумышленнику. Но теоретическая возможность такой атаки была подтверждена.

BlackSmith: обход защиты RowHammer

Как вообще защищают данные от атаки RowHammer? Самый простой способ: если поступают запросы на чтение данных из какого-то ряда ячеек, можно принудительно обновить информацию и в соседних рядах тоже. Таким образом вероятность повреждения данных значительно снижается. Как и в случае аппаратных уязвимостей в процессорах, в каждом методе защиты рано или поздно обнаруживается какая-то проблема.

В 2021 году исследователи показали атаку BlackSmith — продемонстрировали, что при некоторых условиях можно вызвать сбои даже при наличии защиты от RowHammer. Как именно этого смогли добиться? Что, если не «стучать» в какой-то определенный ряд ячеек памяти рядом с искомым, а попробовать разные комбинации: сотни тысяч раз опрашивать ряды ячеек выше и ниже целевого либо атаковать сразу четыре ряда в определенной последовательности. Оказалось — это работает, ведь фундаментальная проблема (высокая плотность ячеек памяти) никуда не делась!

RowPress: повышение эффективности атаки

Самая свежая атака RowPress еще эффективнее, хотя и использует тот же базовый принцип. С одним небольшим, но важным изменением: атакующий пытается удержать один ряд ячеек в состоянии, открытом для чтения, максимально долго. Авторы исследования смогли найти еще одну стандартную особенность работы микросхем памяти и контроллера, которая вызывает еще больше «возмущений», влияющих на соседние ряды ячеек памяти. По сравнению с RowHammer эффективность атаки RowPress (измеряемая в количестве необходимых «простукиваний» — чем их меньше, тем лучше) повысилась в десятки и даже сотни раз. В некоторых пограничных случаях желаемое изменение значений в целевых ячейках памяти удавалось достичь после единственной операции чтения данных «по соседству».

Тестовая схема для исследования работы модулей оперативной памяти

Тестовая схема для исследования работы модулей оперативной памяти. Источник

Насколько это серьезная проблема? Вероятность того, что кто-то будет массово атаковать домашние компьютеры с помощью RowHammer, Blacksmith или RowPres, крайне мала. Опасность эти атаки представляют для бизнеса. Например, в теории они могут быть использованы для атаки на память серверов, работающих в публичных облаках. Ведь провайдеры предоставляют доступ к своим серверам, выделяя для пользователей «виртуальную машину», в которой можно выполнять любой код. Для них критически важно, чтобы в этой машине не было возможности «сбежать» из виртуального окружения, получив доступ к данным других клиентов. При этом виртуальная система — это, грубо говоря, программа, которая по определению может считывать и записывать данные в оперативную память сервера. По сути готовая платформа для атаки на память физического сервера.

Насколько теоретической является такая атака, можно понять по фотографии тестовой установки, использованной для исследования RowPress. Модуль памяти перенесен на отдельную плату. К нему подключено некое отладочное устройство, позволяющее тонко управлять работой оперативной памяти. Некоторые системы защиты были отключены. А главное — на сам модуль с микросхемами памяти был установлен нагреватель, поднимающий температуру до 50 или даже до 80 градусов, что само по себе повышает вероятность случайного или намеренного повреждения данных.

Особенности атак на «железо»

Если сравнить атаку RowPress с более ранней RowHammer, то, по сути, исследователи просто слегка модифицировали метод обращения к памяти и смогли обойти (в том числе на реальной системе, без подогрева модулей и прочего «читерства») реализованные производителями модулей способы защиты. Ученые предложили свой вариант решения этой проблемы, который, к счастью, незначительно сказывается на производительности. Однако, как это обычно бывает с «железными» уязвимостями, от них вряд ли получится избавиться полностью. Нельзя делать микросхемы памяти с меньшей плотностью. Наоборот, с каждым годом емкость отдельного модуля памяти только растет.

Не получится применить и «надежный» способ коррекции ошибок — он потребует резервирования до трети объема оперативной памяти. Обычный метод коррекции ECC снижает эффективность атаки, но не исключает ее. Поэтому можно уверенно говорить, что атака RowPress — не последний вариант «простукивания».

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

Однако списывать со счетов такие работы как чисто теоретические тоже не стоит: то, что сейчас под силу команде специалистов с многолетним опытом, через 5-10 лет может оказаться доступно реальным злоумышленникам. Провайдерам облачных решений и сейчас стоит быть в курсе последних исследований по этой теме и учитывать даже такие нюансы в модели безопасности.

Советы