Критические уязвимости во всех процессорах

Я как-то сразу не осознал насколько все плохо. Уязвимости Meltdown и Spectre оказались намного серьезнее, чем это могло показаться на первый взгляд.

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

Объяснение от меня:
Процессор знает телефон Путина. Мы хотим вычислить его поциферно. Мы выкладываем десять листков бумаги на пол, на каждом из них написана цифра — предполагаемая первая цифра. Мы говорим процессору: если 100 поделить на 0 == 666, то пометь, пожалуйста, первую цифру телефона крестиком. Процессор начинает вычислять 100 / 0, а пока он этим занимается, чтобы не терять времени он делает более быструю операцию — узнает телефон, берет его первую цифру и заносит свой виртуальный карандашик над листком. Права доступа при этом не проверяются — это более долго, это можно сделать и потом.

Деление завершается с ошибкой, и поток, задавший неудобный вопрос будет убит. Но можно успеть создать ребенка, он же не будет ответственен за родителя, верно? Ребенок смотрит на десять одинаковых, непомеченных листков, и начинает командовать процессору метить поочередно все листки крестиком. Только к пометке одного из листков процессор будет готов, остальные будут метиться медленнее — их нет в кеше. Таким образом из побочного эффекта в виде скорости доступа мы можем получить информацию о чужом участке оперативки. К чему это приводит известно на примере Heartbleed.

На физическом уровне вместо операции записи (пометить крестиком) используется операция чтения (просто посмотреть на то что написано на листке). На моей машине воспроизводится. Уязвимо тотально все, что осталось целым пока непонятно. Железного фикса не сделать, как выпускать новые поколения процессоров я пока не понял. Софтовый фикс состоит в том, что после каждого прерывания зачищать кеш. Падение производительности при этом катастрофическое (5-30%).

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

Исходные статьи дублирую здесь: spectre, meltdown.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *