Атака rowhammer: раздолье для конспирологов!

Пару дней назад по специализирующимся на «железе» айтишным изданиям промелькнуло сообщение, оставшееся, в общем, незамеченным широкой публикой: чипы оперативной памяти DDR4 — новейший стандарт, лишь вводимый в обращение — подвержены хакерской атаке Rowhammer, найденной ранее на DDR3. То, что известие это осталось незаметным, не удивляет: через чур много в нём незнакомых терминов кроме того для сведущего в технике человека, да и все эти паникёрские вбросы про атаки и катастрофические ошибки уже порядком утомили кроме того смотрящих за ними людей. Всё это так, но в этом случае за сереньким фасадом прячется увлекательнейшая история одного из самых неординарных компьютерных багов всех времён — и, право, она стоит того, дабы её поведать и послушать!

Но прежде давайте сделаем экскурс в разработку компьютерной памяти. Не обращая внимания на то, что со времён выпуска первых микросхем RAM (начало 70-х, Intel) сменилось очень много стандартов, а миниатюризация шагнула поразительно на большом растоянии, принцип, на котором основана оперативная память, не поменялся сейчас. Это так называемая динамическая память с произвольным доступом (DRAM), изобретённая IBM в 60-х. Устроена она весьма легко (в чём и залог её успеха): любой бит информации хранится в ячейке, образованной из конденсатора (фактически, единица памяти) и транзистора (играющего запасного роль). Конденсатор неспешно теряет заряд, исходя из этого нужно иногда его пополнять, прикладывая к ячейке электрическое напряжение. Данный процесс именуется регенерацией и производится в современных цифровых устройствах каждые пара десятков миллисекунд.

Атака rowhammer: раздолье для конспирологов!

Так трудятся чипы DRAM (см. ниже). Пурпурным выделена активная строка. Жёлтым соседние с ней, подверженные случайным трансформациям. Графика: Wikipedia.

Принципиально важно знать и другую особенность DRAM. На уровне микросхемы каждые операции (т.е. регенерация, чтение и запись; кстати, чтение из DRAM по сути не отличается от записи, по причине того, что требует, дабы содержимое ячейки было перезаписано) производятся не побитно, а построчно, причём, в зависимости от количества конкретного чипа, строка может содержать десятки тысяч бит. В то время, когда процессору необходимо содержимое произвольной ячейки, он отправляет контроллеру памяти её адрес — тот разбивается на адрес столбца и строки, позже необходимая строка копируется в промежуточный кэш и уже в том месте выбирается необходимая ячейка. Само собой, запись и чтение также предполагают приложение напряжения к строчку.

И вот тут мы подходим к главному. Оказалось, что в случае если достаточно скоро обращаться к одной строки, паразитные токи, появляющиеся в соседних строчках, смогут привести к случайным изменениям некоторых ячеек. Кое-какие источники утверждают, что эффект данный (именовавшийся до последнего времени DRAM disturbance error) был обнаружен ещё в начале 70-х, в то время, когда и были приняты первые меры для его минимизации (наподобие улучшенной изоляции строчков на чипах памяти приятель от друзья). На какое-то время это помогло, по причине того, что плотность размещения ячеек тогда ещё не была близка к физическим ограничениям полупроводников. Но во втором десятилетии XXI века неприятность всплыла снова.

Я тут мало сокращу таймлайн, но в целом события развивались следующим образом. Года три назад кто-то из исследователей понял, что чипы DDR3 подвержены уже забытой проблеме. Тогда же она взяла и собственное современное имя: Row Hammer (букв. молоток для строчков). Метод остался совсем тем же: в случае если весьма скоро и достаточно продолжительно (время варьируется от нескольких мин. до нескольких часов) обращаться к одному участку памяти, в соседних с ним смогут происходить непредсказуемые трансформации. Хотите проверить свой автомобиль? Соответствующая опция встроена в Memtest86, имеется и Linux-утилита от Гугл; но действуйте с опаской, прочтите предупреждения и инструкцию!

Атака rowhammer: раздолье для конспирологов!

Количество неточностей в разных чипах DRAM в зависимости от даты производства. График говорит сам за себя: чем выше степень миниатюризации, тем более чип подвержен Rowhammer.

Лёгкая паника, охватившая тогда производителей, будет понятна, в случае если отыскать в памяти, что принципиально изменилось в компьютерной технике с 70-х годов: показалась защита памяти. Древние компьютеры не умели изолировать программы друг от друга в оперативной памяти, так что неточность одной довольно часто приводила к провалу всей совокупности. Сейчас же приложения изолируются от соседей, и это — один из основополагающих механизмов, что делает вероятным построение надёжных многозадачных многопользовательских сред. Но вот незадача: «на страже» памяти стоит операционная система и процессор, Rowhammer же действует уровнем ниже — и ему на защиту наплевать!

Ещё в начале прошлого года исследователи показали это фактически — продемонстрировав, как возможно применять RH для несанкционированного поднятия привилегий в современных ОС. А прошлым летом был сделан и следующий ход: продемонстрирована возможность проведения атаки RH не программой в машинных кодах, а скриптом на Javascript, исполняющимся в браузере! Попросту говоря, появилась настоящая угроза пандемии вирусов, эксплуатирующих Rowhammer. И противопоставить ей как словно бы бы нечего!

Атака rowhammer: раздолье для конспирологов!

К вопросу о темпах миниатюризации.

Вопрос защиты от Rowhammer и в самом деле тяжёлый. В случае если кратко, методы предотвращения атаки имеется, но не без побочных эффектов. На уровне ПО найти RH сложно, практически нереально. Нужно противопоставить что-то на уровне аппаратном. А в том месте до последнего времени способов было два. Во-первых, расширить частоту регенерации оперативной памяти. Это вправду снизит возможность случайных сбоев, но и очень сильно ударит по энергопотреблению и производительности системы. Во-вторых, положиться на механизм встроенной автоматической коррекции неточностей (ECC), имеющийся в чипах памяти для серверов. К сожалению, ECC корректирует значительно чаще лишь искажения одного бита на каждое 64-битное слово, в то время как RH вызывает «мутации» сходу во множестве ячеек.

Надежду дала показавшаяся в DDR4 «умная» регенерация. Попросту, контроллер памяти следит, к каким строчкам обращались, и старается подзаряжать прежде всего строчка соседние с ними. Но, возвращаясь к тому, с чего мы начали, тесты на «живых» совокупностях с DDR4 продемонстрировали, что и это не помогло. Кроме того чипы DDR4 так же, как и прежде подвержены атаке Rowhammer! Что же дальше?

В первую очередь, не следует паниковать. Использование RH в действительности — экстремально тяжёлая задача. Успех её зависит от множества малоизвестных: чипов памяти, установленных в конкретной совокупности, их конфигурации, ОС, используемого софта, нагрузки на машину и многого другого, включая и чистое везение («мутации» так как случайны). Другими словами возможность, что Rowhammer применят, скажем, для массового компьютерного вируса, ничтожно мелка.

Вместе с тем использование RH в единичных случаях — к примеру, для вычисления конкретного пользователя TOR разведслужбами — выглядит настоящим. Так как действенной защиты так же, как и прежде не существует. И, пожалуй, единственная настоящая возможность от таковой атаки защититься — пересесть на вычислительную технику, скажем, примера 90-х годов. Которая ещё не подошла к барьеру возможностей полупроводников через чур близко…

P.S. В статье использована иллюстрация Antonio Thomas Oliveira.

Exploiting the DRAM Rowhammer Bug to Gain Kernel Privileges


Похожие статьи: