Часть первая: 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» и не позволяющей читать содержимое ОЗУ.



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

  • Qualcomm Snapdragon 845
  • Samsung Exynos 9810

Про 845-й производитель прямо заявляет об использовании Cortex-A75, про 9810 достоверной информации нет, однако этот процессор имеет ряд эксклюзивных для 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 (Snapdragon) 3.18.31
Redmi Note 4 (MTK) 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

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

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

Версия ядра обусловлена как поддержкой его со стороны производителя чипсета (обратите внимание, что у Meizu на MTK Helio X20 и Xiaomi Redmi Note 4 на нём же ядро одно, а вот у Redmi Note 4 на Snapdragon 625 — другое), так и собственными наработками производителя смартфона.

Это означает, что наличие, например, патча 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.

Комментарии (49)


  1. melchermax
    07.01.2018 12:57

    Может, теперь разработчики мобильных ОС таки придут идее обновления компонентов ОС вместо полной смены прошивки? Вообще-то на настоящий момент сменить ядро возможно, но необходимы пляски с custom recovery, кустарными сборками, и т.д.


    1. entze
      07.01.2018 13:26
      -1

      Если правильно понимаю, то Android 8 есть фича Project TREBLE, но как обычно, есть особенности.


      1. FlamyXD
        07.01.2018 14:55

        Но поддержку этой технологии могут не запилить разработчики.


        1. zikasak
          07.01.2018 16:46
          -1

          Если хотят пройти Google CTS на устройстве, выпускаемом изначально с Android 8 — запилят.


      1. olartamonov Автор
        07.01.2018 14:58
        +2

        Project Treble про другое — как раз чтобы максимально отвязать высокоуровневые обновления от низкоуровневых (ядра, драйверов).

        Так что особо ничего не изменится. Просто представьте, что вот оказалось бы, что Meltdown в ARM с нами уже три года, полноценная защита требует патча на ядро, посмотрите на табличку — и прикиньте, сколько времени производителям чипсетов и смартфонов потребуется на патченье, проверку и обновление всего зоопарка от 3.10.61 до 4.4.78.


      1. stetzen
        07.01.2018 15:05

        Насколько я понимаю (но могу ошибаться, конечно), project TREBLE как раз в данном случае не поможет. Он (вроде бы) позволяет обновлять юзерспейсную часть андроида (не вполне уверен, насколько глубоко, мб вплоть до Дальвика), оставляя в покое железоспецифичные куски кода. Проблема в том, что как раз ядро железоспецифичнее некуда.


        1. melchermax
          07.01.2018 16:57
          -2

          Собрать новое, «неуязвимое» Linux ядро со старым конфигом железа — дело на пару часов, в отличие от адаптации новой версии андроида, к примеру.


          1. amarao
            07.01.2018 20:07

            Это если у вас есть сырцы всех драйверов и они готовы с новой моделью памяти работать.


            1. olartamonov Автор
              07.01.2018 20:44
              +1

              И QA-отдел, согласный без пары-тройки месяцев тестирования подписаться под тем, что новое чудо-ядро при раскатывании на пятнадцать миллионов смартфонов не превратит половину из них в кирпичи.


              1. dimm_ddr
                08.01.2018 13:24

                Ох, если бы ко мне (к QA) с таким пришли я бы наверное несколько минут сначала молча рассматривал бы этого человека перед тем как начать объяснять куда он может с такими предложениями пойти.


            1. melchermax
              10.01.2018 20:35

              Кагбэ у производителей эти сырцы таки есть. И допилить их — ни разу не проблема.


              1. amarao
                11.01.2018 12:19

                Грубое упрощение. Часто производитель выдаёт блоб под указанную версию, или имеет патчи только на указанную версию, и портировать их под другую версию — гигантский труд (в отсутствие спеков на железо).

                Андроидная экосистема с драйверами ужасающа.


    1. vladtsvs
      08.01.2018 13:25
      +1

      Отдельная тема — что в ядрах для смартфонов идут драйвера на смартфоновскую периферию. И они зачастую проприетарные и только под определенную версию ядра


  1. vassabi
    07.01.2018 13:16
    +1

    надо наоборот — кроме зоопарка мобильных ОС иметь еще и зоопарк мобильных процессоров.
    А то нашел одну-две уязвимости в железе — и привет. А надо чтобы на каждом проце их приходилось заново искать.


    1. perfect_genius
      07.01.2018 13:35
      +1

      Принципы работы разве не будут тот же? Если нет, то это отдельная компиляция на каждую архитектуру, отдельные тесты, оптимизации…


    1. olartamonov Автор
      07.01.2018 15:02
      +1

      Ха.

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

      Вот за что я благодарен компании Mediatek, например, так это за то, что они данный зоопарк хоть как-то причесали под одну гребёнку. При том, что я вряд ли рискну взять себе смартфон на MTK.


      1. Diman_94
        08.01.2018 13:26
        +1

        Да и сейчас Galaxy S7 и Galaxy S8 представлены в двух вариантах — на Snapdragon и на Exynos.


  1. Ravebinovich
    07.01.2018 13:45
    +1

    А когда Интел планирует наладить выпуск процессоров с закрытой уязвимостью?


    1. phantom-code
      07.01.2018 14:00
      +3

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


      1. olartamonov Автор
        07.01.2018 14:54
        +1

        «Исправленные» процессоры будут выпускать в продажу точно так же, как выпускают любые новые линейки — первыми выйдут топовые Xeon и Core i7 за безумное бабло, через несколько месяцев выпустят средний уровень, а всяким пентиумам и целеронам замены ядра года два ждать придётся.


    1. vanxant
      07.01.2018 14:01
      +3

      По слухам, пока что их гендир планирует нечто другое, пакуя чемоданы налички)


      1. olartamonov Автор
        07.01.2018 14:47
        +6

        По слухам, акции Интела прямо сейчас стоят на 70 центов за штуку дороже, чем гендир их продал.


        1. ARD8S
          07.01.2018 15:20

          Ну так и трейдеры пока ещё не все из под столов повылазили. Где-нибудь к середине февраля, всё будет более понятно. Дальнейший вектор движения, например.


          1. olartamonov Автор
            07.01.2018 15:23
            +5

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

            Акции интела бурно росли с сентября по ноябрь, каких-то особо долгосрочных причин для такого роста видно не было — говоря проще, отличный момент, чтобы фиксировать прибыль. Что Кржанич и сделал.

            Если б он хотел на Meltdown заработать, он бы на все свои акций AMD прикупил бы, они на 20 % почти поднялись.


            1. ARD8S
              07.01.2018 16:24
              -1

              Как знать, может и прикупил. Или биткоины, лол. Не даром тут движуха какая-то была по поводу совместной деятельности синих с красными. Этот год был буквально золотым для производителей железа в застоявшейся нише десктопной комплектухи. Тут и рязанское воскрешение АМД, и взрывной майнинг, и улетающая как горячие пирожки на вокзальном перроне 10ХХ серия Зелёного от зависти Хуанга. И такой себе шикарный финальный аккорд всего этого, который вы и описали. А вообще, НГ- момент для слива инфы подходящий, минимальный шок у праздной общественности, минимальная шумиха в прессе и нет кипиша на отдыхающей бирже и, как вы и написали, может быть широкие массы благополучно всё забудут, как и петю с ваннакриптом.


            1. dom1n1k
              07.01.2018 16:32

              Ну купить акции AMD это уже слишком палевно, будет много неприятных вопросов, если вскроется.
              А просто продать — всегда можно морду кирпичом сделать «ну просто продал, такое вот совпадение».


          1. Vilgelm
            08.01.2018 11:24

            Российские трейдеры конечно оказывают самое сильное влияние на курс акций Intel, да. А в США и большинстве других стран новогодние праздники кончились числа второго.


      1. Lennonenko
        07.01.2018 19:06
        +1

        да обсосали уже эту наличку миллион раз
        банальная налоговая оптимизация, не надо никакой конспирологии


  1. en1gma
    07.01.2018 14:22

    а та кучка ядер от arm, которых в таблице нет — не подвержена уязвимостям?
    а та кучка ядер НЕ от arm, которых в таблице нет — что с ними?
    а armv8-ядра одинаково себя ведут в aarch32 и aarch64 «режимах»?

    Exynos 8910

    а может 9810? и там mongoose3 в качестве big
    Про 845-й производитель прямо заявляет об использовании Cortex-A75

    а тут Kryo 385 Gold и Silver, про которые косвенным путем установлено, что они являются сильно-модифицированными а75 и а55


    1. olartamonov Автор
      07.01.2018 14:51

      а та кучка ядер от arm, которых в таблице нет — не подвержена уязвимостям?


      Не подвержена, это ядра без спекулятивного выполнения инструкций.

      а та кучка ядер НЕ от arm, которых в таблице нет — что с ними?


      Судя по всему, никто, кроме Apple, не занимался глубокой модернизацией ядер, поэтому для Qualcomm/Samsung/HiSilicon можно смотреть на Кортексы, из которых они выросли.

      а может 9810? и там mongoose3 в качестве big


      Да, 9810 на Mongoose M3, который по фичам удивительным образом похож на Cortex-A75.

      а тут Kryo 385 Gold и Silver, про которые косвенным путем установлено, что они являются сильно-модифицированными а75 и а55


      Kryo385 — это и есть Snapdragon 845. Там никто изначально и не пытался скрывать, что он на базе A75 сделан.


  1. nerudo
    07.01.2018 14:30
    +7

    Похоже именно поэтому мы и не видим во вселенной сверхцивилизаций — их всех погребло под развалинами собственной ИТ-инфраструктуры.


  1. moraug
    07.01.2018 14:51
    -1

    В связи со всем вышеизложенным у меня есть более приближенный к реальности вопрос. Извините, если оффтоп, но вроде по теме.
    Присматриваюсь к Sony Xperia XZ1 Compact, процессор Snapdragon 835, вроде как там модифицированный Cortex-A73. Целесообразно ли брать сейчас, или лучше подождать патча? Ожидается ли патч и насколько прогнозируется снижение производительности? И, может кто в курсе, часто ли после таких событий как MWC2018 падает цена на девайсы прошлого года, стоит ли ждать марта?


    1. olartamonov Автор
      07.01.2018 14:52

      A73 не подвержен наиболее критичным уязвимостям.


      1. Alcpp
        08.01.2018 02:39

        Тут как посмотреть. Он подвержен самым массовым. Думаю эксплоиты будут в первую очередь для этого писать.


  1. Exchan-ge
    07.01.2018 19:32
    -1

    несколько десятков миллионов Android-смартфонов и планшетов, подверженных атаке Meltdown


    Я так понимаю — владельцы Microsoft Lumia 950 (Cortex-A57/-A53) могут спать спокойно?


    1. olartamonov Автор
      07.01.2018 20:45

      Владельцы всех уже выпущенных смартфонов могут спать достаточно спокойно, а смартфонов на отсутствующих в табличке процессорах — вдвойне.


  1. potan
    07.01.2018 19:55

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


    1. sumanai
      07.01.2018 20:38
      +2

      JIT байткода обновить, что бы он не позволял эксплуатировать эти уязвимости

      Это ударит по производительности сильнее выноса памяти ядра из адресного пространства программ.


    1. olartamonov Автор
      07.01.2018 20:49

      А какой процент существующих приложений использует нативный код, и что с ними делать после этого обновления? Ну т.е. объявить их все попросту несовместимыми с новой версией Андроида — ход мощный, но спорный.

      В ART-то, насколько я понимаю, доступные приложению таймеры уже загрубили в последнем security update.


    1. Temtaime
      08.01.2018 13:48

      А вот я предлагаю запретить байткод, потому что он жрёт мой аккумулятор и тормозит.
      Вы в курсе что 95% 3D игр под ведро имеют нативные движки?
      Примеров полно.
      И никто не будет заставлять программистов с десятков других языков писать под ведро исключительно на Java.


  1. prvd
    07.01.2018 20:45

    А Asus ze551ml на intel atom z3580 подвержен всем уязвимостям, я правильно понимаю?


    1. olartamonov Автор
      07.01.2018 20:46

      Да, всем.


  1. Exchan-ge
    07.01.2018 20:53

    Единственным способом защиты является срочная доработка ядра ОС


    Цитата:
    "… компания Intel сообщила о существенном прогрессе, которого ей удалось достичь вместе с разработчиками ОС и ПО, в исправлении ситуации.
    Intel заявляет, что к настоящему времени выпустила обновления прошивки для большинства процессоров, вышедших за последние пять лет. Говоря точнее, к концу этой недели процессорный гигант обещает «пропатчить» более 90% процессоров, выпущенных за последние пять лет.

    Intel теперь утверждает, что выпущенные ею заплатки якобы обеспечивают полный «иммунитет» от обеих уязвимостей (Meltdown и Spectre). Это при том, что ранее специалисты безопасности в один голос заявляли, что уязвимость Spectre, как подсказывает само ее название, очень сложна в исполнении и ее очень трудно устранить полностью одними только патчами"


    1. olartamonov Автор
      07.01.2018 21:04
      +4

      Это та же Intel, предыдущий пресс-релиз которой сводился к тезису «а чего вы все к нам пристали, у всех эти уязвимости есть!»?


  1. focs113
    08.01.2018 05:55
    -2

    никто не покупает процессоры с +5% быстродействием на поколение… а давайте мы все выпущенные процессоры сделаем не просто устаревшими но ещё и опасными.а через месяца два выкатиим новую линейку уже безопасных… профит от интела)


    1. Exchan-ge
      08.01.2018 14:54

      сделаем не просто устаревшими но ещё и опасными


      Если смотреть с такой точки зрения — то тогда там другой смысл:

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


  1. dernuss
    08.01.2018 09:25
    +1

    Может хоть процессоры подешевеют…


    1. Temtaime
      08.01.2018 13:55

      Наоборот.


  1. uzverkms
    10.01.2018 11:53