Производительность и безопасность снова сталкиваются в атаке «Collide+Power»
ДомДом > Новости > Производительность и безопасность снова сталкиваются в атаке «Collide+Power»

Производительность и безопасность снова сталкиваются в атаке «Collide+Power»

Oct 05, 2023

Еще одна неделя, еще один BWAIN!

Если вы слушали подкаст на прошлой неделе (подсказка, подсказка!), вы знаете, что BWAIN — это сокращение от Bug With An Impressive Name:

С3, серия 145: Жуки с впечатляющими именами!

Это прозвище, которое мы применяем, когда те, кто обнаружил новую кибератаку, настолько воодушевлены своим открытием, что дают ему пиар-прозвище, регистрируют для него тщеславное доменное имя, создают для него собственный веб-сайт и создают для него специальный логотип.

На этот раз в названии Collide+Power присутствует неприятный знак препинания, что является плюсом при именовании ошибок, но минусом при регистрации интернет-домена. (Как ни странно, в доменных именах разрешено использовать -, но не +).

Таким образом, доменное имя пришлось немного сократить до https://collidepower.com, но веб-сайт в любом случае предоставит вам обзор проблемы, даже если вычесть знак сложения.

Исследователи, стоящие за этой новой статьей, — Андреас Коглер, Йонас Юффингер, Лукас Гинер, Мартин Шварцль, Даниэль Грусс и Стефан Мангард из Университета Граца в Австрии, а также Лукас Герлах и Михаэль Шварц из Центра информационной безопасности имени Гельмгольца CISPA в Германии.

Мы не собираемся подробно объяснять различные формы этой атаки, поскольку технические детали проведения измерений и математическое моделирование, используемое для получения выводов на основе этих измерений, сложны.

Но суть проблемы, простите за каламбур, заключается в том, что кэш-память, спрятанная внутри современных процессорных чипов, предназначена для невидимого и автоматического повышения производительности…

…не всегда так невидим, как вы думаете, и иногда может привести к утечке части или всего своего содержимого даже к процессам, которые не должны его видеть.

Как следует из названия, кэш-память (это произносится как «наличные», как в долларах и центах, а не «кэш», как в отношении уважения и престижа, если вы когда-нибудь задумывались), хранит специальные копии значений данных из обычной оперативной памяти в скрытых местах внутри процессора. сам чип.

Если ЦП отслеживает адреса ОЗУ (ячейки памяти), которые вы недавно использовали, и может достаточно хорошо угадать, какие из них вы, вероятно, скоро снова будете использовать, он может временно хранить их в своей кэш-памяти и, таким образом, значительно ускорить работу. ваш второй доступ к этим значениям, третий доступ, четвертый и так далее.

Например, если вы ищете в таблице ряд значений данных для преобразования пикселей изображения из одного цветового формата в другой, вы можете обнаружить, что большую часть времени таблица поиска предлагает вам посетить любой из адресов ОЗУ 0x06ABCC00 (что может где хранится специальный код для «черного пикселя») или адрес 0x3E00A040 (который может быть местоположением кода «прозрачного пикселя»).

Автоматически сохраняя значения этих двух наиболее часто используемых адресов памяти в своем кэше, ЦП может блокировать (образно, а не буквально!) будущие попытки доступа к этим адресам, так что нет необходимости отправлять электрические сигналы за пределы процессора. через материнскую плату и в реальные микросхемы оперативной памяти, чтобы считывать мастер-копию хранящихся там данных.

Таким образом, доступ к кэшированным данным обычно происходит намного быстрее, чем к данным в оперативной памяти материнской платы.

Однако, вообще говоря, вы не можете выбирать, какие регистры кэша будут использоваться для хранения тех или иных адресов ОЗУ, и вы не можете выбирать, когда ЦП решит прекратить кэширование значения вашего «прозрачного пиксельного кода» и начать кэширование значения другой программы. Вместо этого «суперсекретный криптографический ключ».

Действительно, кеш может содержать либеральную смесь значений, от либеральной смеси адресов ОЗУ до либеральной смеси различных учетных записей пользователей и уровней привилегий, и все это одновременно.

По этой причине, а также из соображений эффективности и производительности, даже программы уровня администратора не могут напрямую просматривать список адресов, кэшируемых в данный момент, или получать их значения, чтобы защитить кэшированные данные от внешнего отслеживания.

Как программист, вы по-прежнему используете команду машинного кода «считывать код прозрачного пикселя по адресу 0x3E00A040», а операционная система по-прежнему решает, должны ли вы иметь доступ к этим данным на основе числового адреса 0x3E00A040, даже если данные в конечном итоге поступают непосредственно из кэша, а не из истинного адреса ОЗУ 0x3E00A040.