Обновление binutils до 2.41 и glibc до 2.40
===========================================
Обновлены версии binutils и glibc, поставляемые в составе сборок
addon-toolchain (а также кросс-компиляторов).
Binutils: 2.29 → 2.41
Glibc: 2.30 → 2.40
Обновление glibc в addon-toolchain означает, что сценарий, когда
программа компонуется с библиотеками, не собираемыми этим тулчейном,
теперь работает для большего диапазона системных версий glibc — до 2.40
включительно. В частности, системы Debian 12 и Ubuntu 24.04 подходят
под этот критерий.
Указанный сценарий реализуется, например, при установке зависимостей с
помощью пакетного менеджера. Он описан в разделе «Использование
сторонних
библиотек при использовании полного тулчейна» документации SAFEC.
На cconly сборки это обновление не влияет: они содержат только
компилятор и библиотеки, собираемые из исходного кода GCC.
https://safecompiler.pages.ispras.ru/changelog/gcc/#update-toolchain-2-41-2…https://safecompiler.pages.ispras.ru/changelog/binutils/https://safecompiler.pages.ispras.ru/changelog/glibc/
Выход safe-13.3 и закрытие safe-13.2
====================================
Вышли первые релизы safe-13.3 — ветки безопасного компилятора SAFEC на основе
GCC 13.3. Согласно схеме версионирования, принятой в GCC, этот релиз содержит
исправления ошибок относительно 13.2 [1]. Переход на более высокую minor версию
(число после точки) не должен приводить к несовместимости.
В соответсвии с этим ветка safe-13.3 безопасного компилятора заменяет safe-13.2.
Ветка safe-13.2 закрыта, мы перестаём распространять и поддерживать релизы,
сделанные с неё, и рекомендуем перейти на новую версию.
RHash для хэширования при журналировании трансляции
===================================================
Для идентификации файлов функция журналирования процесса трансляции в безопасном
компиляторе вычисляет контрольные суммы, используя хэш-функцию, определённую
ГОСТ 34.11-2018 (ГОСТ Р 34.11-2012). В качестве реализации использовался
модифицированный код проекта streebog [2]. В новых версиях компилятора вместо
него используется RHash [3].
Это изменение никак не отражается на потребителях бинарных сборок, поставляемых
ИСП РАН. Как и ранее, функции хэширования статически скомпонованы с компилятором.
Для сборки из исходных кодов достаточно установить в систему пакет, содержащий
библиотеку и заголовочный файл rhash версии не ниже 1.38 т.е. имеющей реализацию
GOST R 34.11-2012. (Пакет имеет разное название в зависимости от дистрибутива:
rhash-devel, librhash-dev, rhash...)
Дополнительно предусмотрена опция конфигурации --with-rhash=PATH.
[1]: https://gcc.gnu.org/pipermail/gcc-announce/2024/000181.html
[2]: https://github.com/adegtyarev/streebog
[3]: https://github.com/rhash/RHash
ГОСТ
====
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
Вышел первый релиз safe-12.3 — ветки безопасного компилятора SAFEC
на основе GCC 12.3.
Новейшая версия для ветки safe-12.3 на сегодняшний день — safe-12.3-64.
Архивы с бинарными сборками имеют названия
safe-12.3-64-gcc-cconly-x86_64-pc-linux-gnu.tar.gz и
safe-12.3-64-gcc-addon-toolchain-x86_64-pc-linux-gnu.tar.gz.
Как видно на этих примерах, релизы безопасного компилятора теперь имеют
версию, которая указывается в имени файла-архива. В рамках одной ветки
компилятора номер версии монотонно возрастает от релиза к релизу.
Взаимосвязи между номерами версий для разных веткок нет: например,
функции безопасности, реализованные в safec9-311 и safe-12.3-64, не
отличаются. Для сравнения функциональности релизов разных веток
безопасного компилятора SAFEC предусмотрена веб-страница с логом
изменений (changelog), о которой мы сообщим в следующих анонсах.
Просим направлять вопросы и обратную связь по использованию безопасного
компилятора на адрес safec-support(a)list.ispras.ru. Это закрытый список
рассылки, который читает команда разработки безопасного компилятора.
Если вопрос по теме этого анонса, достаточно ответить на это письмо:
заголовок Reply-To уже содержит нужный адрес.