Атаки на механизм дедупликации памяти используют в качестве канала для утечки сведений разницу во времени обработки операции записи в ситуациях, когда изменение данных приводит к клонированию дедпулицированной страницы памяти при помощи механизма Copy-On-Write (COW). В процессе работы ядро определяет одинаковые страницы памяти от разных процессов и объединяет их, отображая идентичные страницы памяти в одну область физической памяти для хранения только одно копии. При попытке изменения одним из процессов данных, связанных с дедуплицированными страницами, возникает исключение (pagefaul) и при помощи механизма Copy-On-Write автоматически создаётся отдельная копия страницы памяти, которая закрепляется за процессом. На выполнение копирования тратится дополнительное время, что может быть признаком изменения данных пересекающихся с другим процессом.
Исследователи показали, что возникающие в результате работы механизма COW задержки можно уловить не только локально, но и анализируя изменение времени доставки ответов по сети. Предложено несколько методов определения содержимого памяти с удалённого хоста через анализ времени выполнения запросов по протоколам HTTP/1 и HTTP/2. Для сохранения подбираемых шаблонов используются типовые web-приложения, сохраняющие в памяти поступающую в запросах информацию.
Общий принцип атаки сводится к заполнению на сервере страницы памяти данными, потенциально повторяющим содержимое уже имеющейся на сервере страницы памяти. Затем атакующий ожидает время, необходимое для выполнения ядром дедупликации и объединения страницы памяти, после чего производит изменение контролируемого дубликата данных и оценивает время реакции для определения успешности попадания.

В ходе проведённых экспериментов максимальная скорость утечки информации составила 34.41 байт в час при атаке через глобальную сеть и 302.16 байт в час при атаке через локальную сеть, что быстрее других методов извлечения данных по сторонним каналам (например, при атаке NetSpectre скорость передачи данных составляет 7.5 байт в час).
Предложено три рабочих варианта атаки. Первый вариант позволяет определить данные в памяти web-сервера, на которым используется Memcached. Атака сводится к загрузке определённых наборов данных в хранилище Memcached, очистке дедуплицированного блока, повторной записи того же элемента и создания условия для возникновения COW-копирования через изменение содержимого блока. В ходе эксперимента с Memcached удалось за 166.51 секунд определить версию libc, установленную в системе.
Второй вариант дал возможность узнать содержимое записей в СУБД MariaDB, при использовании хранилища InnoDB, через воссоздание содержимого байт за байтом. Атака производится через отправку специально изменённых запросов, приводящих к однобайтовым несовпадениям в страницах памяти и анализе времени реакции для определения, что догадка о содержимом байта была верной. Cкорость подобной утечки невелика и составляет 1.5 байт в час при атаке из локальной сети. Плюсом метода является то, что он может применяться для восстановления неизвестного содержимого памяти.
Третий вариант позволил за 4 минуты полностью обойти механизм защиты KASLR и получить информацию о смещении в памяти образа ядра виртуальной машины, в ситуации когда адрес смещения находится в странице памяти, другие данные в которой не изменяются. Атака осуществлялась с хоста, находящегося за 14 транзитных переходов (hops) от атакуемой системы. Примеры кода для осуществления представленных атак обещают опубликовать на GitHub.
Источник: http://www.opennet.ru/opennews/art.shtml?num=56179