Группа исследователей из Грацского технического университета (Австрия), ранее известная разработкой атак MDS, NetSpectre, Throwhammer и ZombieLoad, опубликовала новый метод атаки (CVE-2021-3714) по сторонним каналам на механизм дедупликации страниц памяти (Memory-Deduplication), позволяющий определить наличие в памяти определённых данных, организовать побайтовую утечку содержимого памяти или определить раскладку памяти для обхода защиты на основе рандомизации адресов (ASLR). От ранее демонстрируемых вариантов атак на механизм дедупликации новый метод отличается проведением атаки с внешнего хоста с использованием в качестве критерия изменения времени ответов на отправляемые атакующим запросы по протоколам HTTP/1 и HTTP/2. Возможность проведения атаки продемонстрирована для серверов на базе Linux и Windows.
Атаки на механизм дедупликации памяти используют в качестве канала для утечки сведений разницу во времени обработки операции записи в ситуациях, когда изменение данных приводит к клонированию дедуплицированной страницы памяти при помощи механизма Copy-On-Write (COW). В процессе работы ядро определяет одинаковые страницы памяти от разных процессов и объединяет их, отображая идентичные страницы памяти в одну область физической памяти для хранения только одной копии. При попытке изменения одним из процессов данных, связанных с дедуплицированными страницами, возникает исключение (page fault) и при помощи механизма 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.
Атаки на механизм дедупликации памяти используют в качестве канала для утечки сведений разницу во времени обработки операции записи в ситуациях, когда изменение данных приводит к клонированию дедуплицированной страницы памяти при помощи механизма Copy-On-Write (COW). В процессе работы ядро определяет одинаковые страницы памяти от разных процессов и объединяет их, отображая идентичные страницы памяти в одну область физической памяти для хранения только одной копии. При попытке изменения одним из процессов данных, связанных с дедуплицированными страницами, возникает исключение (page fault) и при помощи механизма 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.