ГОСТ
====
1 апреля 2024 года был введён в действие ГОСТ Р 71206-2024 «Защита
информации. Разработка безопасного программного обеспечения. Безопасный
компилятор языков С/С++. Общие требования».
SAFEC выполняет требования, предъявляемые этим стандартом к безопасному
компилятору третьего, второго и первого классов.
База данных компиляции по ГОСТ: опция --dump-sbom
=================================================
ГОСТ Р 71206-2024 требует, чтобы для безопасного компилятора была
реализована функция по журналированию процесса трансляции. Результат
журналирования — база данных компиляции. В ней должны фиксироваться
имена файлов—единиц трансляции и подключаемых файлов, их хэш-коды по
ГОСТ 34.11-2018, команды компиляции. Также должна быть включена
информация, позволяющая идентифицировать программы, задействованные в
трансляции исходных текстов в исполняемый код, их настройки и
конфигурационные файлы.
Для создания подробной базы данных компиляции в виде JSON файлов
безопасный компилятор предоставляет опцию --dump-sbom <DIR>.
https://safecompiler.pages.ispras.ru/changelog/gcc/#introduce-sbom
Подробное описание опции с примером работы можно найти в руководстве
пользователя (README) безопасного компилятора в разделе «Журналирование
процесса трансляции: --dump-sbom».
Скрипт comp_db_parser из поставки SAFEC позволяет проанализировать
«состав» ПО на уровне отдельных файлов. Он обходит полученную с помощью
--dump-sbom базу данных компиляции от заданного результирующего файла и
выводит множество «листовых» файлов, участвовавших в качестве входных
при компиляции, и их хэши.
Эта реализация журналирования выполнена на уровне драйвера (программа
gcc) и компилятора (вспомогательные программы cc1/cc1plus). При этом
она имеет ограничения — случаи, которые не поддержаны или принципиально
не могут быть учтены в таком подходе. Например:
- Если утилиты (ассемблер/компоновщик) вызываются напрямую, а не через
gcc, эти команды не будут учтены.
- Для генерируемых исходных файлов с точки зрения получаемой базы данных
компиляции исходными будут считаться результаты генерации.
- Если при компоновке используется linker script, меняющий имя выходного
файла, оно будет учтено неправильно.
- В режиме создания precompiled header'ов (.pch/.gch файлов) выходные
файлы не учитываются правильно. (Пока не поддерживается.)
- Набор конфигурационных файлов утилит в некоторой степени «угадывается»
т.е. строится на основе наших знаний о тулчейне. Если потребуется его
расширить, нужно будет внести изменения в компилятор.
Sbom-trace — отдельная утилита, не зависящая от компилятора
===========================================================
Перечисленные выше ограничения побудили нас создать инструмент, решающий
задачу в общем виде. Рабочее название этого инструмента — sbom-trace.
Он учитывает требования ГОСТ Р 71206-2024 в части журналирования
процесса трансляции.
Этот инструмент не зависит от компилятора и используемых языков
программирования. Принцип его работы основан на перехвате системных
вызовов с помощью ptrace. Его использование выглядит таким образом:
sbom-tracer -p sbom-postprocessor.py <build...>
где <build...> — команда сборки, sbom-postprocessor.py — скрипт,
входящий в состав инструмента.
Этот инструмент имеет свои ограничения: работает только под Linux, и его
не получится применить, если в процессе сборки уже используется ptrace.
Артемий Гранат представит этот инструмент в докладе «Идентификация
реквизитов сборки через отслеживание системных вызовов» 21 июня на
конференции OS DAY 2024. Аннотация и тезиcы:
https://osday.ru/granat.html
Выход safe-13.2
===============
Вышли первые релизы safe-13.2 — ветки безопасного компилятора SAFEC на
основе GCC 13.2.
Веб-сайт безопасного компилятора, Changelog
===========================================
У безопасного компилятора появился веб-сайт, где мы публикуем актуальную
документацию и подробную информацию о релизах. Также запланирован
раздел FAQ. Эта рассылка дополняет сайт: он накапливает всю информацию,
а сообщения в рассылке оповещают о ключевых обновлениях.
https://safecompiler.pages.ispras.ru/
Журнал изменений (Changelog) для всех веток SAFEC доступен по адресу
https://safecompiler.pages.ispras.ru/changelog/gcc/
Он позволяет увидеть, какие логические изменения произошли между
версиями, на какие ветки изменения уже портированы и когда, на какие
ветки ожидается порт.
Изменения до начала ведения журнала изменений для SAFEC не отражены на
этой странице. Представление об изменениях относительно базовой версии
GCC можно получить из краткого руководства пользователя (README, раздел
«Документация» на сайте).
Смягчение -Warray-bounds, новая опция -Wextra-array-bounds
==========================================================
Предупреждения, контролируемые опцией -Warray-bounds в прошлых версиях
безопасного компилятора, разбиты на две группы. Часть предупреждений
вынесена под опцию -Wextra-array-bounds.
Первая группа теперь включает только срабатывания -Warray-bounds
компилятора GCC соответствующей версии. Поведение, контролируемое
опцией -Warray-bounds безопасного компилятора, приведено в соответствие
с одноимённой опцией GCC.
Во вторую группу вынесены дополнительные срабатывания, реализованные
ранее в безопасном компиляторе. Для управления предупреждениями второй
группы добавлена опция -Wextra-array-bounds.
Предупреждения, контролируемые новой опцией, по-прежнему включены в
набор предупреждений -Safe3 и более высоких классов защищённости.
Однако теперь они не приводят к остановке трансляции, если опция
-Werror=extra-array-bounds не указана явно.
https://safecompiler.pages.ispras.ru/changelog/gcc/#add-wextra-array-bounds