В этом репозитории содержится несколько приложений, демонстрирующих ZombieLoad. Для получения технической информации об ошибке обратитесь к статье:
Этот репозиторий содержит четыре различных атаки типа proof-of-concept, демонстрирующие ZombieLoad. Также он включает в себя четыре разных приложения-жертвы для проверки утечки в различных сценариях.
Все демонстрации протестированы на Intel Core i7-8650U, но они должны работать в любой системе Linux с любым современным процессором Intel Core или Xeon с 2010 года. Мы предоставляем три варианта для Linux, которые мы тестировали на Ubuntu 18.04.1 LTS, и два варианта для Windows, которые мы тестировали в Windows 10 (сборка 1803 17134.706).
Для достижения наилучших результатов мы рекомендуем быстрый процессор, поддерживающий Intel TSX (например, почти любой Intel Core i7-5xxx, i7-6xxx или i7-7xxx).
Демонстрациям PoC для компиляции требуется только GCC и Make (в Linux) или MinGW-w64 (в Windows).
Собрать атакующее или защищающееся приложение можно просто запустив команду make
в папке приложения.
Репозиторий содержит четыре варианта атак.
Вариант 1 — самый быстрый, простой и стабильный вариант для привилегированного атакующего (то есть он требует прав root). Поэтому, кроме тестирования, этот вариант особенно полезен для атак на SGX или для атак на виртуальные машины.
Для этого варианта KASLR и KPTI должны быть отключены. Это можно сделать, предоставив параметры nopti nokaslr
командной строке ядра. Затем запустите атакующее приложение на одном гиперпотоке с правами root: sudo taskset -c 3 ./leak
.
Вариант 2 — быстрый вариант, который не требует никаких привилегий. Однако он работает только на процессорах, поддерживающих Intel TSX. Вариант 2 — единственный вариант, который также работает на процессорах с уже имеющимися аппаратными средствами защиты от Meltdown и Foreshadow.
Просто запустите атакующее приложение на одном гиперпотоке: taskset -c 3 ./leak
.
Вариант 3 не требует каких-либо функций процессора или привилегий, но работает только в Windows.
Запустите атакующее приложение на одном гиперпотоке: start /affinity 3 .\leak.exe
. Может пройти некоторое время (до 1 минуты), прежде чем начнётся утечка, так как демонстрационной программе нужно дождаться, пока Windows соберёт информацию о памяти, используемой программой. Запуск другой программы, использующей память (например, браузера), иногда сокращает время ожидания.
Вариант 4 — интересный специальный подтип Варианта 2, который работает только на процессорах, поддерживающих и Intel TSX, и SGX. Этот вариант использует семантику прерывания страницы при доступе к зарезервированной процессором памяти в режиме без анклава и, следовательно, требует либо разрешения на создание анклава, либо прав root.
Демонстрационная программа для этого варианта требует доступа на чтение к виртуальным устройствам Linux /dev/cpu/CPUNUM/msr
и /dev/mem
. Это можно сделать, загрузив драйвер msr
, а также небольшой пользовательский драйвер, чтобы снять ограничения CONFIG_STRICT_DEVMEM по умолчанию в Linux:
$ sudo modprobe msr
$ cd module && make load
Затем запустите атакующую программу на одном гиперпотоке с правами root: sudo taskset -c 3 ./leak
.
Все варианты атак могут использоваться для утечки данных из следующих приложений-жертв. Все приложения-жертвы выдают одну заглавную букву. Независимо от выбранной жертвы и атакующей программы, атакующая программа отображает гистограмму утечённых значений.
Пример вывода выглядит следующим образом (для секретной буквы «X», загруженной жертвой).
A: ( 0)
B: ( 0)
C: ( 0)
D: ( 0)
E: ( 1)
F: ( 0)
G: ( 2)
H: ( 0)
I: ( 0)
J: ( 0)
K: ( 0)
L: ( 0)
M: ( 0)
N: ( 0)
O: ( 0)
P: ( 12)
Q: ( 1)
R: ( 1)
S: ( 0)
T: ( 0)
U: ( 2)
V: ( 1)
W: ( 0)
X: (1303) ############################################################
Y: ( 0)
Z: ( 1)
Просто запустите жертву на том же физическом ядре, но на другом гиперпотоке, как злоумышленник: taskset -c 7 ./secret
. Вы также можете предоставить секретную букву приложению-жертве в качестве параметра, например, taskset -c 7 ./secret B
, чтобы получить доступ к памяти, содержащей буквы «B». По умолчанию используется секретная буква «X».
Как только жертва будет запущена, в процессе злоумышленника должен появиться чёткий сигнал, то есть полоса для просочившейся буквы должна стать длиннее.
Просто запустите жертву на том же физическом ядре, но на другом гиперпотоке, как злоумышленник: start /affinity 7 .\secret.exe
. Вы также можете указать секретную букву в приложении-жертве как параметр, например, start /affinity 7 .\secret.exe B
, чтобы получить доступ к памяти, которая содержит буквы «B». По умолчанию используется секретная буква «X».
Как только жертва будет запущена, в процессе злоумышленника должен появиться чёткий сигнал, то есть полоса для просочившейся буквы должна стать длиннее.
Ядро-жертва (только Linux)
Модуль ядра, который постоянно загружает букву «J».
Перед запуском жертвы модуль ядра необходимо загрузить в ядро. Это делается с помощью команды sudo insmod leaky.ko
. Затем просто запустите жертву на том же физическом ядре, но на другом гиперпотоке, как злоумышленник: taskset -c 7 ./secret
.
Как только жертва будет запущена, в процессе злоумышленника должен появиться чёткий сигнал, то есть полоса для буквы «J» должна стать длиннее.
Intel SGX-жертва (только Linux)
Анклав Intel SGX, который постоянно загружает букву «S». Для этой жертвы требуется установить драйвер и SDK SGX.
Просто запустите жертву на том же физическом ядре, но на другом гиперпотоке, как злоумышленник: taskset -c 7 ./secret
.
Как только жертва будет запущена, в процессе злоумышленника должен появиться чёткий сигнал, то есть полоса для буквы «S» должна стать длиннее.
Виртуальная машина-жертва (Linux и Windows)
Виртуальная машина, содержащая приложение, которое постоянно загружает одно и то же значение из памяти. Для этой жертвы требуются установленные QEMU и включённый VT-x.
Просто запустите виртуальную машину на том же физическом ядре, но на другом гиперпотоке, как злоумышленник: taskset -c 7 ./secret.sh
. Как только виртуальная машина запустится, запустите жертву с помощью secret X
, где «X» — это секретный символ. В процессе злоумышленника должен появиться чёткий сигнал, то есть полоса для просочившейся буквы должна стать длиннее. ## Предупреждения
Предупреждение №1: Мы предоставляем этот код как есть. Вы несёте ответственность за защиту себя, своего имущества и данных, а также других лиц от любых рисков, связанных с этим кодом. Этот код может вызвать неожиданное и нежелательное поведение на вашем компьютере. Данный код может не обнаружить уязвимость на вашей машине.
Предупреждение №2: Если вы обнаружите, что компьютер уязвим для ZombieLoad, возможно, вы захотите избегать использования его в качестве многопользовательской системы. ZombieLoad нарушает защиту памяти процессора. На машине, которая уязвима для ZombieLoad, один процесс потенциально может прочитать все данные, используемые другими процессами или ядром.
Предупреждение №3: Данный код предназначен только для тестирования. Не запускайте его на каких-либо продуктивных системах. Не используйте его на любой системе, которой может пользоваться другой человек или организация.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )