Апаратний корінь довіри: чи безпечне завантаження вашої системи?

  • 23 марта, 15:14
  • 3873
  • 0

Apple, Google і Microsoft намагаються захистити комп'ютери від зловмисників ще на стадії завантаження. 

Апаратний корінь довіри

Послідовність завантаження машини зазвичай починається з запуску BMC (Baseboard Management Controller) або PCH ( Platform Controller Hub ). Наприклад, ще до запуску процесора Intel ядро управління працює з PCH. Після налаштування апаратного забезпечення PCH дозволяє процесору «включитися», а вже процесор завантажує BIOS / UEFI по послідовному периферійному інтерфейсу (SPI-шині, Serial Peripheral Interface). Прошивка звертається до завантажувального сектора в постійне сховище комп'ютера і завантажує завантажувач (наприклад, GRUB). Той завантажує зі сховища образ операційної системи в системну пам'ять і передає управління операційній системі. Схоже на естафету, коли члени команди по черзі передають один одному естафетну паличку, щоб всі разом виграли гонку.

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

У змаганнях ми впевнені в своїй команді і довіряємо кожному з членів команди частину загальної роботи, щоб дістатися до фінішу. З машинами цей ланцюжок довіри трохи складніше. Як ми можемо перевірити, що на кожному кроці завантаження запускається безпечне програмне забезпечення? Якщо обладнання або програма були скомпрометовані в будь-якій точці завантаження, зловмисник може отримати привілеї і зможе робити абсолютно все.

Мета апаратного кореня довіри - переконатися, що програмне забезпечення, встановлене в кожному компоненті апаратного забезпечення, є «саме тим» ПО і перевірити, чи було щось зламано або перезаписано.

Модуль довіреної платформи (TPM)

Модуль довіреної платформи (англ. Trusted Platform Module, TPM) - це мікросхема, призначена для захисту апаратного забезпечення за допомогою вбудованих криптографічних ключів. Модуль зазвичай встановлюється на материнській платі і взаємодіє з системою по апаратній шині.

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

Модуль має наступні функції:

  1. генератор випадкових чисел;
  2. генерація криптографічних ключів;
  3. перевірка цілісності;
  4. атестація ключів модуля TPM;
  5. робота з ключами.

Перевірка цілісності

Перевірка цілісності - це процес збору та обробки інформації про програмне забезпечення, обладнання і конфігурації системи. Під час завантаження TPM використовує хеш-функцію для отримання зліпка виконуваного файлу і його конфігурації. Ці хеш-значення використовуються при підтвердженні установки ідентичності коду віддаленим або локальним верифікатором. Хеш-значення також можна використовувати в поєднанні з функцією захищеного сховища. Це дозволяє вирішити запуск конкретних файлів тільки певних додатків.

Атестація

Атестація фіксує стан апаратного і програмного забезпечення. Мета атестації - довести, що операційна система і програмне забезпечення не пошкоджені і заслуговують довіри. Верификатор довіряє точності даних атестації, оскільки вони підписані TPM, ключ якого перевірений центром сертифікації. TPM виготовляються з парою унікальних public / private ключів, вбудованих в апаратне забезпечення.

Упаковка і прив'язка ключа

Машини, що використовують TPM, можуть створювати криптографічні ключі та шифрувати їх так, щоб вони могли бути розшифровані тільки TPM. Цей процес, відомий як упаковка ключа, допомагає захистити ключ від розкриття. Кожен TPM має майстер-ключ упаковки - кореневий ключ сховища. Приватна частина цього ключа ніколи не надається жодному іншому пристрою, процесу, програмного забезпечення або користувачеві.

Машини, що використовують TPM, можуть створити ключ, який не тільки упакований, але і прив'язаний до певних перевірочних даних платформи. Ключ може бути розпакований, тільки якщо перевірочні дані платформи мають ті ж значення, що і при створенні ключа. Процес відомий як прив'язка ключа до TPM. Розшифровка ключа називається відв'язкою. TPM може прив'язувати і відв'язувати дані, створені поза TPM. За допомогою цього ключа можна блокувати дані до тих пір, поки не будуть виконані певні апаратні або програмні умови.

Власні чіпи

TPM підтверджує, що запущена прошивка є достовірною, проте в TPM немає механізму для перевірки безпеки коду. Користувач повинен переконатися, що ПЗ не містить бекдор та іншого мотлоху, але це неможливо, якщо код не відкритий. Системі TPM недостатньо для перевірки того, що код безпечний, тому кілька компаній створили свої власні чіпи для розширення перевірок безпеки.

Google Titan

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

Google для своєї інфраструктури розширили безпеку TPM за допомогою власного чіпа Titan. Опенсорсна версія Titan знаходиться в активній розробці з жовтня 2019 року. Нещодавно були додані дві нові функції: перевірка цілісності першої інструкції та виправлення помилок.

Цілісність першої інструкції

Перевірка цілісності першої інструкції (англ. First-instruction integrity) полягає в тестуванні коду, що виконується першим в циклі запуску кожної машини. Titan спостерігає за кожним байтом прошивки, вклинюючись через шину SPI між завантажувальною прошивкою BMC (або PCH) і головним процесором. Послідовність завантаження в даному випадку з чіпом Titan буде відрізнятися від звичайної послідовності:

  1. Titan утримує машину в ресета.
  2. Програма Titan виконує код з вбудованої пам'яті ( ПЗУ ).
  3. Titan запускає вбудований самотест пам'яті, щоб переконатися, що вся пам'ять (включаючи ПЗУ) не була підроблена.
  4. Titan перевіряє власну прошивку за допомогою public-ключа і порівнює приналежність коду до ієрархії ключа Titan.
  5. Завантажується перевірена прошивка.
  6. На хості перевіряється BIOS / UEFI.
  7. З ресета виводиться решта машини.
  8. Центральний процесор завантажує BIOS / UEFI з завантажувальної прошивки, яка виконує подальшу апаратну / програмну настройку.
  9. Далі йде стандартна послідовність завантаження.

Виправлення помилок

Виправлення помилок засноване на криптографічній верифікації. Щоб її забезпечити, в процесі виробництва чіпів Titan генерується унікальний ключ для кожного чіпа. Система верифікації перевіряє не тільки походження мікросхем, але і вбудоване програмне забезпечення, яке працює на мікросхемах, оскільки кодова ідентифікація мікропрограммного ПО хешується в ієрархії ключів на кристалі. Ця властивість дозволяє Google виправляти помилки в прошивці і видавати сертифікати тільки справним чіпам. Це гарантує, що системні журнали не будуть змінені або видалені зловмисниками з адміністраторськими правами до їх виявлення.

Cerberus від Microsoft

Як і Titan, криптографічний чіп Cerberus від Microsoft також міститься на шині SPI і безперервно контролює доступ для забезпечення цілісності вбудованого ПЗ та захисту від несанкціонованого втручання і шкідливих оновлень.

Apple T2

Чіп Apple T2 підтримує безпечне завантаження машин Apple. На відміну від Titan і Cerberus, які взаємодіють через SPI, T2 надає прошивку і завантажує CPU по шині eSPI (Enhanced Serial Peripheral Interface).

Послідовність завантаження машини на T2:

  1. Завантажується і виконується T2 ROM.
  2. Т2 ROM передає управління iBoot-завантажувачу.
  3. Завантажувач виконує ядро bridgeOS (ядро T2-чіпа).

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

  1. bridgeOS переходить до UEFI чіпа T2.
  2. Мікросхема T2 виводить процесор з ресета.
  3. Процесор завантажує завантажувач macOS.
  4. Виконується ядро macOS.

Однією з важливих особливостей чіпа T2 є перевірка версії MacOS, що працює на комп'ютері. T2 перевіряє хеш MacOS на відповідність списку схвалених хешів для запуску. Саме на цьому рівні Apple контролює запуск інших (не яблучних) ОС на своїх пристроях.

Відмовостійкість платформи (PFR)

Забезпечення цілісності вбудованого ПЗ, виявлення пошкоджень та відновлення частин вбудованого ПЗ назад в стан цілісності, побудовано на основі рекомендацій Національного інституту стандартів і технологій (США).

PFR усуває вразливість в ентерпрайз-серверах з модулями мультиобробки, кожен з яких має свою власну прошивку. Ця прошивка може бути атакована хакерами, які можуть таємно встановити шкідливий код у флеш-пам'ять модуля і залишити систему назавжди скомпрометованою.

Специфікація PFR заснована на таких принципах:

  1. Захист: гарантується, що код прошивки і критичні дані залишаються в стані цілісності та захищені від ушкодження.
  2. Виявлення: фіксування моменту, коли код прошивки або критичні дані були пошкоджені.
  3. Відновлення: повернення коду прошивки і критичних даних до стану цілісності або примусове відновлення за допомогою авторизованого механізму.

UEFI Secure Boot

UEFI Secure Boot призначений для перевірки бінарників EFI, виконуваних під час завантаження, за допомогою контрольної суми або валідної сигнатури, підкріпленої довіреним сертифікатом. Користувач може налаштувати список довірених сертифікатів і контрольних сум за допомогою EFI змінних, які зберігаються в незалежній пам'яті UEFI.

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

Ядро UEFI надзвичайно складне і містить мільйони рядків коду. Воно складається з служб завантаження і служб рантайму. UEFI є дірою для багатьох вразливостей, так як має один і той же пропріетарний код, який використовується на різних платформах. Оскільки UEFI живе в прошивці CPU, зазвичай зберігається у флеш-пам'яті SPI, експлойти, що туди прокрались можуть «накоїти справ». Навіть якщо юзер перевстановить ОС або замінить жорсткий диск, вразливість залишиться.

Intel's Boot Guard

Boot Guard - це рішення Intel для перевірки сигнатур прошивки процесора. Boot Guard працює шляхом впровадження public-ключа BIOS в програмовану пам'ять всередині Intel Management Engine. У машини є відкритий ключ BIOS, і вона може перевіряти правильність підпису під час кожного наступного завантаження. Як тільки виробник включив цю функцію, відключити її більше не вийде.

Апаратний корінь довіри: чи безпечне завантаження вашої системи?

Проблема Boot Guard полягає в тому, що тільки Intel або виробник мають ключі для підпису прошивки. Це робить неможливим використання coreboot, LinuxBoot або будь-яких інших еквівалентів в якості прошивки на цих процесорах. Якщо все-таки спробувати завантажити таку альтернативу, то прошивка не підпишеться правильним ключем, що призведе до девайса-цеглини.

Прозорість системи

Прозорість системи - це процес, спрямований на поліпшення довіри до компонентів системи шляхом надання кожному серверу наступних компонентів:

  1. унікального ідентифікатора;
  2. обмеження поверхні атаки;
  3. змінюваного стану в прошивці;
  4. можливості перевірки всього ПО, що працює на платформі, починаючи з першої інструкції, що виконується після включення живлення.

Все це досягається за допомогою наступних принципів:

  1. Прив'язка ідентифікатора. Ключове завдання кожного сервера - зв'язати унікальну "особистість" сервера з важкоповторюваним елементом, свого роду капчею.
  2. Фізичний захист прошивки від запису. Доступні для запису розділи коду мають змінюване стан. Код, доступний тільки для читання, служить джерелом довіри для інших механізмів безпеки.
  3. Виявлення підробки. Зловмисників неможливо зупинити шляхом фізичної заміни чіпа, тобто необхідно виявити порушення фізичної цілісності серверного обладнання та вжити відповідних заходів.
  4. Вимірюється завантаження. Цей інструмент в поєднанні з віддаленою перевіркою дозволяє третім особам отримати криптографічний журнал завантаження всіх компонентів в системі.
  5. Відтворена збірка. Гарантує, що якщо бінарник зібраний один раз, він може бути зібраний знову і знову для виробництва того ж бінарника.
  6. Незмінна інфраструктура. Прозорість системи працює тільки тоді, коли на зміни стоїть обмеження. Якщо дозволити кому-небудь увійти в систему і внести зміни у конструкцію - це анулює всі гарантії завантаження.
  7. Бінарний журнал прозорості. Всі прошивки і образи ОС, які можуть бути завантажені в систему, підписуються власником системи, а записи про це вставляються в загальнодоступний журнал.

Підводячи підсумок

Забезпечення безпеки процесу завантаження за допомогою апаратного кореня довіри має різні реалізації. Навіть якщо ми можемо перевірити через апаратний корінь довіри, що хеш пропрієтарної прошивки є істинним хешем, потрібен доступ до вихідного коду прошивки для гарантії, що він не містить ніяких бекдорів. Завдяки такому доступу ми б могли отримати простоту налагодження для усунення проблем, не покладаючись на постачальника.

Прошивка розкидана по всіх компонентах машини. Вона знаходиться в: CPU, мережевій платі, SSD / HDD, графічному процесорі, і навіть в контролері вентиляторів. Щоб забезпечити цілісність машини, всі ці компоненти повинні бути перевірені. В майбутньому описані вище чіпи будуть встановлюватися не тільки на SPI flash, але і на інші пристрої, що зв'язуються з BMC.

Джерело перекладу


0 комментариев
Сортировка:
Добавить комментарий