Разработчики ядра Linux обсуждают (https://lkml.org/lkml/2014/12/24/258) реализацию возможного обходного пути защиты от эффекта (ttps://www.ece.cmu.edu/~safari/pubs/kim-isca14.pdf) искажения содержимого отдельных битов памяти DRAM (https://ru.wikipedia.org/wiki/DRAM), выявленного исследователями из Университета Карнеги — Меллон и Intel Labs. Исследование показало, что можно легко инициировать повреждение отдельных битов в DRAM-памяти путём цикличного чтения данных из соседних ячеек памяти.
Проблема обусловлена (http://blog.sudhanshumishra.in/2014/12/memory-error-due-to-c... особенностью работы памяти DRAM, которая формируется как двухмерный массив ячеек, каждая из которых состоит из конденсатора и транзистора. Состояние сохранённого в ячейке значения определяется тем, заряжен или нет конденсатор. Для поддержания заряди применяется цикл регенерации. При выполнении непрерывного чтения одной и той же области памяти из-за постоянного открытия и закрытия линии WL (Word Line), которая управляет транзисторами доступа, возникают флуктуации напряжения, которые могут привести к аномалии, вызывающей небольшую потерю заряда соседних ячеек. Если интенсивность чтения достаточно большая, то ячейка может потерять достаточно большой объём заряда и очередной цикл регенерации не успеет восстановить его первоначальное состояние, что приведёт к изменению значения сохранённых ячейке данных.
Пример (http://blog.sudhanshumishra.in/2014/12/memory-error-due-to-c... ассемблерного кода, который может привести к повреждению смежных битов памяти (простой цикл с чтением содержимого памяти и очисткой кэша, чтение двух значений по разным адресам обусловлено необходимостью инициирования закрытия линии WL, если постоянно читать только одну ячейку линия WL остаётся открытой и эффект не проявляется):
<font color="#461b7e">
loop:
mov X, %eax ; Читаем значения адресов X и Y,
mov Y, %ebx ; сохраняем значения в регистрах и кэше
clflush (X) ; Чистим содержимое кэша
clflush (Y)
mfence ; Убеждаемся, что данные точно вычищены из кэша
jmp loop
</font>
Подобный эффект можно использовать для инициирования атак по искажению данных в буфере, к которому атакующий не имеет доступа, но при этом имеет доступ к смежным с данным буфером областям памяти. Отмечается, что старые чипы DRAM, выпущенные до 2011 года, значительно более устойчивы к возникновению подобных ошибок. Все из более ста протестированных новых модулей памяти, выпущенных в 2012 и 2013 годах, оказались подвержены проблеме. В качестве рекомендации пока предлагается использовать модули памяти с контролем целостности ECC, которые значительно понижают вероятность незамеченного изменения данных, но полностью не исключают, так как возможны ситуации, когда в результате эффекта одновременно два бита могут поменять свои значения.
URL: https://lkml.org/lkml/2014/12/24/258
Новость: http://www.opennet.ru/opennews/art.shtml?num=41340