Содержимое ячеек DRAM может быть повреждено в результате цикличного чтения

Материал из Викиновостей, свободного источника новостей

25 декабря 2014 года

Разработчики ядра Linux обсуждают реализацию возможного обходного пути защиты от эффекта искажения содержимого отдельных битов памяти DRAM, выявленного исследователями из Университета Карнеги — Меллон и Intel Labs. Исследование показало, что можно легко инициировать повреждение отдельных битов в DRAM-памяти путём цикличного чтения данных из соседних ячеек памяти.

Проблема обусловлена (Архивная копия от 6 марта 2016 на Wayback Machine) особенностью работы памяти DRAM, которая формируется как двухмерный массив ячеек, каждая из которых состоит из конденсатора и транзистора. Состояние сохранённого в ячейке значения определяется тем, заряжен или нет конденсатор. Для поддержания заряда применяется цикл регенерации. При выполнении непрерывного чтения одной и той же области памяти из-за постоянного открытия и закрытия линии WL (Word Line), которая управляет транзисторами доступа, возникают флуктуации напряжения, которые могут привести к аномалии, вызывающей небольшую потерю заряда соседних ячеек. Если интенсивность чтения достаточно большая, то ячейка может потерять достаточно большой объём заряда и очередной цикл регенерации не успеет восстановить его первоначальное состояние, что приведёт к изменению значения сохранённых в ячейке данных.

Пример (Архивная копия от 6 марта 2016 на Wayback Machine) ассемблерного кода, который может привести к повреждению смежных битов памяти (простой цикл с чтением содержимого памяти и очисткой кэша, чтение двух значений по разным адресам обусловлено необходимостью инициирования закрытия линии WL, если постоянно читать только одну ячейку линия WL остаётся открытой и эффект не проявляется):


loop:
mov X, %eax ; Читаем значения адресов X и Y,
mov Y, %ebx ; сохраняем значения в регистрах и кэше
clflush (X) ; Чистим содержимое кэша
clflush (Y)
mfence ; Убеждаемся, что данные точно вычищены из кэша
jmp loop

Подобный эффект можно использовать для инициирования атак по искажению данных в буфере, к которому атакующий не имеет доступа, но при этом имеет доступ к смежным с данным буфером областям памяти. Отмечается, что старые чипы DRAM, выпущенные до 2011 года, значительно более устойчивы к возникновению подобных ошибок. Из более ста протестированных новых модулей памяти, выпущенных в 2012 и 2013 годах, все без исключения оказались подвержены проблеме. В качестве рекомендации пока предлагается использовать модули памяти с контролем целостности ECC, которые значительно понижают вероятность незамеченного изменения данных, но полностью не исключают, так как возможны ситуации, когда в результате эффекта одновременно два бита могут поменять свои значения.

Дополнение 1: представлена программа RowHammer на основе MemTest 86+ 5.01, нацеленная на выявление данной проблемы. Из-за особенностей работы контроллеров памяти, применяемый алгоритм несколько не оптимален, что снижает скорость спровоцированных утечек заряда. Из-за этого программа заметно менее эффективна, чем могла бы быть, однако даже в текущем виде она выявляет наиболее подверженные проблеме модули памяти.

Дополнение 2: программа для тестирования проявления проблемы в userspace.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Содержимое ячеек DRAM может быть повреждено в результате цикличного чтения», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.