70% проблем безпеки в Chromium викликані помилками при роботі з пам'яттю

Розробники проекту Chromium проаналізували 912 небезпечних та критичних уразливостей, виявлених у стабільних випусках Chrome з 2015 року, і дійшли висновку, що 70% з них були викликані небезпечною роботою з пам'яттю (помилками при роботі з покажчиками коду на C/C++). Половина даних проблем (36.1%) викликана зверненнями до буфера після звільнення пов'язаної з ним пам'яті (use-after-free).

70% проблем безпеки в Chromium викликані помилками при роботі з пам'яттю

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

Для підтримки безпеки кодової бази Google також застосовує «правило двох«, відповідно до якого будь-який код, що додається, повинен підпадати не більше, ніж під дві умови з трьох: робота з неперевіреними вхідними даними, використання небезпечної мови програмування (C/C++) і виконання з підвищеними привілеями. З цього правила випливає, що код для обробки зовнішніх даних повинен бути урізаний до мінімальних привілеїв (ізольований), або бути написаний безпечною мовою програмування.

Для подальшого посилення захищеності кодової бази запущено проект із запобігання появі помилок роботи з пам'яттю в кодовій базі. Виділяються три основні підходи: створення бібліотек С++ з функціями для безпечної роботи з пам'яттю та розширення області застосування збирача сміття, застосування апаратних механізмів захисту MTE (Memory Tagging Extension) та написання компонентів мовами, що забезпечують безпечну роботу з пам'яттю (Java, Kotlin, JavaScript, Rust, Swift).

Очікується, що робота буде зосереджена у двох напрямках:

  • Значна зміна процесу розробки на С++, що не виключає негативного впливу на продуктивність (додаткові перевірки кордонів та складання сміття). Замість raw-покажчиків пропонується використовувати у коді тип MiraclePtr, що дозволяє звести експлуатовані помилки класу use-after-free до крахів, що не загрожують безпеці, без відчутного негативного впливу на продуктивність, споживання пам'яті і стабільність.
  • Застосування мов, розрахованих на виконання перевірок безпечної роботи з пам'яттю під час компіляції (дозволить виключити негативний вплив на продуктивність, властиве подібним перевіркам під час виконання коду, але призведе до додаткових витрат на організацію взаємодії коду новою мовою з кодом С++).

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

70% проблем безпеки в Chromium викликані помилками при роботі з пам'яттю

Джерело: opennet.ru

Додати коментар або відгук