Row hammer

Row hammer — уязвимость в компьютерной безопасности, связанная с аппаратным эффектом в DRAM. Она возникает из-за нежеланных побочных эффектов высокой плотности интеграции ячеек памяти: при частых активациях одной и той же строки (row) происходит электрическое взаимовлияние между соседними строками памяти, что может приводить к изменению содержимого в близлежащих неактивированных строках[1][2][3]. Данный эффект нарушает изоляцию между ячейками DRAM и приводит к так называемым ошибкам разрушения. Уязвимость стала результатом высокой плотности ячеек и может провоцироваться специально подобранными паттернами обращения к памяти, активирующими одни и те же строки десятки и сотни тысяч раз.

Предпосылки

undefined

В DRAM каждый бит данных реализуется отдельной электрической ячейкой, состоящей из конденсатора и транзистора. Заряженное или разряженное состояние конденсатора определяет, хранит ли ячейка «1» или «0» в двоичном виде. Ячейки организованы в матрицы, адресуемые по строкам и столбцам; адрес памяти разбивается на номера строки и столбца, которые подаются на соответствующие декодеры[4][5]. При чтении вся строка переносится на строковый буфер через усилители выбора, после чего выбирается нужный бит; из-за особенностей DRAM каждое чтение деструктивно и требует последующей перезаписи значения в ячейки[1][4][5][6].

Ячейки DRAM теряют свой заряд со временем, поэтому вся память нуждается в регулярном обновлении[1][4]. Оперативная память подвержена так называемым «мягким ошибкам», вызываемым в том числе космическими лучами. Для повышения надёжности применяются технологии ECC — кода с исправлением ошибок, и их расширения[7].

Описание эффекта

Эффект Row hammer был использован в ряде эксплойтов для повышения привилегий[2][8][9][10], а также теоретически возможны атаки, реализуемые через сеть[11][12].

Существуют различия аппаратные методы предотвращения эффекта Row hammer, в том числе поддержка на уровне некоторых процессоров и типов DRAM-модулей[13][14].

undefined

С увеличением плотности интеграции DRAM ячейки становятся меньше, содержат меньше заряда, обладают меньшим шумовым запасом и сильнее влияют друг на друга. Итогом становятся разрушительные ошибки, проявляющиеся как случайные изменения в хранимых данных. Хотя проблема известна со времён «Intel 1103», первые системные атаки стали возможны только с появлением DRAM DDR3 последних лет, когда плотность ячеек резко возросла[1][3][15].

Причиной возникновения эффекта Row hammer является быстрое чередование активаций строк, вызывающее флуктуации напряжения на строчных линиях. Это приводит к ускоренной разрядке в конденсаторах соседних «жертвенных» строк. Если содержимое этих ячеек не было обновлено заранее, возникает разрушительная ошибка. Было показано, что после около 139 000 подряд активаций данной строки DRAM могут возникать ошибки. Вероятность ошибки зависит в том числе от паттерна битов в DRAM, но незначительно меняется с температурой[1][2][15].

Вариант «двойного удара по строкам» активирует сразу две строки по обе стороны от жертвы, что увеличивает вероятность атаки[16][17]:19–20[18].

Со временем атаки стали более изощрёнными, обходя новые методы защиты — были предложены нерегулярные, по частоте, схемы активаций[19]. Примером такого фреймворка является Blacksmith, позволяющий обходить стандартные защиты DDR4[20].

Методы противодействия

Существует ряд подходов к обнаружению, предотвращению и смягчению эффекта Row hammer. Простая память c ECC «correction single error», «detect double error» не гарантирует защиту, так как возможно возникновение ошибок больше чем на 2 бита[1][15]; целенаправленные изменения трёх бит приводят к обходу ECC[21][22].

Менее эффективный, но распространённый подход — существенно сократить стандартный интервал обновления, что почти сводит к нулю вероятность ошибки, но приводит к повышенному энергопотреблению и нагрузке[23]. Более «умные» методы используют анализ частоты обращений к строкам и адресуемых строк вокруг часто активируемых, для их проактивного обновления; либо — случайное обновление рядом расположенных строк, чтобы исключить целенаправленные комбинации[1][24].

В процессорах Intel Xeon реализован механизм pTRR «pseudo-target row refresh» — совместно с поддерживаемыми модулями DDR3 он обновляет потенциальные жертвенные ряды памяти и не снижает производительность или энергопотребление, с несовместимыми модулями автоматически увеличивает частоту обновления, немного уменьшая пропускную способность памяти[25].

Стандарт мобильной памяти LPDDR4 (JEDEC JESD209-4A)[26] предусматривает опциональную аппаратную защиту — механизм TRR «target row refresh», не ухудшающий производительность[27][28][29]. Некоторые производители реализуют TRR и в DDR4[30][31], однако такая поддержка не является обязательной[32]. TRR отслеживает количество активаций строк и их соседей в заданном временном окне, чтобы при превышении лимита маркировать ряд как возможную жертву и обновлять его[26][33]. Тем не менее исследования показали, что TRR из DDR4 и LPDDR4X в продуктах 2019–2020 годов недостаточно защищают от Row hammer[19].

Эксплойты Row hammer требуют огромного числа активаций строк — они реализуются путём генерации большого числа промахов кэш-памяти, что фиксируется специализированными счётчиками производительности CPU[16][34].

С 2013 года популярная программа MemTest86, начиная с версии 5.0, включает специальный тест Row hammer, определяющий уязвимость модуля памяти; он доступен только при загрузке EFI[35].

Импликации безопасности

Механизмы защиты памяти (memory protection), обеспечивающие разграничение адресного пространства процессов, — одна из фундаментальных идей современных операционных систем и обеспечения привилегий. Использование этих механизмов ограничивает возможный ущерб от атак, локализуя их во времени и пространстве[36][37]. Ошибки разрушения позволяют обходить такие механизмы на аппаратном уровне, что делает Row hammer уникальным для атак с возможностью изменения произвольных участков DRAM, в отличие от «классических» переполнений буфера, нацеленных на уязвимости ПО[2][8][17][38][39].

Эксплойты

hammer:
  mov (X), %eax  // чтение из X
  mov (Y), %ebx  // чтение из Y
  clflush (X)    // сброс кэша для X
  clflush (Y)    // сброс кэша для Y
  jmp hammer
Фрагмент кода на x86-ассемблере, вызывающий эффект Row hammer (адреса X и Y должны лежать в разных строках DRAM одного банка памяти)[1]:3[8][17]:13–15

Первыми исследователями, экспериментально выявившими массовое проявление эффекта, стали Йунгу Ким и соавторы[1]. В ходе анализа 129 модулей DDR3 от трёх производителей симптомы были обнаружены у 110 образцов; также показано, что запуск кода с пользовательскими правами способен вызвать инверсию битов в памяти целевых систем Intel и AMD.

В марте 2015 года проект «Project Zero» опубликовал два рабочих эксплойта повышения привилегий, основанных на Row hammer. Один из эксплойтов позволял выйти из sand box Google NaCl за счёт использования эффекта Row hammer; уязвимость исправлена, запретив инструкцию clflush в NaCl[2][8][17][38]. Второй эксплойт позволял процессу Linux без привилегий получить полный доступ к физической памяти через внесение изменений в структуры таблиц страниц — за счёт «распыления» памяти и воздействия Row hammer[17]. Примерно половина протестированных «Project Zero» ноутбуков (2010–2014, DDR3 non-ECC) оказалась уязвима; эффективных аппаратных мер защиты у систем без поддержки соответствующих механизмов не существует.

В июле 2015 года был представлен подход, не использующий clflush, а основанный на вытеснении из кэша через особые шаблоны доступа к памяти. Его удалось реализовать даже в чистом JavaScript — «Rowhammer.js»[40][41][42][43][44].

В 2016 году был опубликован эксплойт «DRAMMER», позволивший получить root-доступ на смартфонах под Android[45] (CVE-2016-6728[46]); Google выпустила исправление, но варианты реализации Row hammer трудно устранимы универсальными патчами. Существуют также предложения по изоляции DMA-буферов специальными строками-защитниками[47][48].

Другие значимые достижения:

  • 2020: атака TRRespass показала, что ряд DDR4-чипов с якобы полной защитой от Row hammer по-прежнему уязвимы при новых паттернах активации «многосторонний удар»[49].
  • 2021: Google объявила о новой атаке Half-Double, использующей физические особенности наиболее плотных чипов DRAM[50].
  • 2024: ETH Цюрих объявил о ZenHammer (Row hammer-эксплойт для AMD Zen), а также о первом успешном применении Row hammer против DDR5 SDRAM[51][52], а затем, в июне — о проекте RISC-H для RISC-V[53].

Примечания

  1. 1 2 3 4 5 6 7 8 9 Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors (англ.). ece.cmu.edu. IEEE (24 июня 2014). Дата обращения: 7 июля 2025. Архивировано 21 сентября 2025 года.
  2. 1 2 3 4 5 Dan Goodin. Cutting-edge hack gives super user status by exploiting DRAM weakness (англ.). Ars Technica (10 марта 2015). Дата обращения: 7 июля 2025. Архивировано 10 марта 2015 года.
  3. 1 2 Paul Ducklin. 'Row hammering' – how to exploit a computer by overworking its memory (англ.). Sophos (12 марта 2015). Дата обращения: 7 июля 2025. Архивировано 16 марта 2015 года.
  4. 1 2 3 Lecture 12: DRAM Basics (англ.). utah.edu 2–7 (17 февраля 2011). Дата обращения: 7 июля 2025. Архивировано 10 ноября 2011 года.
  5. 1 2 Understanding DRAM Operation (англ.). IBM (декабрь 1996). Дата обращения: 7 июля 2025. Архивировано 29 августа 2017 года.
  6. Lecture 20: Memory Technology (англ.). cs.princeton.edu 3–5 (23 ноября 2004). Дата обращения: 7 июля 2025. Архивировано 7 июля 2025 года.
  7. DRAM Errors in the Wild: A Large-Scale Field Study (англ.). cs.toronto.edu. Ассоциация вычислительной техники (ACM) (25 июня 2009). Дата обращения: 7 июля 2025. Архивировано 11 октября 2025 года.
  8. 1 2 3 4 Seaborn, Mark; Dullien, Thomas Exploiting the DRAM rowhammer bug to gain kernel privileges (англ.). googleprojectzero.blogspot.com (9 марта 2015). Дата обращения: 7 июля 2025. Архивировано 6 октября 2025 года.
  9. Using Rowhammer bitflips to root Android phones is now a thing (англ.). Архивировано 24 октября 2016 года. Дата обращения: 7 июля 2025.
  10. Swati Khandelwal. GLitch: New 'Rowhammer' Attack Can Remotely Hijack Android Phones (англ.), The Hacker News (3 мая 2018). Архивировано 10 мая 2018 года. Дата обращения: 7 июля 2025.
  11. Mohit Kumar. New Rowhammer Attack Can Hijack Computers Remotely Over the Network (англ.), The Hacker News (10 мая 2018). Архивировано 10 октября 2025 года. Дата обращения: 7 июля 2025.
  12. Swati Khandelwal. Nethammer—Exploiting DRAM Rowhammer Bug Through Network Requests (англ.), The Hacker News (16 мая 2018). Архивировано 10 октября 2025 года. Дата обращения: 7 июля 2025.
  13. Marcin Kaczmarski. Thoughts on Intel Xeon E5-2600 v2 Product Family Performance Optimisation – Component selection guidelines (англ.). Intel (август 2014). Дата обращения: 7 июля 2025. Архивировано 18 апреля 2024 года.
  14. Marc Greenberg. Reliability, Availability, and Serviceability (RAS) for DDR DRAM interfaces (англ.). memcon.com 2, 7, 10, 20, 27 (15 октября 2014). Дата обращения: 7 июля 2025. Архивировано 5 июля 2016 года.
  15. 1 2 3 4 Flipping Bits in Memory Without Accessing Them: DRAM Disturbance Errors (англ.). ece.cmu.edu (24 июня 2014). Дата обращения: 7 июля 2025. Архивировано 11 июня 2025 года.
  16. 1 2 Seaborn, Mark; Dullien, Thomas Exploiting the DRAM rowhammer bug to gain kernel privileges (англ.). googleprojectzero.blogspot.com (9 марта 2015). Дата обращения: 7 июля 2025. Архивировано 6 октября 2025 года.
  17. 1 2 3 4 5 Exploiting the DRAM rowhammer bug to gain kernel privileges: How to cause and exploit single bit errors (англ.). Black Hat (6 августа 2015). Дата обращения: 7 июля 2025. Архивировано 28 сентября 2025 года.
  18. Andy Greenberg (10 марта 2015). “Googlers' Epic Hack Exploits How Memory Leaks Electricity”. Wired [англ.]. Дата обращения 2025-07-07.
  19. 1 2 Jattke, Patrick; van der Veen, Victor; Frigo, Pietro; Gunter, Stijn; Razavi, Kaveh Blacksmith: Scalable Rowhammering in the Frequency Domain (англ.). comsec.ethz.ch. IEEE (25 мая 2022). Дата обращения: 7 июля 2025. Архивировано 17 сентября 2025 года.
  20. Blacksmith Rowhammer Fuzzer (англ.) (2 ноября 2022). Дата обращения: 7 июля 2025. Архивировано 14 августа 2025 года.
  21. Cojocar, Lucian; Razavi, Kaveh; Giuffrida, Cristiano; Bos, Herbert (2019). “Exploiting Correcting Codes: On the Effectiveness of ECC Memory Against Rowhammer Attacks” (PDF). 2019 IEEE Symposium on Security and Privacy (SP) [англ.]. IEEE. pp. 55—71. DOI:10.1109/sp.2019.00089. ISBN 978-1-5386-6660-9. Дата обращения 2025-07-07.
  22. VUsec, Systems and Network Security Group. ECCploit: ECC Memory Vulnerable to Rowhammer Attacks After All (англ.). Vrije Universiteit Amsterdam (11 ноября 2018). Дата обращения: 7 июля 2025. Архивировано 28 сентября 2025 года.
  23. Row Hammer Privilege Escalation (Lenovo Security Advisory LEN-2015-009) (англ.). Lenovo (5 августа 2015). Дата обращения: 7 июля 2025. Архивировано 19 сентября 2025 года.
  24. Architectural Support for Mitigating Row Hammering in DRAM Memories (англ.). ece.gatech.edu. IEEE (9 октября 2014). Дата обращения: 7 июля 2025. Архивировано 11 марта 2015 года.
  25. Marcin Kaczmarski. Thoughts on Intel Xeon E5-2600 v2 Product Family Performance Optimisation – Component selection guidelines (англ.). Intel (август 2014). Дата обращения: 7 июля 2025. Архивировано 18 апреля 2024 года.
  26. 1 2 JEDEC standard JESD209-4A: Low Power Double Data Rate (LPDDR4) (англ.) 222–223. JEDEC (ноябрь 2015). Дата обращения: 7 июля 2025. Архивировано 17 февраля 2025 года.
  27. Marc Greenberg. Reliability, Availability, and Serviceability (RAS) for DDR DRAM interfaces (англ.). memcon.com 2, 7, 10, 20, 27 (15 октября 2014). Дата обращения: 7 июля 2025. Архивировано 5 июля 2016 года.
  28. Kishore Kasamsetty. DRAM scaling challenges and solutions in LPDDR4 context (англ.). memcon.com 11. Дата обращения: 7 июля 2025. Архивировано 3 июня 2016 года.
  29. Omar Santos. Mitigations Available for the DRAM Row Hammer Vulnerability (англ.). cisco.com (9 марта 2015). Дата обращения: 7 июля 2025. Архивировано 10 октября 2025 года.
  30. Marc Greenber. Row Hammering: What it is, and how hackers could use it to gain access to your system (англ.). synopsys.com (9 марта 2015). Дата обращения: 7 июля 2025. Архивировано 24 марта 2015 года.
  31. Jung-Bae Lee. Green Memory Solution (Samsung Investors Forum 2014) (англ.). teletogether.com 15. Samsung Electronics (7 ноября 2014). Дата обращения: 7 июля 2025. Архивировано 21 июня 2024 года.
  32. JEDEC standard JESD79-4A: DDR4 SDRAM (англ.). JEDEC (ноябрь 2013). Дата обращения: 7 июля 2025. Архивировано 13 марта 2015 года.
  33. Data Sheet: 4 Gb ×4, ×8 and ×16 DDR4 SDRAM Features (англ.) 48, 131. Micron Technology (20 ноября 2015). Дата обращения: 7 июля 2025. Архивировано 10 февраля 2018 года.
  34. These are Not Your Grand Daddy's CPU Performance Counters: CPU Hardware Performance Counters for Security (англ.) 29, 38–68. Black Hat (6 августа 2015). Дата обращения: 7 июля 2025. Архивировано 31 марта 2025 года.
  35. PassMark MemTest86 – Version History (англ.). memtest86.com (13 февраля 2015). Дата обращения: 7 июля 2025. Архивировано 1 марта 2013 года.
  36. Pehr Söderman. Memory Protection (англ.). csc.kth.se (2011). Дата обращения: 7 июля 2025. Архивировано 2 апреля 2015 года.
  37. Preventing Privilege Escalation (англ.). niels.xtdnet.nl (10 августа 2003). Дата обращения: 7 июля 2025. Архивировано 5 октября 2024 года.
  38. 1 2 Liam Tung. "Rowhammer" DRAM flaw could be widespread, says Google (англ.). ZDNet (10 марта 2015). Дата обращения: 7 июля 2025. Архивировано 10 октября 2025 года.
  39. Murat Balaban. Buffer Overflows Demystified (англ.). enderunix.org (6 июня 2009). Дата обращения: 7 июля 2025. Архивировано 7 июля 2025 года.
  40. IAIK/rowhammerjs: rowhammerjs/rowhammer.js at master (англ.). github.com (27 июля 2015). Дата обращения: 7 июля 2025. Архивировано 20 января 2025 года.
  41. Daniel Gruss; Clementine Maurice & Stefan Mengard (24 июля 2015), Rowhammer.js: A Remote Software-Induced Fault Attack in JavaScript, arΧiv:1507.06955 [cs.CR]. 
  42. David Auerbach. Rowhammer security exploit: Why a new security attack is truly terrifying (англ.). slate.com (28 июля 2015). Дата обращения: 7 июля 2025. Архивировано 30 июля 2015 года.
  43. Alix Jean-Pharuns. Rowhammer.js Is the Most Ingenious Hack I've Ever Seen (англ.), Motherboard (30 июля 2015). Архивировано 12 февраля 2025 года.
  44. Dan Goodin. DRAM 'Bitflipping' exploit for attacking PCs: Just add JavaScript (англ.), Ars Technica (4 августа 2015). Архивировано 25 мая 2025 года.
  45. VUSec. DRAMMER: FLIP FENG SHUI GOES MOBILE (англ.) (октябрь 2016). Дата обращения: 7 июля 2025. Архивировано 25 октября 2016 года.
  46. NIST National Vulnerability Database (NVD). CVE-2016-6728 Detail (англ.). Архивировано 23 апреля 2025 года.
  47. Victor van der Veen; Martina Lindorfer; Yanick Fratantonio; Harikrishnan Padmanabha Pillai; Giovanni Vigna; Christopher Kruegel; Herbert Bos; Kaveh Razavi (2018). “GuardION: Practical Mitigation of DMA-Based Rowhammer Attacks on ARM”. Detection of Intrusions and Malware, and Vulnerability Assessment [англ.]. Springer International Publishing: 92—113. DOI:10.1007/978-3-319-93411-2_5.
  48. RAMPAGE AND GUARDION - Vulnerabilities in modern phones enable unauthorized access (англ.). Дата обращения: 7 июля 2025.
  49. Pietro Frigo; Emanuele Vannacci; Hasan Hassan; Victor van der Veen; Onur Mutlu; Cristiano Giuffrida; Herbert Bos & Kaveh Razavi (2020), TRRespass: Exploiting the Many Sides of Target Row Refresh, arΧiv:2004.01807 [cs.CR]. 
  50. Introducing Half-Double: New hammering technique for DRAM Rowhammer bug (англ.). Google (25 мая 2021). Дата обращения: 7 июля 2025. Архивировано 10 октября 2025 года.
  51. Toulas, Bill New ZenHammer memory attack impacts AMD Zen CPUs (англ.). BleepingComputer (28 марта 2024). Дата обращения: 7 июля 2025. Архивировано 28 мая 2025 года.
  52. ZenHammer: Rowhammer Attacks on AMD Zen-based Platforms (англ.). Computer Security Group. Дата обращения: 7 июля 2025. Архивировано 24 сентября 2025 года.
  53. Rowhammer Bit Flips On A High-End RISC-V CPU (ETH Zurich) (англ.). semiengineering (13 июня 2024). Дата обращения: 7 июля 2025. Архивировано 24 июня 2025 года.

Литература

Ссылки