Розробники LLVM пропонують безпечну обробку буферів у C++

Логотип LLVM

LLVM — це основа для розробки компіляторів, а також для створення нових мов програмування та вдосконалення існуючих мов.

L розробники проекту LLVM запропонували ряд змін, спрямованих на посилення безпеки проектів C + + критично важливі для місії та надають засоби для усунення помилок, спричинених переповненням буфера.

Таким чином, пропозиція, яку вони випустили, зосереджена на роботі, зокрема, у двох сферах: забезпечення моделі розробки, яка дозволяє безпечно працювати з буферами, і робота над посиленням безпеки бібліотеки стандартних функцій libc++.

Згадується, що запропонована безпечна модель програмування для C++ «полягає у використанні класів, наданих стандартною бібліотекою, під час роботи з буферами замість маніпулювання необробленими покажчиками». Наприклад, пропонується використовувати класи std::array, std::vector і std::span, які будуть додані з перевіркою під час виконання на наявність виділеної пам’яті поза межами.

Наша мета — підвищити безпеку критичних баз коду C++. Для цього ми плануємо працювати над двома ідеями.

Захищена стандартна бібліотека C++
Модель програмування безпечного буфера C++ та засоби адаптації
Захищена libc++ призначена для того, щоб зробити інтерфейси стандартної бібліотеки C++ більш безпечними в цілому.

Модель програмування безпечного буфера C++ разом із захищеною libc++ забезпечують пом’якшення доступу до пам’яті поза межами під час виконання. Інструменти адаптації автоматизують перехід коду на цю нову модель програмування.

На додаток до цього в ньому також згадується, що для боротьби з «небезпечними» методами програмування в дзвін, якщо пропонує видавати попередження компілятора для всіх арифметичних операцій вказівників, схоже на попередження clang-tidy linter під час використання прапорця "cppcoreguidelines-pro-bounds-pointer-arithmetic", підтримка якого з’явиться в LLVM 16. Щоб увімкнути такі попередження, до clang буде додано окремий прапорець, неактивний за замовчуванням .

У libc++ планується реалізувати додатковий режим захисту, який, коли ввімкнено, виявлятиме деякі ситуації, які призводять до невизначеної поведінки під час виконання. Наприклад, на уроках std::span і std::vector, відстежуватиметься доступ поза межами, і в цьому випадку програма не працюватиме.

Ці додаткові перевірки під час виконання будуть згруповані в кілька категорій, якими можна керувати окремо. Мета полягає в тому, щоб постачальник, який постачає libc++ на своїй платформі, міг вирішити, які перевірки ввімкнути в бібліотеці доставки (якщо такі є), залежно від бажаного рівня безпеки.

Розробники вважають, що додавання таких змін збереже libc++ сумісність зі стандартами C++, оскільки вибір того, як обробляти випадки невизначеної поведінки, залишається за розробниками бібліотеки, які можуть, серед іншого, розглядати невизначену поведінку як блокування, яке вимагає від програми ВХІД.

The Перевірки виконання в libc++ планується розділити на категорії які можна включити окремо. Деякі із запропонованих перевірок, які не призводять до більш складних операцій або змін ABI, уже реалізовано в безпечному режимі libc++ (безпечний режим).

Повторюємо, що кінцева мета полягає в тому, щоб надіслана бібліотека дозволила ці перевірки у виробництві; це не функція «тільки для налагодження», хоча з часом вона замінить давно непрацюючий «режим налагодження».

Крім того, планується підготувати набір засобів корекції коду що дозволить замінювати змінні необробленими покажчиками в контейнерах і застосовувати альтернативні обробники в ситуаціях, коли контейнер не може безпосередньо замінити вказівник (наприклад, конструкцію «if(array_pointer)» можна перетворити на «if(span.data ( )»). Параметри можна застосовувати не тільки до локальних змінних, але і до параметрів типу з покажчиками.

Також згадується, що розглядають "перевірку статичного аналізатора clang" чутливий до маршруту, який попереджає, якщо std :: span будується з контейнера, розмір якого менший за вказаний у конструкторі діапазону. Зазначений засіб перевірки є автономним і корисним сам по собі, якщо все піде добре, він буде ввімкнено за замовчуванням для всіх користувачів

В кінці кінців якщо вам цікаво дізнатись більше про це, ви можете перевірити деталі в наступне посилання.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.