Під загрозою всі. Що таке Meltdown і Spectre і як з ними жити?

Кажуть, нове — це добре забуте старе. Початок року сповна підтвердив справедливість народної мудрості, але в гіршому сенсі з можливих. Адже зовсім недавно стало відомо про двох найнебезпечніших вразливості процесорів за останні двадцять років. Від них не врятує антивірус, атаку можна провести і на допотопне, і на найсучасніше залізо. «Діра» в безпеці є у переважної більшості пристроїв: від десктопів і смартфонів до банкоматів і літаків. Як жити з цим далі?

Коротко про головне

Знайомтеся: Meltdown (CVE-2017-5754). Атака, яка повністю ігнорує захисні механізми процесора, експлуатує контроль за адресними просторами, реалізований блоком MMU (Memory Management Unit). Коротка суть роботи MMU: якщо при запуску процесу ОС виділила цього самого процесу пам’ять, всі спроби вилізти за її межі будуть припинятися. А значить, одночасно запущені процеси (а стало бути, і додатки) працюють паралельно, не заважаючи один одному. Різні ділянки пам’яті можуть мати різні рівні доступу. Наприклад, додаток не отримає доступ до пам’яті, зайнятої ядром системи, навіть якщо відповідні адреси йому технічно доступні. Така схема успішно застосовувалася не просто роками, а десятиліттями, і ніщо не віщувало біди. До недавнього часу.

 

Як це працює

В історії розвитку PC була епоха, коли CPU багаторазово випереджав інші модулі у швидкодії, і для збільшення реальної продуктивності інженери винайшли так званий «провісник розгалужень». Його основне завдання — аналізувати вже виконані інструкції і давати припущення, які розрахунки можна проводити, не чекаючи моменту, коли будуть виконані умови, що призводять до ініціалізації даної гілки коду. Якщо виявляється, що виконані розрахунки не потрібні або невірні — процесор просто скине вже прораховані дані. У разі позитивної відповіді економиться багато часу: система може займатися корисними обчисленнями, а не простоювати. Як з’ясувалося, процесор в ході роботи «по прогнозам» здатний цілеспрямовано ігнорувати MMU. Спеціально підготовлений код експлуатує цю особливість для отримання доступу до результатів роботи цих алгоритмів. Власне, так і працює Meltdown.

 

Масштаб проблеми

Не маючи доступу до захищених ділянок пам’яті, вразливість атакує кеш CPU. У нього потрапляють абсолютно всі дані, що пройшли через процесор; крім того, він не сортує проходить через нього код на валідність. Дані отримані дані впали в кеш, а далі нехай процесор визначає, що з ними робити. Хак ж реалізований таким чином, що може визначити читання даних за заданою адресою, обчислюючи, потрапив той в кеш швидкості доступу (оперативна пам’ять набагато повільніше процесорної). Залишається змусити CPU за допомогою спеціального скрипта, що імітує запити за потрібними адресами, розкрити інформацію про вміст кеша. Маючи на руках правильні дані, не важко прочитати всю пам’ять ядра системи, а значить, і всю фізичну пам’ять. Уразливість зачіпає комп’ютери під управлінням практично будь-якого продукту Intel (всю лінійку Core Xeon, а також Celeron і Pentium на ядрах сімейства Core, процесори Core 2, Pentium 4-ї, 3-ї і навіть 2-ї серій) Нові процесори на ядрі ARM Cortex-A75 (Snapdragon 845, нові Exynos і Kirin, високопродуктивні моделі Mediatek 2018 року). Масштаб проблеми важко переоцінити.

 

Біда не приходить одна

Здавалося б, власникам процесорів AMD, на яких Meltdown поки відтворити не вдалося, час зітхнути з полегшенням. Проте поганий Санта явно вирішив, що в цьому році ніхто не піде скривдженим, і заніс всім і кожному щастя під назвою Spectre (CVE-2017-5753 і CVE-2017-5715). Не вдаючись у нетрі цифр і алгоритмів, Spectre — технічно схожа з Meltdown атака — вона теж експлуатує апаратний рівень процесорів, використовуючи непрямі канали витоку даних. Будучи складніше в реалізації, вона поширюється (хоч і з деякими застереженнями) на всі сучасні процесори, незалежно від платформи і сімейства.

 

Вдвічі складніше і небезпечніше

Spectre, на відміну від Meltdown, що не передбачає доступу до пам’яті атакується процесу (як ядра системи, так і користувальницької програми). Вони самі видають всі відомості — досить грамотно попросити», а реалізується це завдяки описаному раніше блоку «прогнозів». Виконуючи інструкції, схожі на ті, що створює атакується програма, уразливість дозволяє обчислити інструкції «жертви», порівнявши швидкості отримання змінної з кешу і ОЗП. Технічно метод досить складний у виконанні, але і список піддаються атаці пристроїв значніше: це всі процесори Intel, і 64-бітні ARM, і майже вся лінійка AMD. Тобто взагалі все CPU, мають позачергової запуск інструкцій.

 

Що робити?

Рішення на сьогоднішній день одне: установка актуального патча для ОС (користувачі Windows 10 можуть нарешті порадіти неотключаемому центру оновлень — хотфикс прилетить автоматично). Випущені заплатки переносять пам’ять ядра в ізольовану область, забезпечуючи захист не тільки розмежуванням привілеїв, але і контролем доступу за адресами. Не відстають і розробники браузерів, які випускають виправлення для запобігання потенційних атак на JS, що є локально виконує кодом.

А ось на антивіруси сподіватися не варто. Будучи проблемою апаратної, Meltdown і Spectre використовують штатний поведінку системи, а не переказ її в нестандартні або критичні стани. Тобто антивірус буде постійно реагувати на будь-який «індуський код», якщо постаратися налаштувати його на вилов специфічних для цих атак повторюваних циклів. Трохи заспокоює той факт, що складність виконання уразливості навряд чи зробить її популярною у вірусописьменників.

 

Чи Правда, що нові патчі уповільнюють процесор?

І так, і ні. Для рядового користувача нічого страшного не станеться. З одного боку, ізоляція пам’яті ядра дійсно позначається на продуктивності, і в деяких сценаріях втрати можуть досягати тих самих 20-30%, якими рясніють панічні статті в Інтернеті. З іншого — більшість таких сценаріїв у домашніх умовах не використовується, а в іграх і популярних користувацьких програмах реальна втрата продуктивності знаходиться на рівні похибки. Краще пожертвувати парою відсотків FPS, ніж, у разі настання чергової хакерської епідемії, заднім числом розбивати лоб фэйспалмами.

 

А щодо не що завантажуються після патча систем на базі процесорів AMD?

Скажімо так: якщо вас зачепила ця напасть, ви вже в курсі, що відбувається. Для всіх інших — коротко про подію. Деякі старі процесори AMD серії FX після отримання вищезазначеного хотфикса перестали коректно запускатися (з-за особливостей архітектури ядра і сумісності з материнськими платами попередніх поколінь). Але проблема вже вирішена — Microsoft тимчасово призупинила апдейт проблемних моделей. AMD теж у курсі того, що відбувається: виправлене оновлення вийде протягом найближчого тижня.

 

Кажуть, під ударом виявилися і відеокарти?

Незважаючи на розійшлися по Інтернету повідомлення, NVIDIA не визнає наявність уразливості Spectre в своїх продуктах серій GeForce, Quadro, NVS, Tesla і GRID. Відповідне виправлення драйверів, яке вийшло в десятих числах січня, усуває можливі лазівки по запуску Spectre на (!) центральному процесорі комп’ютера. Ніяких подробиць PR-відділ каліфорнійської компанії не дає. Втім, більшості користувачів турбуватися не варто зовсім — архітектура відеоядра значно відрізняється від процесорної. Навіть якщо знайдеться спосіб задіяти схожу лазівку, максимум, що вийде витягти з відеокарти, так це суми, які використовуються при розрахунках криптовалют, або масиви даних з наукових проектів. В інших випадках піддані атакам обчислювальні блоки зазвичай зберігають графіку і шейдери: яким хакеру вони потрібні?

 

Що в підсумку?

Все не настільки погано, як багато малюють на хвилі піднявся хайпи. По-перше, вразливість, нехай і з запізненням, але знайдена, вивчено та оприлюднено. Так що нехай і через пару поколінь процесорів (в прийдешніх Zen+ і Cannon Lake кардинальних змін архітектури чекати не варто), але від неї і їй подібних індустрія позбавиться остаточно. По-друге, більшість людей, що не використовують у повсякденній роботі вразливі сценарії (на кшталт тієї ж віртуалізації), з втратою продуктивності практично не зіткнуться. І нарешті, складність виконання хакерської атаки і вжиті проти Meltdown і Spectre заходи зроблять її непривабливою для зловмисників. Ціна атаки буде настільки велика, що вона більше підійде для злому великої корпорації, чим користувацьких пристроїв. Тому просто не забувайте оновлювати свою ОС і грайте спокійно.

 

Автори тексту: Віктор Сидоров, Іван Крилов