Новогодние подарки, часть третья: хорошо ли мы себя вели

Часть первая: Meltdown.
Часть вторая: Spectre.

Одним из самых интересных вопросов, возникших в дискуссиях об аппаратных уязвимостях Meltdown и Spectre (см. ссылки выше) был вопрос о том, сделал ли нам Дед Мороз этот подарок в связи с тем, что в 2017 году мы вели себя плохо — или, наоборот, хорошо.

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

Итак, что мы имеем? Аппаратная уязвимость Meltdown, позволяющая любому непривилегированному процессу читать память ядра ОС, а также любых работающих в этой ОС процессов, включая сертификаты, пароли, биткоин-кошельки и всё, что придёт вам в голову обрабатывать на компьютере.

Применение уязвимости не оставляет следов, а реализующий её код в общем случае не детектируется антивирусами.

Единственным способом защиты является срочная доработка ядра ОС с целью разделения виртуальных адресных пространств процесса и ОС. В Linux соответствующий патч называется KPTI, он оставляет в виртуальном адресном пространстве процесса только небольшой кусочек ядра — функции-трамплины, перебрасывающие при обращении к ним на соответствующие функции ядра, которое теперь живёт в другом адресном пространстве. Благодаря этому патч также получил название Forcefully Unmap Complete Kernel With Interrupt Trampolines, или FUCKWIT.

Meltdown достоверно подвержены:

  • Практически все процессоры Intel
  • Неназываемое число процессоров Apple на ядре ARM
  • Процессоры на ядре ARM Cortex-A75

Особенный интерес в наших взаимоотношениях с Дедом Морозом представляет последний пункт — Cortex-A75.

Если не считать творчества Apple, живущего исключительно в контролируемых Apple устройствах, другие процессоры на ядрах ARM могут быть подвержены трудно эксплуатируемой уязвимости Spectre, по факту представляющей сейчас опасность только для браузеров с выполнением JS, или похожей на Meltdown, но очень сильно ограниченной уязвимости, известной из документов ARM под названием «Variant 3a» и не позволяющей читать содержимое ОЗУ.

dsgb_btas9bo1f_8siewsjemwry.png

На Cortex-A75 же в настоящий момент представлены всего два процессора, на которых представлены ровно ноль устройств:

  • Qualcomm Snapdragon 845
  • Samsung Exynos 8910

Про 845-й производитель прямо заявляет об использовании Cortex-A75, про 8910 достоверной информации нет, однако этот процессор имеет ряд эксклюзивных для A75 особенностей, а также будет прямо противопоставляться Snapdragon 845 в Galaxy S9.

Вероятно, в ближайшее время можно ожидать аналогичных моделей разработки Mediatek и HiSilicon.

Устройства на обоих процессорах будут показаны в конце февраля на MWC-2018 и вокруг неё — это, разумеется, Galaxy S9, а также флагманские модели других производителей.

Что это означает? Очень простую вещь: в течение 2018 года в живой природе появятся несколько десятков миллионов Android-смартфонов и планшетов, подверженных атаке Meltdown. В течение 2019 года это число легко может перевалить за сто миллионов.

Хотя при этом устройства среднего и нижнего сегмента останутся неуязвимыми — их процессоры выгоднее собирать из дешёвых ядер класса Cortex-A5x, не добавляя в них большие и дорогие Cortex-A7x — рынок дорогих и уязвимых смартфонов будет представлять серьёзный интерес для хакеров.

Но ведь, казалось бы, простое обновление линуксового ядра?…

Мы со своими десктопами и серверами немного избалованы возможностью обновления ядра. Даже для сверхконсервативной CentOS есть три уже готовые линейки ядер — базовое, longterm и mainline, что уж говорить про десктопные дистрибутивы. Захотели — накатили. Сначала рюмку коньяка, потом ядро, ну или наоборот, это у кого сколько смелости есть.

А теперь посмотрим на реалии мира смартфонов:

Модель Ядро
Galaxy S6 3.10.61
Galaxy S7 3.18.14
Galaxy S8 4.4.13
Galaxy Note 8 4.4.13
Galaxy A5 2017 3.18.14
Sony XZ Premium 4.4.78
Xiaomi Mi A1 3.18.66
Xiaomi Mi 6 4.4.21
Xiaomi Mi 5 3.18.31
Redmi Note 4 3.18.22
Meizu MX6 3.18.22
HTC U11+ 4.4.78
Huawei Honor 9 4.1.18
Huawei P10 4.1.18
Huawei Mate 10 Pro 4.4.23
Nexus 6P 3.10.73

Хороший зоопарк, правда?

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

Версия ядра обусловлена как поддержкой его со стороны производителя чипсета, так и собственными наработками производителя смартфона.

Это означает, что наличие, например, патча KPTI в ядре 4.4.110 не означает, что производители могут быстренько выпустить обновление Android для своих смартфонов, которое принесёт всем их пользователям 4.4.110 с включённым KPTI. Нет, им надо будет развлекаться бэк-портированием соответствующего патча на то ядро, которое реально используется в их моделях, с последующим тестированием работоспособности и стабильности.

Смартфоны в этом похожи на серверные дистрибутивы линукса типа CentOS — только для них ещё и стороннего репозитария с kernel-lt и kernel-ml не существует.

На данный момент, однако, мы имеем всего два подверженных Meltdown ARM-процессора, не считая продукции Apple, которые ближайшие полгода будут применяться в ограниченном количестве моделей смартфонов, а прошивки этих смартфонов будут основаны на одном из более-менее свежих ядер серии 4.4, в которой патч KPTI есть хотя бы теоретически.

Теперь представьте, что было бы, если бы Meltdown был обнаружен не сейчас, а спустя два-три года. Сотни миллионов устройств (и уже не только смартфонов и планшетов), использующих десятки вариантов ядер из серий 4.4 и 4.9, каждое со своим набором патчей, основная разработка Linux при этом идёт где-то там в районе ядер 4.20…

Представили?

Спасибо, дедушка Мороз, что дал нам Meltdown до того, как им успели заразить всю мобильную индустрию.

Обещаем в 2018 году тоже вести себя хорошо.

P.S. Всё это совершенно не означает, что производители смартфонов действительно выпустят первые модели на Cortex-A75 с включённым KPTI.

© Geektimes