Башня из шести модулей DRAM, сложенных как блоки дженги на антистатическом коврике: центральный модуль треснул по линии чипов, обнажив обугленные конденсаторы, вся конструкция рушится. На плате выж...


При профилировании латентности банков DDR4 на FPGA-стенде с контроллером LiteDRAM я получил разброс времени отклика одного и того же физического адреса при активной логике Target Row Refresh - шестикратное отклонение от базовой линии. Шесть иксов. На десктопе такой джиттер поглотится буферами переупорядочивания и кешами, никто и не заметит. А вот для контроллера тормозной системы с фиксированным WCET-бюджетом в сотни наносекунд - это нарушение контракта, на котором стоит вся safety-логика.

RowHammer атака на DRAM перестала быть чисто академической проблемой целостности данных. Она бьёт по предсказуемости - свойству, без которого real-time системы превращаются в дорогие генераторы случайных чисел. Ниже - разбор того, как защитные механизмы DRAM порождают угрозу не менее серьёзную, чем сама уязвимость.

Физика RowHammer: почему уязвимость DRAM памяти фундаментальна​

RowHammer - не ошибка прошивки и не конструктивный просчёт конкретного производителя. Это прямое следствие физики масштабирования. Каждый бит DRAM хранится в конденсаторе, площадь которого сокращается с каждым технологическим узлом. Заряд конденсатора определяет значение «0» или «1», а утечка заряда - неизбежный физический процесс, компенсируемый периодическим refresh: стандартно каждые 64 мс для DDR4 при 85 °C и 32 мс для DDR5.

При активации строки (команда ACTIVATE) напряжение подаётся на wordline, связанный со всеми ячейками строки. Данные из ячеек уходят в row buffer через sense amplifier, затем записываются обратно - часть каждого штатного чтения/записи. Проблема - в интенсивном повторении: многократная активация (row hammering) одной строки вызывает электромагнитные наводки на соседние wordline, ускоряя утечку заряда в victim-строках.

Три физических механизма утечки между строками (Kim et al.):
  • Электромагнитная связь (coupling) - переключение wordline индуцирует шум на соседних линиях через паразитную ёмкость
  • Bridging - образование проводящих каналов между соседними проводниками при многократных переключениях
  • Hot carrier injection - длительное переключение wordline приводит к инжекции горячих носителей, усиливающей утечку в соседних ячейках
Если victim-ячейки потеряют достаточно заряда до следующего refresh - бит меняет значение. Это bit flip атака: модификация данных без записи по адресу жертвы. Порядок 139 000 последовательных активаций хватило для первого bit flip на DDR3, а до одной ячейки из 1700 оказалась уязвима на протестированных модулях.

От single-sided к non-uniform паттернам​

Первые атаки использовали single-sided hammering - активацию одного агрессора рядом с жертвой. Double-sided hammering (два агрессора по обе стороны victim-строки) увеличил вероятность bit flip на порядок. Производители ответили Target Row Refresh (TRR), и паттерны атак эволюционировали: вместо равномерных обращений к одной-двум строкам - non-uniform последовательности из десятков и сотен агрессоров с различной частотой, фазой и амплитудой обращений.

Именно non-uniform паттерны стали ключом к обходу всех существующих аппаратных защит. По сути, задача RowHammer-эксплуатации превратилась в задачу фаззинга параметров доступа к памяти.

Обход защиты от RowHammer: от Blacksmith до Phoenix​

Target Row Refresh - основной аппаратный механизм защиты DDR4 и DDR5. TRR отслеживает часто активируемые строки при помощи конечного числа счётчиков и принудительно обновляет соседние victim-строки при достижении порога. Реализация TRR проприетарна, варьируется между Samsung, Micron, SK Hynix и не документирована публично. В этой проприетарности и конечности ресурсов - корень уязвимости.

CVE-2021-42114 и фаззер Blacksmith

Атака TRRespass первой показала: одновременный hammering нескольких не-смежных строк «забивает» счётчики TRR, оставляя victim-строки голыми. CVE-2021-42114 зафиксировал следующий этап эскалации - полный TRR обход защиты через автоматизированный фаззинг.

Blacksmith - фаззер от исследователей ETH Zurich, Vrije Universiteit Amsterdam и Qualcomm (лежит на GitHub). Blacksmith генерирует non-uniform паттерны доступа, синхронизирует их с командой REFRESH и ищет «слепые зоны» конкретной реализации TRR. Фаззинг гоняли по 12 часов на каждом модуле; лучший паттерн (по количеству вызванных bit flip) затем применяли к непрерывной области памяти в 256 МБ.

Характеристики CVE-2021-42114:

ПараметрЗначение
CVSS9.0 (CRITICAL)
ВекторCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
CWECWE-20 (Improper Input Validation)
AffectedSamsung DDR4 SDRAM, Samsung LPDDR4(X), Micron LPDDR4 (согласно NVD CPE)

Разбор вектора: AV:N - атака не требует локального физического доступа; теоретически реализуема через любой процесс с доступом к памяти (браузерный JS-движок, гостевая VM), хотя оригинальное исследование Blacksmith использует native-доступ. AC:H - требуется высокая сложность: подбор паттерна под конкретный модуль и реализацию TRR. PR:N и UI:N - ни привилегий, ни взаимодействия пользователя. S:C (Changed scope) - bit flip в памяти одного процесса затрагивает данные другого, включая ядро ОС. Воздействие на конфиденциальность, целостность и доступность - максимальное (C:H/I:H/A:H).

Результат: Blacksmith вызвал bit flip на всех 40 протестированных PC-DDR4 модулях, покрывающих трёх крупнейших производителей (Samsung и Micron указаны в NVD CPE; SK Hynix в CPE не фигурирует, но упоминается в оригинальной работе). В ряде случаев - тысячи bit flip за секунды. CWE-20 (Improper Input Validation) тут читается как неспособность TRR распознать non-uniform паттерны обращений как подозрительные - хотя NVD не раскрывает обоснование выбора именно этого CWE.

Сорок из сорока. Ноль устоявших модулей. Стоит вдуматься.

DDR5 под ударом: деградация памяти нового поколения​

DDR5 получила укороченный интервал refresh, усиленную TRR-логику и on-die ECC. С 2020 по 2024 год модули DDR5 считались защищёнными от RowHammer. Атака Phoenix это опровергла.

Исследователи ETH Zurich совместно с Google - на открытых FPGA-платформах для DDR5 RDIMM и SO-DIMM от Antmicro - провели реверс-инжиниринг TRR в 15 модулях DDR5 SK Hynix (2021–2024, 16–64 ГБ). Два найденных паттерна:

Короткий: после 128 TRR-отслеживаемых обращений возникает окно из 64 обращений со сниженной защитой. Длинный: 2608 маскировочных обращений перед атакующим окном.

Оба следуют одной логике: массив «отвлекающих» обращений, насыщающих счётчики TRR, после чего - серия hammering по реальной цели. Короткий паттерн оказался эффективнее.

Практические сценарии (AMD Ryzen 7 7700X, Zen 4, Ubuntu 20.04):

СценарийЦельРезультат
PTE (Page Table Entry)Произвольное чтение/запись RAMУспешен на всех 15 модулях
RSA-2048Извлечение приватного ключаЧастичный успех (до 1+ часа)
sudo bypassЭскалация привилегийЧастичный успех

PTE-атака - T1068 (Exploitation for Privilege Escalation): модификация записи таблицы страниц даёт полный контроль над адресным пространством. Модификация данных в RAM - T1565.003 (Runtime Data Manipulation, Impact). Массовые bit flip, приводящие к отказу, можно отнести к T1499.004 (Application or System Exploitation, Impact) - эксплуатация логики DRAM-контроллера и refresh-механизмов для достижения отказа, хотя точный маппинг дискуссионен.

По данным исследования Phoenix, текущие защиты на основе TRR и ECC - вероятностные контрмеры с недостаточной энтропией, не способные надёжно противостоять целеустремлённому атакующему. Иными словами: защита работает «в среднем», а атакующему «в среднем» не нужно.

JENGA-эффект: защиты от RowHammer разрушают предсказуемость WCET​

Здесь начинается самое интересное - влияние RowHammer-митигаций на детерминированность выполнения задач в real-time системах. Я называю это JENGA-эффектом: каждая «защитная» прослойка для предотвращения bit flip делает тайминг-поведение памяти менее предсказуемым. Как в настольной игре - вытаскиваешь блок, и конструкция стоит, пока стоит. Но с каждым уровнем устойчивость падает.

Недетерминированный refresh как side-channel атака на память​

В системах жёсткого реального времени (hard real-time) каждая задача получает бюджет worst-case execution time. Планировщик гарантирует: задача уложится в WCET, дедлайн не будет пропущен. На этом стоит сертификация в авиации (DO-178C), автомобильной электронике (ISO 26262), промышленной автоматике (IEC 61508).

WCET-анализ предполагает, что латентность доступа к DRAM ограничена сверху известной константой: совокупность tRCD, tCAS, tRP и периодического tREFI. Параметры зафиксированы в спецификации JEDEC.

TRR разрушает это предположение тремя путями.

Блокировка банка. TRR-refresh блокирует банк памяти на время tRFC (порядка 350 нс для 16 Гб DDR4). Штатные обращения к этому банку ждут в очереди.

Непредсказуемый момент. TRR-refresh вставляется не по расписанию, а в ответ на обнаруженный паттерн обращений. Момент зависит от поведения ВСЕХ задач в системе - включая задачи с низким приоритетом, обращающиеся к соседним строкам того же банка.

Неизвестное количество. Число дополнительных refresh варьируется в зависимости от реализации TRR (проприетарной, недокументированной) и интенсивности обращений.

В терминах real-time теории TRR создаёт неограниченную priority inversion на уровне железа: низкоприоритетная задача, чьи обращения к памяти «засвечиваются» TRR-счётчикам, может вызвать дополнительный refresh, блокирующий банк для высокоприоритетной safety-задачи. Priority inversion в софте - известная проблема с известными решениями. Priority inversion в железе, спрятанная внутри проприетарного TRR - совсем другая история.

Тайминг-атаки на DRAM через TRR - отдельный вектор. Измеряя латентность своих обращений, атакующий получает информацию о паттернах доступа других процессов: повышенная латентность → TRR активировала refresh → кто-то интенсивно работает с соседними строками. Side-channel атака на память в чистом виде. Формального маппинга в MITRE ATT&CK для тайминг-side-channel на DRAM нет; ближайший кандидат - T1497.001 (System Checks), где тайминг-измерения используются для обнаружения активности других процессов.

Каскадная деградация тайминга в real-time планировщиках​

Типичная конфигурация безопасности оперативной памяти включает несколько уровней:
  1. Увеличенная частота refresh (tREFI сокращён вдвое) - удваивает долю времени на обновление
  2. TRR - добавляет непредсказуемые дополнительные refresh при обнаружении hammering
  3. ECC-скрабблинг - периодическая проверка и исправление ошибок, блокирующая банк на время scrub
Вклады не аддитивны - они интерферируют. TRR-refresh может совпасть с ECC-scrub и штатным REFRESH, создавая пиковые задержки за пределами любого статического WCET-анализа. Вот вам и «многослойная защита» - каждый слой добавляет свой вклад в хаос.

Исследователи из Амстердамского свободного университета показали ещё одну грань: ECC-коррекция создаёт измеримый тайминг-side-channel. При исправлении ошибки возрастает время чтения - задержка «вполне измерима и заметна» (их формулировка). Они же продемонстрировали, что три одновременно изменённых бита проходят мимо ECC-детектора (SECDED). ECC - ненадёжная защита от целенаправленной RowHammer-атаки.

Итого каждый «защитный» блок в башне JENGA добавляет непредсказуемости. Убери блок - bit flip. Оставь - непредсказуемый тайминг. Для десктопа незаметно. Для системы с жёстким real-time - неприемлемо.

Атаки на встраиваемые системы: от LeapFrog до safety-critical​

LeapFrog: контроль потока выполнения через bit flip​

Исследование LeapFrog (2024, arxiv) вводит принципиально новый тип RowHammer-гаджета, нацеленный на control flow integrity: атакующий модифицирует сохранённый Program Counter (PC) в стеке. При вызове функции адрес возврата записывается в стек и в какой-то момент оказывается в DRAM. Bit flip в этом адресе «перепрыгивает» выполнение через security-critical участок кода - отсюда название.

Ключевые результаты:
  • OpenSSL: bit flip в сохранённом PC пропускает раунды шифрования, раскрывая plaintext
  • TLS handshake: в клиент-серверном сценарии атакующий пропускает верификацию сертификата на стороне клиента (результаты авторов, arxiv, 2024)
  • Post-Quantum Cryptography: сканирование Open Quantum Safe инструментом MFS (на базе Intel Pin) выявило множество LeapFrog-гаджетов - участков кода, где bit flip в PC приводит к полезному для атакующего пропуску логики, а не к segfault
LeapFrog принципиально отличается от предыдущих RowHammer-эксплойтов: это атака на control flow, а не только на data integrity. Один-два бита в адресе возврата - и проверка аутентификации, padding-валидация или раунд криптоалгоритма пропускаются, а программа продолжает работу как ни в чём не бывало. Stack canaries, ASLR - не спасают. Bit flip происходит ниже уровня их действия.

Для автоматизации поиска гаджетов авторы создали MFS - инструмент на базе Intel Pin, который динамически анализирует бинарный код, перебирает возможные bit flip в сохранённом PC и определяет, какие из них приводят к пропуску security-critical блоков вместо краша. Ручной анализ превращается в систематический фаззинг.

Сценарии эксплуатации: автомобили, PLC, телеком​

Зачем атаковать real-time систему через RowHammer?

Автомобильные ECU. LPDDR4 - стандартная память в ADAS-контроллерах. CVE-2021-42114 перечисляет Samsung LPDDR4 и Micron LPDDR4 в affected products - автомобильный контекст в CVE не упоминается напрямую, но эти типы памяти широко применяются в ADAS, что делает сценарий релевантным. Bit flip в данных лидара или камеры ведёт к ошибке распознавания объектов. TRR-джиттер в момент расчёта дистанции торможения - к нарушению дедлайна safety-задачи.

Промышленные PLC. Контроллеры нередко работают с DDR4 без ECC - ради экономии. RowHammer через скомпрометированный модуль I/O (вектор Impact, предположительно T1499.004) может модифицировать управляющие переменные, вызывая физическое повреждение оборудования. Тут не данные утекают - тут турбина идёт вразнос.

Телеком (5G baseband). Базовые станции с DDR5 - потенциальная цель. Phoenix подтвердила уязвимость DDR5. Нарушение тайминга в real-time обработке сигналов - denial of service на физическом уровне.

Облачная инфраструктура. Мультитенантные серверы на DDR4 - подтверждённый вектор. Blacksmith вызвал bit flip на всех 40 модулях. Из одной VM атакующий может модифицировать данные соседней - RowHammer как VM escape. Если bit flip затронет область, где хранится firmware контроллера BMC (T1495, Firmware Corruption) - восстановление потребует физического доступа к серверу.

Практическое профилирование тайминг-джиттера от TRR

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Вывод - распределение латентности в тактах процессора. В стационарном режиме ожидается узкий пик порядка 200–350 тактов на современных CPU. Записываем как baseline.

Шаг 3: параллельный hammering. Из второго потока (на отдельном ядре, но в том же банке DRAM - нужен предварительный reverse engineering DRAM address mapping) запускаем интенсивные обращения к строкам, соседним с измеряемой. Повторяем измерения шага 2 одновременно с hammering.

Шаг 4: анализ распределения. Сравниваем гистограммы baseline и hammering. Выбросы в «хвосте» под нагрузкой - моменты TRR-refresh. Разница между baseline-пиком и максимальным выбросом - нижняя оценка TRR-индуцированного джиттера. Если эта разница превышает запас WCET-бюджета safety-задачи - система подвержена JENGA-эффекту.

Для анализа на уровне DDR-команд (а не опосредованно через CPU) используйте FPGA-платформы: Google/Antmicro DDR5 Tester для DDR5 RDIMM/SO-DIMM или LiteX/LiteDRAM для DDR4. Они позволяют отправлять произвольные ACTIVATE, PRECHARGE, REFRESH напрямую к DRAM и наблюдать тайминг-ответы чипа, включая моменты вставки TRR-refresh. Единственный способ получить абсолютно чистые данные без шума процессорного pipeline - я на своём стенде убедился в этом, когда разница между CPU-измерениями и FPGA-данными достигала 40%.

Митигация: безопасность оперативной памяти в real-time контексте​

PRAC: детерминированный подсчёт активаций​

PRAC (Per Row Activation Counting) - стандарт, утверждённый JEDEC для будущих DDR5 и LPDDR6. В отличие от вероятностного TRR, PRAC отслеживает активации каждой строки детерминированно. При достижении порога генерируется alert, контроллер выполняет превентивный refresh.

Для WCET-анализа разница принципиальная: refresh по фиксированному порогу (N активаций) - предсказуемая величина, которую можно включить в расчёт верхней границы латентности. TRR этого не позволяла - её поведение зависело от недокументированных эвристик.

Но текущие DDR5-модули PRAC не поддерживают. До массового появления PRAC-совместимой памяти - несколько лет.

Архитектурные решения для текущего оборудования​

МераВлияние на WCETЗащита от bit flipСложность
Изоляция банков DRAMПредсказуемыйНе защищает от bit flip, только от тайминг-влиянияСредняя
Программный refreshПредсказуемыйЧастичнаяВысокая
ECC + фиксированный scrubПредсказуемыйВысокаяСредняя
PRAC (будущее)ПредсказуемыйВысокаяТребует нового HW
TRR (текущий)НепредсказуемыйНедостаточнаяВстроен в DRAM

Изоляция банков. Safety-critical задача и остальные задачи - в разных банках DRAM. TRR-refresh одного банка не блокирует другой. Требуется контроль над физическим распределением памяти: частично поддерживается RTOS и гипервизорами (Xen dom0less, Jailhouse), а также через cache coloring в Linux.

Явное управление refresh. Ряд контроллеров памяти позволяет отключить автоматический TRR и управлять refresh программно. Тайминг становится полностью предсказуемым, но ответственность за защиту от bit flip переходит к разработчику - надо обеспечить достаточную частоту refresh для всех строк. Ручной режим - палка о двух концах.

ECC с фиксированным scrub-расписанием. Вместо фонового scrubbing (который «крадёт» циклы в произвольные моменты) - scrub по фиксированному расписанию, встроенному в WCET-бюджет. Scrub занимает известное время, происходит в известный момент - WCET-анализатор его учитывает.

Мониторинг. В соответствии с NIST CSF DE.AE-01 - установление базовой линии поведения памяти и алертинг при аномалиях (шаг 4 профилирования). ID.AM-01 требует инвентаризации аппаратных активов - для safety-critical систем это означает фиксацию модели и поколения TRR каждого модуля памяти и проверку статуса по CVE-2021-42114.

Ни один из текущих стандартов safety-сертификации - ISO 26262, DO-178C, IEC 61508 - не требует учёта TRR-индуцированного джиттера в WCET-анализе. Сертификационные лаборатории не тестируют поведение памяти под RowHammer-нагрузкой. Это слепое пятно опаснее самой RowHammer-уязвимости, потому что создаёт ложную уверенность: система проходит сертификацию с одним тайминг-профилем, а в поле работает с другим - тем, который TRR формирует под реальной нагрузкой.

PRAC устранит часть проблемы - детерминированный подсчёт закроет «слепые зоны» TRR. Но до массового перехода на PRAC-совместимую память в embedded-сегменте пройдёт не менее трёх-пяти лет, и всё это время safety-critical контроллеры на DDR4 и текущих DDR5 остаются в зоне, где формально верифицированный WCET может быть нарушен аппаратным механизмом, о котором разработчик не подозревает.

За полтора года работы с профилированием refresh-поведения на FPGA-стендах я пришёл к неудобному выводу: индустрия safety-critical embedded и исследования аппаратной безопасности DRAM существуют в параллельных мирах. Одни считают память «просто работающей». Другие ломают все существующие защиты поколение за поколением. Инцидент на стыке этих миров - вопрос времени. Проверьте свой стенд кодом из раздела профилирования. Если хвост распределения вылезает за WCET-бюджет - у вас та же проблема, что я увидел на LiteDRAM. Только вы, возможно, ещё об этом не знаете.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab