Как получить статус суперпользователя с помощью уязвимости DRAM: Техника Rowhammer

http://arstechnica.com/security/2015/03/cutting-edge-hack-gives-super-user-status-by-exploiting-dram-weakness/
  • Перевод


Исследователи информационной безопасности из Google создали эксплойт, который эксплуатирует физические слабости чипов DDR-памяти определенных типов, для повышения прав не-доверенных пользователей на Intel-совместимых компьютерах, работающих под Linux.

В посте в блоге проекта Project Zero специалисты Google описали технику эксплуатации уязвимости, которая заключается в изменении значений отдельных битов данных (bit flipping), хранящихся в модулях чипов DDR3, которые называют DIMM. В прошлом году исследователи доказали, что подобная подмена битов может быть осуществлена с помощью воздействия на небольшие участки памяти, которое приводит к изменению хранящихся там данных. Представители Google показали, как все это может быть использовано для реальной атаки.

«Больше всего здесь впечатляет тот факт, что мы становимся свидетелем того, как совершенно аналоговая проблема на уровне производителя железа может быть использована для атаки на программное обеспечение. […] Проще говоря, эксплойт просто перепрыгивает несколько уровней стека», — говорит главный редактор издания Microprocessor Report Дэвид Кантер.

Как это работает


Память DDR представляет из себя массив строк и столбцов, которые разбиты на блоки, используемые различными приложениями и операционной системой. Для обеспечения безопасности и целостности всей системы, в каждом крупном участке памяти есть «песочница», доступ к которой есть только у определенного приложения или процесса операционной системы.

Хакер может запустить программу, которая будет тысячи раз за долю секунды обращаться к конкретным рядам таких участков в модуле памяти, как бы «постукивая по ним молотком» (hammering) до тех пор, пока электромагнитное излучение не проникнет в соседний участок памяти, что может привести к изменению значений битов в нем с нулей на единицы и наоборот. Эта техника получила название Rowhammer.

Возможность влиять на содержание «запретных» областей памяти может иметь далеко идущие последствия. К примеру, таким образом пользователи или приложения, обладающие ограниченными системными привилегиями, могут повышать их вплоть до несанкционированного получения административного контроля.

А это, в свою очередь позволит злоумышленнику запускать зловредный коду или перехватывать действия пользователей или программ. Последствия такой атаки, к примеру, на серверы в дата-центре, обслуживающих тысячи пользователей, могут привести к значительному ущербу.

Все не так плохо


Уязвимость присутствует только в более новых типах памяти DDR3, поскольку ячейки DRAM в них расположены более компактно, что облегчает электромагнитное воздействие одной ячейки на другую. Атака не сработает в случае новых DDR4, которые обладают возможностями по корректировке ошибочного кода (ECC).

Кроме того, как отмечает эксперт компании Dyadic Security Ирен Абезгауз (Irene Abezgauz), по целому ряду причин, атака, разработанная специалистами Google в настоящий момент является скорее теоретической, нежели практической.

Во-первых, ее можно осуществить только локально, а не удаленно — это ограничение, которое серьезно снижает возможность использования этой техники «обычными» хакерами. Во-вторых, для реализации техники Rowhammer нужно осуществить более 540 тыс. обращений к памяти за 64 миллисекунды, что усложняет взлом.

Исследователи Google в своей публикации не называют производителей компьютеров или памяти, чьи продукты можно взломать с помощью разработанного эксплойта, или подробности о проценте успешных атак. Однако в посте приведена таблица с анонимным перечислением 29 модулей памяти и моделей ноутбуков. Из этих 29 только 15 были подвержены смене значений битов. Кроме того, только 13% из осуществленных перемен битов привели к возможности эксплуатации уязвимости.

Тем не менее, возможность эксплуатации физических слабостей аппаратного обеспечения — это новый вид компьютерных атак, противостоять которым довольно сложно.

Дэвид Кантер из Microprocessor Report описывает проблему так:

Речь идет не о софте, где можно создать патч и распространить его через обновление системы за пару недель на большинство пользователей. Здесь же, чтобы по-настоящему справиться с проблемой, нужно заменить модулей DRAM на миллиарды долларов. С практической точки зрения это неосуществимо.
1cloud.ru 124,19
IaaS, VPS, VDS, Частное и публичное облако, SSL
Поделиться публикацией
Комментарии 28
    +2
    Атака не сработает в случае новых DDR4, которые обладают возможностями по корректировке ошибочного кода (ECC).

    Что за бред? При чем тут ECC? DDR4, как впрочем и DDR3, может быть как с ECC, так и без. И ECC не спасает от этой проблемы. Если флипнулось больше одного бита в ячейке, то ошибка будет обнаружена, но не исправлена.
      +3
      В случае DDR4 атака не пройдет из-за TRR. Есть и DDR3 модули и чипсеты с поддержкой подобной технологии — pTRR.
        +1
        ECC системы с таким флипом уйдут в шатдаун (было дело на Sun Fire)
          0
          От системы очень сильно зависит. Разные вендоры по-своему реализуют реакцию на ошибки и их коррекцию.
        +4
        Опять для домохозяек!
        Не надо примеров на FPGA, покажите пример на стандартном контроллере любого маломальски популярном чипсете.
        P.S. или IMHO Но сам проверял, на РУ5Г — не работает, не смог изменить ни одного бита!
          +1
          ру5Г — DDR0.001
            +1
            Я на чипе, с более компактным расположением бит (РУ7), смог повторить!
              0
              В статье написано, что для проведения подобной атаки биты должны распологаться довольно близко (что, видимо, недостаточно для древних РУ5Г)
                0
                работает, если применить классическую конструкцию «бутерброд»
                  +1
                  Пробовал достаточно близко — обе микросхемы лежали в одной и той же комнате. Одной делал rowhammering — у неё погнулись выводы, а вторая просто пропала куда-то.
                    0
                    Стоп! Причем тут близкО?
                    В изначальной «ошибке» речь шла не про ЭМС (электормагнитную совместимость), а про то что остается остаточный заряд в проводниках массива конденсаторов и других схемах чипа. Т.е. это не ЭМ наводки, а как бы паразитные емкости.
                    РУ5 была выбрана просто по трем причинам: есть сами чипы (причем реально в большом кол-е и разных производителей, что гарантирует не глюки, а повторяемость), цикл в 100-500 нс могу формировать с точностями 5 нс, и вроде известна ее схемотехника.
                    Как результате не получилось получить ни чего внятного внятного. Пробовал всю линейку и 5Г, 5Г1, 5Г2, и откуда то нашлись пары 5В и попробовала импортные 4164.
                    Переходит на DDR или тем более DDR2 не вижу смысла там еще больше скрытых процессов в чипе приходит.
                    А то что дажее просто при играх режимами CAS RAS (без игры таймигами) можно добиться копирования (склейки) строк или столбцов это известный факт. На то выставляют требования в даташиатх.
                    Пока что данная «ошибка» это сферический конь в вакууме. Но вот для примера механизм «криогенной перестановки модулей памяти» это факт и проверенный, это я могу подтвердить.
                  +8
                  --скептик-mode-on
                  Представим ситуацию: я получил физический доступ к компьютеру (с достаточно мощным процессором и контроллером памяти, чтобы успеть 540 000 раз дёрнуть память за 64 миллисекунды), но у меня там юзерская учётка, а я хочу админку. Я знаю, что где-то в памяти лежит маска моих прав, но доступа у меня туда нет (Protected-mode, все дела), поэтому я долблюсь в «физически» соседнюю память, чтобы как-то повлиять на ту, где лежит маска.
                  Сопутствующие вопросы:
                  1) Куда долбиться? Где та самая соседняя строка памяти в терминах указателей?
                  2) Что делать со страничной организацией памяти? Из-за неё те циферки, что записаны в каком-нибудь void* ни разу не соответствуют тем, что на самом деле.
                  3) Предположим, я решил два предыдущих вопроса, начал долбить и тут бац — процессор переключается на другой процесс. Я этого не замечу, если не переопределю вектор прерывания (чего я сделать не смогу, иначе самой задачи бы не было). Значит долбить я буду дольше.
                  4) Физическая память закончилась, страница, в которую я долблю, упала в swap, потом вернулась. Куда? Куда сейчас долбить? Как это заметить?
                  5) И напоследок: в защищённом режиме (а иные сейчас нет смысла рассматривать) процессор просто не отправляет команды контроллеру памяти, если нет прав на доступ к участку памяти.
                  --скептик-mode-off
                    +1
                    В статье по ссылке все описано. Там остроумная техника, построенная вокруг
                    а) отработки bit-flipping-а на «своем» участке памяти позволяющей построить модель предсказывающую что изменит долбление в заданный адрес памяти
                    б) провоцировании ОС на заполнение физической памяти страницами page table
                    в) использовании bit flipping-а чтобы изменить page table так чтобы в адресное пространство процесса оказалась замапена физическая память ОСи

                    После того как процесс получает доступ к физической памяти ОСи дальнейшее почти тривиально
                      0
                      не читайте по утрам советских газет. прочитайте оригинальную статью — там отвечено на эти вопросы.
                        0
                        Меня больше интересует тот факт, что нельзя совсем конкретный бит изменить. Это будет случайный бит, и толку от всего этого долбления?
                          0
                          Вот почему столько народу ленится прочитать первоисточник, а?
                          Случайный бит позволяет получить за некоторое время работы маленькую зацепку в случайном месте, а дальше эта зацепка мгновенно расширяется и охватывает всю физическую память, причем в статье пошагово описан явно рабочий процесс от получения зацепки до её окончательного расширения.
                        +1
                        Вообще меня всегда напрягала излишняя миниатюризация, от которой надежность падает.
                        Разве можно было раньше представить, что запись в одну ячейку повлияет на другую, в какой-нибудь к565ру5?
                        То что в одной ячейке флеш памяти для экономии и увеличения емкости будут по 3 бита хранить, а затем данные в флэшках с такой памятью будут плыть со временем?
                          0
                          Можно подкорачивать питание и тем самым измениять ячейки даже в ру5.
                            +1
                            А КМ-ки на что? =)
                          +5
                          Если работа с одной ячейкой памяти изменяет другую — это плохая, никуда не годная память. Если на рынке сейчас вся память такая — ну вот взрывная новость типа того, как для католиков Исус оказался бы женщиной.
                            0
                            А причем тут тогда Linux?
                              +2
                              Возможно Linux предоставляет более прямое управление памятью, нежели Windows.
                                0
                                Там есть */proc/PID/pagemap* который (в случае доступности) облегчает эксплоит и поддержка large pages что тоже облегчает эксплойт.
                                Но как пишут авторы без всего этого вполне можно обойтись
                                0
                                Принцип работы Row Hammer известен уже давно, но не было рабочих эксплойтов, позволяющих направленно портить биты, чтобы какой-то профит поиметь. Атака от Google — это рабочий рут-эксплойт. Он направлен именно на линукс, на его систему управления памятью.
                                  0
                                  Атака от Google направлена на PTE — аппаратную фичу от x86 которую все ОС используют примерно одинаково.
                                  We expect our PTE-based exploit could be made to work on other operating systems; it is not inherently Linux-specific.
                                +7
                                При чём тут линукс? Был показан уход из Native Client под хромом (любые ОС) и показан PoC для Линукс. Сама уязвимость к ОС не имеет никакого отношения и является, вообще говоря, битой памятью. От обычной битой памяти её отличает то, что программа может управлять процессом «битья», перегружая контроллер операциями чтения.

                                Поскольку это отказ оборудования, то эксплоит так же касается любого другого ядра или гипервизора.

                                Но грозит он только дешёвым лэптопам с DDR3/4, сервера с ECC (пока что) не затронуты. Да, и я думаю, это просто хардварная проблема и такая память должна меняться по гарантии. Какая разница из-за чего память самопроизвольно биты флопает? В пределах эксплуатационных ограничений? В пределах. Значит, дефект.
                                  0
                                  Физический доступ к железу.
                                  Какие еще вопросы. Там можно нахимичить что угодно, особенно если владеть лабораторией гугла и интела.
                                  Немного потеоретизировав, может вообще можно считывать весь трафик по шине, подключившись напрямую к рабочей машине и через некоторое время иметь слепок ОЗУ.

                                  Вообще, IMHO не так уж сложно сделать память, которая одновременно работает с двумя устройствами. Прицепить прямо на чип памяти небольшой GSM модуль с управлением, залезть в датацентр и в каком-то сервере поменять. Если сервер просто перегрузят и не будут физически осматривать, то вот в обход всех и всего, есть прямой доступ к оперативной памяти сервера, и можно что угодно делать.

                                    +5
                                    Только доступ не физический а программный, был продемонстрирован уход из песочницы NaCl, то есть вы можете открыть страницу в Chrome, ваш ноутбук зашуршит вентилятором секунд на 10 и у вас в системе уже стоит руткит.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое