Воспроизводимые сборки
Воспроизводимые сборки , также известные как детерминированная компиляция , представляют собой процесс компиляции полученного двоичного кода программного обеспечения, который гарантирует возможность воспроизведения . Исходный код , скомпилированный с использованием детерминированной компиляции, всегда будет выводить один и тот же двоичный файл. [1] [2] [3]
Воспроизводимые сборки могут выступать частью цепочки доверия ; [1] исходный код может быть подписан, а детерминированная компиляция может доказать, что двоичный файл был скомпилирован из доверенного исходного кода. Проверенные воспроизводимые сборки обеспечивают надежную защиту от атак, в которых двоичные файлы не соответствуют их исходному коду, например, если злоумышленник вставил в двоичный файл вредоносный код. Это актуальная атака; злоумышленники иногда атакуют двоичные файлы, но не исходный код, например, потому, что они могут изменить только распространяемый двоичный файл или избежать обнаружения, поскольку разработчики обычно просматривают и изменяют именно исходный код. По данным опроса 17 экспертов, воспроизводимые конструкции получили очень высокую оценку полезности у 58,8% участников, но также и высокую оценку стоимости у 70,6%. [4] Предпринимаются различные усилия по модификации инструментов разработки программного обеспечения для снижения этих затрат.
Методы
[ редактировать ]Чтобы процесс компиляции был детерминированным, входные данные компилятора должны быть одинаковыми, независимо от используемой среды сборки. Обычно это включает в себя нормализацию переменных , которые могут меняться, таких как порядок входных файлов, временные метки , локали и пути .
Кроме того, составители не должны сами вводить недетерминизм. Иногда это происходит при использовании хэш-таблиц со случайным начальным значением хеш-функции. Это также может произойти при использовании адреса переменных, поскольку это зависит от рандомизации расположения адресного пространства (ASLR).
Системы сборки , такие как Bazel и Gitian, [5] может использоваться для автоматизации детерминированных процессов сборки.
История
[ редактировать ]В начале 1990-х годов в проекте GNU использовались воспроизводимые сборки. Журналы изменений 1992 года указывают на продолжающиеся усилия. [6]
Один из старейших [7] Проекты по продвижению воспроизводимых сборок — это проект Bitcoin с Gitian. Позже, в 2013 году, проект Tor (анонимная сеть) начал использовать Gitian для своих воспроизводимых сборок. [8]
С 2011 года воспроизводимая система сборки Java была разработана для децентрализованного однорангового проекта FOSS: DirectDemocracyP2P. [9] Концепции применения системы для поддержки рекомендаций по автоматическим обновлениям были впервые представлены в апреле 2013 года на конференции Decentralized координации. [10] [11] В 2015 году был опубликован трактат, посвященный деталям реализации самого воспроизводимого инструмента компиляции Java. [12]
В июле 2013 года проект Debian начал внедрять воспроизводимые сборки для всего своего архива пакетов. [13] [14] К июлю 2017 года было доказано, что более 90% пакетов в репозитории собираются воспроизводимо. [15]
В ноябре 2018 года проект Reproducible Builds присоединился к Software Freedom Conservancy . [16]
F-droid использует воспроизводимые сборки, чтобы гарантировать, что распространяемые APK используют заявленный бесплатный исходный код . [17]
Портативная операционная система Tails использует воспроизводимые сборки и объясняет другим, как проверить их распространение. [18]
NixOS заявляет о 100% воспроизводимой сборке в июне 2021 года для своих минимальных выпусков ISO. [19]
По состоянию на май 2020 г. [update] работает Arch Linux над тем, чтобы сделать все официальные пакеты воспроизводимыми. [20]
Проблемы
[ редактировать ]Согласно проекту Reproducible Builds, временные метки являются «самым большим источником проблем с воспроизводимостью. Многие инструменты сборки записывают текущую дату и время... и большинство форматов архивов с радостью записывают время модификации поверх своих собственных временных меток». [21] Они рекомендуют «лучше использовать дату, соответствующую исходному коду, а не сборке: старое программное обеспечение всегда можно собрать позже», если оно воспроизводимо. Они определяют несколько способов изменения процессов сборки для достижения этой цели:
- Задайте для переменной среды SOURCE_DATE_EPOCH количество секунд с 1 января 1970 года, используя что-то из исходного кода. Инструменты, поддерживающие эту переменную среды, будут использовать ее значение (если оно установлено) вместо текущей даты и времени.
- Постобработка вывода для удаления временных меток или их нормализации. В этом часто может помочь инструментальная недетерминированность.
- Используйте такую библиотеку, как libfaketime, для перехвата запросов текущего времени суток и предоставления контролируемого ответа.
В некоторых случаях необходимо внести другие изменения, чтобы обеспечить воспроизводимость процесса сборки. Например, некоторые структуры данных не гарантируют стабильный порядок при каждом выполнении. Типичное решение — изменить процесс сборки, чтобы указать отсортированный вывод из этих структур. [22]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б «reproducible-builds.org» . reproducible-builds.org . Архивировано из оригинала 20 мая 2016 года . Проверено 22 августа 2016 г.
Воспроизводимые сборки — это набор методов разработки программного обеспечения, которые создают проверяемый путь от читаемого человеком исходного кода к двоичному коду, используемому компьютерами… Система сборки должна быть полностью детерминированной: преобразование данного источника всегда должно давать один и тот же результат.
- ^ Лэмб, Крис; Закчироли, Стефано (март 2022 г.). «Воспроизводимые сборки: повышение целостности цепочек поставок программного обеспечения» . Программное обеспечение IEEE . 39 (2): 62–70. arXiv : 2104.06020 . дои : 10.1109/MS.2021.3073045 . S2CID 233219473 . Проверено 26 марта 2023 г.
- ^ Рэтлифф, Эмили (4 апреля 2016 г.). «Установление соответствия между приложением и его исходным кодом | SecurityWeek.com» . www.securityweek.com . Неделя Безопасности. Архивировано из оригинала 20 сентября 2016 года . Проверено 22 августа 2016 г.
- ^ Ладиса, Пьерджорджио; Плейт, Хенрик; Мартинес, Матиас; Барэ, Оливье (19 апреля 2022 г.). «Таксономия атак на цепочки поставок программного обеспечения с открытым исходным кодом». arxiv.org . arXiv : 2204.04008 . doi : 10.1109/SP46215.2023.00010 (неактивен 31 января 2024 г.).
{{cite journal}}
: CS1 maint: DOI неактивен по состоянию на январь 2024 г. ( ссылка ) - ^ «Gitian: безопасный метод распространения программного обеспечения» . gitian.org . Проверено 10 января 2018 г.
- ^ Гилмор, Джон (24 января 2017 г.). «SOURCE_PREFIX_MAP и бритва Оккама» . rb-general (список рассылки).
- ^ "ЛИЦЕНЗИОННЫЙ-файл Gitian-Project" . Гитхаб . Проверено 3 декабря 2019 г.
- ^ Детерминированные сборки, часть вторая: Технические подробности. 04 октября 2013 г.
- ^ «ДДП2П» . Гитхаб . 2011.
- ^ Альхамед, Халид и др. " «Безопасность посредством децентрализованной сертификации автоматических обновлений программного обеспечения с открытым исходным кодом, контролируемого волонтерами» . Гражданин . .", Proceedings of Decentralized координации. стр. 40-59, Lulu Publisher, 6 апреля 2013 г.
- ^ Силаги, М.К., Альхамед, К., Дханнун, О., Цинь, С., Вишен, Р., Ноулз, Р., ... и Хираяма, К. (2013, сентябрь). DirectDemocracyP2P — децентрализованные совещательные петиции. В материалах IEEE P2P 2013 (стр. 1-2). IEEE.
- ^ Силаги М., Альхамед К. и Стансифер Р. (2015, декабрь). Расширения инструментов Java для поддержки нескольких рекомендателей и распределенных пакетов. В 2015 г. Международная конференция по вычислительной науке и вычислительному интеллекту (CSCI) (стр. 722-725). IEEE.
- ^ «Разговор о воспроизводимых сборках в Debian» . 21 сентября 2014 г.
- ^ «История воспроизводимых сборок» .
- ^ «Дистрибутивы Linux: более 90 процентов воспроизводимых пакетов Debian — Golem.de» (на немецком языке). 24 июля 2017 г. Проверено 30 октября 2018 г.
- ^ «Воспроизводимые сборки присоединяются к организации Software Freedom Conservancy» . Проверено 15 декабря 2018 г.
- ^ «Воспроизводимые сборки» . F-Дроид.
- ^ «Проверка изображения Tails на воспроизводимость» . Решки.
- ^ «ISo_minimal.x86_64-linux от Nixos-unstable воспроизводится на 100%!» . Дискуссия о NixOS . 20 июня 2021 г. Проверено 21 июня 2021 г.
- ^ «ArchWiki — Воспроизводимые сборки» .
- ^ «Временные метки» . Воспроизводимые сборки . Проверено 16 апреля 2022 г.
- ^ «Временные метки» . Воспроизводимые сборки . Проверено 16 апреля 2022 г.