Checked C — язык программирования, разработанный в Microsoft Research и ориентированный на максимальную совместимость с C, но обеспечивающий большую безопасность при работе с памятью и, вследствие этого — большую защиту от уязвимостей написанных на нём приложений[1][2][3][4].

Спецификация языка, примеры и тесты распространяются на условиях MIT license и Open Web Foundation[en] Final Specification Agreement (обеспечивающего свободу от патентных и копирайтных исков в рамках данного соглашения)[5].

Нововведения языка править

В язык введено ряд новых типов указателей, таких, как:

  • array_ptr<T> — указатель на массив фиксированного размера. Проверка выхода за его границы во время исполнения программы может быть обеспечена автоматически;
  • array_ptr_nt<T> — указатель на элемент массива типа Т, ограниченного символом null.
  • ptr<T> — указатель не требующий проверки выхода за границы, поскольку не используется для вычисления новых адресов. Соответственно, адресная арифметика для указателей такого типа запрещена.

Реализация править

Компилятор Checked C доступен в виде модифицированных с целью поддержки CheckedC LLVM/Clang[6]. Компилятор поддерживает 32-х и 64-х разрядные версии Windows, UNIX/Linux и MacOS[7].

См. также править

Примечания править

  1. Олег Парамонов. В Microsoft придумали вариант языка Си, на котором труднее писать уязвимые программы. Хакер № 248 (17 июня 2016). Дата обращения: 18 января 2020. Архивировано 18 мая 2021 года.
  2. David Ramel. Microsoft Research Modernizes C for Security, Reliability - (англ.). ADTmag (16 июня 2016). Дата обращения: 18 января 2020. Архивировано 13 августа 2020 года.
  3. Abel Avram. Checked C - A Safer C/C++ from Microsoft. InfoQ[en] (июнь 2016). Дата обращения: 18 января 2020. Архивировано 28 октября 2020 года.
  4. A. S. Elliott, A. Ruef, M. Hicks, D. Tarditi. Checked C: Making C Safe by Extension // 2018 IEEE Cybersecurity Development (SecDev). — 2018-09. — С. 53–60. — doi:10.1109/SecDev.2018.00015. Архивировано 24 сентября 2020 года.
  5. Проект Checked C на сайте GitHub
  6. Проект CheckedC Clang на сайте GitHub
  7. Готовые бинарные сборки доступны Архивная копия от 13 ноября 2020 на Wayback Machine только для Windows, инструкции по сборке исходных текстов для различных платформ являются частью документации компилятора

Литература править

  • Andrew Ruef, Leonidas Lampropoulos, Ian Sweet, David Tarditi and Michael Hicks. Achieving Safety Incrementally with Checked C // International Conference on Principles of Security and Trust. — Springer, Cham, 2019. — С. 76—98.

Ссылки править