Группа исследователей из Амстердамского и Кипрского университетов разработала метод атаки, позволяющий удалённо эксплуатировать уязвимость RowHammer в чипах памяти DRAM и добиться изменения содержимого отдельных битов в ОЗУ через манипуляцию с сетевыми пакетами, отправляемыми на целевую систему по локальной сети. Проблема RowHammer была выявлена в 2012 году, но до сих пор остаётся актуальной в виду трудности устранения уязвимости на аппаратном уровне. Вариант атаки с использованием сетевых адаптеров получил название "Throwhammer".
Целью исследования была демонстрация того, что уязвимость значительно опаснее, чем предполагалось, и уязвимые системы с высокоскоростным сетевым адаптером могут быть атакованы удалённо через отправку специально оформленного потока сетевых пакетов. Возможность применения метода продемонстрирована для организации выполнения кода в контексте работающего на удалённой системе сервера Memcached. Предложенный метод применим в высокоскоростных сетях с поддержкой удалённого прямого доступа к памяти (RDMA), которые получили распространение в облачных инфраструктурах и центрах обработки данных.
Несмотря на то, что практическая демонстрация метода воплощена в сети с поддержкой RDMA, исследователи не исключают, что возможна реализация атаки и без RDMA, так как сетевые адаптеры обеспечивают высокую интенсивность обращений к оперативной памяти, достаточную для проявления RowHammer. При этом, атака представляет больше теоретический интерес, чем реальную угрозу, так как требует выполнения достаточно большого набора условий и совпадения многих факторов, которые малодостижимы на реальных рабочих системах.
Для защиты от осуществления подобных атак без модификации приложений предложена реализация новой системы выделения буферов c изоляцией блоков в адресном пространстве DRAM. Суть метода защиты в добавления специальных защитных областей вокруг адресов, в которые обычно осуществляется запись в процессе кэширования и буферизации данных сетевой карты.
Напомним, что уязвимость RowHammer позволяет исказить содержимое отдельных битов памяти путём цикличного чтения данных из соседних ячеек памяти. Так как память DRAM представляет собой двухмерный массив ячеек, каждая из которых состоит из конденсатора и транзистора, выполнение непрерывного чтения одной и той же области памяти приводит к флуктуации напряжения и аномалиям, вызывающим небольшую потерю заряда соседних ячеек. Если интенсивность чтения достаточно большая, то ячейка может потерять достаточно большой объём заряда и очередной цикл регенерации не успеет восстановить его первоначальное состояние, что приведёт к изменению значения сохранённых в ячейке данных.
Вариант атаки по сети (Throwhammer) базируется на том, что сетевые карты достаточно активно кэшируют и сохраняют принимаемые данные в ОЗУ и скорости обработки пакетов в сетях с пропускной способностью 10 Gbps достаточно, чтобы создать нагрузку на память, необходимую для проявления уязвимости RowHammer. В ходе проведённого эксперимента искажение бита было достигнуто после генерации 560 тысяч обращений к памяти в течение 64 мс. Для создания такой активности достаточно отправки 9 млн пакетов в секунду, что вполне по силам любой современной сетевой карте с поддержкой RDMA.
Дополнительно можно отметить публикацию той же группой исследователей из Амстердамского университета усовершенствованного метода эксплуатации уязвимости RowHammer через web-браузер, получившего название GLitch. Если классический вариант атаки при помощи JavaScript в современных браузерах малоприменим из-за внесенных ограничений точности таймера, то новый метод обходит данные ограничения используя WebGL и GPU для формирования необходимой для проявления RowHammer активности.
Точности таймера, предоставляемого в WebGL, оказалось достаточно для определения разницы между прямым и прокэшированным обращением к DRAM, что позволяет использовать WebGL для организации атаки по сторонним каналам для определения непрерывных областей физической памяти. Далее, полученная информация о раскладке памяти используется для проведения целевой атаки RowHammer с использованием GPU. GPU задействован вместо CPU так как он представляет упрощённую систему кэширования, содержит кэш меньшего размера и снабжён более простыми механизмами защиты, которые легче обойти.
Атака с использованием GPU ограничивается устройствами в которых CPU и GPU совместно используют одну память, как правило, такое встречатется в смартфонах и планшетных ПК. В частности, демонстрация атаки GLitch подготовлена для Chrome и Firefox, запущенных на смартфоне Google Nexus 5 (прототип эксплоита действует для SoC Snapdragon 800/801) под управлением Android. Для проведения демонстрационной атаки потребовалось около 2 минут после открытия в браузере страницы с эксплоитом на JavaScript. Для защиты от использования WebGL для проведения атаки в Chrome 65 и Firefox 60 отключено по умолчанию WebGL-расширение EXT_DISJOIN_TIMER_QUERY, позволявшее формировать запросы к таймеру в обход штатных средств JavaScript.
Дополнение: другая группа исследователей из Грацского технического университета (Германия) опубликовала другой вариант проводимой по сети атаки с использовании уязвимости RowHammer в чипах памяти DRAM. Атака получила название Nethammer и не зависит от поддержки RDMA. Принцип атаки в общих чертах аналогичен методу Throwhammer и заключается в генерации огромного потока типовых мелких UDP-пакетов, которые не оседают в кэше и при обработке приводят к перезаписи одной области памяти.
|