Rowhammer (также пишется как row hammer ) — это эксплойт компьютерной безопасности, который использует непреднамеренный и нежелательный побочный эффект в динамической памяти с произвольным доступом (DRAM), в которой ячейки памяти взаимодействуют между собой электрически, пропуская свои заряды, что может изменить содержимое соседних строк памяти , которые не были адресованы при исходном доступе к памяти. Этот обход изоляции между ячейками памяти DRAM является результатом высокой плотности ячеек в современной DRAM и может быть вызван специально созданными шаблонами доступа к памяти , которые быстро активируют одни и те же строки памяти много раз. [1] [2] [3]
Эффект Роухаммера использовался в некоторых эксплойтах компьютерной безопасности , направленных на повышение привилегий , [2] [4] [5] [6] и теоретически возможны также сетевые атаки. [7] [8]
Существуют различные аппаратные методы предотвращения возникновения эффекта Роухаммера, включая необходимую поддержку в некоторых процессорах и типах модулей памяти DRAM . [9] [10]
В динамической оперативной памяти (DRAM) каждый бит хранимых данных занимает отдельную ячейку памяти, которая электрически реализована с помощью одного конденсатора и одного транзистора . Состояние заряда конденсатора (заряжен или разряжен) определяет, хранит ли ячейка DRAM «1» или «0» в качестве двоичного значения . Огромное количество ячеек памяти DRAM упаковано в интегральные схемы вместе с некоторой дополнительной логикой, которая организует ячейки для целей чтения, записи и обновления данных. [11] [12]
Ячейки памяти (синие квадраты на обеих иллюстрациях) далее организованы в матрицы и адресуются через строки и столбцы. Адрес памяти, примененный к матрице, разбивается на адрес строки и адрес столбца, которые обрабатываются декодерами адреса строки и столбца (на обеих иллюстрациях вертикальные и горизонтальные зеленые прямоугольники соответственно). После того, как адрес строки выбирает строку для операции чтения (выбор также известен как активация строки ), биты из всех ячеек в строке передаются в усилители считывания , которые формируют буфер строки (красные квадраты на обеих иллюстрациях), из которого точный бит выбирается с помощью адреса столбца. Следовательно, операции чтения имеют деструктивную природу, поскольку конструкция DRAM требует, чтобы ячейки памяти были перезаписаны после того, как их значения были считаны путем передачи зарядов ячеек в буфер строки. Операции записи декодируют адреса аналогичным образом, но в результате конструкции целые строки должны быть перезаписаны для изменения значения одного бита. [1] : 2–3 [11] [12] [13]
В результате хранения битов данных с использованием конденсаторов, которые имеют естественную скорость разряда, ячейки памяти DRAM со временем теряют свое состояние и требуют периодической перезаписи всех ячеек памяти, что является процессом, известным как обновление. [1] : 3 [11] Как еще один результат конструкции, память DRAM подвержена случайным изменениям в сохраненных данных, которые известны как мягкие ошибки памяти и приписываются космическим лучам и другим причинам. Существуют различные методы, которые противодействуют мягким ошибкам памяти и повышают надежность DRAM, из которых наиболее часто используются память с кодом исправления ошибок (ECC) и ее усовершенствованные варианты (такие как память с фиксированным шагом ). [14]
Увеличение плотности интегральных схем DRAM привело к физически меньшим ячейкам памяти, содержащим меньше заряда, что привело к снижению запасов рабочего шума , увеличению скорости электромагнитных взаимодействий между ячейками памяти и большей вероятности потери данных. В результате были обнаружены ошибки помех , вызванные ячейками, которые мешают работе друг друга и проявляются в виде случайных изменений значений битов, хранящихся в затронутых ячейках памяти. Осознание ошибок помех восходит к началу 1970-х годов и Intel 1103 как первых коммерчески доступных интегральных схем DRAM; с тех пор производители DRAM использовали различные методы смягчения для противодействия ошибкам помех, таким как улучшение изоляции между ячейками и проведение производственных испытаний. Однако исследователи доказали в анализе 2014 года, что коммерчески доступные чипы DDR3 SDRAM , произведенные в 2012 и 2013 годах, подвержены ошибкам помех, при этом термин Rowhammer использовался для обозначения связанного побочного эффекта, который привел к наблюдаемым переворотам битов . [1] [3] [15]
Возможность возникновения эффекта Роухаммера в памяти DDR3 [16] в первую очередь объясняется высокой плотностью ячеек памяти DDR3 и результатами связанных взаимодействий между ячейками, в то время как быстрые активации строк DRAM были определены как основная причина. Частые активации строк вызывают колебания напряжения на связанных линиях выбора строк, которые, как было замечено, вызывают более высокие, чем естественные, скорости разряда в конденсаторах, принадлежащих соседним (в большинстве случаев смежным) строкам памяти, которые называются строками-жертвами ; если затронутые ячейки памяти не обновляются до того, как они потеряют слишком много заряда, возникают ошибки помех. Тесты показывают, что ошибка помех может наблюдаться после выполнения около 139 000 последующих доступов к строкам памяти (с очисткой кэша ), и что до одной ячейки памяти из каждых 1700 ячеек могут быть подвержены. Эти тесты также показывают, что частота ошибок помех не существенно зависит от повышенной температуры окружающей среды, в то время как она зависит от фактического содержимого DRAM, поскольку определенные битовые комбинации приводят к значительно более высоким частотам ошибок помех. [1] [2] [15] [17]
Вариант, называемый двусторонним молотком, включает в себя целевые активации двух строк DRAM, окружающих строку жертвы: на иллюстрации, представленной в этом разделе, этот вариант будет активировать обе желтые строки с целью индуцирования переворотов битов в фиолетовой строке, которая в этом случае будет строкой жертвы. Тесты показывают, что этот подход может привести к значительно более высокому уровню ошибок помех по сравнению с вариантом, который активирует только одну из соседних строк DRAM строки жертвы. [4] [18] : 19–20 [19]
Поскольку поставщики DRAM внедряли меры по смягчению, шаблоны должны были стать более сложными, чтобы обойти меры по смягчению Rowhammer. Более поздние шаблоны Rowhammer включают неоднородные, основанные на частоте шаблоны. [20] Эти шаблоны состоят из множества двухсторонних пар агрессоров, где каждый из них подвергается ударам с разной частотой, фазой и амплитудой. Используя это и синхронизируя шаблоны с командой REFRESH, можно очень эффективно определять «слепые зоны», где меры по смягчению больше не могут обеспечить защиту. Основываясь на этой идее, ученые создали фаззер Rowhammer под названием Blacksmith [21] , который может обойти существующие меры по смягчению на всех устройствах DDR4.
Существуют различные методы для более или менее успешного обнаружения, предотвращения, исправления или смягчения эффекта Rowhammer. Тесты показывают, что простой код исправления ошибок , обеспечивающий возможности исправления одиночных ошибок и обнаружения двойных ошибок (SECDED), не способен исправить или обнаружить все наблюдаемые ошибки возмущения, поскольку некоторые из них включают более двух перевернутых битов на слово памяти . [1] : 8 [15] : 32 Кроме того, исследования показывают, что точно нацеленные трехбитовые перевороты Rowhammer не позволяют памяти ECC заметить изменения. [22] [23]
Менее эффективным решением является введение более частого обновления памяти с интервалами обновления короче обычных 64 мс, [a] , но этот метод приводит к более высокому энергопотреблению и увеличению накладных расходов на обработку; некоторые поставщики предоставляют обновления прошивки , которые реализуют этот тип смягчения. [24] Одна из более сложных мер профилактики выполняет идентификацию на основе счетчика часто используемых строк памяти и проактивно обновляет их соседние строки; другой метод инициирует дополнительные нечастые случайные обновления строк памяти, соседних с используемыми строками, независимо от частоты их доступа. Исследования показывают, что эти две меры профилактики оказывают незначительное влияние на производительность. [1] : 10–11 [25]
С момента выпуска микроархитектуры Ivy Bridge процессоры Intel Xeon поддерживают так называемое псевдоцелевое обновление строки (pTRR), которое может использоваться в сочетании с совместимыми с pTRR модулями памяти DDR3 с двухрядным расположением выводов (DIMM) для смягчения эффекта Rowhammer путем автоматического обновления возможных строк-жертв без отрицательного влияния на производительность или энергопотребление. При использовании с модулями DIMM, несовместимыми с pTRR, эти процессоры Xeon по умолчанию возвращаются к выполнению обновлений DRAM с частотой, вдвое превышающей обычную, что приводит к немного более высокой задержке доступа к памяти и может снизить пропускную способность памяти до 2–4%. [9]
Стандарт мобильной памяти LPDDR4 , опубликованный JEDEC [26], включает дополнительную аппаратную поддержку так называемого обновления целевой строки (TRR), которое предотвращает эффект Rowhammer без отрицательного влияния на производительность или энергопотребление. [10] [27] [28] Кроме того, некоторые производители реализуют TRR в своих продуктах DDR4 , [29] [30], хотя это не является частью стандарта памяти DDR4, опубликованного JEDEC. [31] Внутри себя TRR идентифицирует возможные строки-жертвы, подсчитывая количество активаций строк и сравнивая его с предопределенными значениями максимального количества активаций (MAC) и максимального окна активации (t MAW ), специфичными для чипа , и обновляет эти строки, чтобы предотвратить перевороты битов. Значение MAC — это максимальное общее количество активаций строк, которые могут возникнуть в конкретной строке DRAM в течение временного интервала, который равен или короче, чем количество времени t MAW, прежде чем соседние строки будут идентифицированы как строки-жертвы; TRR также может пометить строку как строку-жертву, если сумма активаций строк для двух соседних строк достигает предела MAC в течение временного окна t MAW . [26] [32] Исследования показали, что меры по смягчению последствий TRR, реализованные на модулях DDR4 UDIMM и чипах LPDDR4X из устройств, произведенных в период с 2019 по 2020 год, неэффективны для защиты от Rowhammer. [20]
Из-за необходимости в огромном количестве быстро выполняемых активаций строк DRAM эксплойты Rowhammer вызывают большое количество некэшированных обращений к памяти, что приводит к промахам кэша , которые можно обнаружить, отслеживая частоту промахов кэша на предмет необычных пиков с помощью аппаратных счетчиков производительности . [4] [33]
Версия 5.0 диагностического программного обеспечения памяти MemTest86 , выпущенная 3 декабря 2013 года, добавила тест Rowhammer, который проверяет, подвержена ли оперативная память компьютера ошибкам помех, но он работает только в том случае, если компьютер загружает UEFI ; без UEFI он загружает старую версию без теста Hammer. [34]
Защита памяти , как способ предотвращения доступа процессов к памяти, которая не была назначена каждому из них, является одной из концепций, лежащих в основе большинства современных операционных систем . Используя защиту памяти в сочетании с другими механизмами, связанными с безопасностью, такими как кольца защиты , можно добиться разделения привилегий между процессами, при котором программы и компьютерные системы в целом делятся на части, ограниченные конкретными привилегиями, которые им требуются для выполнения определенной задачи. Использование разделения привилегий также может уменьшить степень потенциального ущерба, вызванного атаками на компьютерную безопасность , ограничивая их воздействие определенными частями системы. [35] [36]
Ошибки нарушения (объясненные в разделе выше) эффективно обходят различные уровни защиты памяти, « замыкая » их на очень низком уровне оборудования, фактически создавая уникальный тип вектора атаки , который позволяет процессам изменять содержимое произвольных частей основной памяти путем прямого манипулирования базовым оборудованием памяти. [2] [4] [18] [37] Для сравнения, «обычные» векторы атаки, такие как переполнение буфера, направлены на обход механизмов защиты на уровне программного обеспечения, эксплуатируя различные ошибки программирования для достижения изменений в ином случае недоступного содержимого основной памяти. [38]
Первоначальное исследование эффекта Роухаммера, опубликованное в июне 2014 года, описало природу ошибок нарушения и указало на потенциал для построения атаки, но не предоставило никаких примеров работающего эксплойта безопасности. [1] Последующая исследовательская работа от октября 2014 года не подразумевала существования каких-либо проблем безопасности, возникающих из-за эффекта Роухаммера. [16]
9 марта 2015 года Project Zero от Google раскрыл два рабочих эксплойта повышения привилегий, основанных на эффекте Rowhammer, установив его эксплуатационную природу на архитектуре x86-64 . Один из выявленных эксплойтов нацелен на механизм Google Native Client (NaCl) для запуска ограниченного подмножества машинных инструкций x86-64 в песочнице , [18] : 27 эксплуатация эффекта Rowhammer для выхода из песочницы и получения возможности напрямую выполнять системные вызовы . Эта уязвимость NaCl , отслеживаемая как CVE - 2015-0565, была смягчена путем изменения NaCl таким образом, чтобы он не позволял выполнять машинную инструкцию ( cache line flush [39] ), которая ранее считалась необходимой для построения эффективной атаки Rowhammer. [2] [4] [37]clflush
Второй эксплойт, раскрытый Project Zero, работает как непривилегированный процесс Linux на архитектуре x86-64, эксплуатируя эффект Rowhammer для получения неограниченного доступа ко всей физической памяти, установленной на компьютере. Объединяя ошибки нарушения с распылением памяти , этот эксплойт способен изменять записи таблицы страниц [18] : 35, используемые системой виртуальной памяти для отображения виртуальных адресов на физические адреса , что приводит к тому, что эксплойт получает неограниченный доступ к памяти. [18] : 34, 36–57 Из-за своей природы и неспособности архитектуры x86-64 создавать clflush
привилегированные машинные инструкции, этот эксплойт вряд ли можно смягчить на компьютерах, которые не используют оборудование со встроенными механизмами предотвращения Rowhammer. При тестировании жизнеспособности эксплойтов Project Zero обнаружил, что около половины из 29 протестированных ноутбуков столкнулись с ошибками нарушения, причем некоторые из них возникали на уязвимых ноутбуках менее чем за пять минут работы кода, вызывающего Rowhammer; протестированные ноутбуки были произведены в период с 2010 по 2014 год и использовали память не-ECC DDR3. [2] [4] [37]
В июле 2015 года группа исследователей безопасности опубликовала статью, в которой описывается архитектурно- и наборно -независимый способ эксплуатации эффекта Rowhammer. Вместо того чтобы полагаться на clflush
инструкцию для выполнения очистки кэша, этот подход достигает некэшированного доступа к памяти, вызывая очень высокую скорость вытеснения кэша с использованием тщательно выбранных шаблонов доступа к памяти. Хотя политики замены кэша различаются между процессорами, этот подход преодолевает архитектурные различия, используя адаптивный алгоритм стратегии вытеснения кэша . [18] : 64–68 Доказательство концепции для этого подхода предоставляется как в виде реализации собственного кода , так и в виде чистой реализации JavaScript , которая работает в Firefox 39. Реализация JavaScript, называемая Rowhammer.js , [40] использует большие типизированные массивы и полагается на их внутреннее распределение с использованием больших страниц ; в результате она демонстрирует очень высокоуровневую эксплуатацию очень низкоуровневой уязвимости. [41] [42] [43] [44]
В октябре 2016 года исследователи опубликовали DRAMMER, приложение Android, которое использует Rowhammer вместе с другими методами для надежного получения root-доступа на нескольких популярных смартфонах. [45] Уязвимость была признана как CVE - 2016-6728 [46] , и в течение месяца Google выпустила средство для ее смягчения. Однако из-за общего характера возможных реализаций атаки эффективное исправление программного обеспечения трудно надежно реализовать. По состоянию на июнь 2018 года большинство предложений по исправлению, сделанных академическими кругами и промышленностью, были либо непрактичны для развертывания, либо недостаточны для остановки всех атак. В качестве средства смягчения исследователи предложили легкую защиту, которая предотвращает атаки, основанные на прямом доступе к памяти (DMA), путем изоляции буферов DMA с помощью защитных строк. [47] [48]
В мае 2021 года исследовательская группа Google анонсировала новый эксплойт Half-Double, который использует ухудшающуюся физику некоторых новых чипов DRAM. [49]
В марте 2024 года группа исследователей из ETH Zürich анонсировала ZenHammer, эксплойт rowhammer для чипов AMD Zen , а также объявила о первом использовании rowhammer для эксплуатации DDR5 SDRAM . [50] [51]
В июне 2024 года группа исследователей из ETH Zürich анонсировала RISC-H, эксплойт Rowhammer для чипов RISC-V . Это первое исследование Rowhammer по RISC-V. [52]
InfoWorld
, 9 марта 2015 г., Сердар Йегулалп