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

Комментарии

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