Содержимое ячеек DRAM может быть повреждено в результате цикличного чтения
Проблема обусловлена особенностью работы памяти DRAM, которая формируется как двухмерный массив ячеек, каждая из которых состоит из конденсатора и транзистора. Состояние сохранённого в ячейке значения определяется тем, заряжен или нет конденсатор. Для поддержания заряда применяется цикл регенерации. При выполнении непрерывного чтения одной и той же области памяти из-за постоянного открытия и закрытия линии WL (Word Line), которая управляет транзисторами доступа, возникают флуктуации напряжения, которые могут привести к аномалии, вызывающей небольшую потерю заряда соседних ячеек. Если интенсивность чтения достаточно большая, то ячейка может потерять достаточно большой объём заряда и очередной цикл регенерации не успеет восстановить его первоначальное состояние, что приведёт к изменению значения сохранённых в ячейке данных.
Пример ассемблерного кода, который может привести к повреждению смежных битов памяти (простой цикл с чтением содержимого памяти и очисткой кэша, чтение двух значений по разным адресам обусловлено необходимостью инициирования закрытия линии 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=41340
|
0 | Tweet | Нравится |
|