От
KL FC Bot
В середине марта исследователи из нескольких университетов в США опубликовали научную работу, в которой продемонстрировали аппаратную уязвимость в процессорах Apple серии M. Apple M — собственная разработка компании на базе архитектуры ARM, используемая в большинстве ноутбуков и настольных ПК, а также в некоторых планшетах iPad. Проблема может быть эксплуатирована для взлома алгоритмов шифрования. Атаку, построенную на базе этой уязвимости, назвали GoFetch.
Сочетание интересной темы с именем известного производителя привело к тому, что совершенно техническая работа была процитирована большим количеством специализированных и не очень изданий, зачастую с алармистскими заголовками типа «не доверяйте ноутбукам Apple свои приватные данные». На самом деле все не так плохо, но чтобы по-настоящему разобраться в сути новой проблемы, нам придется слегка углубиться в теорию работы процессоров, в частности поговорить про три концепции: предварительную выборку данных из оперативной памяти, программирование с постоянным временем и атаку по сторонним каналам. Как обычно, мы постараемся объяснить все максимально простыми словами.
Предварительная выборка данных
Центральный процессор компьютера или ноутбука выполняет программу, которая представлена в виде машинных кодов. Грубо говоря, это набор чисел, часть из которых представляет собой команды, а все остальное — данные для вычислений. На этом самом базовом уровне речь идет о самых простых командах: загрузить из памяти такие-то данные, произвести над ними какие-то вычисления, записать результат обратно в память.
Программу по идее нужно выполнять последовательно. Приведем самый простой пример: пользователь ввел пароль для доступа к криптокошельку. Нужно считать этот пароль из оперативной памяти, произвести над ним определенные вычисления, убедиться, что пароль правильный, и только тогда открыть доступ к секретным данным. Но если бы современные процессоры так выполняли весь код, наши компьютеры работали бы крайне медленно. Как удается ускорить выполнение программ? С помощью большого числа оптимизаций, в числе которых и предварительная загрузка данных.
Концепция предварительной загрузки данных заключается в следующем: если в коде программы будет обнаружена команда на загрузку определенных данных, почему бы во имя ускорения не загрузить их еще до того, как они понадобятся? Если данные в ходе дальнейших вычислений пригодятся — мы выполним программу чуть быстрее. Не пригодятся — не беда, сотрем их из кэш-памяти процессора и загрузим что-то еще.
Так работают самые базовые технологии предварительной выборки данных. В процессорах Apple используется довольно новый метод, известный как «контекстно зависимая предварительная выборка данных» или «data memory-dependent prefetcher» (DMP). Если коротко, DMP работает более агрессивно. Не всегда команды на загрузку данных из памяти доступны явным образом. Указатели на определенную область памяти могут быть результатом вычислений, которые еще нужно произвести. Либо они могут храниться в массиве информации, с которым программа будет работать позднее. DMP пытается угадать, что из данных программы является указателем на область памяти. Логика такая же: если что-то похоже на указатель, пытаемся загрузить информацию по соответствующему адресу. Процесс угадывания использует историю недавних операций, причем они могут относиться к совсем другой программе.
В 2022 году предыдущее исследование показало, что технология DMP достаточно часто путает указатели и какие-то другие данные, с которыми работает программа. Само по себе это проблемой не является: ну загрузили в кэш-память процессора что-то не то, ну бывает. Проблемы появляются, когда речь идет о работе алгоритмов шифрования. DMP может при некоторых условиях сломать концепцию программирования с постоянным временем. Давайте теперь поговорим про нее.
Посмотреть статью полностью
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти