Інформаційна безпека

Новорічні подарунки, частина третя: добре ми вели себе

Частина перша: 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 і магістралі, що вже говорити про десктопні дистрибутиви. Захотіли — накотили. Спочатку чарку коньяку, потім ядро, ну або навпаки, це у кого скільки сміливості є.

А тепер подивимося на реалії світу смартфонів:

Модель Ядро
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.

Related Articles

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close