Meltdown, Spectre и... npm

Безопасность Security

Всех с интересным новым годом! Возможно, вы еще не в курсе уязвимостей Meltdown и Spectre. Поэтому — короткое вступление.

Прошлой осенью исследователи Google опубликовали исследования о нескольких уязвимостях процессоров. В этом году эти исследования стали общедоступными. Если совсем вкратце:

Да, это всё не значит, что у вас гарантированно украдут данные. Однако, повышается вероятность утечки информации, например, при заходе на нормальный сайт с вредоносным кодом в рекламном скрипте.

Далее чуть больше подробностей.

Disclaimer: я не гуру информационной безопасности, поэтому всё что я пишу дальше — мое личное мнение, а не претензия на абсолютную истину.

Я начну с отличий, последствий и рекомендаций, чтобы не утомлять деталями Meltdown тех, кому это неинтересно. Для тех, кто заскучает после описания Meltdown, крайне рекомендую почитать следующий за ним раздел. А для тех, кому очень интересны детали — в конце будут дополнительные источники.

Высокоуровневые отличия

Последствия и рекомендации

С одной стороны, уязвимости серьезные. С другой — надо понимать, что:

Поэтому не торопимся выкидывать смартфоны с компами и уезжать в глушь.

Для людей

С точки зрения пользователей мои рекомендации практически независимы от последних уязвимостей:

Скажу честно, мне самому лениво было заходить в интернет-банк в другом браузере, теперь постараюсь делать именно так.

Что касается Meltdown, специфичен, пожалуй, один момент. Если в вашем смартфоне процессор на основе “ARM Cortex-A75” — сочувствую. Хотя смартфоны на Android патчат неторопливо, но, может, вам повезет… По этой теме есть обновление, см. “UPD” в конце статьи.

Для web-разработчиков

Здесь я пока сам еще не понял, есть у кого идеи? Возможно, это просто повод задуматься об использовании HttpOnly и SameSite, если они не используются…

Для админов

Загадочно улыбаться, если ваши сервера на AMD :) Если серьезно — патчи, обновления и т.п. — это понятно. Печально то, что патчи могут значительно снизить производительность IO (на вычисления влияют мало). Поэтому, нужно разумно подойти к вопросу для тех серверов, которые вы полностью контролируете.

Например, если на вашей Intel-овской железке крутится Linux+PostgreSQL и она не запускает какие-то левые приложения — имеет смысл потестить отключение патчей. Говорят, что это может позволить не протерять около 25% производительности.

Meltdown и проблемы спекулятивного чтения памяти

Вспомним, что при обращении к недопустимому адресу возникает исключение (на уровне железа, не софта). Но для ускорения параллельной обработки чтение может произойти до этой проверки, а если проверка не пройдёт — процессор “откатит” выполнение и начнёт его производить “по-честному”.

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

Далее я приведу упрощенные рассуждения. Подробности можно прочитать по первой ссылке в разделе “Дополнительная информация”. За кадром останется:

Идея Meltdown (смесь русского языка и псевдокода):

  1. У байта 256 значений, поэтому делаем мегабайтный массив из 256 блоков по 4КБ: my[256*4096].
  2. Мы хотим написать код, который сначала пытается считать по чужому адресу, скажем, other[i].
  3. Попасть в дальнейший код нам нужно спекулятивно, поэтому пишем его в блоке if (i < bounds), где bounds — переменная, “выкинутая их кэша”.
  4. Теперь, читаем other[i], а потом считываем my[other[i]].
  5. Из-за наших “спекуляций”, код выполняется целиком, а потом откатывается. Но страница по адресу my[other[i]] помещена в кэш, хотя значение other[i] нам недоступно.
  6. Теперь с шагом 4КБ бежим по массиву и замеряем время доступа. Номер итерации, где время доступа будет значительно меньше, и будет искомым other[i].

Понятно, что путём невероятных усилий мы прочитали только один байт чужой памяти, но процессоры сейчас производительные… А идея, безусловно, изящная.

Что касается Spectre — там нет даже попыток чтения чужой памяти. Чтобы работало спекулятивное выполнение команд, есть Branch Prediction Unit, который и эксплуатируется. Но это уже отдельная статья. Кстати — вот неплохая отдельная статья на Хабре :)

NPM и кража ваших паролей с кредитками

А теперь, после всех этих страшилок давайте немного о более простом способе получить приватную информацию :)

Крайне рекомендую почитать статью I’m harvesting credit card numbers and passwords from your site. Here’s how. Она и веселая, и заставляет задуматься…

Дополнительная информация

UPD: Говорят, также, что подтверждена уязвимость Cortex-A15, Cortex A-17, Cortex A-72, а это процессоры Exynos 5, Exynos 7, Qualcomm Snapdragon 650, 652, 653, 808 и 810, Mediatek Helio X20. Samsung, LG, HTC, Xiaomi, Meizu…

Безопасность Security