Вразливості Meltdown та Spectre у поцесорах Intel, AMD і ARM

Вразливості Meltdown та Spectre у поцесорах Intel, AMD і ARM #1
2018-01-04 15:57

Головною новиною нового року у сфері ІТ та кібербезпеки стала заява дослідників з Google Project Zero про виявлену вразливість у продукціях всіх виробників процесорів. Спеціалісти розкрили ряд недоліків безпеки, які, за їх словами, можуть дозволити хакерам вкрасти конфіденційну інформацію практично з усіх сучасних обчислювальних пристроїв, що містять чіпи від Intel Corp, Advanced Micro Devices Inc і ARM Holdings.  

Ці вразливості отримали кодові імена Meltdown і Spectre. (Ознайомитися з доповіддю можете на офіційному веб-порталі Google Project Zero  (https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html) ).

Як повідомляється, вразливість Meltdown характерна для Intel, а Spectre - для Intel/AMD/ARM. Розробники підготували працюючі прототипи експлойтів, у тому числі -реалізація JavaScript для використання в браузері.

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

Spectre порушує такий бар'єр між самими додатками: умовно, один сервіс може одержати доступ до пам'яті іншого.

Фрагмент коду Spectre:

1 #include

2 #include

3 #include

4 #ifdef _MSC_VER

5 #include /* for rdtscp and clflush */

6 #pragma optimize("gt",on)

7 #else

8 #include /* for rdtscp and clflush */

9 #endif

10

11 /********************************************************************

12 Victim code.

13 ********************************************************************/

14 unsigned int array1_size = 16;

15 uint8_t unused1[64];

16 uint8_t array1[160] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };

17 uint8_t unused2[64];

18 uint8_t array2[256 * 512];

19

20 char *secret = "The Magic Words are Squeamish Ossifrage.";

21

22 uint8_t temp = 0; /* Used so compiler won’t optimize out victim_function() */

23

24 void victim_function(size_t x) {

25 if (x < array1_size) {

26 temp &= array2[array1[x] * 512];

27 }

28 }

Але природа цих вразливостей така, що дозволяє тільки зчитувати певні дані без можливості запису. (https://newsroom.intel.com/news/intel-responds-to-security-research-findings/).

Таке зчитування даних дозволяє обійти ASLR/KASLR, а атаки такого типу називаються «side-channel» (http://blog.erratasec.com/2018/01/why-meltdown-exists.html) та є доволі апаратно-специфічними.

Такого роду атаки були відомі і раніше, однак, ніколи не виходили за рамки теоретичного обговорення в силу складності їх використання.

Оскільки, як ми писали вище, ані Spectre, ані Meltdown не являються повноцінними атаками, ми не очікуємо якого-небудь серйозного використання цих вразливостей у найближчий час.

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

Корпорація Microsoft вже опублікувала оновлення для своїх операційних систем (https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution-s), але природа оновлення така, що погіршує продуктивність центрального процесора. За різними оцінками, втрата продуктивності може сягати до 5%.