Статья GPUBreach: Rowhammer атака GPU с эскалацией привилегий до root — полный разбор kill chain

Исследователь безопасности за тёмной рабочей станцией: два монитора с терминалом и дампом памяти, разобранная видеокарта с чипами GDDR на антистатическом коврике, янтарный свет лампы над золотыми д...


Десять лет мы ковыряли Rowhammer на CPU-памяти - DDR3, DDR4, DDR5. Научились обходить TRR, ECC, ASLR. Научились переключать биты в page table entries и получать root через mmap и /proc/pagemap. Но всё это время видеопамять GPU оставалась нетронутой: считалось, что GDDR-чипы работают в изолированном контексте и bit flip в видеопамяти - максимум деградация нейросети. Ну, сломали точность модели с 80% до 60% - кого это волнует?

GDDRHammer, GeForge и GPUBreach - три атаки из препринтов 2025–2026 годов, которые (если результаты подтвердятся) превращают Rowhammer на GPU из академического курьёза в полноценный вектор эскалации привилегий. GPUBreach, по данным исследователей из University of Toronto, заявлен как работающий даже с включённым IOMMU - той самой защитой, которая до сих пор считалась надёжным барьером между GPU и хост-памятью. Независимая верификация этих результатов пока не проводилась - но сам факт заставляет напрячься.

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

Что изменилось: от CPU Rowhammer к аппаратной атаке на память GPU​

Rowhammer атака GPU стала возможной благодаря фундаментальному свойству DRAM: ячейки памяти расположены настолько плотно, что многократное обращение к одной строке создаёт электрические помехи в соседних строках. Конденсаторы теряют заряд, биты переключаются - 0 становится 1 и наоборот. Эффект впервые продемонстрировали в 2014 году на DDR3, и с тех пор исследователи и производители играют в кошки-мышки: одни находят новые паттерны хаммеринга, другие внедряют защиты вроде Target Row Refresh (TRR).

По данным Ars Technica, за десять лет техника эволюционировала от простых bit flip в DDR3 до атак, способных обходить ECC, работать по сети, рутить Android-устройства и красть 2048-битные криптографические ключи. Но все эти атаки целились в оперативную память CPU.

GPUHammer 2025 года первым попробовал хаммерить GDDR6. Результат был скромный: bit flip, достаточные лишь для деградации нейросети. Ни эскалации привилегий, ни выхода за пределы GPU-контекста. По сути - proof of concept, что GDDR-чипы подвержены тому же физическому эффекту.

А дальше - три препринта 2025–2026 годов: 129 bit flip на банк (GDDRHammer), 1171 bit flip на RTX 3060 (GeForge) и обход IOMMU с получением root shell (GPUBreach). Оговорка: на момент написания статьи препринты GDDRHammer, GeForge и GPUBreach не обнаружены в открытых репозиториях (arXiv, IEEE Xplore, USENIX), и приведённые числа основаны на вторичных источниках. Но если результаты подтвердятся, разница не количественная, а качественная: атакующий выходит из GPU-контекста в память CPU.

GDDRHammer, GeForge и GPUBreach - три вектора эскалации привилегий GPU​

Все три атаки эксплуатируют один физический эффект - bit flip в GDDR6. Но механизм превращения аппаратного сбоя в контролируемый примитив атаки у каждой свой.

GDDRHammer: 129 bit flip на банк через DRAM Rowhammer exploit​

GDDRHammer работает на NVIDIA RTX A6000 (Ampere). Исследователи разработали паттерны хаммеринга, специфичные для GDDR6, и технику memory massaging для перемещения GPU page table в уязвимые регионы памяти. 129 bit flip на банк - в 64 раза больше, чем GPUHammer годом ранее.

Атака модифицирует таблицу страниц последнего уровня (Last Level Page Table, PT). Через искажённые записи атакующий перенаправляет виртуальные адреса GPU на физические адреса CPU-памяти, используя флаг APERTURE для маппинга через PCIe. Ограничение: GDDRHammer требует отключённого IOMMU. По данным исследователей, IOMMU отключён в BIOS по умолчанию на большинстве десктопных систем, но в серверных GPU-окружениях его обычно активируют.

GeForge: манипуляция каталогом страниц для GPU memory corruption attack​

GeForge использует похожий подход, но атакует каталог страниц последнего уровня (Last Level Page Directory, PD0) вместо самой таблицы. Больше bit flip: 1171 на RTX 3060 и 202 на RTX 6000. PoC завершается открытием root shell на хосте.

Отличие от GDDRHammer - в гранулярности: модификация каталога страниц позволяет перенаправить сразу целый блок виртуальных адресов, а не отдельные страницы. Атака надёжнее, но по-прежнему требует отключённого IOMMU.

GPUBreach: обход IOMMU через баги драйвера NVIDIA​

А вот GPUBreach уязвимость - это уже другая история. По вторичным источникам, ссылающимся на исследование University of Toronto (предположительно принято к публикации на 47th IEEE Symposium on Security & Privacy, май 2026 - в proceedings IEEE S&P пока не подтверждено), GPUBreach работает даже с включённым IOMMU.

Ключевая идея: вместо прямого маппинга GPU-адресов на CPU-память (что IOMMU запрещает), GPUBreach повреждает метаданные внутри буферов, к которым GPU уже имеет легитимный доступ. Затем атака эксплуатирует memory-safety баги в самом драйвере NVIDIA, который крутится с привилегиями ядра на CPU. Драйвер выполняет out-of-bounds записи под контролем атакующего - и IOMMU тут бессилен, потому что записи происходят на стороне CPU, а не GPU.

По данным Security Affairs (первоисточник верифицировать не удалось): «system-wide compromise up to a root shell, without disabling IOMMU, unlike contemporary works, making GPUBreach a more potent threat».

ПараметрGDDRHammerGeForgeGPUBreach
Целевая структураPage Table (PT)Page Directory (PD0)Page Table + драйвер
Bit flip на RTX 3060Нет данных1171Да (число не опубликовано)
Bit flip на RTX A6000 (Ampere)129/банкДа
Требует отключённого IOMMUДаДаНет
CPU privilege escalationНетДаДа
Root shellНетДаДа
[td]202 [/td]

\* Числа bit flip приведены по вторичным источникам; первоисточники не верифицированы.

Анатомия GPUBreach: как bit flip атака GPU превращается в root shell​

Для пентестера мало знать «что» - нужно понимать «как». Разберём kill chain GPUBreach по шагам - от непривилегированного CUDA-ядра до root.
📚 Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Практика: воспроизведение Rowhammer на GPU в лабораторной среде​

Требования к окружению​

Прежде чем лезть в эксперименты - разграничим, что реально сделать в лаборатории уже сейчас, а что остаётся на уровне исследовательского PoC без публичного кода.

Для экспериментов с bit flip на GPU нужно:
  • ОС: Linux (Ubuntu 22.04/24.04) с проприетарным драйвером NVIDIA
  • GPU: карта на Ampere с GDDR6 - подтверждённо уязвимы RTX 3060 и RTX A6000. Ada Lovelace и новее не исследованы
  • CUDA Toolkit: версия, совместимая с драйвером
  • Права: пользователь с разрешением на запуск CUDA-ядер (стандартная конфигурация - ничего особенного)
  • IOMMU: для GDDRHammer/GeForge - отключён в BIOS. Для GPUBreach - без разницы

Пошаговый процесс: от проверки железа до детекции bit flip​

Полные PoC-эксплойты GDDRHammer, GeForge и GPUBreach не опубликованы. Но базовую проверку подверженности GDDR6 bit flip можно выполнить, адаптировав подход из GPUHammer 2025 года.

Шаг 1. Определите модель GPU и тип памяти. nvidia-smi -q покажет архитектуру и параметры. Нужна именно GDDR6 - для карт с GDDR6X (RTX 3080/3090), GDDR7 или HBM (A100, H100) публичных PoC с эскалацией привилегий нет. Эти типы памяти в рамках GPUHammer не тестировались, так что выводов об их уязвимости делать нельзя.

Шаг 2. Проверьте состояние IOMMU: dmesg | grep -i iommu. Если в выводе «IOMMU enabled» - GDDRHammer и GeForge не сработают, но GPUBreach-вектор остаётся.

Шаг 3. CUDA-ядро для хаммеринга. Базовый паттерн - цикличное обращение к двум строкам GDDR6, физически соседствующим с целевой:
C:
__global__ void hammer_kernel(volatile uint32_t *row_a,
                               volatile uint32_t *row_b,
                               int iterations) {
    for (int i = 0; i < iterations; i++) {
        uint32_t val_a = row_a[threadIdx.x];  // долбим строку A
        uint32_t val_b = row_b[threadIdx.x];  // долбим строку B
        __threadfence();  // барьер - чтобы кеш не съел наши обращения
    }
}
Это упрощённый пример для демонстрации концепции. Реальные паттерны используют специфичную адресацию банков GDDR6 и тысячи одновременных потоков.

Шаг 4. Детекция bit flip. После хаммеринга считываем содержимое соседних строк и сравниваем с эталоном. Любое расхождение - bit flip. На CPU для трансляции виртуальных адресов в физические используется /proc/self/pagemap (с Linux 4.0 PFN обнуляется для процессов без CAP_SYS_ADMIN); на GPU аналогичная трансляция требует реверса адресации GDDR6-банков.

Шаг 5. От bit flip до эксплойта - тут нужен memory massaging и точная манипуляция аллокатором драйвера. Публичных инструментов для автоматизации на GPU пока нет. Это та часть, где заканчивается «попробовать в лабе» и начинается «писать диссертацию».

Обход Rowhammer mitigation: почему IOMMU и ECC не спасают​

IOMMU: защита только от двух из трёх атак​

Включение IOMMU в BIOS - первая рекомендация для защиты от hardware attack с эскалацией привилегий через GPU. IOMMU ограничивает доступ GPU к хост-памяти и действительно блокирует GDDRHammer и GeForge, которые полагаются на прямой маппинг GPU-адресов на физические адреса CPU через PCIe.

Но GPUBreach обходит IOMMU, атакуя не через DMA-канал, а через memory-safety баги в драйвере NVIDIA. Драйвер - kernel-модуль на CPU, и его out-of-bounds записи IOMMU не контролирует. Тут ситуация как с замком на двери: IOMMU запирает окно (DMA), а атакующий заходит через дырку в стене (драйвер).

ECC: полумера с оговорками​

Включение ECC через nvidia-smi -e 1 (с перезагрузкой) позволяет корректировать одиночные bit flip и детектировать двойные. По данным SecurityWeek, исследователи GPUBreach прямо говорят: «ECC is not a foolproof mitigation against GPUBreach». Почему:
  • Если паттерн хаммеринга вызывает более двух bit flip в одном слове (что продемонстрировано на DDR4 и DDR5 для CPU), ECC не может их скорректировать и допускает silent data corruption
  • ECC снижает доступный объём видеопамяти - на серверных GPU это терпимо, но влияет на производительность
  • На потребительских GPU (GeForce серия) ECC вообще недоступен. Исследователи формулируют жёстко: «On desktop or laptop GPUs, where ECC is currently unavailable, there are no known mitigations to our knowledge»

Что остаётся​

Полноценного патча от NVIDIA нет. Компания опубликовала security notice по GPUHammer 2025 года и, по данным SecurityWeek, «said it may update its previous Rowhammer security notice with information from the new research project». То есть пока - тишина.

Что это значит для shared GPU-инфраструктуры​

Стоимость высокопроизводительных GPU - от $8000 по данным Ars Technica - делает их разделение между десятками пользователей в облаке экономической необходимостью. И именно тут Rowhammer атака GPU становится практически значимой.

Вектор: злоумышленник арендует GPU-ресурс у облачного провайдера, получает стандартные права на запуск CUDA-ядер - и этого хватает для инициации атаки. Физический доступ не нужен. Как указано в исследовании GPUBreach: «the attacker does need to have code execution privileges on the GPU - this can be any user with permissions to use the GPU».

Для пентестеров, работающих с облачными инфраструктурами, это добавляет конкретные чеки в модель угроз:
  • Включён ли IOMMU на хостах с shared GPU
  • Активирован ли ECC на серверных картах
  • Как изолированы GPU-ресурсы: Multi-Instance GPU (MIG) на A100/H100 создаёт аппаратные перегородки, но карты Ampere без MIG делят всю память между пользователями
  • Есть ли мониторинг аномальных паттернов обращений к GPU-памяти - массовые cudaMalloc/cudaFree могут быть индикатором memory massaging
Активных атак Rowhammer в дикой природе пока не зафиксировано. Но исследования опубликованы, патча нет, окно уязвимости открыто - особенно для облачных GPU-сред на Ampere с GDDR6.

Вопрос к читателям​

У кого в лаборатории есть RTX 3060 на Ampere с GDDR6 и возможность тестировать хаммеринг через CUDA? Интересен конкретный вопрос: при запуске базового hammer-ядра с __threadfence() и 10M итерациями на двух соседних строках - сколько bit flip вы видите на банк? GeForge заявляет 1171 на RTX 3060, но это с оптимизированными паттернами. Какой результат даёт «наивный» двусторонний хаммер без реверса адресации банков GDDR6? Скиньте вывод ECC-счётчиков через nvidia-smi -q -d ECC до и после теста - будет интересно сравнить.
 
Мы в соцсетях:

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

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab