Группа ученых опубликовала информацию о side-channel атаке под названием GoFetch. Проблема связана с серьезной уязвимостью в процессорах Apple M1, M2 и M3, и позволяет похитить криптографическую информацию из кеша процессора, когда на процессорах Apple выполняются имплементации широко распространенных криптографических протоколов. В это время атакующее приложение может воссоздать криптографический ключ из украденных данных.
GoFetch может быть использована, если целевая криптографическая операция и вредоносное приложение с обычными пользовательскими привилегиями, которые доступны большинству приложений, выполняются в одном кластере CPU.
Атака GoFetch эксплуатирует уязвимость в процессорах Apple, связанную с DMP (data memory-dependent prefetcher). Этот префетчер нового поколения используется только в процессорах Apple и Intel Raptor Lake, загружая содержимое памяти в кеш до того, как оно понадобится. Такая аппаратная оптимизация предсказывает адреса данных в памяти, к которым возможно обращение в ближайшее время.
Уязвимость связана с тем, что префетчер может загружать данные в кеш процессора с указателем, который используется для загрузки других данных. Фактически DMP иногда путает содержимое памяти и загружает в кеш процессора неправильные данные.
Корень проблемы заключается в том, что уязвимость полностью нейтрализует эффект constant-time защиты, которая представляет собой защиту от side-channel и процессорных атак, связанных с кешем. Такая защита гарантирует, что все операции занимают одинаковое количество времени, независимо от их операндов. Но, в результате уязвимости, приложения, эксплуатирующие GoFetch, могут поместить конфиденциальные данные в кеш, а вредоносное приложение получит возможность их похитить.
«Главная идея заключается в том, что, хотя DMP только разыменовывает указатели, злоумышленник может подготовить входные данные программы таким образом, чтобы при смешении этих данных с криптографическими секретами полученное промежуточное состояние могло выглядеть как указатель, но только если секрет удовлетворяет выбранному злоумышленником предикату, — пишут эксперты. — Например, представьте, что программа имеет секрет s, принимает x в качестве входных данных, вычисляет, а затем сохраняет y = s ⊕ x в своей программной памяти. Злоумышленник может создавать различные x и получить частичную (или даже полную) информацию о s, наблюдая за тем, может ли DMP разыменовать y».
Стоит отметить, что процессоры серии M разделены на так называемые кластеры. Например, M1 имеет два кластера: один содержит четыре ядра низкого энергопотребления (они же Icestorm), а другой — четыре высокопроизводительных (они же Firestorm). Пока приложение GoFetch и целевое криптографическое приложение работают в одном кластере (даже на разных ядрах внутри этого кластера) GoFetch может добыть достаточно секретов для похищения секретного ключа.
Уязвимость затрагивает все виды алгоритмов шифрования, начиная от классических и заканчивая алгоритмами нового поколения, которые должны противостоять будущим атакам с использованием квантовых компьютеров.
Так, GoFetch требуется менее часа, чтобы извлечь 2048-битный ключ RSA, и чуть более двух часов, чтобы извлечь 2048-битный ключ Diffie-Hellman. Атака на извлечение материала, необходимого для сборки ключа Kyber-512, занимает 54 минуты. И около 10 часов потребуется для ключа Dilithium-2, не считая времени, необходимого для обработки исходных данных в автономном режиме.
«К сожалению, чтобы оценить, является ли конкретная имплементация уязвимой, требуется криптоанализ и проверка кода, чтобы понять, когда и как промежуточные значения можно сделать похожими на указатели для утечки секретов. Этот процесс выполняется вручную, очень медленно и не исключает других подходов к атаке», — пишут авторы GoFetch.
Хуже того, исправить эту уязвимость в самих процессорах невозможно. Единственный выход — программные средства защиты и встраивание патчей в стороннее криптографическое ПО, что замедлит производительность шифрования и дешифрования на M1, M2 и M3, а также усложнит жизнь разработчикам. Еще один возможный способ защиты — запускать криптографические процессы на ранее упомянутых ядрах Icestorm, которые не имеют DMP. Но такая защита тоже вряд ли будет идеальна и так же повлияет на производительность.
Единственным исключением является процессор M3, который, как обнаружили исследователи, оснащен специальным «переключателем», с помощью которого разработчики могут отключить DMP. Однако пока неясно, насколько снизится производительность при отключении этой функциональности.
При этом подчеркивается, что падение производительности будет ощущаться только в том случае, если затронутое ПО выполняет определенные криптографические операции. То есть при работе в браузерах и многих других типах приложений изменения могут быть незаметны вовсе.
Стоит отметить, что архитектура Intel Raptor Lake (к которой относятся процессоры 13-го и 14-го поколений) не подвержена описанной уязвимости, несмотря на использование того же префетчера, что и в процессорах Apple серии M.
Компания Apple пока никак не прокомментировала информацию о GoFetch.