04.07.2022

Доступен TUF 1.0, фреймворк для организации безопасной доставки обновлений

Опубликован выпуск фреймворка TUF 1.0 (The Update Framework), предоставляющего средства для безопасной проверки наличия и загрузки обновлений. Основной целью проекта является защита клиента от типовых атак на репозитории и инфраструктуры, включая противодействие продвижению злоумышленниками фиктивных обновлений, созданных после получения доступа к ключам для формирования цифровых подписей или компрометации репозитория. Проект развивается под эгидой организации Linux Foundation и применяется для повышения безопасности доставки обновлений в таких проектах, как Docker, Fuchsia, Automotive Grade Linux, Bottlerocket и PyPI (включение верификации загрузок и метаданных в PyPI ожидается в ближайшее время). Код эталонной реализации TUF написан на языке Python и распространяется под лицензией Apache 2.0.

Проектом развивается серия библиотек, форматов файлов и утилит, которые могут легко интегрироваться в существующие системы обновления приложений, обеспечивая защиту в случае компрометация ключей на стороне разработчиков ПО. Для использования TUF достаточно добавить в репозиторий необходимые метаданные, а в клиентский код интегрировать предоставляемые в TUF процедуры для загрузки и верификации файлов.

Фреймворк TUF берёт на себя задачи проверки появления обновления, загрузки обновления и верификации его целостности. Система установки обновлений непосредственно не пересекается с дополнительными метаданными, проверку и загрузку которых берёт на себя TUF. Для интеграции с приложениями и системами установки обновлений предлагается низкоуровневый API для доступа к метаданным и реализация высокоуровневого клиентского API ngclient, готового для интеграции с приложениями.

Из атак, которым может противодействовать TUF, отмечаются подстановка старых выпусков под видом обновлений с целью блокирования исправления уязвимостей в ПО или отката пользователя на старую уязвимую версию, а также продвижение вредоносных обновлений, корректно подписанных с использованием скомпрометированного ключа, совершение DoS-атак на клиентов, таких как заполнение диска бесконечным обновлением.

Защита от компрометации инфраструктуры поставщика ПО достигается благодаря поддержанию отдельных верифицируемых записей о состоянии репозитория или приложения. Проверяемые TUF метаданные включают в себя информацию о ключах, которым можно доверять, криптографические хэши для оценки целостности файлов, дополнительные цифровые подписи для заверения метаданных, сведения о номерах версий и данные о времени жизни записей. Применяемые для верификации ключи имеют ограниченное время жизни и требуют постоянного обновления для защиты от формирования подписи старыми ключами.

Снижение риска компрометации всей системы реализуется за счёт использования модели с разделением доверия, в которой каждая сторона ограничена лишь той областью за которую она напрямую отвечает. В системе используется иерархия ролей со своими ключами, например, корневая роль подписывает ключи для ролей отвечающих за метаданные в репозитории, данные о времени формирования обновлений и целевые сборки, в свою очередь роль, отвечающая за сборки, подписывает роли, связанные с заверением доставляемых файлов.

Для защиты от компрометации ключей используется механизм оперативного отзыва и замены ключей. В каждом отдельном ключе сосредотачиваются только минимально необходимые полномочия, а для операций заверения требуется применение нескольких ключей (утечка отдельного ключа не позволяет сразу атаковать клиента, а для компрометации всей системы нужно захватить ключи всех участников).
Клиент может принимать только файлы, созданные позднее, чем уже ранее полученные файлы, а данные загружаются только в соответствии с размером, заданным в заверенных метаданных.

Опубликованный выпуск TUF 1.0.0 предлагает полностью переписанную и стабилизированную эталонную реализацию спецификации TUF, которую можно использоваться в качестве готового примера при создании собственных реализаций или для интеграции в свои проекты. Новая реализация содержит существенно меньше кода (1400 строк вместо 4700), более проста в сопровождении и может легко расширяться, например, при необходимости добавления поддержки специфичных сетевых стеков, систем хранения или алгоритмов шифрования.

Источник.